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


Возникли следующие 2 проблемы при использовании Stock#:

  1. CandleManager с несколькими таймфреймами: Порядок действия такой:
  1. создаю CandleManager _candleManager = new CandleManager(_trader);

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

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

  1. Передаю 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-минутки не пришла. С чем это связано?

  1. Для 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 oldCandles = _candleManager.GetTimeFrameCandles(Security, TimeFrame, new Range(firstTime, marketTime));

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

Спасибо:


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

loading
clippy