![]() |
|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
![]() |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
![]()
Hallo,
Code korrekt (nur Error1), Ausführung korrekt, Ergebnis korrekt, die Modifizierung der 2 offenen Positionen wird korrekt ausgeführt, alle neuen Werte sind richtig, jedoch bekomme ich den Error 1 nicht weg, der das Log voll macht. Alles sinnvollen Varianten mit break, continue, return probiert, keine Änderung. Mittlerweile mühe ich mich bereits 2 Wochen damit ab. Bin für jede Hilfe, Tip dankbar! Gruß Code:
void PA1Order3Modify(){ bool bres=false,sres=false; double PA1BuyOpen=GlobalVariableGet(Symbol()+"-PABuyOpen"); //not used double PA1BuyOpenTP=GlobalVariableGet(Symbol()+"-PABuyOpenTP")+NormalizeDouble(((DynSteps/100)*4),0); double PA1BuyOpenSL=GlobalVariableGet(Symbol()+"-PABuyOpenSL")-NormalizeDouble(((DynSteps/100)*4),0); for(int i = OrdersTotal()-1; i >= 0; i--){ if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderMagicNumber()==Magic1){ if(OrderType()==OP_BUY && StringFind(OrderComment(),"-1/10")==4){ if(OrderProfit()==PA1BuyOpenTP && OrderStopLoss()==PA1BuyOpenSL) break; { bres=OrderModify(OrderTicket(),OrderOpenPrice(),PA1BuyOpenSL,PA1BuyOpenTP,OrderExpiration(),CLR_NONE); } } if(OrderType()==OP_SELL && StringFind(OrderComment(),"-2/10")==4){ if(OrderProfit()==PA1BuyOpenSL && OrderStopLoss()==PA1BuyOpenTP) break; { sres=OrderModify(OrderTicket(),OrderOpenPrice(),PA1BuyOpenTP,PA1BuyOpenSL,OrderExpiration(),CLR_NONE); } } } } return; } |
|
|||
![]()
OrderModify() wird permanent angesprungen.
D.h. wenn versucht wird, OrderModify() mit denselben Werten auszuführen, dann wir Error 1 geprintet. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
![]()
Vielen Dank, ich glaube ich verstehe theoretisch was du meinst, aber ich weiß nicht wie ich das ändern könnte
ich habe es auch alternativ mit continue, return probiert und auch wenn ich mit if(!OrderProfit()==PA1BuyOpenTP && !OrderStopLoss()==PA1BuyOpenSL) arbeite, stimmt zwar immer das Ergebnis, Error1 bleibt D.h. der Code ist in der Syntax richtig aber nicht in der Logik, das zu ändern übersteigt jedoch mein Können, bzw. es gibt keine wirklich guten Vorlagen/Beispiele online zu finden...ausserdem verstehe ich nicht warum Metaquotes den Error1 "obligatorisch" aktiv setzt, würde der nicht das Log voll machen würde ich so lassen, das Ergebnis stimmt zu 100%. Gibt es eine Möglichkeit den Error1 via Code abzuschalten? Error1 -> /device Null...oder ähnliches Nochmals vielen Dank! Gruß |
|
|||
![]()
OrderProfit() kann nicht = PA1BuyOpenSL sein!
Daher wird die if-Abfrage auch nicht zum break führen. traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
![]() Zitat:
Order#1 ist eine Buy Market Order Order#2 ist eine Sell Market Order Order#3 ist eine Buy_Stop Order, x Schritte von Order#1 entfernt-TP+SL entfernen sich automatisch mit Wird nun Pending #3 exekutiert, sollen die SL+TP von Order 1+2 an Order 3 TP+SL angepasst werden Richtig wäre es wenn ich für Buy und Sell jeweils komplett getrennte Variablen (BuyTP+SL und SellTP+SL=4 Variablen) verwenden würde, da aber die Werte für TP+SL immer identisch sind, egal ob Buy oder Sell, habe ich diese im OrderSend/Modify einfach umgedreht PA1BuyOpen/TP/SL zeigt nur an das Order#1 eine Buy Order ist, wie du vielleicht erahnst gibt es auch das Gegenstück PA2SellOpen/TP/SL wo die Order #1 eine Sell Order ist, Order#2 Buy und Pending #3 wieder Sell_Stop d.h. es ist ein Breakout Hedge System, mit dynamischer Schrittweite abhängig von der Volatilität. Diese Werte steuern auch TP+SL. steigt die Volatilität an, werden TP+SL auch weiter, vice versa = keine zu weiten TP die nicht erreicht werden und keine zu engen SL die getriggert werden. D.h. es ist völlig egal wohin der Kurs geht, es braucht nur Volatilität Wie erwähnt es funktioniert einwandfrei, momentan ziehe ich die TP+SL von Order1+2 mit der Maus manuell auf die TP+SL Werte von #3 nach...dieser Automatismus fehlt noch...zu meinem Glück Aber deine Antwort hat mich auf eine andere Idee, mögliche Unlogik meinerseits gebracht, ich teste mal und melde mich. Dank + Gruß |
|
|||
![]()
Was Du da schreibst, mag alles sein, aber trotzdem kann man nicht
OderProfit() - angegeben in Währung!! - mit PA1BuyOpenTP als Kursangabe!! vergleichen. Verstehst Du? Code:
if(OrderProfit()==PA1BuyOpenTP && OrderStopLoss()==PA1BuyOpenSL) break; und if(OrderProfit()==PA1BuyOpenSL && OrderStopLoss()==PA1BuyOpenTP) break; traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
![]() Zitat:
Statt OrderProfit() was den G/V ohne Swaps, Comm wieder gibt MUSS ich OrderTakeProfit() verwenden, welche den Kurs wieder gibt zu dem die Position im Gewinn ist und geschlossen wird OrderProfit() mit OrderTakeProfit() verwechselt Somit wäre richtig: if(OrderTakeProfit()==PA1BuyOpenTP) break; beim ersten Loop hat OrderTakeProfit() noch den original Wert -> OrderModify startet beim zweiten Loop ist OrderTakeProfit() identisch mit PA1BuyOpenTP und bricht ab Richtig? Danke |
![]() |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|