failed modify buy 0.00 sl: 0.00000, tp: 0.00000 -> sl: 1.09905, tp: 1.10125 [Invalid parameters] Was tun? - Seite 2

 
Christian:

Auf jeden Fall sind deine Parameter im Request falsch. Sagt auch die Fehlermeldung.

die request.volume = inp_Lotsize ; Zeile habe ich nur hinzugefügt, weil du sagtest das problem läge bei der lotsize.

Allgemein ist Positionmodify (wenn man im Trade.mql nachsieht nichts anderes als) Ordersend(basiert auf ordersend/modify), daher sehe ich keinen unterschied (korrigier mich wenns nicht stimmt)

Aber danke für den tipp mit dem Debugger, der scheint ja in MQL5 weitaus besser zu funktionieren als int MT4 xD :)

 
Bayne:

die request.volume = inp_Lotsize ; Zeile habe ich nur hinzugefügt, weil du sagtest das problem läge bei der lotsize.

Allgemein ist Positionmodify (wenn man im Trade.mql nachsieht nichts anderes als) Ordersend(basiert auf ordersend/modify), daher sehe ich keinen unterschied (korrigier mich wenns nicht stimmt)

Aber danke für den tipp mit dem Debugger, der scheint ja in MQL5 weitaus besser zu funktionieren als int MT4 xD :)

Nicht ganz richtig , ich sagte weglassen . So wie es in dem Beispiel auch zu sehen ist.

Für eine SL/TP Änderung brauchst du nur 4 Parameter. Das Action,Ticket,SLund den TP.

Deswegen sind doch die Beispiele ausgeführt.


Poste doch mal deinen KOMPLETTEN Ea als File.

Dann schaue ich mir den an und berichte wo die Fehler liegen.

So kommen wir nicht weiter.

 
Christian:

Nicht ganz richtig , ich sagte weglassen . So wie es in dem Beispiel auch zu sehen ist.

Für eine SL/TP Änderung brauchst du nur 4 Parameter. Das Action,Ticket,SLund den TP.

Deswegen sind doch die Beispiele ausgeführt.


Poste doch mal deinen KOMPLETTEN Ea als File.

Dann schaue ich mir den an und berichte wo die Fehler liegen.

So kommen wir nicht weiter.

hab versucht ihn per PM zu schicken, klappt vermutlich nicht ganz, also hier ist er: (vorab entschuldige, dass ich hierbei (noch) nicht mit klassen gearbeitet habe, die Problemstelle ist in der Funktion

void Trail(long ticket){}

(die mqh bitte in den \Tools Ordner einfügen)

Wenn du den aus der PM nutzt bitte Zeile 480 löschen & eine parenthesis aus Zeile 551 entfernen (Zeile war nur dort, damit ich effizient beim richtigen Level debuggen kann)

if (Bid<1.09700){
 

Im Part der Trail() Funktion der für Sell Positionen Zuständig ist, solltest du bis zeile 527 kommen, wenn du sigshortmodify ( also den signalparameter) =0.8 (statt 0.9) setzt.

(der Tickpreis scheint zu springen)

In Zeile 527 wartet das Problem mit dem retcode==10013 auf sich. Ich habe keine Ahnung was ich dagegen tun kann... der TP will hier einfach nicht gesetzt werden.

EDIT:

NewTP gab es nicht mehr, da ich es an manchen stellen rausnahm und gegen TP-StepShortTP ersetzte ( ausser an dieser Stelle)


Das Problem bleibt also dass der Preis den signalraum ( zwischen 80% und 100% des Tps) überspringen kann:

liegt das an meinen Tickdaten (Tickstory EURUSD 26.02.2016 ) oder ist das in echt auch möglich?

 
Schaue gerade drüber .....
 

Das erste was mir auffällt sind die vielen Compiler Warnungen.

Du solltet dir angewöhnen diese erst zu lösen und dann nach Fehler zu suchen.

Weil daraus Fehler entstehen...

Zum Beispiel "possible use of uninitialized variable 'NewTP'"

Bedeutet das du die Variable NewTP benutze obwohl ihr nie ein Wert zugewiese wurde. Im schlechtesten Fall steht da "k2j3b452jbdwxjk2wrfa,d" drin .

Nicht jede Warnung ist kritisch zu sehen aber gewöhn dir das an .

Gleich kommmt mehr

 

Habe soweit nun alles folgendermaßen Debuggt (scheint alles zu klappen , Ausser an besagtem 10.März 2016 (extrem schnell nach oben schießende Kerze, kann aber auch daran liegen, dass der Signalbereich (90% bis 100% des TP) übersprungen wird, denn der Preis raast in den TP hinein):

void Trail(long ticket){

//===========================================================(TRAILS)

//===========================================================Long

if (PositionSelectByTicket(ticket)&& PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY && PositionGetInteger(POSITION_MAGIC)==MagicNummer)//CHECKEN OB AUF IST
   {
      double    Ask    = SymbolInfoDouble(_Symbol, SYMBOL_ASK),
                 TP    = PositionGetDouble(POSITION_TP),
          OpenPrice    =PositionGetDouble(POSITION_PRICE_OPEN),
                 SL    = PositionGetDouble(POSITION_SL);
      bool        SL_SetzenLong=false,TP_SetzenLong=false,StopsSetzen=false;
            
if (SL>0.1 && (TP>0.1) && HistoryDealGetInteger(ticket,DEAL_TIME)==0) {
   
if (NormalizeDouble((TP-OpenPrice)*siglongModify,_Digits) <= NormalizeDouble(Ask  - OpenPrice,_Digits)){

  
        // SL Neu
        
        if (Ask-StepLongSL>SL) { 
        
        
        MqlTradeRequest ModifySlLongrequest={0};
        MqlTradeResult ModifySlLongresult;   
        
         ModifySlLongrequest.action= TRADE_ACTION_SLTP;
         ModifySlLongrequest.position =ticket;
         ModifySlLongrequest.sl = Ask-StepLongSL;
         ModifySlLongrequest.tp = PositionGetDouble(POSITION_TP);
         ModifySlLongrequest.deviation=deviationPending;
         //ModifySlLongrequest.volume=inp_Lotsize;
          //ModifySlLongrequest.price=
         // ModifySlLongrequest.deviation=deviation;
        
        SL_SetzenLong = OrderSend(ModifySlLongrequest,ModifySlLongresult);
        Print (ModifySlLongresult.retcode);
 
        
        if (ModifySlLongresult.retcode==10009)
                           {
                           
                              if(TP+StepLongTP>TP)
                                 {
                                 
                                   MqlTradeRequest ModifyTpLongrequest={0};
                                   MqlTradeResult  ModifyTpLongresult;   
                                   
                                    ModifyTpLongrequest.action= TRADE_ACTION_SLTP;;
                                    ModifyTpLongrequest.position =ticket;
                                    ModifyTpLongrequest.sl = Ask-StepLongSL;
                                    ModifyTpLongrequest.tp = TP+StepLongTP;
                                    ModifyTpLongrequest.deviation=deviationPending;
                                   
                                   
                                   TP_SetzenLong = OrderSend(ModifyTpLongrequest,ModifyTpLongresult);
                                   Print(ModifyTpLongresult.retcode);

                                 /*
                                 if (ModifyTpLongresult.retcode==TRADE_RETCODE_DONE||ModifyTpLongresult.retcode==TRADE_RETCODE_PLACED)
                                          {    
                                             Print("Trade Placed");
                                          }
                                       else
                                          {
                                             Print ("Trade Not Placed. Error Code ", ModifyTpLongresult.retcode);
                                          }*/
                                  }
                              
                              }
                           /*else
                              {
                                 Print ("Trade Not Placed. Error Code ", ModifySlLongresult.retcode);
                              }*/
                            
            
            }
        }
    
 }else { Print ("Order Ohne Stops !!!");
                MqlTradeRequest StopsLongrequest;
               MqlTradeResult StopsLongresult;
               StopsLongrequest.action= TRADE_ACTION_SLTP;;
               StopsLongrequest.position =ticket;
               StopsLongrequest.tp = OpenPrice+tpDistLong;
               StopsLongrequest.sl = OpenPrice-slDistShort;
               StopsLongrequest.deviation=deviationPending;
               
               StopsSetzen= OrderSend(StopsLongrequest,StopsLongresult);   
                             /* if (StopsLongresult.retcode==TRADE_RETCODE_DONE||StopsLongresult.retcode==TRADE_RETCODE_PLACED)
                                          {    
                                             Print("Trade Placed");
                                          }
                                       else
                                          {
                                             Print ("Trade Not Placed. Error Code ", StopsLongresult.retcode);
                                          }*/
        }
}
//===========================================================Short
    
    
    
else if (PositionSelectByTicket(ticket)  && PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL && PositionGetInteger(POSITION_MAGIC)==MagicNummer )//CHECKKEN OB AUF IST
   {
 
   
 double       Bid    =  SymbolInfoDouble(_Symbol, SYMBOL_BID),
               TP    =  PositionGetDouble(POSITION_TP),
         OpenPrice   =  PositionGetDouble(POSITION_PRICE_OPEN),
               SL    =  PositionGetDouble(POSITION_SL);
 bool SL_SetzenShort=false,TP_SetzenShort=false,StopsSetzen=false;

   
  if (SL>0.1 && TP>0.1 &&HistoryDealGetInteger(ticket,DEAL_TIME)==0)
      {
  
      if ( NormalizeDouble((OpenPrice-TP)*sigshortModify,_Digits)<=NormalizeDouble(OpenPrice-Bid,_Digits)){


            
            if (Bid+StepShortSL<SL) 
               {
               
              MqlTradeRequest ModifySlShortrequest={0};
              MqlTradeResult ModifySlShortresult;  
              
               ModifySlShortrequest.action= TRADE_ACTION_SLTP;;
               ModifySlShortrequest.position =ticket;
               ModifySlShortrequest.sl = Bid+StepShortSL;
               ModifySlShortrequest.tp = PositionGetDouble(POSITION_TP);
               ModifySlShortrequest.deviation=deviationPending;
               //ModifySlShortrequest.volume=inp_Lotsize;

               SL_SetzenShort = OrderSend(ModifySlShortrequest,ModifySlShortresult);
               Print(ModifySlShortresult.retcode);
               
               
               if (ModifySlShortresult.retcode==10009)
                           {
                              
                              if (TP-StepShortTP<TP)
                              
                              
                                 {Print(PositionGetDouble(POSITION_SL));
                                 
                                 MqlTradeRequest ModifyTpShortrequest={0};
                                 MqlTradeResult ModifyTpShortresult;  
                                 
                                 ModifyTpShortrequest.action= TRADE_ACTION_SLTP;;
                                 ModifyTpShortrequest.position =ticket;
                                 ModifyTpShortrequest.sl = Bid+StepShortSL;
                                 ModifyTpShortrequest.tp = TP-StepShortTP;
                                 ModifyTpShortrequest.deviation= deviationPending;
                                 //ModifyTpShortrequest.volume=inp_Lotsize;
                                 
                                 TP_SetzenShort= OrderSend(ModifyTpShortrequest,ModifyTpShortresult);
                                 Print(ModifyTpShortresult.retcode);

                                 
                                      /* if (ModifyTpShortresult.retcode==TRADE_RETCODE_DONE||ModifyTpShortresult.retcode==TRADE_RETCODE_PLACED)
                                          {    
                                             Print("Trade Placed");
                                          }
                                       else
                                          {
                                             Print ("Trade Not Placed. Error Code ", ModifyTpShortresult.retcode);
                                          }*/
                                  }
                              
                           }
                        /*else
                           {
                              Print ("Trade Not Placed. Error Code ", ModifySlShortresult.retcode);
                           }*/
                           
               
                  }
                  
                } 
            }else 
            { Print ("Order Ohne Stops!!");
               MqlTradeRequest StopsShortrequest;
               MqlTradeResult StopsShortresult;
               StopsShortrequest.action= TRADE_ACTION_SLTP;;
               StopsShortrequest.position =ticket;
               StopsShortrequest.tp = OpenPrice+tpDistLong;
               StopsShortrequest.sl = OpenPrice-slDistShort;
               StopsShortrequest.deviation=deviationPending;
               
               
               StopsSetzen= OrderSend(StopsShortrequest,StopsShortresult);
                             /* if (StopsShortresult.retcode==TRADE_RETCODE_DONE||StopsShortresult.retcode==TRADE_RETCODE_PLACED)
                                          {    
                                             Print("Trade Placed");
                                          }
                                       else
                                          {
                                             Print ("Trade Not Placed. Error Code ", StopsShortresult.retcode);
                                          }*/
            }
            
      }
}
 

Du musst Gedult haben......hilft mir nicht wenn du zwischendurch "neue ideen" reinbringst :-)

Da ist mächtig chaos drin .

 
Christian:

Du musst Gedult haben......hilft mir nicht wenn du zwischendurch "neue ideen" reinbringst :-)

Da ist mächtig chaos drin .

Oben der Code ist schon größtenteils debuggt

 

So Schlachtplan:


Du änderst ertsmal alle OderSend Funktionen in folgendes Schema :

if(!OrderSend(requestbuystop,resultbuystop))
    {
      Print("Ordersend Error");
      DebugBreak();                
    }

Somit erkennst du schon mal das die Funktion fehlgeschlagen ist. Aber ein True bedeutet nicht gleich alles OK. Deswegen bleiben die Abfragen der ReturnCodes.

Dazu noch ein DebugBreak() nach Trade not Placed . Siehe Bild unten.

Und ab sofort immer im Debugger starten.

Er stoppt dann wenn OrderSend fehlschlägt.

Anschließend wird das Request analysiert.

Wie im Bild hier:

Somit siehst du sofort was Sache ist.

Wie hier: TP = negativ kann also nicht funktionieren.

Berechnungsfehler auf deiner Seite .

Grund der Beschwerde: