[АРХИВ] Любой вопрос новичка, чтоб не захламлять форум. Профи, не проходите мимо. Без вас никуда - 3. - страница 4

 
splxgf:

А как определять какой из двух?

https://book.mql4.com/ru/trading/orderclose

Ну и фильтровать по символу при необходимости, целиком рабочий пример

https://book.mql4.com/ru/trading/ordermodify


Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!

 if (Bid>=Openup-0.0005)
 {
 for(int count = OrdersTotal()-1; count >= 0; count--)
  {  
     OrderSelect(count, SELECT_BY_POS, MODE_TRADES);
     if (OrderType() == OP_BUYLIMIT)
       {  
        OrderDelete(ticket,CLR_NONE);
       }
  }
 }
 
Andreev:


Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!


Самый простой способ определить, какой ордер из двух нужно закрыть, это по мэджик-номеру. Назначайте им разные номера при установке. В примере, который Вы выше показали не хватает этой проверки. И ещё вместо ticket напишите OrderTicket().
 
tol64:

Самый простой способ определить, какой ордер из двух нужно закрыть, это по мэджик-номеру. Назначайте им разные номера при установке. В примере, который Вы выше показали не хватает этой проверки. И ещё вместо ticket напишите OrderTicket().

Спасибо за ответ! Мне уже советовали мэджик-номер, но вот где его указывать при определении определении отложенного ордера и как увязать с тикетом - не понимаю.
 
Andreev:

Спасибо за ответ! Мне уже советовали мэджик-номер, но вот где его указывать при определении определении отложенного ордера и как увязать с тикетом - не понимаю.


magic надо устанавливать при открытии ордера, только надо следить, чтобы номер был у разных ордеров разный иначе не будет смысла, ниже ссылка на полное описание функции OrderSend там все переменные кторые можно установить при открытии ордера, именно ВАС должна интересовать переменная magic, но чтобы все корректно работало необходимо чтобы все переменные перед ней были заполнены, все переменные после - по усмотрению

https://docs.mql4.com/ru/trading/OrderSend

 
LazarevDenis:


magic надо устанавливать при открытии ордера, только надо следить, чтобы номер был у разных ордеров разный иначе не будет смысла, ниже ссылка на полное описание функции OrderSend там все переменные кторые можно установить при открытии ордера, именно ВАС должна интересовать переменная magic, но чтобы все корректно работало необходимо чтобы все переменные перед ней были заполнены, все переменные после - по усмотрению

https://docs.mql4.com/ru/trading/OrderSend


А зачем разным ордерам разный магик?
 

Подскажите правильный код. написал советник и при крмпиляции выдает всего две ошибки - не знаю как от них избавится.

вот эти ошибки 1) 'SL' - variable already defined C:\Program Files\MetaTrader Finam\experts\$.mq4 (43, 11)

и 2) 'TP' - variable already defined C:\Program Files\MetaTrader Finam\experts\$.mq4 (45, 11)

Код советника ниже:

 
extern int  

            Diapazon=1200,
            Slipege=500,
            TP=1500,
            SL=15000;   
            
double pa, pb, pt;
int    ls, dg;                  

  int start()                                // Спец. функция start()
  {  
   
   pa=MarketInfo(Symbol(),MODE_ASK);
   pb=MarketInfo(Symbol(),MODE_BID);
   pt=MarketInfo(Symbol(),MODE_POINT);
   dg=MarketInfo(Symbol(),MODE_DIGITS);
   ls=MarketInfo(Symbol(),MODE_STOPLEVEL);
   
   //---------------------------------------+
    
   if
   
   {
   
   double variable1 = NormalizeDouble(pa+ls*pt,dg); 
  
   double variable2 = NormalizeDouble(pb-ls*pt,dg);
   
   //---------------------------------------------+ 
  
   double pa = NormalizeDouble(Ask+Diapazon*Point,Digits);
   
   double SL = NormalizeDouble(Bid+(Diapazon-SL)*Point,Digits);
  
   double TP = NormalizeDouble(Ask+(Diapazon+TP)*Point,Digits);

 
  
   double pb = NormalizeDouble((Bid+Diapazon*Point,Digits);
  
   double SL = NormalizeDouble(Bid+(Diapazon+SL)*Point,Digits);
  
   double TP = NormalizeDouble(Bid+(Diapazon-TP)*Point,Digits);
   
   }
  
                                       // Открытие BUY
                                         
   OrderSend(Symbol(),OP_BUYSTOP, 0.05,Ask+Diapazon*Point,3,Bid+(Diapazon-SL)*Point,Ask+(Diapazon+TP)*Point);
   
                                     // Открытие SELL
   
   OrderSend(Symbol(),OP_SELLSTOP,0.05,Bid+Diapazon*Point,3,Bid+(Diapazon+SL)*Point,Bid+(Diapazon-TP)*Point);  

   return;                                   // Выход из start()
  }
  
 
Vinin:

А зачем разным ордерам разный магик?

Видимо для этого - несколькими постами выше :-))) - "Самый простой способ определить, какой ордер из двух нужно закрыть, это по мэджик-номеру. Назначайте им разные номера при установке. В примере, который Вы выше показали не хватает этой проверки. И ещё вместо ticket напишите OrderTicket()."
 
tol64:

Самый простой способ определить, какой ордер из двух нужно закрыть, это по мэджик-номеру. Назначайте им разные номера при установке. В примере, который Вы выше показали не хватает этой проверки. И ещё вместо ticket напишите OrderTicket().

Запоминаете время установки ордеров, далее также в цикле сравниваете время - удаляете наиболее старший, как - то так
 
Andreev:


Использую следующий пример для определения, но закрывает вместо первого только последний отложенный ордер, хотя все условия выполняются для первого отложенного ордера. Помогите найти ошибку!!!!!!!!!!!!!


Не исключаете вариант превращения первого ордера в рыночный, и, как следствие, невозможность его удаления этим циклом по лимитным ордерам?
Причина обращения: