CandleManager и последняя свечка в сессии
Atom
27.04.2011


Добрый день.

При реализации стратегии решил сохранять свечки в локальной базе. Для получения свечек подписываюсь на событие СandleManager.CandlesFinished в событии Trader.Connected:
Код

candleManager = new CandleManager(trader);
candleManager.CandlesFinished += candleManager_CandlesFinished;

в событии Trader.NewSecurities регистрирую какие свечки получать:
Код

sec = obj.FirstOrDefault(e => e.Code == "GAZP");
if (sec != null)
{
if (!candleManager.IsTimeFrameCandlesRegistered(sec, timeFrame))
{
// регистрируем наш тайм-фрейм
candleManager.RegisterTimeFrameCandles(sec, timeFrame);
}
}

Таймфрейм равен 5 минутам. Данные приходят, за исключением последней свечки. Т.е. время первой свечки 10:30:00, а время последней 18:35:00, хотя должно быть 18:40:00?

Теги:


Спасибо:


< 1 2 
Alexander

Фотография
Дата: 29.04.2011
Ответить


esper Перейти
Mikhail Sukhov Перейти
Оно и вызывается. Просто нужно понять схему алгоритма. Если он у вас другой, то можете всегда сделать свой собственный CandleFactory.


Алгоритм простой, после "завершения" свечки мне необходимо ее сохранить. CandlesFinished же не вызывается для последней свечки, так как, если я правильно понял, после нее свечек в этой сессии не будет.


Есть вариант сделать что для последней свечки будет подниматься событие CandlesFinished если Trader.MarketTime станет больше чем время завершения сессии - т.е. если Trader.MarketTime >= 23.50 для фортса и >= 18.45 для ММВБ.
Спасибо:

esper

Фотография
Дата: 29.04.2011
Ответить


Alexander Перейти
Есть вариант сделать что для последней свечки будет подниматься событие CandlesFinished если Trader.MarketTime станет больше чем время завершения сессии - т.е. если Trader.MarketTime >= 23.50 для фортса и >= 18.45 для ММВБ.


Это было бы замечательно[smile]
Спасибо:

Alexander

Фотография
Дата: 03.05.2011
Ответить


esper Перейти
Alexander Перейти
Есть вариант сделать что для последней свечки будет подниматься событие CandlesFinished если Trader.MarketTime станет больше чем время завершения сессии - т.е. если Trader.MarketTime >= 23.50 для фортса и >= 18.45 для ММВБ.


Это было бы замечательно[smile]


Фикса в 3.1 не будет.
Вариант локального решения - отнаследуйтесь от TimeFrameCandleFactory и переопределите IsCandleFinished с проверкой что время закончилось:
Код
            return trade.Time < currentCandle.Time || (currentCandle.Time + token.TypedArg) <= trade.Time || trade.Security.Trader.MarketTime.TimeOfDay >= trade.Security.Exchange.WorkingTime.Times.Last().Max;
Спасибо: esper
< 1 2 

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy