Скачать MetaTrader 5

MQL 4 Не могу осуществит задержку открытия позиции по времени

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Делай скриншоты в MetaTrader и управляй ими в галерее!
Artem Onopin
178
Artem Onopin 2016.11.04 15:58 

MQL4 для MT4. Проблема у меня такая, советник открывает сделку и после ней должно пройти 2 часа, чтобы открыть следующую (иначе он может открыть много сделок на одном событии).

Как я попытался это воплотить в жизнь, таким образом:

datetime tm2 = TimeTradeSell();

datetime tm3 = tm2 + 90*60;

if( tm3 < TimeCurrent()) return;

         {

          // Условие открытия сделки 

 } 

//Функции

datetime  TimeTradeSell() //Получает из истории цену закрытия последнего ордера Sell  

{

         datetime TimeClose = 0;

         for(int i=0;i<OrdersHistoryTotal();i++)

            if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))

            if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic) 

            if(OrderType()==OP_SELL) 

               {

                 TimeClose=OrderCloseTime();

               }

   return(TimeClose);

}     

 Но как вы уже догадались, ни фига не работает. Сова просто открывает первую сделку, а дальше отказывается открывать сделки. Может я вообще не правильно подхожу к решению задачи?

fxsaber
4398
fxsaber 2016.11.04 16:17  
Artem Onopin:

if( tm3 < TimeCurrent()) return;

Artem Onopin
178
Artem Onopin 2016.11.04 16:50  
fxsaber:
Если ты имел ввиду, лишний return в условии, то ты оказался прав, спасибо вроде работает!!!
fxsaber
4398
fxsaber 2016.11.04 17:21  
почему return был лишним?
Из-за

не могу ответить в ЛС.

 

Ваше условие открытия - это срабатывание if. Поэтому return лишний.

Artem Onopin
178
Artem Onopin 2016.11.04 17:34  
fxsaber:
Из-за

не могу ответить в ЛС.

 

Ваше условие открытия - это срабатывание if. Поэтому return лишний.

Странно не могу понять, в другом советнике этот кусок кода работает прекрасно, но там есть return

datetime tm2 = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE) + " " + OpenTime);

      datetime tm3 = tm2 + OpenPeriod*60;

      if(OpenTimeOnOff == true)

      if(TimeCurrent() < tm2 || TimeCurrent() > tm3) return;

 Это условие на оборот даёт период когда советнику работать, например 1 час в сутки.

fxsaber
4398
fxsaber 2016.11.04 17:53  
Вот так расшифровывается Ваше условие
if( tm3 < TimeCurrent()) // Если последнее время сервера перешло время, с которого можно открывать, то открывай
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий