Суть вопроса в следующем - я делаю тесты на скачанной с фтп ртс истории сделок, из которой формируются свечки. Однако необходимость обрабатывать все сделки приводит к тому, что прогон 1 дня происходит за 20-30сек. При этом сложность алгоритма почти не влияет на скорость. Я пробовал на стандартном, немного переделанном, примере, сделав по правилу финиширования 5мин свечи просто записывать в логи ohlc. Однако использование всех сделок для точности тестирования необходимо далеко не всегда. Меня вполне устроило бы прогнать стратегию по заранее сохраненным 5мин свечкам с меньшей точностью, но быстро. Или по часовым свечкам, но еще быстрее. Поэтому вопрос - каким образом можно сделать так, чтобы робот вообще не использовал историю сделок, а прогонял тест только по заранее сгенеренным свечкам? Буду благодарен за совет.
Comments (22)
Login or Create account, Log in or register to leave a comment
Если Вы свечки строите из тиков из стандартного StorageRegistry через построитель свечек TimeFrameCandleBuilder, т.е. как в документации тут.
То вместо источника в виде построителя свечек TimeFrameCandleBuilder укажите источник готовых свечек StorageCandleSource, т.е вместо:
сделайте источником:
Ну, а потом в менеджере свечек стартуете свою серию. Свечки именно такого таймфрейма должны при это быть в хранилище, иначе менеджер их не найдет. У меня по крайней мере работает довольно шустро. Да, длинную историю из тиков собрать нереально.
Только вот жаль не получается свечки сжимать штатными способами, например, из пятиминуток в часы,дни и т.д. Для этого свечи со всеми таймфреймами хранить приходится.
Пробую тестировать стратегию на свечках. Скачал 1,5,15,30 минутные свечи. На всех таймфремах тестирует нормально, а на 30мин. эмулятор останавливается в одном и том же месте, выставляется статус .Stopped = true и дальше до конца не тестирует. С чем это может быть связано?
Можете выложить минимальное приложение и свечки?
В общем я выяснил в какой момент тестирование останавливается само. Таймфрейм 30мин, сделка совершается в 23-30, после такой сделки тестирование прерывается. Если сделку перенести на 23-00, то все работает ОК. Я так понимаю что 30мин свечка в 23-30 имеет внутри всего 20мин, так как заканчивается в 23-50, вероятно это связано с этим? Ниже пример кода
// закрываем после 23-30 если не ушли дальше 700 пунктов от стопа if ((candle.OpenTime.Hour == 23) && (candle.OpenTime.Minute >= 30) && (Math.Abs(stop - bars[bar].ClosePrice) < 700)) { if (MarketPosition < 0) { Buy(candle.OpenTime, candle.ClosePrice, "Close 23-30"); this.AddInfoLog("{0} Close 23-30 (buy). {1}", candle.OpenTime, candle.ClosePrice); } else if (MarketPosition > 0) { Sell(candle.OpenTime, candle.ClosePrice, "Close 23-30"); this.AddInfoLog("{0} Close 23-30 (sell). {1}", candle.OpenTime, candle.ClosePrice); } }
Останавливается тестирование - это как определяется? Визуально, по логам, или еще как-то?
Статус у EmulationTrader выставляется .Stopped = true, ну и соответственно стратегия останавливается, если в выше приведенном коде поменять 23-30 на 23-00, то как я уже говорил все работает нормально. Единственное еще прыбыль по сделкам я так понимаю это .PnL, почему-то считается некорректно если тестирование на свечках
Мы сейчас говорим о примере SampleHistoryTesting?
Вот кусок кода, который запускает тестирование:
Это пример SampleHistoryTesting? Можно привести только изменения?
Нет это не из примера. Какие изменения? Срабатывает _trader.StateChanged += (oldState, newState) => { if (_trader.State == EmulationStates.Stopped) {
EmulationStates.Stopped выставляется равным true, когда сделка совершается в 23-30 на таймфреме 30мин. По моему я все подробно описал, уже 3й раз пишу одно и тоже. Также .PnL прибыль считается неверно!
У вас какой-то косяк со свечками, например инструмент RIH3 на 30мин, дата: 27.12.2012, время 18:30 перед закрытием биржи, ваша свечка (составленная из сделок с сайта РТС как я понимаю) некорректна, все цены откр = закр = high = low = 153630 и так все свечки в конце каждого дня любой сессии в 18-30, таймфрейм 30мин.
{18:30:00 TimeFrameCandle_RIH3@RTS_00-30-00 (O:153630,0000000, H:153630,0000000, L:153630,0000000, C:153630,0000000, V:8474)}
Я так понимаю вы не хотите делать вашу библиотеку лучше? Свечки качал я с помощью вашего приложения Hydra! и последняя 30мин свечка в конце дневной торговой сессии у вас строится неправильно, вам скинуть скачанные свечки?
Вы мне написали 1 день назад "Это пример SampleHistoryTesting? Можно привести только изменения?". Я вам привел изменения. Сейчас вы меня просите скинуть вам минимальное приложение. В чем проблема, проверить сделки в 23-30 на таймфрейме 30мин и убедится что у вам косяк!!!
Вы свечки готовые качаете, или их строите из тиков? Пожалуйста, точнее формулируйте мысль. Из-за этого процесс поиска ошибок затрудняется. Например, в начале вы писали что тестирование останавливается (99% ошибка в вашей коде, но пока сложно показать где), а теперь пишите, что свечка неправильная. Вот и играем в угадайду несколько дней.
Похоже что ошибка как раз возможна из за неправильных свечек. Я их качаю из гидры с сервера РТС указываю 30мин и ваша программа сама качает, кроме того у вас там еще и неправильное округление, вот специально вывел все свечки в 18-30 в лог
TSS_RIM3@RTS_test account|Стратегия запущена. [0,-1]. Позиция при старте 0.
TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:149440,0000000, H:149440,0000000, L:149440,0000000, C:149440,0000000, V:7420)
TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:144720,0000000, H:144720,0000000, L:144720,0000000, C:144720,0000000, V:13794) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:143680,0000000, H:143680,0000000, L:143676,0000000, C:143676,0000000, V:49900) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:144050,0000000, H:144050,0000000, L:144050,0000000, C:144050,0000000, V:29340) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:143710,0000000, H:143710,0000000, L:143710,0000000, C:143710,0000000, V:12812) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:142590,0000000, H:142590,0000000, L:142590,0000000, C:142590,0000000, V:14768) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:141940,0000000, H:141940,0000000, L:141936,0000000, C:141936,0000000, V:49194) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:140330,0000000, H:140330,0000000, L:140330,0000000, C:140330,0000000, V:19490) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:140080,0000000, H:140080,0000000, L:140080,0000000, C:140080,0000000, V:26080) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:140750,0000000, H:140750,0000000, L:140750,0000000, C:140750,0000000, V:13562) TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:141230,0000000, H:141230,0000000, L:141230,0000000, C:141230,0000000, V:7738)
TSS_RIM3@RTS_test account|Стратегия останавливается. [0,-1]. Позиция при старте 0.
TSS_RIM3@RTS_test account|Ожидание снятия всех активных заявок.
TSS_RIM3@RTS_test account|Стратегия остановлена. [0,-1]. Позиция при старте 0.
И посмотрите на значение L:141936,0000000, как оно может быть не кратным 10??? L:143676,0000000
Вот лог с датами 2013/03/14 22:00:00.000| |TSS_RIM3@RTS_test account|Стратегия запущена. [0,-1]. Позиция при старте 0. 2013/03/15 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:149440,0000000, H:149440,0000000, L:149440,0000000, C:149440,0000000, V:7420) 2013/03/18 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:144720,0000000, H:144720,0000000, L:144720,0000000, C:144720,0000000, V:13794) 2013/03/19 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:143680,0000000, H:143680,0000000, L:143676,0000000, C:143676,0000000, V:49900) 2013/03/20 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:144050,0000000, H:144050,0000000, L:144050,0000000, C:144050,0000000, V:29340) 2013/03/21 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:143710,0000000, H:143710,0000000, L:143710,0000000, C:143710,0000000, V:12812) 2013/03/22 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:142590,0000000, H:142590,0000000, L:142590,0000000, C:142590,0000000, V:14768) 2013/03/25 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:141940,0000000, H:141940,0000000, L:141936,0000000, C:141936,0000000, V:49194) 2013/03/26 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:140330,0000000, H:140330,0000000, L:140330,0000000, C:140330,0000000, V:19490) 2013/03/27 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:140080,0000000, H:140080,0000000, L:140080,0000000, C:140080,0000000, V:26080) 2013/03/28 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:140750,0000000, H:140750,0000000, L:140750,0000000, C:140750,0000000, V:13562) 2013/03/29 17:00:00.000| |TSS_RIM3@RTS_test account|18:30:00 TimeFrameCandle_RIM3@RTS_00-30-00 (O:141230,0000000, H:141230,0000000, L:141230,0000000, C:141230,0000000, V:7738) 2013/03/29 08:00:00.000| |TSS_RIM3@RTS_test account|Стратегия останавливается. [0,-1]. Позиция при старте 0. 2013/03/29 08:00:00.000| |TSS_RIM3@RTS_test account|Ожидание снятия всех активных заявок. 2013/03/29 08:00:00.000| |TSS_RIM3@RTS_test account|Стратегия остановлена. [0,-1]. Позиция при старте 0.
Это конечно же мистика. Дело в том, что сервер РТС не хранит свечки. Поэтому скачать с него свечки невозможно. Конечно, Гидра крута, но не настолько.😂
откуда взялись такие свечки в конце торговой сессии? разве не гидра строит свечки по сделкам?
Вот приложение и свечки, стратегия совершает сделки в 23-30 и сразу останавливается по неизведанным причинам. Вероятно это также мистика Стокшарпа, только уж очень много ценного времени уходит на поиск таких мистических ошибок!
В следующей версии будет фикс. Свечки вы качали с Финам-а, а не с РТС-а. После фикса, надо будет в новой гидре перезакачать свечки.
а что по поводу сделок в 23-30 и остановки эмулятора?