← Zurück

StrategySMA MarketQuotingStrategy и _nextTime

Опять непонятная работа _nextTime, которая вводит стратегию в зацикливание. Допустим _nextTime у нас равно 10:40, допустим в это время мы отправили заявку на котирование через MarketQuotingStrategy, пока заявка не исполнилась OnProcess в стратегии у нас не отрабатывается. И вот заявка сработала в 10:45 допустим, после этого начинает обрабатываться OnProcess, и что же получается: // получаем сформированную свечку

var candle = _candleManager.GetTimeFrameCandle(base.Security, base.Interval, _nextTime - base.Interval); _nextTime += base.Interval; // если свечки не существует (не было ни одной сделке в тайм-фрейме), то ждем окончания следующей свечки. if (candle == null) return true;

Свечка у нас будет браться за 10:40, 10:41 и т.д., а в этом время на бирже уже идет время 10:46, 10:47 и т.д. и поэтому опять будет зацикливание на условии if (candle == null).

Kommentare (6)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Trading Tickers
Trading Tickers Autor

Михаил, подскажите пожалуйста по моему вопросу этому. И еще двум

http://groups.google.ru/group/stocksharp/browse_thread/thread/3491b38a29699258

и

http://groups.google.ru/group/stocksharp/browse_thread/thread/be7ac8b525d72d25

Mikhail Sukhov
Mikhail Sukhov

Я видел сообщения. У Вас сложнее - надо время на подумать.

Trading Tickers
Trading Tickers Autor

Я пока нашел такой выход из положения:

  1. в классе SMAStrategy добавил public DateTime _nextTime; private DateTime _lastnextTime;

и в OnProcess соотв. проверяю

//проверяю время последней обработанной свечки и текущей if (_lastnextTime == _nextTime) return true;

var candle = _candleManager.GetTimeFrameCandle(base.Security, base.Interval, _nextTime);

DateTime temp = base.Interval.GetCandleBounds(base.Trader).Max;

if (candle == null) return true;

_lastnextTime = _nextTime;

  1. Соотв. в событии получения новой свечки я поставил: _candleManager.NewCandles += (token, candles) => { DrawCandles(candles.Keys);

    if (_isTodaySmaDrawn)
             DrawSma();
    

    //задаю в стратегию новое время свечки Candle lst = candles.Keys.Last(); _strategy._nextTime = lst.Time;

Соотв. когда начнет работать стратегия, то со временем проблем не будет. Вроде работает, но не знаю правильно ли это.

Mikhail Sukhov
Mikhail Sukhov

Согласен. Пример, если хотите использовать в жизни, необходимо доработать. Если что-то сделаете, отпишите. Вместе посмотрим, и я вставлю в следующей версии Ваши изменения.

Trading Tickers
Trading Tickers Autor

Да, в логе я имею ввиду в файле. Туда информация поступает как-то блоками, вот у меня щас исполнилась заявка, но информации об этом в файле нет, и уже когда допустим у меня новая заявка пойдет на котирование, то в файл я уже тогда получу информацию о моей предыдущей исполнившейся заявке.

Я работаю на вашем примере СМА. Заявку выставляю через. var order = base.CreateOrder(direction, base.Security.GetMarketPrice(direction, MarketPriceTypes.Following), volume);

           // регистрируем на котирование

           var strategy = new MarketQuotingStrategy(base.Trader,

order, base.Interval, false, MarketPriceTypes.Following, new Unit()); strategy.Start(); base.ChildStrategies.Add(strategy);

Я уже понял почему задержка идет, допустим если у меня щас в стакане цена 2145, то заявка не выставится пока не прийдет заявка лучше чем эта например 2144, и только тогда уже выставится моя заявка. Может я ошибаюсь, но судя из лога процес такой. Как это обойти? Я хочу чтоб заявка сразу ставилась.

Mikhail Sukhov
Mikhail Sukhov
  1. Топиком ошиблись.
  2. А в файл пишите через StrategyLogger или как-то по другому?
  3. Да, видимо бага. Надо будет самому запустить проверить... Обойти - ручками зарегистрировать и передать в котирование.