Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 423

 
novichok2018:

Здравствуйте! Помогите разрулить ситуацию: открываю позицию 1 по условию У1, закрываю по условию У2. Но если до наступления У2 ещё раз возникнет У1 и откроется позиция 2, то она не реагирует на наступившее У2, а висит до следующего У2, причем наступившего после нового У1 (!), и эта новая позиция уже не закрывается по новому У2, а ждет следующего условия У1-У2. Как этого избежать? Голова пухнет. Спасибо.

Нужен цикл for закрытия OrderClose(...) всех ордеров по условию У2 - хоть их сто наоткрывай. Можно удалять по-одному на каждом тике - тогда так: 1) по условию У2 поднять флаг. 2) Если флаг поднят - удалить ОДИН ордер. 3) Если ордера отсутствуют - опустить флаг. Тогда все ордера друг за другом будут удалены....

 
STARIJ:

Нужен цикл for закрытия OrderClose(...) всех ордеров по условию У2 - хоть их сто наоткрывай


У меня и так цикл. Что-то в нём не правильно?

void ClosePoz()
  { int total=OrdersTotal();
  if(total>1)
   {
      for(int i=0;i<OrdersTotal();i++)
      {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) 
      { Print("позиция для закрытия не найдена");
         break;
      }
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
         {double WPR0 = iWPR(NULL,PERIOD_M5,bars,0);
         if(OrderType()==OP_BUY && MathAbs(WPR0)>80)
           OrderClose(OrderTicket(),OrderLots(),NormalizeDouble(MarketInfo(OrderSymbol(),MODE_BID),int(MarketInfo(OrderSymbol(),MODE_DIGITS))),slippage,clrNONE);                  
         }
      }
    } 
  }   
 
novichok2018:
У меня и так цикл. Что-то в нём не правильно?
Не понял - использовал SRC для вставки кода, а не вижу его.
там надо нажать Вставить, а потом уже Добавить
 
STARIJ:
там надо нажать Вставить, а потом уже Добавить

Выше хоть и не там, где надо, но читается. О! А теперь где надо. Чудеса!

 
novichok2018:

Я вставил ваш код правильно.

Сначала нажимаете кнопку SRC, затем комируете в окно ваш код, нажимаете кнопку "Вставить" и отправляете своё сообщение.

 
tura210577:

Спасибо за ответ! 

Не за что. Попробуйте воспользоваться такими мультиплатформенными функциями:

//+------------------------------------------------------------------+
//| Returns specified Open by shift                                  |
//+------------------------------------------------------------------+
double Open(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyOpen(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified High by shift                                  |
//+------------------------------------------------------------------+
double High(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyHigh(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Low by shift                                   |
//+------------------------------------------------------------------+
double Low(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyLow(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Close by shift                                 |
//+------------------------------------------------------------------+
double Close(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   double array[];
   if(CopyClose(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
//| Returns specified Time by shift                                  |
//+------------------------------------------------------------------+
datetime Time(const string symbol_name,const ENUM_TIMEFRAMES timeframe,const int shift)
  {
   datetime array[];
   if(CopyTime(symbol_name,timeframe,shift,1,array)==1) return array[0];
   return 0;
  }
//+------------------------------------------------------------------+
 
novichok2018:   У меня и так цикл. Что-то в нём не правильно?

В коде 2 ошибки. 1) Вот на этой странице объяснен порядок просмотра ордеров в цикле. 2) break - выход из цикла, а надо continue - пропустить этот

 
Artyom Trishkin:

Я вставил ваш код правильно.

Сначала нажимаете кнопку SRC, затем комируете в окно ваш код, нажимаете кнопку "Вставить" и отправляете своё сообщение.


Спасибо. Я хоть благодаря Вам посмеялся над своей писаниной. А что по существу вопроса? В цикле всё правильно?

 
novichok2018:

Спасибо. Я хоть благодаря Вам посмеялся над своей писаниной. А что по существу вопроса? В цикле всё правильно?

Вам ответили уже:

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам

STARIJ, 2018.01.18 20:19

В коде 2 ошибки. 1) Вот на этой странице объяснен порядок просмотра ордеров в цикле. 2) break - выход из цикла, а надо continue - пропустить этот


 
Artyom Trishkin:

Вам ответили уже:



Да, спасибо, страницу прочитал. Только моих познаний в МКЛ4 хватило только, чтоб заметить, что у меня в цикле позиции перебираются от нуля до последней, а в примере наоборот, от последней к нулю. А куда вставлять break так и не понял. А когда поменял у себя перебор на обратный, вообще перестали закрываться позиции.

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