È necessario un semplice codice per l'EA (modificare due ordini aperti) - pagina 4

 

Questo dalla mia risposta di un paio di post fa . . . è il modo più semplice . . .

"Ho impostato due ordini pendenti ad un'ora specifica, precisamente alle 23:00 GMT+2 credo. Uno degli ordini pendenti è un sell stop e l'altro è un buy stop, entrambi gli ordini sono ad una distanza uguale dall'open della candela delle 23:00, in questo caso 14 pips.Entrambi hanno un TakeProfit di 28 pip (in questo caso) e uno StopLoss di 55 pip".

Puoi calcolare dove era il TP originale in riferimento alla candela delle 23:00, controlla l'ordine e vedi se è ancora impostato sul TP originale, se lo è allora può essere modificato... se non lo è allora è già stato modificato quindi non modificarlo di nuovo .

 

Prova questo . . . . compila ma non l'ho ancora provato nello Strategy Tester. . .

File:
madmax.mq4  10 kb
 
RaptorUK:

Prova questo . . . . compila ma non l'ho ancora provato nello Strategy Tester . . .

Sto ottenendo 'OrderSend error 130' per qualche motivo anche se lo SL e il TP sembrano essere corretti e gli 'OrderSend' sono disposti nello stesso modo del codice precedente. Perché succede questo?

Ho preso questa parte di codice

   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 l'ho messa nell'EA precedente (quello originale) e apre gli ordini ma non li modifica. Anche se penso che se l'errore OrderSend venisse corretto nell'EA che hai fornito potrebbe funzionare.

Oh e in questa parte,

if(!OrderModify

A cosa serve il !?

Grazie mille,

madmax3

 
madmax3:


Oh e in questa parte,

A cosa serve il !?

Grazie mille,

madmax3

Hai controllato la documentazione di OrderModify()? Cosa restituisce?
 
madmax3:

Sto ottenendo 'OrderSend error 130' per qualche motivo anche se lo SL e il TP sembrano essere corretti e gli 'OrderSend' sono disposti nello stesso modo del codice precedente. Perché succede questo?

Hai regolato i tuoi TP e SL per tenere conto di un Broker a 5 cifre? Il tuo Broker è un Broker a 5 cifre?
 

Sono riuscito a farlo funzionare, ho solo mancato di compilare una variabile (distanza da ask e bid). La documentazione di OrderModify non spiega il ! Credo.
Il codice sembra funzionare bene, un problema però è che sta modificando solo i trade di acquisto quando due trade sono aperti e non entrambi i trade di acquisto e vendita, non sono sicuro del perché lo stia facendo. Qualche idea sul perché?

Grazie,

madmax3

 
madmax3:

Sono riuscito a farlo funzionare, ho solo mancato di compilare una variabile (distanza da ask e bid). La documentazione di OrderModify non spiega il ! Credo.
Il codice sembra funzionare bene, un problema però è che sta modificando solo le operazioni di acquisto quando due operazioni sono aperte e non entrambe le operazioni di acquisto e vendita, non sono sicuro del perché lo stia facendo.

Grazie,

madmax3

OrderModify restituisce un bool . . . quindi ! in relazione a un bool è NOT . . . quindi !OrderModify() significa . . . se OrderModify restituisce false, cioè fallisce

Darò un'altra occhiata al tuo codice . . . o il mio mod ad esso.

 
madmax3:

Sono riuscito a farlo funzionare, ho solo mancato di compilare una variabile (distanza da ask e bid). La documentazione di OrderModify non spiega il ! Credo.
Il codice sembra funzionare bene, un problema però è che sta modificando solo i trade di acquisto quando due trade sono aperti e non entrambi i trade di acquisto e vendita, non sono sicuro del perché stia facendo questo. Qualche idea sul perché?

Grazie,

madmax3


Vuoi che modifichi lo StopLoss sia per le operazioni di acquisto che di vendita con lo stesso pip?

Ripensaci se è quello che vuoi e puoi capire perché non si modifica in quel modo....

Inoltre non modificare i trades con ogni nuovo punto nella direzione giusta scegli un trailingstep per permettere la modifica (xx Points può sceglierne 10 o più per evitare molti errori di tradecontext troppo occupato)

"!" è qualcosa come non nella codifica

 
madmax3:

Il codice sembra funzionare bene, un problema però è che sta modificando solo i trade di acquisto quando due trade sono aperti e non entrambi i trade di acquisto e vendita, non sono sicuro del perché lo stia facendo. Qualche idea sul perché?

Controllate i log per eventuali errori... se è in esecuzione in Strategy Tester controllate la scheda journal, se in Live o Demo controllate la scheda experts. Fatemi sapere cosa trovate ...
 
RaptorUK:
Controlla i log per gli errori . . . se si esegue in Strategy Tester controllare la scheda giornale, se in Live o Demo controllare la scheda esperti. Fammi sapere cosa trovi...
2012.04.09 21:21:27 2012.01.17 00:59 Tester: ordine #1, vendi 0.01 EURUSD è aperto a 1.26498
2012.04.09 21:21:27 2012.01.17 02:21 Tester: ordine #2, compra 0,01 EURUSD è aperto a 1,26795

2012.04.09 21:21:27 2012.01.17 02:21 MadMax EURUSD,H1: modify #2 buy 0.01 EURUSD at 1.26795 sl: 1.26218 tp: 1.27352 ok
2012.04.09 21:21:27 2012.01.17 03:00 MadMax EURUSD,H1: modify #2 buy 0.01 EURUSD at 1.26795 sl: 1.26218 tp: 1.27480 ok

Per qualche motivo sta modificando il trade di acquisto due volte (la seconda modifica va al TP richiesto, tuttavia su alcuni trade sembra continuare a modificare a certi orari interi come le 9:00 o le 10:00), non sembrano esserci errori effettivi come tali.