Quaisquer perguntas de recém-chegados sobre MQL4 e MQL5, ajuda e discussão sobre algoritmos e códigos - página 1652

 

Olá a todos!

Qual é a maneira mais fácil de escrever (modificar) uma ordem no meu simples Expert Advisor para eliminar Take Profit e Stop Loss quando uma determinada condição ocorre, o máximo é suposto não ser mais que três ordens em uma direção (se isso for importante), contagem de ordens, como eu entendo que é usado, eu deveria escrever uma nova? Estou esperando por alguém que se preocupe.

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

Olá a todos!

Qual é a maneira mais fácil de escrever (modificar) uma ordem no meu simples Expert Advisor para eliminar Take Profit e Stop Loss quando uma determinada condição ocorre, até um máximo de três ordens em uma direção (se isso for importante), eu assumo que a contagem da ordem é usada, devo escrever uma nova? Estou esperando por alguém que se preocupe.

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

Infelizmente, é difícil entender como usar tal código.


Tentou colocar uma bandeira em 1 ao abrir uma ordem de compra, e uma bandeira em 0 ao fechá-la, e adicionou esta última à condição de aberta. Não funcionou)
É estranho, na verdade a regra é quebrada: aberta se a bandeira==0. E, de qualquer forma, ela ainda se abriu à 1 na mesma vela.

Mostre-me como você o fez.
 
Alexey Viktorov #:

Por que tão complicado?

Não seja esperto. A pergunta não era sobre isso.

 
MakarFX #:
Mostre-me como você o fez.

Parece estar funcionando, eu o refiz assim. Agora vou tentar na venda e ver se eles podem ser independentes um do outro.

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
Phew, funcionou) Eu fiz o mesmo para vender, agora eles podem abrir independentemente um do outro e têm uma lógica diferente.

 
Ivan Butko #:

Parece estar funcionando, eu o refiz assim. Agora vou tentar na venda e ver se eles podem ser independentes um do outro.

UPD
Phew, o projeto funcionou) Eu fiz o mesmo para vender, agora eles podem abrir independentemente e ser acompanhados por uma lógica diferente.

Provavelmente é roubado ao compilar))))

 
MakarFX #:

Provavelmente é juramentado na compilação))))

Certo! Um pouco,"valor de retorno de 'OrderSend' deve ser verificado AI (2).mq4 34 9"

Mas parece funcionar)
 
Ivan Butko #:

Certo! Um pouco,"valor de retorno de 'OrderSend' deve ser verificado AI (2).mq4 34 9"

Mas parece funcionar)

Faça-o assim

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

Faça-o!

Obrigado!

 
MakarFX #:

Obrigado!

Razão: