Пытаюсь переходить на событийную модель, в связи с чем такой вопрос появился. Почему сначала отрабатывается событие новой свечи, а потом появляется событие предыдущей свечи. Это доставляет следующие проблемы. У меня стратегия работает по закрытию свечи, допустим сейчас идет свеча 13:00, рабочий ТФ 30 минут, так вот по идее я должен входить сразу как свеча закончилась, т.е. в 13:30:00. А событийная модель завершение свечи считает тогда, когда началась новая, а новая может начаться в 13:30:23 допустим, т.е. после того как закончилась свеча 13:00 первая сделка пошла через 23 секунды после начала, соответственно за 23 секунды стакан может поменяться и вход у меня будет совсем другой чем в бэктесте. Можно ли это как-то исправить, или мне нужно возвращаться к TimeFrameStrategy где я могу этот момент урегулировать. Спасибо.
Comments (13)
Login or Create account, Log in or register to leave a comment
Какие предложения? Учитывайте, что у вас поток сделок заканчивается не ровно в 13:29:59, он может придти и в 13:30:01 со сделками совершёнными в 13:29:59.
В вашем предложении может возникнуть ситуация, что сделка, совершённая в 13:29:58 или 13:29:59 придёт в 13:30:03 и уже будет отнесена к новой 5-минутке, что совсем криво. Если нужно отсекать по 5 минут - пользуйтесь таймфреймами.
Сделка прошла в 13:29:59, в квике из-за тормозов отобразилась как совершённая в 13:30:02 (время что она исполнена отобразилось как 13:29:59), по DDE пришла в робота в 13:30:03. И это - довольно стандартная ситуация.
Это не глюк. Почему так - объяснил выше.
А как вы отличаете свечи, пришедшие при запуске стратегии, от только что пришедших в робота ?
У меня событие CandleFinished(candles) разбито на два, каждое из которых выдаёт только одну свечу (вместо IEnumerable), стратегии используют непосредственно эти события
Первое - используется для всяких расчётов и индикаторов. Второе - для входа/выхода в позицию.
Заодно отсекается возможность получения стратегией несколько свечей (у меня рэндж бары) одновременно из-за лагов, и как следствие - открытие/закрытие левых позиций.
Ничего лучше придумать не удалось.
А если у вас ТФ = 1мин ? То как тогда ? Нужен универсальный код, для любого ТФ (> 1 мин например)
Лучше конечно candle.CloseTime смотреть. Оно появится в 4.1. Если отличается секунд на 30 - нафиг эту свечу.
candle.CloseTime = candle.Time + TimeFrame ??
Свечи бывают не только таймфреймовые. Да и для таймфрейм - это не обязательно.
candle.Time (OpenTime) - время первой сделки свечи candle.CloseTime - время последней сделки свечи
пример1 - вечёрка открылась в 19:01:20 candle.OpenTime = 19:01:20
пример2 - неликвид - прошло четыре сделки 11:30:10, 11:30:25, 11:30:57, 11:31:20 для минутного таймфрейма мы получим candle.OpenTime = 11:30:10 candle.CloseTime = 11:30:57 но о том что свеча закончилась станет известно только в 11:31:20