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

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


Добрый день.

При реализации стратегии решил сохранять свечки в локальной базе. Для получения свечек подписываюсь на событие С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?


Tags:


Thanks:


1 2  >
Mikhail Sukhov

Avatar
Date: 4/28/2011
Reply


Как вы проверяете?

Thanks:

esper

Avatar
Date: 4/29/2011
Reply


Mikhail Sukhov: Как вы проверяете? Данные записываются в базу SQL Compact, далее, после сессии, смотрю данные в ней. По прошествии двух сессии а базе нет последних свечек.

Для работы с базой использую EF. Обработчик candleManager_CandlesFinished примерно следующий:


void candleManager_CandlesFinished(CandleToken arg1, IEnumerable<Entities.Candle> arg2)
{
    foreach (var c in arg2)
    {
        var candle = context.Candles.FirstOrDefault(e => e.Security.Code == c.Security.Code && e.Time == c.Time);
        if (candle == null)
        {
            candle = new Entities.TimeFrameCandle()
            {
                Security = c.Security,
                Time = c.Time,
                OpenPrice = c.OpenPrice,
                HighPrice = c.HighPrice,
                LowPrice = c.LowPrice,
                ClosePrice = c.ClosePrice,
                TotalVolume = c.TotalVolume,
            };
            context.Add(candle);
        }

    }
    context.SaveChanges();
}
Thanks:

Mikhail Sukhov

Avatar
Date: 4/29/2011
Reply


Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо последние находятся еще в стадии формирования.

Thanks:

esper

Avatar
Date: 4/29/2011
Reply


Mikhail Sukhov: Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо последние находятся еще в стадии формирования.

Программу с роботом закрываю через пару часов после завершения торгов, данные уже давно не поступают...

Thanks:

Mikhail Sukhov

Avatar
Date: 4/29/2011
Reply


esper:

Mikhail Sukhov: Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо последние находятся еще в стадии формирования.

Программу с роботом закрываю через пару часов после завершения торгов, данные уже давно не поступают...

Дело в том, что свечка заканчивает формироваться не по таймеру, а по поступлению данных (чтобы избежать проблем с лагами в сети брокера, которые есть чуть ли не всегда). Поэтому свечка закончит формироваться тогда, когда появиться новая свечка.

Thanks:

esper

Avatar
Date: 4/29/2011
Reply


Mikhail Sukhov:

esper:

Mikhail Sukhov: Увидел кажется проблему... Событие CandlesFinished. Оно только для сформированных свечек. Видимо последние находятся еще в стадии формирования.

Программу с роботом закрываю через пару часов после завершения торгов, данные уже давно не поступают...

Дело в том, что свечка заканчивает формироваться не по таймеру, а по поступлению данных (чтобы избежать проблем с лагами в сети брокера, которые есть чуть ли не всегда). Поэтому свечка закончит формироваться тогда, когда появиться новая свечка.

Т.е. придется обрабатывать не Finished, а New и Changed? Не хотелось бы слишком часто в базу писать.

Thanks:

Mikhail Sukhov

Avatar
Date: 4/29/2011
Reply


esper: Т.е. придется обрабатывать не Finished, а New и Changed? Не хотелось бы слишком часто в базу писать.

Пишите по окончанию сессии все свечки один раз.

Thanks:

esper

Avatar
Date: 4/29/2011
Reply


Mikhail Sukhov: Пишите по окончанию сессии все свечки один раз.

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

Thanks:

Mikhail Sukhov

Avatar
Date: 4/29/2011
Reply


esper:

Mikhail Sukhov: Пишите по окончанию сессии все свечки один раз.

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

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

Thanks:

esper

Avatar
Date: 4/29/2011
Reply


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

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

Можно записывать все скопом после завершения сессии, но тогда усложнится момент запуска стратегии, так как сейчас я просто поднимаю нужное кол-во свечек из базы (там есть все сформировавшиеся свечки) и запускаю стратегию, а придется комбинировать получение данных из базы и CandleManager.

Thanks:
1 2  >

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

loading
clippy