MQL4 - automated forex trading   /  

Форум

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

К списку тем Авторизуйтесь или зарегистрируйтесь, чтобы создать новую тему

avatar
130
KING 09.05.2008 23:30 
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 время в секундах, а время открытия ордера - время вывода ордера на рынок, а не время выставления отложенного ордера??? 

article

Особенности и ограничения тестирования торговых стратегий в MetaTrader 4

Эта статья поможет больше узнать об особенностях и ограничениях тестера торговых стратегий в MetaTrader 4...


avatar
4818
SK. 10.05.2008 00:28 

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


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


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

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


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

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

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

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

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


avatar
6581
Integer 10.05.2008 00:38 
KING писал (а):

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

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


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

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


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

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


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

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

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

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


avatar
3
edivio 22.03.2009 01:55 

Добрый день.

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


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

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

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

К списку тем  

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий