Einfacher Code für EA benötigt (zwei offene Aufträge ändern) - Seite 4

 

Dies aus meiner Antwort vor ein paar Beiträgen ... es ist der einfachste Weg ...

"Ich setze zwei schwebende Orders zu einer bestimmten Zeit, genauer gesagt um 23:00 GMT+2. Eine der schwebenden Orders ist ein Verkaufsstopp und die andere ein Kaufstopp, beide Orders sind gleich weit von der Eröffnung der 23:00-Kerze entfernt, in diesem Fall 14 Pips.Beide haben einen TakeProfit von 28 Pips (in diesem Fall) und einen StopLoss von 55 Pips."

Sie können berechnen, wo sich der ursprüngliche TP befand, indem Sie sich auf die 23:00-Kerze beziehen, die Order überprüfen und sehen, ob sie immer noch auf den ursprünglichen TP eingestellt ist, wenn ja, kann sie geändert werden ... wenn nicht, wurde sie bereits geändert, also ändern Sie sie nicht noch einmal.

 

Versuchen Sie dies ... es kompiliert, aber ich habe es noch nicht im Strategietester ausprobiert ...

Dateien:
madmax.mq4  10 kb
 
RaptorUK:

Versuchen Sie dies ... es kompiliert, aber ich habe es noch nicht im Strategietester ausprobiert ...

Aus irgendeinem Grund erhalte ich "OrderSend error 130", obwohl SL und TP korrekt zu sein scheinen und die "OrderSend's" in der gleichen Weise wie der vorherige Code angeordnet sind. Woran liegt das?

Ich habe diesen Teil des Codes

   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);
                     }
                  
               }
                  
            }         
         }
      }
   
        
   } 

und habe ihn in den vorherigen EA (den ursprünglichen) eingefügt, und er öffnet die Aufträge, ändert sie aber nicht. Obwohl ich denke, wenn der OrderSend-Fehler in dem von Ihnen zur Verfügung gestellten EA behoben werden würde, könnte es funktionieren.

Oh, und in diesem Teil,

if(!OrderModify

Wofür ist der !

Ich danke Ihnen vielmals,

madmax3

 
madmax3:


Oh, und in diesem Teil,

Wofür ist der !

Ich danke Ihnen sehr,

madmax3

Haben Sie die Dokumentation für OrderModify() geprüft? Was gibt sie zurück?
 
madmax3:

Ich bin immer "OrderSend Fehler 130" aus irgendeinem Grund, obwohl die SL und TP scheinen richtig zu sein und die "OrderSend's sind in der gleichen Weise wie der vorherige Code etwas ausgelegt. Warum ist dies geschehen?

Haben Sie Ihre TP und SL angepasst, um einen 5-stelligen Broker zu berücksichtigen? Ist Ihr Broker ein 5-stelliger Broker?
 

Ich habe es hinbekommen, ich habe nur vergessen, eine Variable auszufüllen (Abstand von Ask und Bid). In der OrderModify-Dokumentation wird das nicht erklärt! Ich glaube.
Der Code scheint gut zu funktionieren, ein Problem ist jedoch, dass er nur Kaufgeschäfte ändert, wenn zwei Geschäfte offen sind und nicht sowohl die Kauf- als auch die Verkaufsgeschäfte. Irgendwelche Ideen, warum?

Danke!

madmax3

 
madmax3:

Ich habe es hinbekommen, habe nur vergessen, eine Variable auszufüllen (Abstand von Ask und Bid). In der OrderModify-Dokumentation wird das nicht erklärt! Ich glaube.
Der Code scheint gut zu funktionieren, ein Problem ist jedoch, dass er nur Kaufgeschäfte modifiziert, wenn zwei Geschäfte offen sind, und nicht sowohl Kauf- als auch Verkaufsgeschäfte.

Danke!

madmax3

OrderModify gibt ein bool zurück . . . also ! in Bezug auf ein bool ist NOT . . . also !OrderModify() bedeutet . . wenn OrderModify false zurückgibt, d.h. fehlschlägt

Ich werde mir Ihren Code noch einmal ansehen . ... oder meine Mod dazu.

 
madmax3:

Ich habe es zum Laufen gebracht, habe nur vergessen, eine Variable auszufüllen (Abstand von Ask und Bid). Die OrderModify-Dokumentation erklärt das ! Ich glaube.
Der Code scheint gut zu funktionieren, ein Problem ist jedoch, dass er nur Kaufgeschäfte ändert, wenn zwei Geschäfte offen sind und nicht sowohl die Kauf- als auch die Verkaufsgeschäfte. Irgendwelche Ideen, warum?

Danke!

madmax3


Möchten Sie, dass es den StopLoss für Kauf- und Verkaufstransaktionen mit demselben Pip ändert?

Denken Sie noch einmal darüber nach, ob es das ist, was Sie wollen, und ob Sie herausfinden können, warum es nicht auf diese Weise modifiziert wird ....

Auch nicht modifizieren Trades mit jedem neuen Punkt in die richtige Richtung wählen Sie einen trailingstep zu ermöglichen modifizieren (xx Punkte können 10 oder mehr wählen, um eine Menge von tradecontext zu beschäftigt Fehler zu vermeiden)

"!" ist so etwas wie nicht in der Codierung

 
madmax3:

Der Code scheint gut zu funktionieren, ein Problem ist jedoch, dass es nur Kaufgeschäfte ändert, wenn zwei Geschäfte offen sind und nicht sowohl die Kauf- und Verkauf-Geschäfte, ich bin nicht sicher, warum es dies tut. Irgendwelche Ideen, warum?

Prüfen Sie die Protokolle auf Fehler... wenn Sie im Strategietester arbeiten, prüfen Sie die Registerkarte Journal, wenn Sie im Live- oder Demo-Modus arbeiten, prüfen Sie die Registerkarte Experten. Lassen Sie mich wissen, was Sie finden...
 
RaptorUK:
Prüfen Sie die Logs auf Fehler ... wenn Sie im Strategy Tester laufen, prüfen Sie die Registerkarte Journal, wenn Sie auf Live oder Demo laufen, prüfen Sie die Registerkarte Experten. Lassen Sie mich wissen, was Sie finden ...
2012.04.09 21:21:27 2012.01.17 00:59 Tester: Auftrag #1, Verkauf 0,01 EURUSD wird bei 1,26498 eröffnet
2012.04.09 21:21:27 2012.01.17 02:21 Tester: Auftrag Nr. 2, Kauf 0,01 EURUSD wird zu 1,26795 eröffnet

2012.04.09 21:21:27 2012.01.17 02:21 MadMax EURUSD,H1: ändern #2 kaufen 0.01 EURUSD bei 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

Aus irgendeinem Grund modifiziert er den Buy-Trade zweimal (die zweite Modifikation geht an den geforderten TP, aber bei einigen Trades scheint er zu bestimmten Zeiten wie 9:00 oder 10:00 weiter zu modifizieren), es scheint aber keine tatsächlichen Fehler zu geben.