Bedingungen übergangen

 

Hallo,

hier ist er wieder, mein schlechter Code.. ja ich weiß.. aber ich bin noch nicht auf dem perfekt modularen Level, ich arbeite dran..
Darum geht es hier aber nicht.

Auf dem Video: http://linden-it-net.de/share/why.webm
kann man sehen, dass es nur um diese beiden Breakpoints bzw. Bedingungen geht:
if(TickCounter>100 && signalnow == SIG_SELL && total<1 && glSellPlaced == false && glBuyPlaced == false)
und:
if(TickCounter>100 && signalnow == SIG_BUY && total<1 && glSellPlaced == false && glBuyPlaced == false)

Der Sell Trade, der bei 0:53 geöffnet wird, entspricht den Bedingungen, der geht in Ordnung, aber:

Bei 1:39  bzw. beim TickCounter von 27, der != >100 ist.. es ist SIG_SELL gegeben, kein SIG_BUY, dazu ein glSellPlaced=true.. dennoch wird die Kombi-Bedingung als TRUE interpretiert und ein buy-trade geöffnet.. wie ist das möglich?

1000 Dank!

Ich lasse meinen GesamtCode erstmal weg, man sieht ja die Werte im Fenster und meine Bedingungen, das ist doch schlimm genug, oder?!

 
Christian Linden:

Hallo,

hier ist er wieder, mein schlechter Code.. ja ich weiß.. aber ich bin noch nicht auf dem perfekt modularen Level, ich arbeite dran..
Darum geht es hier aber nicht.

Auf dem Video: http://linden-it-net.de/share/why.webm
kann man sehen, dass es nur um diese beiden Breakpoints bzw. Bedingungen geht:
if(TickCounter>100 && signalnow == SIG_SELL && total<1 && glSellPlaced == false && glBuyPlaced == false)
und:
if(TickCounter>100 && signalnow == SIG_BUY && total<1 && glSellPlaced == false && glBuyPlaced == false)

Der Sell Trade, der bei 0:53 geöffnet wird, entspricht den Bedingungen, der geht in Ordnung, aber:

Bei 1:39  bzw. beim TickCounter von 27, der != >100 ist.. es ist SIG_SELL gegeben, kein SIG_BUY, dazu ein glSellPlaced=true.. dennoch wird die Kombi-Bedingung als TRUE interpretiert und ein buy-trade geöffnet.. wie ist das möglich?

1000 Dank!

Ich lasse meinen GesamtCode erstmal weg oder muss den jemand sehen?

Ich würde hier lieber den kompletten Code selber testen können.

Code + Parameter für dein Test. Für mich einfacher als ein Video zu analysieren was ehh nicht alle Werte Zeigt.

Und das ein BUY ausgelößt wird sieht mann nicht richtig.

 
Christian:

Ich würde hier lieber den kompletten Code selber testen können.

Code + Parameter für dein Test. Für mich einfacher als ein Video zu analysieren was ehh nicht alle Werte Zeigt.

Und das ein BUY ausgelößt wird sieht mann nicht richtig.

Hier findest Du angehängt, was Du brauchst.

Danke fürs Reinschauen!

Dateien:
 
Christian Linden:

Hier findest Du angehängt, was Du brauchst.

Danke fürs Reinschauen!

Parameter ? Symbol Zeitrahmen ...
 
Christian:
Parameter ? Symbol Zeitrahmen ...

aahh.. ja, macht Sinn, sorry: EURUSD H1 1.4.-2.4., jeder Tick ohne Verzögerung.
Der DebugBreak fährt Dich bis ca. 20 Ticks vor die Sell-Order, die den Bedingungen entsprechend ausgeführt wird. 
Dann wird der TickCounter wieder auf 0 gesetzt. 
Dann wird der mir nicht nachvollziehbare BuyTrade by TickCounter=26 oder 27 ausgeführt, obwohl er ja >100 sein muss usw..

 
Christian Linden:

aahh.. ja, macht Sinn, sorry: EURUSD H1 1.4.-2.4., jeder Tick ohne Verzögerung.
Der DebugBreak fährt Dich bis ca. 20 Ticks vor die Sell-Order, die den Bedingungen entsprechend ausgeführt wird. 
Dann wird der TickCounter wieder auf 0 gesetzt. 
Dann wird der mir nicht nachvollziehbare BuyTrade by TickCounter=26 oder 27 ausgeführt, obwohl er ja >100 sein muss usw..

Fehlt noch was....


can't open "C:\Users\\AppData\Roaming\MetaQuotes\Terminal\9EB2973C469D24060397BB5158EA73A5\MQL5\Include\errordescription.mqh" include file    Trade.mqh    23    11

 
Christian:

Fehlt noch was....


can't open "C:\Users\\AppData\Roaming\MetaQuotes\Terminal\9EB2973C469D24060397BB5158EA73A5\MQL5\Include\errordescription.mqh" include file    Trade.mqh    23    11

whoops, dachte, die wäre Standard -> anbei:

Dateien:
 
Christian Linden:

whoops, dachte, die wäre Standard -> anbei:

Blöde Frage:

Woher weißt du denn das er bei 1:39 einen BUY Trade geöffnet wird ?

Wenn der Debugger in der Zeile steht IST die Bedingung in der if Zeile noch gar nicht geprüft.

Erst, wenn er in der Klammer steht. Kannst du die Bedingung mit dem Debugger gegenprüfen.

 

Setze bei solchen Problemen immer den BP in die Klammer

An letzter Stelle

So wie im Bild

Weil wenn er da stopt weißt du das die das if korrekt berechnet ist und kannst dir den Rest ansehen.

Der Computer macht keine Fehler ...eher der Typ der da nen halben Meter vor sitzt 😂

Kann leider dein Szenario nicht reproduzieren.

 

Kleiner Tipp noch.

Lass endlich die ganzen Prints raus. Du siehst ja bei dem Wust nicht das wesentliche.

Das Bremst tierisch und müllt deine Platte zu.

Du brauchst das nicht mehr, dein Code zeigt, dass das Debuggen mit Print abgelegt werden kann.


Dann würdest du sehen, bei mir zumindest, dass er gar kein Trade aufmacht.

Requotes.....


 

Das bekommst du natürlich nicht mit ,da du OrderSend() falsch benutzt.

      if (OrderSend(request,result))
      {
       Print("Sell Position wurde geöffnet mit Order: ",result.order);
       Print("Sell Position wurde geöffnet mit Deal: ",result.deal);
      }
      else 
       {
         DebugBreak();
       }

So macht es Sinn.


Wenn die Order fehlschlägt, stoppt er da und du kannst schauen warum.

Eine von hunderten Lösungen.

Den Rest unter

ulong ticket;

Muss natürlich auch an das Fehlschlagen angepasst werden.

Sowie in der Gegenrichtung.


Code 10004 https://www.mql5.com/en/forum/336228

Grund der Beschwerde: