Несколько стратегий
Atom
16.07.2010


Возникли следующие 2 проблемы при использовании Stock#:
1) CandleManager с несколькими таймфреймами:
Порядок действия такой:
a) создаю
CandleManager _candleManager = new CandleManager(_trader);

b) регистрирую таймфреймы при создании стратегий
if (!_candleManager.IsRegisteredTimeFrameCandles(riFut, _timeFrame5))
{
_candleManager.RegisterTimeFrameCandles(riFut, _timeFrame5);

if (!_candleManager.IsRegisteredTimeFrameCandles(riFut, _timeFrame1))
{
_candleManager.RegisterTimeFrameCandles(riFut, _timeFrame1);

c) Передаю candleManager созданным стратегиям и использую их дальше
там.

Мне по стратегиям необходимо понять, обрабатывал ли я уже данную
минутку \ 5-минутку или нет (чтоб не запускать на ней несколько раз).
Поэтому я в обработчике событий NewCandles внутри стратегии (для
переданного candleManager, для которого зарегистрировано как 1-
минутки, так и 5-минутки) создаю SortedSet из пришедшего времени:
_candleManager.NewCandles += CandleManagerNewCandles;

void CandleManagerNewCandles(CandleToken arg1,
Wintellect.PowerCollections.MultiDictionary<Candle, Trade> arg2)
{
if (arg1.Security == Security)
{
if (typeof(TimeFrameCandle) == arg1.CandleType)
{
if (arg1.Arg.Equals(TimeFrame))
{
foreach (Candle candle in arg2.Keys)
{
_addedTimes.Add(candle.Time);
}
}
}
}
}

В итоге почему-то в каждую из стратегий приходят лишь 1-минутки(хотя
TimeFrame - 5 минут), поэтому время не добавляется в Set и я получаю
сигнал что свечка для данной 5-минутки не пришла. С чем это связано?

2) Для Security я добавляю дополнительные поля для экспорта:
DdeSecurityColumns.MarginBuy
DdeSecurityColumns.MarginSell
DdeSecurityColumns.MaxPrice
DdeSecurityColumns.MinPrice
DdeSecurityColumns.MinStepPrice

Почему-то в переданные в стратегии Security эти поля не обновляются и
равны первоначальным при первом экспорте. Как это можно исправить или
что-то не так делаю?

Теги:


Спасибо:


Alexander

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


По 1) проблеме - сегодня запустил роботов с открытия - всё ok,
работает как часы, все события приходят. Проблему описывал когда
запуск был в середине сессии... Ждал появления событий минут 5 - не
было 5-минуток.

Спасибо:

Alexander

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


Перезапустил роботов в 11:10 - не смогли получить события опять.
Решил изменить и переписать проверку есть ли последнее время на более
простое -
Candle lastCandle = _candleManager.GetTimeFrameCandle(Security,
TimeFrame, RobotsHelper.RoundToTimeFrame(marketTime, TimeFrame));
if (lastCandle == null)
{
...

В итоге проверку-то проходит, но виснет довольно быстро на
IEnumerable<TimeFrameCandle> oldCandles =
_candleManager.GetTimeFrameCandles(Security, TimeFrame, new
Range<DateTime>(firstTime, marketTime));

где это вызывается из 3х стратегия (2 - на 5-минутках, 1 - на
минутках). На минутках причём проходит, обе 5-минутки здесь виснут.
firstTime - 10.00, marketTime - последнее время, т.е. было где-то
11.20

Спасибо:


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

loading
clippy