Как грамотно закрыть ордер через определенное время?

 
Qnt=0;
for(int i=0; i<OrdersTotal(); i++) // По рыночн. и отлож. ордерам
   {  if (OrderType() == OP_BUY || OrderType() == OP_SELL)  //.. открытый ордер
      Qnt++;                                   // Колич. ордеров
      CurrentOrders[Qnt][9]=OrderOpenTime();     // Время открытия ордера
   }
Первое я нашел все открытые ордера.
for (int i=1; i<=Qnt; i++)
   {
   Alert("Время открытия ордера =",CurrentOrders[i][9]);
   }
Потом вывел из массива время открытия ордеров. Какое время мне покажет, если это были отложенный ордера, который открылись и стали рыночными?
И какую строчку написать чтобы закрыть этот ордер, при условии что Time[0]>(время открытия ордера + livetime), где livetime время в секундах, а время открытия ордера - время вывода ордера на рынок, а не время выставления отложенного ордера??? 

 

В этом рассждении есть несколько ошибок.


1. Время открытия ордера не имеет никакого отношения к вопросу закрытия. Общий смысл такой: если ордер должен быть закрыт, то он должен быть закрыт независимо от того, открыт ли он 5 мин. назад или месяц назад и независимо от того, был ли он открыт в результате преобразования отложенного в рыночный или просто открыт. Открывать и закрывать ордера следует в соответствии с торговыми критериями ('Автоматическое закрытие и открытие позиции'). В некоторых случаях необходимо закрыть ордер незадолго до так называемой точки бифуркации, т.е. перед выходом новостей (прогноз может не сработать). В этом случае необходимо сравнивать текущее время и заданное время новостей, и закрыться, например, не позднее, чем за 5 мин.


2. >> Первое я нашел все открытые ордера.

В целом рассуждение правильное. Но по мере углубления в вопрос становится очевидно, что любая программа, предназначенная для реальной торговли, должна содержать блок учёта ордеров. См. https://book.mql4.com/ru/samples/expert, https://book.mql4.com/ru/build/orders и 'Учёт ордеров в большой программе'.


3. Сама задача закрытия ордеров - это отдельная задача (не очень простая, но вполне доступная для решения любому думающему программисту).

Кратко, общий порядок закрытия должен быть такой:

а. закрытие встречных рыночных

б. закрытие остаточных рыночных, причём, в порядке стоимости (чем больше лотов, тем раньше, независимо от места открытия)

в. удаление отложенных в порядке приоритета (сначала те, что ближе, потом те, кот. со стопами и т.д.)

 
KING писал (а):

Какое время мне покажет, если это были отложенный ордера, который открылись и стали рыночными?

Время срабатывания, т.е. время когда отложенный превратился в рыночный.

 
KING:
И какую строчку написать чтобы закрыть этот ордер, при условии что Time[0]>(время открытия ордера + livetime), где livetime время в секундах, а время открытия ордера - время вывода ордера на рынок, а не время выставления отложенного ордера???

Так и написать: Time[0]>OrderOpenTime()+livetime

 
Integer:
KING:
И какую строчку написать чтобы закрыть этот ордер, при условии что Time[0]>(время открытия ордера + livetime), где livetime время в секундах, а время открытия ордера - время вывода ордера на рынок, а не время выставления отложенного ордера???

Так и написать: Time[0]>OrderOpenTime()+livetime


Integer:
KING писал (а):

Какое время мне покажет, если это были отложенный ордера, который открылись и стали рыночными?

Время срабатывания, т.е. время когда отложенный превратился в рыночный.

Спасибо за ответы на вопросы.

 

Добрый день.

Как правильно написать в код эксперта так, чтобы он работал только через определенное время. На пример, он должен закрываться через 1 час и 20 минут от открытие ордера и открыть новый через 20 минут после закрытия последнего ордера.

 
Есть у меня один не плохой советник, но ему не хватает одной "мелочи", так как в нем ордера в минусе просиживаются, накапливая "негатив". По моим анализам заметил что хорошо было бы если ордера (которые в минусе) закрывались после 1-1,5 сутки простаивания.

Я так понимаю для этого нужен эксперт, который закрывал бы эти ордера.

Может кто помочи?

 
Я вот тоже задался этим вопросом, но видимо ответ есть выше, просто мы его не понимаем :)
 
Что то не вижу нигде https://docs.mql4.com/ru/trading/OrderSelect
 
Saintsid:
Я вот тоже задался этим вопросом, но видимо ответ есть выше, просто мы его не понимаем :)

Убилнах.

Археолог.