Модификация ордера менее, чем за 10 минут до его истечения

 

Столкнулся со следующей проблемой.

Если у отложенного ордера задано время истечения (как известно, нельзя установить ближе 10 минут от текущего времени), то когда до истечения остается менее 10 минут, невозможно модифицировать уровни стопа и профита. Такая вот конструкция выдает ошибку 3:

             if (!OrderModify(OrderTicket(), NP(price), NP(sl),//Изменение цены открытия,
                              NP(tp), OrderExpiration(), CLR_NONE))      // стопа и профита
               return(false);                      // Вернем ошибку, если не удалось..

Причем, если вместо OrderExpiration вставить 0, то модификация становится возможной. Но в этом случае теряем время истечения...

 
Попробуйте запомнить время истечения, затем OrderExpiration вставить 0, модифицировать и вернуть обратно время истечения.
 
drknn:
Попробуйте запомнить время истечения, затем OrderExpiration вставить 0, модифицировать и вернуть обратно время истечения.
не получится, так как время истечения потом нельзя поставить на 9 минут
 
Мда, проблема. Ну тогда единственое что остаётся, это после модификации удалить ордер принудительно - то есть возложить на советника проблему отслеживания оставшихся минуток.
 
drknn:
Мда, проблема. Ну тогда единственое что остаётся, это после модификации удалить ордер принудительно - то есть возложить на советника проблему отслеживания оставшихся минуток.

Да, получается, что тут есть лишь два пути:

1) Организовывать слежение за истечением программно, без применения OrderExpiration()

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

 
Думаю, что если в торговой системе время истечения ордера критично, то не стОит отнимать у него этот параметр. Дело в том, что время истечения лежит на сервере и при отключении электропитания на стороне клиента, ордер будет удалён вОвремя. Это защитит трейдера от убытков. Верь пока нет света цена может зацепить ордер, затем развернуться и поехать в убыток. Имхо.
 
drknn:
Думаю, что если в торговой системе время истечения ордера критично, то не стОит отнимать у него этот параметр. Дело в том, что время истечения лежит на сервере и при отключении электропитания на стороне клиента, ордер будет удалён вОвремя. Это защитит трейдера от убытков. Верь пока нет света цена может зацепить ордер. затем развернуться и поехать в убыток. Имхо.

Я полностью согласен с тем, что если есть опция Expiration (некоторые брокеры ее не поддерживают), то необходимо использовать ее. Вот только получается, что использовать до конца преимущества такого подхода невозможно.

В этом случае стоит лишь сокрушаться по поводу различного подхода к параметрам в алгоритме функции OrderModify. Касательно цены открытия, стопа и профита такой проблемы нет, а именно: изменение тейк профит рыночного ордера в непосредственной близости от стопа (уровень ниже StopLevel) возможно:

OrderModify(OrderTicket(), 0, OrderStopLoss(), tp, 0);
и не вызывает никаких ошибок, т.к. MT4 "понимает", что изменяется не стоп, а профит. В случае с истечением ордера это не так: МТ4 расценивает OrderExpiration() как попытку изменения времени истечения.
 
Scriptong:

Да, получается, что тут есть лишь два пути:

1) Организовывать слежение за истечением программно, без применения OrderExpiration()

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

Первый предпочтительнее имхо. Т.к. далеко не все брокеры поддерживают экспирацию.
 
goldtrader:
Первый предпочтительнее имхо. Т.к. далеко не все брокеры поддерживают экспирацию.

Согласен, так и сделал. Необходимость модификации ордера в последние 10 минут его существования перевешивает риск потери связи с сервером. Исходя из современных возможностей дублирования интернет-каналов (доступно человеку со средним доходом) и компьютеров (примерно также), риск потери связи будет близок к нулю. Это утверждение основано на том факте, что раз уж мы доверили программе управление счетом, то должны принять все возможные меры по обеспечению ее бесперебойной работы.

Причина обращения: