Einzelnen Beitrag anzeigen
  #14 (permalink)  
Alt 26.08.14
Eberhard Eberhard ist offline
Neues Mitglied
 
Registriert seit: Mar 2014
Beiträge: 20
Eberhard befindet sich auf einem aufstrebenden Ast
Standard

Hallo traderdoc,

endlich habe ich jetzt wieder etwas Zeit. Deshalb zum Vorschlag der Implementierung einer Print()-Funktion:

Unter dem Suchbegriff "Testen von Handelsstrategien" findet man die Rubrik "Print()-Funktion im Tester". Darin heißt es:

"Um die Leistung zu erhöhen und Verkehr zu sparen, funktioniert beim Testen die Funktion Print() weder bei Verwendung von lokalen Agenten, noch bei Verwendung der Fernagenten oder Cloud-Agenten.
Die Ausnahme ist die Verwendung von Print() innerhalb des Handlers OnInit(). Dadurch können Sie die Ursache von Fehlern einfach finden, wenn sie auftreten."

Natürlich habe ich - logischerweise - mit als erstes den Printbefehl in den verschiedenen MQL5-CExpert-Handlern eingesetzt, um meine Programmierfortschritte überprüfen zu können und es ist schon einigermaßen frustrierend, feststellen zu müssen, dass ausgerechnet der Printbefehl dann aber nicht anspricht. Übrigens gibt es bei der Implementierung des Printbefehls in irgend welchen Handlern auch keine Fehlermeldung, es gibt eben keinerlei Rückmeldung.

Ich will nicht ausschließen, dass man diese Sperre umgehen kann, und dies wäre bei der Programmierung in unterschiedlichen Handlern, aber dann eben nicht nur im OnInit(), natürlich sehr lohnenswert, weil dann die Programmierarbeit teilweise sehr viel einfacher, weil überprüfbarer würde. Doch die Sperre besteht und sie sozusagen programmiertechnisch zu umgehen, dürfte schwierig - vielleicht aber nicht aussichtslos - sein. Oder sie ist sogar leicht zu bewerkstelligen, dann wäre ich wirklich dankbar für jeden praktischen Hinweis.

Jedoch nützt es zumindest zunächst noch nichts, wenn mir im "Nachschlagewerk MQL5/Allgemeine Funktionen" einfach nur die Seite "Print" kopiert wird.

Und dies schon deshalb nicht, weil im CExpert der Print-Befehl bereits definiert wurde und deshalb schon funktional besetzt ist. Deshalb müsste man diese bereits vorhandene Printfunktion herausfinden und dort oder wo auch immer die Sperre aufheben.

Oder man definiert die Printfunktion als Handler ganz neu, allerdings nun mit einem anderen Namen, z.B. Print1(), damit keine Kollision mit der schon vorhandenen Printfunktion entsteht. Hierzu könnte diese kopierte Print-Seite u.U. sogar nützlich sein. Erfahrungsgemäß müsste man diesen neuen Print-Handler dann in jede Include-Datei, die in CExpert gerade behandelt bzw. verändert werden soll, neu einsetzen, (ich habe Versuche dazu gemacht, aber bin bisher nicht wirklich weiter gekommen...) oder aber man muss die auf alle Include-Dateien übergeordnete Print-Funktion definieren, was aber schwierig sein dürfte.

Schafft man eine funktionierende Implementierung des Printbefehls, so kann man - wie vorgeschlagen - irgend einen Erkennungstext in eine Printfunktion setzen. Allerdings wird dieser Erkennungstext dann mittels Kompilieren oder Debugging in jedem Fall wiedergegeben, denn auch nicht funktionierende Teilfunktionen hindern CExpert keineswegs daran, dass alle Include-Dateien abgearbeitet werden, solange keine echten Programmierfehler erkannt werden. Das Nichtfunktionieren einer in einen Handler eingefügten Funktion führt also keineswegs zu einem Stopp der Kompilierung nach dem Motto, bis hierhin und nicht weiter.

Was man nach erfolgreicher Printfunktionsimplementierung dann allerdings könnte, und insofern könnte der Vorschlag einer neuen Printfunktion tatsächlich hilfreich sein, wäre der Versuch, in den Operatorbereich einer if-Funktion einen Printbefehl einzufügen, denn dann könnte man überprüfen, ob die in die if-Bedingung eingefügte Laufzeitbegrenzung überhaupt anschlägt. Konkret hieße dies z.B.:

if(TimeCurrent() - PositionGetInteger(POSITION_TIME_MSC)>=3*24* 3600*1000)
Print1("Laufzeitbegrenzung schlägt an!");
else
Print1("Laufzeitbegrenzung schlägt nicht an!");

Bislang reagierte der StratieTester nicht auf eine Laufzeitbegrenzung und erklären kann ich mir das nicht. Vielleicht würde die Implementierung eines solchen neuen Printbefehls hier aber weiterhelfen.


Es könnte aber auch sein, dass bestimmte Funktionen, wie die obige Laufzeitbegrenzung, im realen Handelsablauf sogar funktionieren, nur eben nicht im StrategieTester - aus welchen Gründen auch immer.

Man steht hier vor einem echten Dilemma, weil man dies im StrategieTester nicht sicher testen kann, d.h. dazu dann auch keine wirklich sicheren und damit keine zuverlässig in die Handelswirklichkeit übertragbaren Testergebnisse erhält.

Schon die Implementierung eines neuen Printbefehls, der alle oder wenigstens gezielt einige Handler im CExpert erfasst, wäre eine wirklich hilfreiche Sache!
Aber sie müsste konkret im CExpert stattfinden und nicht nur als theoretischer Vorschlag.
Über einen solchen Versuch mit möglichst kopierbarem Ergebnis würde ich mich freuen! Dann könnte man den nächsten Schritt einer Laufzeitbegrenzung vielleicht auch noch diskutieren.