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

 

Подскажите, пожалуйста, как задать отбор ордеров по символу для OrdersTotal()?

   int total=OrdersTotal();

   if(total==0&&Bid>=OrderBuy&&Bid<=OrderBuy+10*Point)
    {
     if(OrderSend(Symbol(),OP_BUY,Lot,Ask,5,0,0,NULL,0,0,clrNONE)){::Alert(" Order Open ");}
    }

сейчас если на одной паре есть открытый ордер, то на других уже не открывает.

 
MakarFX:

Подскажите, пожалуйста, как задать отбор ордеров по символу для OrdersTotal()?

сейчас если на одной паре есть открытый ордер, то на других уже не открывает.

Посмотрите в кодобазу, там в каждом советнике есть пример

 
Vladimir Pastushak:

Посмотрите в кодобазу, там в каждом советнике есть пример

Я не программист(

для меня сложновато.

 
MakarFX:

Я не программист(

для меня сложновато.

не сложно

для написания базового ЕА вот весь функционал https://www.mql5.com/ru/forum/131859

по сабжу OrdersTotal() - это всего открытых ордеров (нумерация с 0 ) в терминале, затем нужно их выбирать по одному (перебрать в цикле) с помощью OrderSelect()  и с нужными ордерами производите манипуляции

for (i=OrdersTotal()-1; i>=0; i--)
{
  if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) 
  {
   // проверим символ ордера, проверим магикномер ордера....
  }
}
Только "Полезные функции от KimIV".
Только "Полезные функции от KimIV".
  • 2011.02.18
  • www.mql5.com
Все функции взяты из этой ветки - http://forum.mql4...
 
MakarFX:

Подскажите, пожалуйста, как задать отбор ордеров по символу для OrdersTotal()?

сейчас если на одной паре есть открытый ордер, то на других уже не открывает.

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

for(int pos=OrdersTotal()-1; pos>=0;pos--) {

        if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {

                selectFailed=true; /* не удалось "выбрать" ордер - статистика может быть неверной */
                continue;

        }

        if (OrderCloseTime()!=0) { /* ордер закрыт но ещё не удалён из списка*/ continue; }

        if (OrderMagicNumber()==0) { /* ордер выставлен юзером */ } continue;
        else if (OrderMagicNumber()!=_Magic) { /* ордер выставлен другим советником */ continue; }

        if (OrderSymbol()!=_Symbol) { /* ордер с правильным Magic но на другом символе */ continue; }

       /// обработка рабочих ордеров, с правильным Magic на символе советника (то есть наш ордер)

       /// проверяются несработки, считается кол-во, статистика, позиции и прочее 

}

проверка ордера по символу выделена цветом

 
Maxim Kuznetsov:

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

for(int pos=OrdersTotal()-1; pos>=0;pos--) {

        if (!OrderSelect(pos,SELECT_BY_POS,MODE_TRADES)) {

                selectFailed=true; /* не удалось "выбрать" ордер - статистика может быть неверной */
                continue;

        }

        if (OrderCloseTime()!=0) { /* ордер закрыт но ещё не удалён из списка*/ continue; }

        if (OrderMagicNumber()==0) { /* ордер выставлен юзером */ } continue;
        else if (OrderMagicNumber()!=_Magic) { /* ордер выставлен другим советником */ continue; }

        if (OrderSymbol()!=_Symbol) { /* ордер с правильным Magic но на другом символе */ continue; }

       /// обработка рабочих ордеров, с правильным Magic на символе советника (то есть наш ордер)

       /// проверяются несработки, считается кол-во, статистика, позиции и прочее 

}

проверка ордера по символу выделена цветом

По теме, как понял тикеты исторических ордеров могут теряться. Вопрос могут ли изменятся тикеты (SELECT_BY_TICKET) ордеров в МТ4 и тикеты сделок и позиций в МТ5.

И так же может ли после ОрдерСелект по тикету ордер смениться со временем. Например на следующий день. Советник не отключается.

Если отложенный ордер стал рыночным можно посмотреть по типу ордера. Если рыночный закрылся, то смотрим время закрытия ордера, не равно нулю OrderCloseTime()!=0

Если отложенный ордер закрылся по времени жизни, то как отследить по тикету ордера.

И вопрос, время жизни есть и в рыночных ордерах(МТ4), работает? 

 
MakarFX:

Подскажите, пожалуйста, как задать отбор ордеров по символу для OrdersTotal()?

сейчас если на одной паре есть открытый ордер, то на других уже не открывает.

Вопрос снят, разобрался. Всем спасибо.

 
Здравствуйте, уважаемые! Не пойму, что не так, почему пишет Alert: time3-time1 = wrong datetime?
datetime time1 = iTime(NULL,0,1);
datetime time3 = iTime(NULL,0,3);
datetime delta3 = (time3-time1);  Alert("time3-time1 = ",delta3); 


 
novichok2018:
Здравствуйте, уважаемые! Не пойму, что не так, почему пишет Alert: time3-time1 = wrong datetime?


потому что число получилось отрицательное :-)

по приведённой логике time1 __всегда__ больше time3

 
Maxim Kuznetsov:

потому что число получилось отрицательное :-)

по приведённой логике time1 __всегда__ больше time3

Спасибо! мозги иногда отключаются.

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