Возникли следующие 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 эти поля не обновляются и
равны первоначальным при первом экспорте. Как это можно исправить или
что-то не так делаю?