Мне необходимо написать тестирование так, чтобы исторические данные выдавались либо с определенной задержкой между тиками, либо при срабатывании сигнала на покупку/продажу тестирование приостанавливалось и потом возобнавлялось бы при нажатии кнопки. Фактически хочется сделать некий "мультик", чтобы показать как и где сработала стратегия и визуально оценить этот момент.
Попытался вызвать метод EmulationTrader.Suspend() Срабатывает событие EmulationTrader.StateChanged, но при этом тики продолжают тикать. Т.е. фактически остановки эмуляции не происходит. Останавливается только после достижения конца виртуального дня.
Подскажите, как все таки остановить эмуляцию и потом ее продолжить с места остановки?
PS: Эксперименты проводил на том примере, который дан в дистрибутиве - SampleHistoryTesting
Комментарии (8)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
По идее через http://stocksharp.com/doc/html/T_StockSharp_Algo_Testing_StrategyDebug.htm Но вы правильно сказали, что эмуляция не сразу останавливается. Нужно пофиксить. Так что пока только из кода стратегии. Тестирование идет в одном потоке, так что проблем остановить его в нужном событие думаю не составит.
Нет, Михаил, не летит этот самолет 🤨
В класс SmaStrategy добавил переменную:
Создаю стратегию:
Стратегия стартует, при первом же событии OnProcess срабатывает debug, trader докладывает о том, что у него состояние Suspended и... И работа продолжается как ни в чем не бывало - тики тикают, стратегия запускается и обрабатывается, в логах сделки и прочее...
Кстати статус trader изменяется один (!) раз. Добавлял явный debug.Break() в событие стратегии OnProcess - картинка не меняется. Происходит suspend, тики протикивают до конца виртуального дня и только после этого останавливаются.
Вообще-то я имел ввиду что-то типа MessageBox из обработчика событий NewOrder NewTrader and so on.
Именно так.
LOG - это TextBox. Получаем в нем вот что:
State: started State: suspend MT:10:29:59 Price:82,00000 MT:10:30:01 Price:82,19000 MT:10:30:03 Price:82,15000 MT:10:30:03 Price:82,15000 MT:10:30:03 Price:82,19000 MT:10:30:07 Price:82,12000 ... И т.д. до конца виртуального дня. Если потом сделать strategy.debug.Resume(), то получаем то же самое для следующего виртуального дня.
Вы меня читаете, но не понимаете.😂
Хммм... Как-то наверное да. Что именно надо сделать? NewTraders дает точно такую же картинку. NewOrders выдает кучу новых ордеров. Я же выше писал, что после того как был сделан trader.Suspend() и после strategy.debug.Break() стратегия и тики все равно работают до конца виртуального дня.
Может быть я не верно использовал StrategyDebug ???? Но из документации понять, как он работает можно только интуитивно.
Я же написал, что пока не останавливает StrategyDebug мгновенно. И предложил решение с MessageBox
Аааа... Семен Семенычь! (с) 😀 Теперь я протупился. Т.е. в событиях просто использовать искусственный тормоз...