Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4973
Beiträge: 43868
Benutzer: 7.221
Aktive Benutzer: 81
Links: 84
Wir begrüßen unseren neuesten Benutzer: Thomas75
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 5 Stunden
- Thomas75
vor 18 Stunden
- JosephTK
vor 2 Tagen
- Hopfen&Mal...
vor 3 Tagen
- frankmicha...
vor einer Woche
- DFeck

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 786
Gesamt: 786
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 30.01.23
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 79
pascalper befindet sich auf einem aufstrebenden Ast
Standard OrderModify Error 1

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;
    }
  #2 (permalink)  
Alt 30.01.23
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #3 (permalink)  
Alt 30.01.23
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 79
pascalper befindet sich auf einem aufstrebenden Ast
Standard

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ß
  #4 (permalink)  
Alt 30.01.23
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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.
  #5 (permalink)  
Alt 30.01.23
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 79
pascalper befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
OrderProfit() kann nicht = PA1BuyOpenSL sein!
Daher wird die if-Abfrage auch nicht zum break führen.

traderdoc
Ja das ist ein wenig verwirrend
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ß
  #6 (permalink)  
Alt 30.01.23
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.733
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

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;
Hier liegt der Hase begraben. Und da deshalb diese Abfgrage nie true sein kann, gibt es auch keinen break, so dass der Code weiter durchlaufen wird zu den Funktionen OrderModify(), die nach Abarbeiten desselben SL und TP dann immer mit Error1 reagieren.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #7 (permalink)  
Alt 31.01.23
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 79
pascalper befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von traderdoc Beitrag anzeigen
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;
Hier liegt der Hase begraben. Und da deshalb diese Abfgrage nie true sein kann, gibt es auch keinen break, so dass der Code weiter durchlaufen wird zu den Funktionen OrderModify(), die nach Abarbeiten desselben SL und TP dann immer mit Error1 reagieren.

traderdoc
OK, jetzt glaube ich hab ich es...

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
  #8 (permalink)  
Alt 31.01.23
Mitglied
 
Registriert seit: Feb 2017
Beiträge: 79
pascalper befindet sich auf einem aufstrebenden Ast
Standard

Gerade mit OrderTakeProfit() getestet
Und es funktioniert!
Was bin ich für ein Dödel
Kleines Malheur mit großer Wirkung...

Großartig traderdoc, du hast mich in die richtige Richtung gestellt!

Nochmals vielen Dank!

Gruß
Thema geschlossen

Lesezeichen

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 16:57 Uhr.





Suchmaschine - Reisen - Wavesnode - Facebook Forum - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------