StrategySMA MarketQuotingStrategy и _nextTime
Atom
14.06.2010


Опять непонятная работа _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).

Теги:


Спасибо:


Trading Tickers

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


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

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

и

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


Спасибо:

Mikhail Sukhov

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


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

Спасибо:

Trading Tickers

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


Я пока нашел такой выход из положения:
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;

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

if (_isTodaySmaDrawn)
DrawSma();

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

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

Спасибо:

Mikhail Sukhov

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


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

Спасибо:

Trading Tickers

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


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

Я работаю на вашем примере СМА. Заявку выставляю через.
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

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


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

Спасибо:


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

loading
clippy