Invalid expiration, когда победим?

 

Разработчики MetaQuotes МТ5, когда наконец победим проблему Invalid expiration?

Насколько я помню, эта проблема существует с начала запуска МТ5 на ФОРТС. 

 

 

ФОРТС: retcode 10013.

Михаил, 2015.12.01 23:33

Ошибочка вышла, там другой код возврата(Invalid expiration):

10:00:33.759    Trades  'ххххх': failed modify order #24144969 sell limit 1.00 GAZR-3.16 at 14749 sl: 0 tp: 0 -> 14740, sl: 0 tp: 0 [Invalid expiration]

Михаил, ты разобрался в этой проблеме?

Похоже не разобрался... 

 
Sergey Chalyshev:

Михаил, ты разобрался в этой проблеме?

Похоже не разобрался... 

У меня ордера перенеслись на другой день.

Когда я попытался их модифицировать, то вышла такая ошибка.

Сейчас, как раз, и разбираюсь почему. 

 

Заявка в сервидеке висит без ответа очень давно:

Не модифицируются ордера

Ошибки, MetaTrader 5 Client, Открыта, Начата: 2014.12.04 13:30, #1117136

 

 
Михаил:

У меня ордера перенеслись на другой день.

Когда я попытался их модифицировать, то вышла такая ошибка.

Сейчас, как раз, и разбираюсь почему. 

Время начала сессии на бирже не совпадает с временем сессии в терминале.

Если ордер открыл вчера но после 19:00, то сегодня его невозможно модифицировать. Хотя удалить на реале получается. На демо даже удалить невозможно и он не срабатывает и новый ордер выставить невозможно, т.к. старый висит как дейсвующий.

Насколько я понял, сервер МК неправильно посылает время экспирации в запросе. 

Так же МК сервер не умеет работать с датой экспирации отличной от сегодня.

Если путем махинаций с датой экспирации, выставить ордер с датой последнего дня обращения фьючерса, сервер МК начинает тупить. 

 
Sergey Chalyshev:

Время начала сессии на бирже не совпадает с временем сессии в терминале.

Если ордер открыл вчера но после 19:00, то сегодня его невозможно модифицировать. Хотя удалить на реале получается. На демо даже удалить невозможно и он не срабатывает и новый ордер выставить невозможно, т.к. старый висит как дейсвующий.

Насколько я понял, сервер МК неправильно посылает время экспирации в запросе. 

Так же МК сервер не умеет работать с датой экспирации отличной от сегодня.

Если путем махинаций с датой экспирации, выставить ордер с датой последнего дня обращения фьючерса, сервер МК начинает тупить. 

Может быть в MQ считают, что торговый день заканчивается в 23:50, а не в 18:45 следующего дня.

Дело в том, что в спецификации по Плаза 2 нужно указать только время и дату экспирации ордера.

А ты не пробовал задавать в поле request.type_time = ORDER_TIME_SPECIFIED_DAY;

А время указывать 18:45 следующего дня? 

Хотя врятли это поможет.

Ведь у меня ордера были выставлены на реале, значит у них было время следующего дня,

иначе бы биржа их сама сняла. :( 

 

04.12.2015 в 7:52 установил отложенный ордер:

потом посмотрел его данные:

 

 Он уже "мёртвый" аж целых 7 часов 52 мин.

Не понятно как биржа его не удаляет :) 

 

Сделал так:

  request.type_time = ORDER_TIME_SPECIFIED_DAY;
  datetime cur_time = TimeTradeServer();
  ulong a_time = ulong( cur_time ) + 86400; //прибавил сутки
  request.expiration = datetime( a_time );

 Результат:

 

Т.е ордер автоматически удалится СЕГОДНЯ, а не через сутки.

Это косяк, но можно прибавлять 2-е суток (172800), тогда проблемы не должно быть

 
Михаил:

1. Может быть в MQ считают, что торговый день заканчивается в 23:50, а не в 18:45 следующего дня.

Дело в том, что в спецификации по Плаза 2 нужно указать только время и дату экспирации ордера.

2. А ты не пробовал задавать в поле request.type_time = ORDER_TIME_SPECIFIED_DAY;

А время указывать 18:45 следующего дня? 

Хотя врятли это поможет.

Ведь у меня ордера были выставлены на реале, значит у них было время следующего дня,

иначе бы биржа их сама сняла. :( 

1. Да, MQ так и считают.

2. Показывал как это делаю здесь. И часто этим пользуюсь.

С установкой ордеров научился справляться, если ставить дату  ORDER_TIME_SPECIFIED_DAY, надо дополнительно ее форматировать, терминал сам не справляется. 

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

Приходится удалять ордер и ставить заново.

Ошибки возникают когда пытаюсь модифицировать ордер.

Приходится перед модификацией запрашивать время экспирации ордера, хотя это считаю лишним, время экспирации итак известно серверу и изменить его невозможно,

request.expiration   = (datetime)OrderGetInteger(ORDER_TIME_EXPIRATION);

Из справки:

Modify Pending Order

Торговый приказ на модификацию уровней цен отложенного ордера. Требуется указание 7 полей:

  • action
  • order
  • price
  • sl
  • tp
  • type_time
  • expiration 

неверно. 

Последние два пункта не получается менять. 

Еще раз повторю:

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

Если терминал научится модифицировать ордера, возможно и программно станет легче, а если нет, будем рыть дальше. 

 
Sergey Chalyshev:


Сегодня, при установке и модификации, попробую сделать так:

request.type_time = ORDER_TIME_SPECIFIED_DAY;
request.expiration = datetime( SymbolInfoInteger( a_symbol, SYMBOL_EXPIRATION_TIME ) );

 

Посмотрим, что получится. 

 
Михаил:

Сегодня, при установке и модификации, попробую сделать так:

 

Посмотрим, что получится. 

Не прокатит, надо форматировать дату как показывал по ссылке.
request.expiration=TimeToDayTime((datetime)SymbolInfoInteger(symbol,SYMBOL_EXPIRATION_TIME));

//+------------------------------------------------------------------+
datetime TimeToDayTime(datetime time)
  {
   TimeToStruct(time,stime);
   stime.min=0;
   stime.hour=0;
   stime.sec=0;
   return(StructToTime(stime));
  }
//+------------------------------------------------------------------+