Hilfe bei der Codierung - Seite 408

 
airquest:
Nun, trotzdem... Hier sind einige Tests:

- Standardeinstellungen (keine Optimierung, WriteCSV auf True) : Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h11-SA1.csv

- Optimize auf True, PeriodMin auf 20 und PeriodMax auf 20 gesetzt: Microsoft Excel - BB+CCI-EURUSD-H1-2014.12.18 00h13-SA1.csv

Die erste Datei liefert kohärente Werte (CSV-Datei und Bildschirmresultate stimmen überein). Das ist normal, denn beide stammen von denselben Variablen. Aber in der zweiten Datei sind die Opti-Ergebnisse im Vergleich zu den Bildschirm-Ergebnissen fast mit 10 multipliziert. Trotzdem sollten sie am Ende zu den gleichen Ergebnissen führen...

Wie auch immer, keine Eile, vielleicht finde ich mit der Zeit heraus, was los ist. Vielen Dank für deine Hilfe, Mladen.

Hallo Airquest,

Vielen Dank für eine sehr interessante Alternative zum Strategy Tester... ein sehr kreatives und talentiertes Stück Coding deinerseits...!

Ich habe ein wenig mit deinem Indikator gespielt...

Und es sieht so aus, als hätten Sie zwei verschiedene Variablen für die Summen...

Eine für den normalen Lauf = TotalTrades...

Und eine für den Optimierungslauf = totalTrades...

Allerdings zeigen Ihre Kommentare nur die TotalTrades des normalen Laufs...

Machen Sie weiter und fügen Sie Ihre optimierten...totalTrades...zu Ihren Kommentaren hinzu und sehen Sie, ob das das Rätsel löst...

Das beantwortet hoffentlich Ihre Frage, warum der Unterschied zwischen der Bildschirmdarstellung... und den Tabellenkalkulationssummen...

Hoffentlich hilft das,

Robert

 
cosmiclifeform:
Hallo Airquest,

Vielen Dank für eine sehr interessante Alternative zum Strategy Tester... ein sehr kreatives und talentiertes Stück Coding von Ihrer Seite...!

Ich habe ein wenig mit Ihrem Indikator gespielt...

Und es sieht so aus, als hätten Sie zwei verschiedene Variablen für die Summen...

Eine für den normalen Lauf = TotalTrades...

Und eine für den Optimierungslauf = totalTrades...

Allerdings zeigen Ihre Kommentare nur die TotalTrades des normalen Laufs...

Machen Sie weiter und fügen Sie Ihre optimierten...totalTrades...zu Ihren Kommentaren hinzu und sehen Sie, ob das das Rätsel löst...

Das beantwortet hoffentlich Ihre Frage, warum der Unterschied zwischen der Bildschirmdarstellung... und den Tabellenkalkulationssummen...

Hoffentlich hilft das,

Robert

Ich bin mir nicht sicher, ob die Ergebnisse am Ende korrekt sein werden. Das Problem ist, dass Sie durch die Anzeige der Gesamtzahl der von der Opti-Funktion stammenden Trades sehen können, ob die Funktion gut läuft oder nicht. Ich bin mir auch nicht sicher, wie man mehr als einen Parameter von der Doppelfunktion zurückgeben kann (man muss auch den Saldo und die Gewinnrate zurückgeben). Aber der Hauptgrund ist zu sehen, dass es einen Unterschied in den Ergebnissen gibt und dass etwas in der Funktion falsch sein sollte...

 

Hallo zusammen, ich habe gerade diesen benutzerdefinierten Indikator auf der Grundlage des RSI geschrieben.

Ich habe eine Idee, es in einem EA zu verwenden. Ich brauche Hilfe, um es zu schreiben...

Es ist eine reine Kaufstrategie.

Kauf bei jedem Aufwärtssignal... Schließen Sie alle auf Abwärtssignal

Idealerweise würde der EA die Lotgröße für jedes aufeinanderfolgende Aufwärtssignal ohne Close erhöhen. (natürlich mit einem Maximum)

Der Indikator funktioniert, indem er jedes Mal, wenn der RSI ein bestimmtes Niveau über-/unterschreitet, einen Pfeil auf dem Chart anzeigt.

arrow_rsi.mq4

Dateien:
arrow_rsi.mq4  3 kb
 
airquest:
Ich bin mir nicht sicher, ob die Ergebnisse am Ende korrekt sind. Das Problem ist, dass man durch die Anzeige der gesamten Trades, die von der opti-Funktion kommen, sehen kann, ob die Funktion gut läuft oder nicht. Ich bin mir auch nicht sicher, wie man mehr als einen Parameter von der Doppelfunktion zurückgeben kann (man muss auch den Saldo und die Gewinnrate zurückgeben). Aber der Hauptgrund ist zu sehen, dass es einen Unterschied in den Ergebnissen gibt und dass etwas in der Funktion falsch sein sollte...

airquest

Um so viele Parameter aus einer Funktion"zurückzugeben", wie Sie benötigen, übergeben Sie einen Parameter als Referenz an eine Funktion. Zum Beispiel so:

double a;

double b;

double c = testFunction(a,b);

double tectFunction(double& _a,double& _b)

{

_a = 1;

_b = 2;

return(_a+_b);

}

woraufhin a und b von der testFunction die Werte 1 und 2 zugewiesen werden (in diesem Beispiel werden implizit 3 Werte "zurückgegeben" - ich habe die Namen _a und _b in der Funktion nur verwendet, um zu zeigen, dass sie nicht denselben Namen haben müssen, wenn sie per Referenz übergeben werden, andernfalls wäre das gar nicht nötig)

 
airquest:
Ich bin mir nicht sicher, ob die Ergebnisse am Ende korrekt sein werden. Das Problem ist, dass man durch die Anzeige der gesamten Trades, die von der opti-Funktion kommen, sehen kann, ob die Funktion gut läuft oder nicht. Ich bin mir auch nicht sicher, wie man mehr als einen Parameter von der Doppelfunktion zurückgeben kann (man muss auch den Saldo und die Gewinnrate zurückgeben). Aber der Hauptgrund ist zu sehen, dass es einen Unterschied in den Ergebnissen gibt und dass etwas in der Funktion falsch sein sollte...

Hallo Airquest,

Soweit ich das sehe, scheint dein Indikator gut zu funktionieren.

Ich denke immer noch, dass es ein Problem mit der "Anzeige der Werte" ist...und kein Berechnungsproblem.

Hier ist, was ich sehe, was in dem Indikator passiert...

Das Programm hat 2 Optionen - 1) Normaler Lauf 2) Optimierungslauf

Es handelt sich dabei NICHT um eine ausschließliche Entweder/Oder-Auswahl...

Wenn Optimierung NICHT ausgewählt ist, führt das Programm nur den normalen Lauf durch...

Wenn Optimierung ausgewählt ist, führt das Programm trotzdem den normalen Durchlauf durch UND führt dann den Optimierungsdurchlauf durch, erhält also beide Werte.

Allerdings werden nur die Werte des normalen Laufs in den Bildschirmkommentaren angezeigt... und die Optimierungswerte werden überhaupt nicht angezeigt.

Im Anhang finden Sie meinen Test, der zeigt, dass die auf dem Bildschirm angezeigten Optimierungswerte mit den Tabellenwerten übereinstimmen...

Das zeigt mir, dass alle Ihre Berechnungen in Ordnung sind...

Außerdem sieht es so aus, als ob der letzte Datensatz in der Kalkulationstabelle verwendet wird, um die endgültigen Optimierungswerte zu erhalten...

Ich empfehle außerdem, das Programm ohne andere geladene Diagramme/Indikatoren laufen zu lassen... und jeweils nur ein paar ausgewählte Werte zu testen.

Ich habe mehr als 20 Charts laufen... und MT4 reagiert nicht mehr, während er die Berechnungen für diesen Indikator durchführt...

Besser ist es, ein sauberes MT4-Setup zu verwenden, um die Optimierungstests durchzuführen...

Aber die gute Nachricht ist, dass es mein System nicht blockiert, da ich andere Dinge tun kann, während es die Zahlen berechnet und den Bericht erstellt.

In der Zwischenzeit... soweit ich das auf den Screenshots unten erkennen kann... scheint Ihr Indikator gut zu funktionieren...

BTW... es ist ein erstaunliches Stück Kodierung... Vielen Dank, dass Sie es mit uns teilen...!

Hoffentlich hilft das,

Robert

 
cosmiclifeform:
Hallo Airquest, Soweit ich das sehe, scheint Ihr Indikator gut zu funktionieren.

Gern geschehen, vielen Dank für Ihre Worte. Die Idee ist in der Tat zu ersetzen, die mt4 Strategie Tester Optimierung (die ich denke, saugt und ist zu langsam) für Backtesting einfache Strategien. Und ja, man muss ein wenig warten, bis es geladen und die Berechnung durchgeführt wird, aber von dem, was ich gesehen habe, ist es bereits schneller und bequemer als eine normale Optimierung.

Aber ich glaube immer noch, dass es ein Problem mit dem Indikator gibt und dass er nicht richtig funktioniert. Das Ersetzen des Bildschirmtextes durch die Ergebnisse der Optimierung zeigt überhaupt nicht, ob diese Ergebnisse richtig oder falsch sind. Das ist so, als würde man ein verrostetes Auto lackieren.

Ich denke, die Opti-Funktion liefert falsche Ergebnisse. Sie können in Ihrem Screenshot sehen, dass die Ergebnisse in der CSV 5'307 Trades ergeben. Das ist weit daneben. Es hängt davon ab, wie viele Balken Sie in Ihrem Bildschirm haben, aber es ist nicht möglich, dass die Strategie 5'307 Trades zu nehmen gab. Um sicher zu sein, brauchen Sie die Pfeile nicht zu zählen, sondern können die Anzahl der zu testenden Balken reduzieren, wie ich es in diesem Screenshot getan habe (ich habe 100 Balken eingestellt):

Sie können hier sehen, dass für 100 Bars nur 10 Trades gemacht werden, mit 4 Gewinnern (wenn man die Pfeile zählt), während die opti Ergebnisse 89 Trades zeigen. Basierend auf einem visuellen Backtest sind die Bildschirm-Ergebnisse also richtig (für den besten Zeitraum, den das Opti angibt), während die CSV falsch ist. Das zeigt, dass wir den CSV-Ergebnissen nicht trauen sollten, weder beim Zählen der Trades noch bei der Bestimmung der besten Einstellungen.

Also habe ich das Problem auf eine einfachere Weise gelöst. Ich habe einen einfachen Indikator erstellt (im Anhang), der auf dem Bildschirm die Ergebnisse aus der Funktion Optimierung double und der Funktion Start int (Hauptberechnung) anzeigt. Sie müssen also keine CSV-Datei schreiben, um zu sehen, dass die beiden Ergebnisse unterschiedlich sind.

Ausgehend von diesem Indikator lautet meine (einfache) Frage: WARUM ERDEN ZWEI EXAKTE GLEICHE BERECHNUNGEN (die eine in der Start-Funktion und die andere in der Optimierungs-Doppelfunktion) UNTERSCHIEDLICHE ERGEBNISSE ERGEBEN? Wenn mir jemand helfen kann, dies zu verstehen, wäre das großartig, denn ich verstehe es wirklich nicht. Soweit ich sehe, sind die beiden Funktionen genau gleich und sollten zu den gleichen Ergebnissen führen. Vielen Dank schon mal.

PS: Der Indikator ist immer noch ein bisschen langsam und man muss wahrscheinlich ein paar Sekunden warten, bis er die Ergebnisse anzeigt. Es ertönt jedoch ein Ton, wenn die Ergebnisse angezeigt werden.

Dateien:
sa1.png  78 kb
sa3.png  41 kb
 

Hallo Airquest,

ich habe Ihren "Beispieltest" ausprobiert, konnte ihn aber nicht zum Laufen bringen. Ich habe mir den Code angesehen und über 400 Zeilen gelöscht...also habe ich es gelassen.

Ich habe Ihren ursprünglichen Code erneut getestet... und ich glaube, ich beginne zu verstehen, was Sie über das Problem mit "zu vielen Trades" sagen...

Um das Testen einfach und schnell zu halten, habe ich nur mit Bändern getestet und die Einstellungen minimiert (Bänder 10 und Bänder 20), um nur zwei (2) Durchläufe zu haben und die Ergebnisse schneller zu sehen.

Ich habe mich auch auf "BarsToCount" konzentriert, da dies in direktem Zusammenhang mit der Anzahl der Trades stehen sollte...

Ich habe zwar keine Antworten gefunden... aber vielleicht habe ich noch ein paar Hinweise für Sie...

"BarsToCount"...scheint nicht zu funktionieren...

Ich habe Ihren Code mit 1 Bar...2 Bars...und 100 Bars zurück ausgeführt...

Und alle hatten genau die gleichen Ergebnisse...was nicht sein sollte...da mehr Bars gleich mehr Trades sein sollten...und weniger Bars gleich weniger Trades sein sollten.

Ich habe meine Screenshots von den 3 Durchläufen angehängt, die ich gemacht habe...wobei ich nur den "BarsToCount" geändert habe...

Vielleicht hilft Ihnen dieser Hinweis, die anderen Probleme aufzuspüren... Viel Glück bei der Suche nach Ihren Antworten.

Hoffentlich hilft das,

Robert

 

Endlich habe ich es geschafft, eine funktionierende Version zu erstellen. Jetzt sind die Opti-Ergebnisse korrekt und entsprechen den Bildschirm-Ergebnissen. Ich habe einfach die Doppelfunktion weggelassen und alles in die Startfunktion integriert. Jetzt hat man nur noch die Wahl, ob man das Programm im Tester-Modus (also mit den Standardeinstellungen) oder im Optimierer-Modus (der nichts ausgibt, sondern nur eine CSV-Datei schreibt) laufen lässt. Nachdem Sie eine Optimierung durchgeführt haben, können Sie zurück in den Testermodus wechseln und überprüfen, ob die Ergebnisse korrekt sind.

Bitte lassen Sie mich wissen, wenn Sie ein Problem finden, am besten per PM, da wir diesen Thread nicht zerstören wollen. Leute, vielen Dank für eure Hilfe. Dieses Forum ist großartig, die Leute motivieren und helfen sich gegenseitig (meistens) und das ist der Grund, warum ich es hier veröffentliche. Jetzt lasst uns mit dem Backtesting beginnen

 
cosmiclifeform:
Hallo Airquest,

Robert, danke für deine Hilfe. Siehe die Version, die ich oben gepostet habe, es sollte jetzt funktionieren.

PS : Um die Anzahl der Balken zu begrenzen, müssen Sie UseAllBars auf False stellen. Sie haben es wahrscheinlich nicht gesehen.

Grüße.

 

Hallo Airquest,

gute Arbeit, es aufzuspüren und zum Laufen zu bringen...!

Ich werde mich darauf freuen, diese Woche damit zu spielen...

Danke und pass auf dich auf,

Robert

Grund der Beschwerde: