Código simples necessário para EA (modificar duas ordens abertas) - página 4

 

Esta é a forma mais simples . . .

"Eu estabeleço duas ordens pendentes a uma hora específica, especificamente às 23:00 GMT+2, penso eu. Uma das ordens pendentes como uma parada de venda e a outra é uma parada de compra, ambas as ordens estão a uma distância igual da vela aberta a partir das 23:00, neste caso 14 pips.Ambas têm um TakeProfit de 28 pips (neste caso) e um StopLoss de 55 pips".

Você pode calcular onde o TP original estava por referência à vela das 23:00, verificar o pedido e ver se ainda está ajustado ao TP original, se está então pode ser modificado... se não, então já foi modificado, então não o modifique novamente .

 

Experimente isto . . . compila, mas ainda não experimentei no Testador de Estratégia. .

Arquivos anexados:
madmax.mq4  10 kb
 
RaptorUK:

Experimente isto . . . compila, mas ainda não experimentei no Testador de Estratégia . .

Estou recebendo 'OrderSend error 130' por alguma razão, embora o SL e TP pareçam estar corretos e os 'OrderSend's estejam dispostos da mesma forma que o código anterior de alguma forma. Por que isto está acontecendo?

Eu tomei esta parte do código

   int CountOpenOrders = 0;
   double Candle23Open; 
   int Spread = MarketInfo(Symbol(), MODE_SPREAD);
   
   Candle23Open = Open[ iBarShift(NULL, 0, StrToTime("23:00") ) ]; // price value of the Open of the 23:00 hour candle
   
   for(int iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
      {
      if(OrderSelect(iPos,SELECT_BY_POS) && 
         OrderMagicNumber() == MagicNumber &&
         OrderSymbol() == Symbol() &&
         OrderType() < 2               //  less than 2 is either OP_BUY (0) or OP_SELL (1) 
         )
      CountOpenOrders++;
      } // end of for(int iPos  

   if(CountOpenOrders == 2)  //  we have 2 open orders,  should we modify or have the already been modified ?
      {
      for(iPos = OrdersTotal()-1; iPos >= 0 ; iPos--)
         {
         if(OrderSelect(iPos,SELECT_BY_POS) && 
            OrderMagicNumber() == MagicNumber &&
            OrderSymbol() == Symbol() 
            )
            {
            if(OrderType() == 1)               //  OP_SELL (1)  
               {
               if(OrderTakeProfit() > Candle23Open - ((TakeProfitModified - 1) * Point) + Spread )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open - (TakeProfitModified * Point) + Spread, 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
               }
            
            if(OrderType() == 0)               //  OP_BUY (0)
               {
               if(OrderTakeProfit() < Candle23Open + ((TakeProfitModified - 1) * Point) )      //  check if TakeProfit has already been modified
                  if(!OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), Candle23Open + (TakeProfitModified * Point), 0, Blue))
                     {
                     Print("Error modifying order : ",GetLastError());
                     return(0);
                     }
                  
               }
                  
            }         
         }
      }
   
        
   } 

e a colocou na EA anterior (a original) e abre os pedidos, mas não os modifica. Embora eu ache que se o erro do OrderSend fosse corrigido na EA que você forneceu, poderia funcionar.

Ah, e nesta parte,

if(!OrderModify

Para que serve o !?

Muito obrigado,

madmax3

 
madmax3:


Ah, e nesta parte,

Para que serve o !?

Muito obrigado,

madmax3

Você verificou a documentação para OrderModify() ? o que ela retorna?
 
madmax3:

Estou recebendo 'OrderSend error 130' por alguma razão, embora o SL e TP pareçam estar corretos e os 'OrderSend's estejam dispostos da mesma forma que o código anterior de alguma forma. Por que isto está acontecendo?

Você ajustou seu TP & SL para contabilizar um corretor de 5 dígitos? seu corretor é um corretor de 5 dígitos?
 

Consegui trabalhar, apenas perdi o preenchimento de uma variável (distância de pedido e lance). A documentação da OrderModify não explica o ! Eu acredito.
O código parece funcionar bem, mas uma questão é que ele só está modificando as operações de compra quando duas operações estão abertas e não tanto as operações de compra e venda, não tenho certeza porque ele está fazendo isto. Alguma idéia por quê?

Obrigado,

madmax3

 
madmax3:

Consegui que ele funcionasse, apenas perdi o preenchimento de uma variável (distância de pedido e lance). A documentação da OrderModify não explica o ! Eu acredito.
O código parece funcionar bem, mas uma questão é que ele só está modificando as operações de compra quando duas operações estão abertas e não tanto as operações de compra e venda, não tenho certeza porque ele está fazendo isso.

Obrigado,

madmax3

OrderModify retorna um bool . . então ! em relação a um bool NÃO é . . então !OrderModify() significa . . se OrderModify retorna falso, ou seja, falha

Vou dar outra olhada em seu código . . ou meu mod para ele.

 
madmax3:

Consegui trabalhar, apenas perdi o preenchimento de uma variável (distância de pedido e lance). A documentação da OrderModify não explica o ! Eu acredito.
O código parece funcionar bem, mas uma questão é que ele só está modificando as operações de compra quando duas operações estão abertas e não tanto as operações de compra e venda, não tenho certeza porque ele está fazendo isto. Alguma idéia por quê?

Obrigado,

madmax3


Você quer ter isso modificando o StopLoss para ambos os negócios de Compra e Venda com o mesmo pip ??

Pense novamente se é isso que você quer e você pode descobrir porque não está modificando dessa forma....

Também não modifique as negociações com cada novo ponto na direção certa escolha um trailingstep para permitir a modificação (xx Pontos podem escolher 10 ou mais para evitar muitos erros de contexto de negociação muito ocupados)

"!" é algo como não codificar

 
madmax3:

O código parece funcionar bem, mas uma questão é que ele só está modificando as operações de compra quando duas operações estão abertas e não tanto as operações de compra e venda, não tenho certeza porque ele está fazendo isso. Alguma idéia por quê?

Verifique se há erros nos logs . . se estiver rodando no Strategy Tester verifique a guia do diário, se estiver em Live ou Demo verifique a guia dos especialistas. Informe-me o que você encontrou . .
 
RaptorUK:
Verifique se há erros nos logs . . se estiver rodando no Strategy Tester verifique a guia do diário, se estiver em Live ou Demo verifique a guia dos especialistas. Informe-me o que você encontrou . .
2012.04.09 21:21:27 2012.01.17 00:59 Testador: pedido nº 1, venda 0.01 EURUSD é aberto em 1.26498
2012.04.09 21:21:27 2012.01.17 02:21 Testador: pedido nº 2, compra 0.01 EURUSD é aberto a 1.26795

2012.04.09 21:21:27 2012.01.17 02:21 MadMax EURUSD,H1: modificar #2 comprar 0.01 EURUSD a 1.26795 sl: 1.26218 tp: 1.27352 ok
2012.04.09 21:21:27 2012.01.17 03:00 MadMax EURUSD,H1: modificar #2 comprar 0.01 EURUSD a 1.26795 sl: 1.26218 tp: 1.27480 ok

Por alguma razão está modificando o comércio de compra duas vezes (a segunda modificação vai para o TP necessário, no entanto, em algumas negociações parece continuar modificando em certos horários inteiros, como 9:00 ou 10:00), mas não parece haver erros reais como tal.