Zum Inhalt springen
View in the app

A better way to browse. Learn more.

#T/N/X/T

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

EA Backtesting vs Live-Trading

Geschrieben

Hallo,

seit ein paar Monaten beschäftige ich mich mit dem Programmieren eines EA.

Dass die Resultate von Backtesting und Live-Trading sich unterscheiden war mir schon vorher bekannt. Doch dass selbst simple Bedingungen, welche im Programm eine Order auslösen sollten im Live-Trading 'übersehen' werden, konnte ich mir vorher nicht vorstellen. So sollte z. B. nach einem Gap eine Kauf- bzw. Verkaufsorder ausgelöst werden. Am 14.1. 2009 um 1h wurden bei EURUSD im 1H Chart alle im Programmcode gestellten Bedingungen für eine Kauforder erfüllt - aber nichts geschah. Im Backtesting dagegen wird der Trade ausgelöst.

Hier die Codezeile:

if ((Open[1]>High [2])&& (Close [1]>High [2])&& (Low [1]>= High [2]))	  
  {
  res=OrderSend(Symbol(),OP_BUY ...

 

Andererseits werden immer wieder Orders ausgelöst, obwohl keine der vorgegebenen Bedingungen erfüllt wurde.

Es scheint, als ob die O-H-L-C Kurse die das Programm im Live-Trading 'sieht', sich von den gleichzeitig im Chart dargestellten Kursen unterscheiden. Liegt dies am Broker oder ist die Programmiersprache MQL des Metatraders fehrerhaft ? Oder werden im Live-Trading als input slippage oder spread mit einbezogen? Kann mir einer einen Tip geben, gibt es Abhilfe?

 

Auch scheint die Funktion 'ObjectGetValueByShift', welche den weiteren Verlauf einer mit zwei Punkten vorgegebenen Trendlinie berechnet, recht ungenau. Trades werden manchmal selbst im Backtesting so ausgelöst, als ob der Metatrader etwas anderes 'sieht' als im Chart dargestellt.

Sind dies unter Codern bekannte Probleme?

Saludos

Heiko

Featured Replies

Geschrieben

So, hab den EA mal bissl umgebaut, dass zumindest ANSATZWEISE nen Debugoutput erzeugt wird. Es ging ja nur um die SELL-Geschichte, wenn ich das richtig verstanden habe (ma

 

Was mir auch noch aufgefallen ist: Du fragst etwaige Fehlermeldungen nicht ab z.B. bei OrderSend().

Wäre aber in dem Falle hilfreich, denn vielleicht lag einfach Dein Stopp zu dicht oder whatever. Daran kann's auch liegen, dass es bei manchen Brokern klappt, bei manchen nicht. Wie auch oben schon, KANN sein, MUSS nicht der Grund sein.

 

int ticket;

if(iRSI(NULL,0,14,PRICE_CLOSE,0)

{

ticket=OrderSend(Symbol(),OP_BUY,1,Ask,3,Ask-25*Point,Ask+25*Point,"My order #2",16384,0,Green);

if(ticket

{

Print("OrderSend failed with error #",GetLastError());

return(0);

}

}

ic.arrow.right.png http://docs.mql4.com/trading/OrderSend

 

 

Fehlercodes kann man ic.arrow.right.png HIER nachschlagen.

Ich hab die stdlib eingebunden in den EA und nutze die ErrorDescription()-Funktion, dann bekommt man schon nen Text und nicht nur ne Nummer angezeigt.

Mom2_debug.mq4

Geschrieben
int Hour( )

Returns the hour (0,1,2,..23) of the last known server time by the moment of the program start (this value will not change within the time of the program execution).

 

Unter Programm wird der Programmzyklus gemeint, das heisst bei jedem Aufruf

der Funktion start() wird die Variable aktualisiert

Geschrieben
Unter Programm wird der Programmzyklus gemeint, das heisst bei jedem Aufruf

der Funktion start() wird die Variable aktualisiert

Jap, bezogen auf den EA hast Du da recht. Man muss nur beachten, dass man mit der Serverzeit arbeitet, und die kann sich durchaus mit der vom eigenen Rechner in Disharmonie befinden. In nem Script funktioniert die Funktion dann nochmal anders (hab ich auch schon durch :correct:), da wird nämlich nix aktualisiert, denn da hängt man, wenn es so programmiert ist, immer und für alle Zeiten in dem ersten und einzigen start()-Aufruf fest.

 

 

EDIT: so, ich hab jetzt genug rumgemosert (hihi, hab ich vom Chef gelernt, der kann auch immer so gut gesalzene Finger (Hmm, @FinGER ? *grübel*) in offenen Wunden rumdrehen).

Geschrieben
Jap, bezogen auf den EA hast Du da recht. Man muss nur beachten, dass man mit der Serverzeit arbeitet, und die kann sich durchaus mit der vom eigenen Rechner in Disharmonie befinden. In nem Script funktioniert die Funktion dann nochmal anders (hab ich auch schon durch :correct:), da wird nämlich nix aktualisiert, denn da hängt man, wenn es so programmiert ist, immer und für alle Zeiten in dem ersten und einzige start()-Aufruf fest.

Scripte sind ja AFAIK eigentlich für "direkte" einmalige Dinge gedacht, zur vereinfachung von häufigen Aktionen "Alle Schließen", "Order mit SL" etc.. ich glaub es war nicht gedacht das man in der früh das Skript auf den chart zieht, und es schlummert dort bis am Abend bevor es etwas tut... (deswegen wird das script vermutlich auch nirgends direkt angezeigt (so wie die EAs))

Geschrieben
Scripte sind ja AFAIK eigentlich für "direkte" einmalige Dinge gedacht, zur vereinfachung von häufigen Aktionen "Alle Schließen", "Order mit SL" etc.. ich glaub es war nicht gedacht das man in der früh das Skript auf den chart zieht, und es schlummert dort bis am Abend bevor es etwas tut... (deswegen wird das script vermutlich auch nirgends direkt angezeigt (so wie die EAs))

Ja, das haben sich die Entwickler vielleicht so gedacht. Aber ich verweise da gern auf :correct:

 

Gut, ich hätte an der Stelle auch nen EA als Grundform nehmen können, aber das machte inhaltmäßig nun erst reicht keinen Sinn, da das Trading-Fenster doch schon eher nen Skript ist. Aber jetzt wird's echt philosophisch an der Stelle.

Geschrieben

Das bist Du gell?

 

forextrading24.png

 

Das gefühlte Ratio auf Deiner Seite ist 50/ 50 - Information/ Google Ad Block. Die "Landing Page" ist auch nicht gerade gelungen, also zumindest spricht sie mich nicht an.

 

Schreib mal was dazu, was das für ein Projekt ist und warum es sich lohnen sollte (ausser auf das Banner bei uns im Forum zu klicken) Deine Seite zu besuchen?

Geschrieben
  • Autor

Hi,

@ Krümel: Meinst Du den hier ?

Nein, den hier, da sieht man den ausgelösten Fehltrade.

 

post-874-1234390574_thumb.png

 

Sorry, bin kein Programmer, crossing sagt mir nichts.

Werde mir den Mom2_debug.mq4 mal am Wo.ende in Ruhe zu Gemüt führen. Thanxx für die Arbeit. Werde bestimmt was draus lernen.

 

Meinst Du WIRKLICH "Low[1]>ms2-xx/16" oder nicht doch "Low[1]>(ms2-xx)/16" ?

 

Nein, ist schon richtig, wie ich es formuliert habe. Ich will ja nur, dass Low[1]> bleibt als die Mitte des body der vorherigen Kerze, gebe aber noch ein wenig Spiel dazu, welches auch etwas von der aktuellen vola xx abhängt.

 

Das mit Hour() hat sich wohl geklärt, funzt live wie backtesting perfekt, mein expert tradet nur in den gewünschten Zeiten.

 

@ whipsaw: Ja, dass bin ich.

Die "Landing Page" spricht diejenigen an, die an Forex interessiert sind, aber von nix Ahnung haben.

Für die hier Anwesenden lohnt es sich wohl nicht die Seite zu besuchen. Ihr gehört bestimmt zu den 10% Tradern die beständig Gewinne machen.

Aber ich hatte Einblick in die Übersicht eines Brokers - es ist unglaublich, wieviele Konten da Monat für Monat platt gemacht werden - mit Beträgen ... puh! Solchen Leuten lege ich einen Signaldienst nahe. Die sollten lieber 49 Euro im Monat fürs Signalabo opfern und dabei richtig traden lernen - bevor sie sich endgültig ruinieren.

Ich will jetzt nicht behaupten, dass der Service IMMER Gewinn macht, aber ich kenne die Leute persönlich und weiss daher, dass das kein Abzug ist. Die sind gut, tun ihre Bestes, wollen Kunden jahrelang halten, das geht nur mit Gewinnen für die Kunden. Aber bei DEM Markt ist das eben nicht so einfach ...

Die ganze Forex-Branche (oder soger Finanz-Branche) scheint mir auf Abzug zu basieren (Broker werben ihre Partner mit % von den Verlusten der angeworbenen Kunden, O-Ton: Wg. den Gewinnen machen sie sich mal keine Gedanken ...). Von daher würde es mir einen Heidenspass machen, der Gilde mit einem gut funktionierenden expert das Fell über die Ohren zu ziehen.

Doch bis ich das schaffe, kann ich nicht von Sonne und Meer leben, sondern muss mir von google dabei helfen lassen ;-)

Saludos

Heiko

Geschrieben
kann ich nicht von Sonne und Meer leben

 

Verstehe ich, wer kann das schon.

 

 

Doch bis ich das schaffe, kann ich nicht von Sonne und Meer leben, sondern muss mir von google dabei helfen lassen ;-)

 

Musst Du nicht.

Wir geben Dir eine Bühne wenn Du magst. Es liegt an Dir, was Du daraus machst.

Wenn Deine Dienstleistungen mehr wert sind als die Banner auf den die Slogans gedruckt sind, dann kannst Du uns gerne unter Beweis stellen.

 

Was spricht dagegen? Eigentlich nichts, ic.arrow.right.png q.e.d.

Geschrieben
Werde mir den Mom2_debug.mq4 mal am Wo.ende in Ruhe zu Gemüt führen. Thanxx für die Arbeit. Werde bestimmt was draus lernen.

Ist nur nen Ansatz, wie es beim Debuggen besser laufen könnte, denn so wie Dein Code momentan aufgebaut ist (und wenn Du sagst, Du hast da 50 Module davon) ist Fehlersuche extrem aufwendig und da Du auch so wenig Infos preisgibst (was ich nachvollziehen kann, denn Du willst ja ne ganze Gilde abziehen :cold:) ist ne Ferndiagnose auch schwierig.

 

Versuch Dich mal an nem ausgiebigen Einsatz des Print-Befehls (oder schreib's zur Not in eine Datei mit FileWrite), dann wirst Du den Fehler sicher finden. Viel Erfolg.

Geschrieben

Ich kanns auch nur immer wieder betonen:

Debugoutput ;)

Wenn es sein muss, vor und nach (also in) jeder if-Abfrage, davor alle Bedingungen (gleichzeitig) ausgeben, in der if- einfach nur ein "drin ". und dann im Backtest, den visuellen Modus laufen lassen, bis zu der Stelle wo die Fehle-trades passieren, stoppen und den Output überprüfen, der ist eh schön mit TimeStamp wodurch man genau nachvollziehen kann, wann welcher output passiert ist. Ist zwar zugegebenermaßen aufwändig, aber dafür hat man dann volle Gewißheit was der EA tut und was nicht.

Geschrieben

Ok, ich habe den Trade auch am 3.2. 20 Uhr machen können bei Alpari. Hier noch der Debugoutput, wo man sehr schön sieht, dass ALLE 11 ! Bedingungen erfüllt sind.

Order wurde auch ohne Probleme aufgegeben. Wenn Dir der Trade an der Stelle nicht Recht ist, musst Du Deine 11 Bedingungen überarbeiten.

alpari3_2_09.png

debugoutput.PNG

mt_trades.PNG

Geschrieben

Ich vermute, das am Beginn des Bars (wo der Close noch sehr tief möglicherweise unter dem open), ma auch kleiner als ma2 ist, jedoch am Ende des Bars eben nach oben läuft und damit die Bedingung am Ende des Bars nicht mehr erfüllt ist

 

thx @Krümel fürs testen!

Geschrieben
  • Autor

Danke Dir Krümel für den Test bei Alpari! Die Bestätigung, dass es ein,

im wissentschaftlichen Sinne wiederholbares Experiment ist, hat mich weiter gebracht.

Dass

ALLE 11 ! Bedingungen erfüllt

sind, liess mich grübeln. Wie kann es sein, dass ma<ma2 erfüllt ist, wenn ich doch im

Chart SEHE, dass das nicht der Fall ist. Ich wollte es schon dem metatrader in die Schuhe schieben, kam aber dann doch darauf dank dem Denkanstoss, der Vermutung von Mythos.

Ich vermute, das am Beginn des Bars (wo der Close noch sehr tief möglicherweise unter dem open), ma auch kleiner als ma2 ist, jedoch am Ende des Bars eben nach oben läuft und damit die Bedingung am Ende des Bars nicht mehr erfüllt ist.

Ganz so ist es nicht, aber fast. Da

 

if(Volume[0]>3) return;

 

gilt, 'sieht' der expert ja nur eine Momentaufnahme, also keinen

' Beginn des Bars (wo der Close noch sehr tief ...'

 

Aber was in diesem Moment passiert ist folgendes:

Da die ma's sich auf array [0] beziehen, wird der Close[1] quasi doppelt gezählt. Im Moment wenn, wie zuvor definiert, die neue Kerze geöffnet wird, ist Close[0]==Open[0] wobei Open[0] im Normalfall nur 1-2 pips von Close[1] entfernt ist. Also ist quasi automatisch Close[0]=Close[1] . Da ich hier meinen ma auf den Close von 4 Kerzen beziehe, macht das einen gewaltigen Unterschied zu dem was ich im Chart sehen. Man sollte den Begriff 'Gleitender Durchschnitt' nicht zu wörtlich nehemen, es handelt sich dabei um eine schrittweise Berechnung. Von den 4 betrachteten candles sind hier also 2 vom Close her gleich, d. h. 50% des Resultats der Berechnung beruhen auf dem Close der Kerze [1] !!

 

Ich habe lange gebraucht diesen Denkfehler zu begreifen:

Wenn

 

if(Volume[0]>1) return;

 

gilt (es spielt wie gesagt keine nennenswerte Rolle ob >1 oder >3), dann macht es keinen grossen Sinn einen ma auf [0] zu beziehen. Aber in einigen experts die ich im Inet gefunden habe, wird es trotzdem so gehalten. Ob sich die Entwickler bewusst sind, dass hier annähernd Close[0]==Close[1] gilt?

Naja, je längerfristigen der ma, desto geringer der Effekt.

 

Jetzt habe ich Mom2 modifiziert, beide ma's enden auf

 

...,PRICE_CLOSE,1);

 

und der Fehltrade tritt nicht mehr auf, klar! :-))

 

Da mein expert mit einem knappen Dutzend ma's als Filter arbeitet und ich den gleichen Fehler überall gemacht habe, kann ich mir jetzt auch einige Diskrepanzen zw. Backtesting u. Live-Trading erklären. Am Wo.ende wird mein expert komplett überarbeitet ... !!

 

Ich bin eigentlich Elektroniker, Fehler in einer Schaltung suchen und finden kann ich gut und macht mir Spass - dass hier ist so ähnlich! Werde aber als Anfänger weitere Frage stellen müssen - wir 'sehen' uns also bestimmt wieder ;-)

Thanxx nochmal an Alle für Eure freundliche Unterstützung!

Heiko

 

@Whipsaw

P.S.: Das die 'Suche' Funktion schon immer eingeschränkt war, ist mir entgangen, weil ich sie zuvor mehrfach problemlos nutzen konnte. Hängt wohl vom Browser ab. Noch was:

Ich war gerade eben überrascht, dass dieser thread nicht mehr öffentlich zugänglich ist (Ich war nicht autom. über cookie eingeloggt). Es kam immer die Foren-Fehlermeldung: 'Die Anfrage konnte nicht verarbeitet werden ...'

Diese Meldung kommt mit Opera bei allen threads die ich danach probeweise versucht habe zu öffnen, mit IE6 kam ich jeweils problemlos rein (auch nicht eingeloggt). Böser bug in der Forensoftware (oder im Opera browser?)!

Geschrieben
@Whipsaw

P.S.: Das die 'Suche' Funktion schon immer eingeschränkt war, ist mir entgangen, weil ich sie zuvor mehrfach problemlos nutzen konnte. Hängt wohl vom Browser ab.

 

Das könnte ein Grund sein.

Es gibt aber auch eine quit pro quo :cold: Validierung. Was es genau damit auf sich hat, darf ich nicht sagen. Andernfalls habe ich morgen eine Abmahnung meiner Admins im Postfach.

 

Noch was:

Ich war gerade eben überrascht, dass dieser thread nicht mehr öffentlich zugänglich ist (Ich war nicht autom. über cookie eingeloggt). Es kam immer die Foren-Fehlermeldung: 'Die Anfrage konnte nicht verarbeitet werden ...'

 

Vielen Dank für diese Information. Ich leite das gleich zur Prüfung weiter.

Geschrieben
  • Autor

Hallo,

was bedeutet, dass der expert jetzt Grau ist im Navigator, statt mit blauem Hut wie zuvor?

Bei anderen expert Versuchen gab es irgendwo wohl einen Fehler im Code, der expert liess sich nicht aktivieren wenn er grau angezeigt wurde. Dieser expert lässt ein backtesting zu & zeigt ein breites smile im live-trading, sollte also funktionieren, oder?

 

Mein expert ist jetzt mit print Befehl bestückt, so dass ich nachvollziehen kann welches Modul die Order gegeben hat und wie die Kurse waren, die zur Order geführt haben. Fehlermeldung & mehr habe ich unter der Order-Bedingung beigefügt, dass sieht so aus:

 {
     res=OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,3,0,0,"026",026,0,Tomato);
     error = GetLastError();
     Print("Result OrderSend 026(OP_SELL): #"+error + ": "  + ", ticket =" + res,  " op1="+op1,  " cl1="+cl1,  " h1="+h1,  " l1="+l1,  " op2="+op2,  " cl2="+cl2,  " h2="+h2,  " l2="+l2,   " op3="+op3,  " cl3="+cl3,  " h3="+h3,  " l3="+l3, " ma8="+ma8, " ma8a="+ma8a);
     return;
      }

 

Die 026 ist die Nr. des Moduls, zudem lasse ich mir hier die OHLC der letzten 3 Kerzen ausgeben & den Wert eines ma der in diesem Modul genutzt wird. Der print Befehl funzt gut im backtesting.

Geschrieben
was bedeutet, dass der expert jetzt Grau ist im Navigator, statt mit blauem Hut wie zuvor?

 

Signalisiert das MT4 nur die verschlüsselte *.ex4 Datei zur Verfügung hat und/oder

das deine *.mq4 Datei Code nicht Kompiliert werden konnte (durch Fehler im Code...)

dadurch kein Update und MT4 benutzt dann die alte *.ex4 Datei.

 

 

siehe Bild

Capture_067.gif

Geschrieben
  • Autor
Signalisiert das MT4 nur die verschlüsselte *.ex4 Datei zur Verfügung hat und/oder

das deine *.mq4 Datei Code nicht Kompiliert werden konnte (durch Fehler im Code...)

dadurch kein Update und MT4 benutzt dann die alte *.ex4 Datei.

siehe Bild

Es gibt aber weder eine Fehlermeldung (0 Fehler, 0 Warnungen), noch eine alte *.ex4 Datei,

da ich den Namen geändert habe und so direkt kompiliert.

 

Jetzt habe ich den Namen nochmal geändert und kompiliert - jetzt ist der Hut blau! ??

Versteh' ich nicht, aber Problem gelöst. Und wieder was gelernt, danke!

Geschrieben
Es gibt aber weder eine Fehlermeldung (0 Fehler, 0 Warnungen), noch eine alte *.ex4 Datei,

da ich den Namen geändert habe und so direkt kompiliert.

 

Jetzt habe ich den Namen nochmal geändert und kompiliert - jetzt ist der Hut blau! ??

Versteh' ich nicht, aber Problem gelöst. Und wieder was gelernt, danke!

Welches Symbol war grau? Das mit dem "alten" Namen? Das wäre nicht verwunderlich , wenn du die mq4 umbenennst.

Das Terminal braucht teilweise ein bisschen bis es checkt das neue EAs da sind, am besten den MT neustarten.

Geschrieben
  • Autor
Welches Symbol war grau? Das mit dem "alten" Namen? Das wäre nicht verwunderlich , wenn du die mq4 umbenennst.

Das Terminal braucht teilweise ein bisschen bis es checkt das neue EAs da sind, am besten den MT neustarten.

Ja, danke, neustarten bringts beim metatrader manchmal. Genauso wie beim publishen des Demotradings.

Das bleibt manchmal auch einfach so hängen.

 

Neue Frage:

Ich hatte schon mal erwähnt, dass der expert trotz laufendem Trade einen weiteren eröffnet. So auch gerade jetzt.

Der Block 'Calculate open positions' scheint nicht korrekt zu funktionieren (s. vorliegender expert).

Aber auch ein gleichzeitiges Eröffnen von Positionen kommt manchmal vor. Da hilft 'Calculate open positions' nicht,

da manchmal 2 meiner Module gleichzeitig ein Signal geben. Dann liegt vom Server ja noch keine Rückmeldung einer offenen Pos. vor.

Kennt Ihr viell. einen (einfachen?) Weg beide Fehler auf einen Schlag zu eliminieren?

Geschrieben
Kennt Ihr viell. einen (einfachen?) Weg beide Fehler auf einen Schlag zu eliminieren?

 

Wenn ich das richtig verstanden habe, vielleicht hilft ein "flag" also einfach eine bool Variable "order_sent" oder so, die am beginn von start auf false gesetzt wird und nach einer erfolgreichen OrderSend auf true. und deine Module bekommen ein zusätzliches && !order_sent. Dann wird maximal eine Order pro Runde gesendet.

Geschrieben
  • Autor
Wenn ich das richtig verstanden habe, vielleicht hilft ein "flag" also einfach eine bool Variable "order_sent" oder so, die am beginn von start auf false gesetzt wird und nach einer erfolgreichen OrderSend auf true. und deine Module bekommen ein zusätzliches && !order_sent. Dann wird maximal eine Order pro Runde gesendet.

Wenn ich das richtig verstehe, bringt das mehr als mein Versuch über OrdersTotal() in jd. Modul das Eröffnen weiterer Pos. zu verhindern.

So sieht das jeweils bei mir aus, bringt aber leider nix:

 

if ((OrdersTotal()==0)&&(...))

 

Dein Vorschlag würde wohl auch nichts bringen bringen für den Fall, dass 2 Orders quasi zeitgleich gesendet werden, oder?

Geschrieben
Dein Vorschlag würde wohl auch nichts bringen bringen für den Fall, dass 2 Orders quasi zeitgleich gesendet werden, oder?

 

Inwiefern zeitgleich? parallel durch zwei EAs? das kannst schwer verhindern. Aber im EA hast du ja ein fixes hintereinander aufgrund des Programmablaufs.

zb:

start()
 bool order_sent = false;

 //blabla

 //Modul 1 
 if(!order_sent && andere Bedingungen)
 {
if(OrderSend(.....))
  order_sent= true;
 }

 //Modul 2 
 if(!order_sent && andere Bedingungen)
 {
if(OrderSend(.....))
  order_sent= true;
 }

 

Damit garantierst du, das pro Durchlauf des Programms nur eine Order gesendet wird, beim nächsten Durchlauf gibt dir ja dann dein CalculateOpenOrders eine offene Order zurück (außer sie wurde gleich geschlossen) und du machst keine neue mehr.

Löst das dein Problem?

Geschrieben
  • Autor
Inwiefern zeitgleich?

Nun, ich denke doch quasi zeitgleich. Wenn der Rechner im GHz Tempo die Bedingungen meiner Module abfragt,

kann doch in einem Durchlauf innerhalb von Nanosekunden mehrfach eine Order gegeben werden.

Aber danke, Deine Lösung scheint mir nach erstem Durchdenken tatsächlich plausibel.

Zumindest was das gleichzeitige öffnen von Positionen in einem Durchlauf betrifft.

Ich werde es später mal umsetzen.

 

Aber das Problem, das bei laufender Pos. eine weitere eröffnet wird, ist das grössere in meinem expert.

CalculateOpenOrders arbeitet wohl nicht korrekt. Da ich die Funktion vom metaquotes 'Moving Average' übernommen habe,

dachte ich, die ist korrekt ...

Wäre viell. die, auf den ersten Blick widersinnig erscheinende, Abfrage von

 

... && (OrderStopLoss()==0)

 

in jd. Modul eine Möglichkeit das Problem zu lösen?

Wenn keine Order läuft ist die Bedingung erfüllt, wenn eine Order läuft, ist auch ein SL gesetzt.

Korrekt?

Geschrieben
Aber das Problem, das bei laufender Pos. eine weitere eröffnet wird, ist das grössere in meinem expert.

CalculateOpenOrders arbeitet wohl nicht korrekt. Da ich die Funktion vom metaquotes 'Moving Average' übernommen habe,

dachte ich, die ist korrekt ...

Wäre viell. die, auf den ersten Blick widersinnig erscheinende, Abfrage von

 

... && (OrderStopLoss()==0)

 

in jd. Modul eine Möglichkeit das Problem zu lösen?

Wenn keine Order läuft ist die Bedingung erfüllt, wenn eine Order läuft, ist auch ein SL gesetzt.

Korrekt?

 

Dein CalculateOpenOrders hat die Aufgabe zu überprüfen ob offene Orders da sind oder? Wenn es das nicht tut, solltest du nicht hergehen und versuchen die Module zu ändern, sondern das CalculateOpenOrders zu debuggen sodass es tut was es soll ;)

zum zeitgleich: Egal wie schnell der EA abgearbeitet wird, es werden immer die Zeilen hintereinander ausgeführt, bei dir werden also keine Module "zeitgleich" bearbeitet, sondern hintereinander. auch wenn es im laufenden Betrieb zeitgleich wirken wird.

Geschrieben
  • Autor
Egal wie schnell der EA abgearbeitet wird, es werden immer die Zeilen hintereinander ausgeführt, bei dir werden also keine Module "zeitgleich" bearbeitet, sondern hintereinander. auch wenn es im laufenden Betrieb zeitgleich wirken wird.

Das bringt mich auf die Idee meine 'Close open orders' Funktion nach oben im expert zu setzen. So kann ich wohl mein

 

if (Volume[0]>3) return; auf >1 setzen, denn geschlossen wird dann sowieso vor dem neu eröffnen. Obwohl: Bis der Server den order close bestätigt ...?

 

Auf >1 setzen möchte ich versuchen, weil mir schwant, dass das abwarten von mehreren moves zu den doppelten Orders führen könnte.

 

Besten Dank, hab einiges zu tun am Woende!

Saludos

Heiko

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

Account

Navigation

Suche

Suche

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.