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

 

Всем привет!

Как попроще в моем простеньком советнике прописать (модифицировать) ордер, чтобы в нем стереть Тейкпрофит и СтопЛосс при наступлении опеределенного условия, максимум предполагается не более трех ордеров в одну сторону (если это важно), подсчет ордеров я так понимаю используется, надо новый прописать? в общем жду небезразличных. Спс.

 
Порт-моне тв #:

Всем привет!

Как попроще в моем простеньком советнике прописать (модифицировать) ордер, чтобы в нем стереть Тейкпрофит и СтопЛосс при наступлении опеределенного условия, максимум предполагается не более трех ордеров в одну сторону (если это важно), подсчет ордеров я так понимаю используется, надо новый прописать? в общем жду небезразличных. Спс.

OrderModify(OrderTicket(), OrderOpenPrice(), 0, 0, 0);
 
Ivan Butko #:

К сожалению, сложно понять, как использовать такой код.


Попробовал при открытии бай ордера поставить флаг в 1, а когда закрывается - флаг в 0, и добавил последний в условие открытия. Не прокатило)
Странно, по сути нарушается правило: открывать, если флаг==0. А он и при 1 всё равно равно понаоткрывал на одной свечке.

Покажи как ты это делал.
 
Alexey Viktorov #:

Зачем так сложно?

Не умничай. Вопрос был не об этом.

 
MakarFX #:
Покажи как ты это делал.

Вроде заработало, переделал вот так. Теперь попробую на селл, и посмотрю, смогут ли они быть независимы друг от друга

int Buy=0,
    Sell=0;

void OnTick(void)
  {
    double 
    ma=iMA(NULL,0,20,0,MODE_SMA,PRICE_CLOSE,0),
    ma2=iMA(NULL,0,80,0,MODE_SMA,PRICE_CLOSE,0);

    if (ma>ma2 && Buy==0) 
      { 
        OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - SL * Point, 0, NULL, 888, 0, Blue);
        Buy=1; 
      }
      
   for(int i=0;i<OrdersTotal();i++)
     {
      if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;
      if(OrderMagicNumber()!=888 || OrderSymbol()!=Symbol()) continue;
      //--- check order type 
      if(OrderType()==OP_BUY)
        {
         if(perceptron_B() < Porog_B)
           {
            if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,White))
               Print("OrderClose error ",GetLastError());
            Buy=1;
           }
           
         break;
        }

 

UPD
Фуф, конструкция заработала) Тоже самое сделал для селл, теперь могут открываться независимо друг от друга и сопровождаться разной логикой.

 
Ivan Butko #:

Вроде заработало, переделал вот так. Теперь попробую на селл, и посмотрю, смогут ли они быть независимы друг от друга

 

UPD
Фуф, конструкция заработала) Тоже самое сделал для селл, теперь могут открываться независимо друг от друга и сопровождаться разной логикой.

Наверное ругается при компиляции)))

 
MakarFX #:

Наверное ругается при компиляции)))

Точно! Чуть-чуть, "return value of 'OrderSend' should be checked AI (2).mq4 34 9"

Но, вроде работает)
 
Ivan Butko #:

Точно! Чуть-чуть, "return value of 'OrderSend' should be checked AI (2).mq4 34 9"

Но, вроде работает)

Сделай так

    if (ma>ma2 && Buy==0) 
      { 
        if(OrderSend(Symbol(), OP_BUY, lots, Ask, 3, Bid - SL * Point, 0, NULL, 888, 0, Blue))
        Buy=1; 
      }
 
MakarFX #:

Сделай так

Спасибо!

 
MakarFX #:

благодарю!

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