Суть вопроса в следующем - я делаю тесты на скачанной с фтп ртс истории сделок, из которой формируются свечки. Однако необходимость обрабатывать все сделки приводит к тому, что прогон 1 дня происходит за 20-30сек. При этом сложность алгоритма почти не влияет на скорость. Я пробовал на стандартном, немного переделанном, примере, сделав по правилу финиширования 5мин свечи просто записывать в логи ohlc. Однако использование всех сделок для точности тестирования необходимо далеко не всегда. Меня вполне устроило бы прогнать стратегию по заранее сохраненным 5мин свечкам с меньшей точностью, но быстро. Или по часовым свечкам, но еще быстрее. Поэтому вопрос - каким образом можно сделать так, чтобы робот вообще не использовал историю сделок, а прогонял тест только по заранее сгенеренным свечкам? Буду благодарен за совет.
コメント (22)
ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください
Если Вы свечки строите из тиков из стандартного 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 и остановки эмулятора?