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

CandleManager и последняя свечка в сессии
Atom
4/27/2011


Добрый день.

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

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

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

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?

Tags:


Thanks:


< 1 2 
Alexander

Avatar
Date: 4/29/2011
Reply


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


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


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

esper

Avatar
Date: 4/29/2011
Reply


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


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

Alexander

Avatar
Date: 5/3/2011
Reply


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


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


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

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy