Михаил, ты разобрался в этой проблеме?
Похоже не разобрался...
У меня ордера перенеслись на другой день.
Когда я попытался их модифицировать, то вышла такая ошибка.
Сейчас, как раз, и разбираюсь почему.
Заявка в сервидеке висит без ответа очень давно:
Ошибки, MetaTrader 5 Client, Открыта, Начата: 2014.12.04 13:30, #1117136
У меня ордера перенеслись на другой день.
Когда я попытался их модифицировать, то вышла такая ошибка.
Сейчас, как раз, и разбираюсь почему.
Время начала сессии на бирже не совпадает с временем сессии в терминале.
Если ордер открыл вчера но после 19:00, то сегодня его невозможно модифицировать. Хотя удалить на реале получается. На демо даже удалить невозможно и он не срабатывает и новый ордер выставить невозможно, т.к. старый висит как дейсвующий.
Насколько я понял, сервер МК неправильно посылает время экспирации в запросе.
Так же МК сервер не умеет работать с датой экспирации отличной от сегодня.
Если путем махинаций с датой экспирации, выставить ордер с датой последнего дня обращения фьючерса, сервер МК начинает тупить.
Время начала сессии на бирже не совпадает с временем сессии в терминале.
Если ордер открыл вчера но после 19:00, то сегодня его невозможно модифицировать. Хотя удалить на реале получается. На демо даже удалить невозможно и он не срабатывает и новый ордер выставить невозможно, т.к. старый висит как дейсвующий.
Насколько я понял, сервер МК неправильно посылает время экспирации в запросе.
Так же МК сервер не умеет работать с датой экспирации отличной от сегодня.
Если путем махинаций с датой экспирации, выставить ордер с датой последнего дня обращения фьючерса, сервер МК начинает тупить.
Может быть в MQ считают, что торговый день заканчивается в 23:50, а не в 18:45 следующего дня.
Дело в том, что в спецификации по Плаза 2 нужно указать только время и дату экспирации ордера.
А ты не пробовал задавать в поле request.type_time = ORDER_TIME_SPECIFIED_DAY;
А время указывать 18:45 следующего дня?
Хотя врятли это поможет.
Ведь у меня ордера были выставлены на реале, значит у них было время следующего дня,
иначе бы биржа их сама сняла. :(
Сделал так:
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].
Если терминал научится модифицировать ордера, возможно и программно станет легче, а если нет, будем рыть дальше.
Сегодня, при установке и модификации, попробую сделать так:
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)); } //+------------------------------------------------------------------+
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Разработчики MetaQuotes МТ5, когда наконец победим проблему Invalid expiration?
Насколько я помню, эта проблема существует с начала запуска МТ5 на ФОРТС.