[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 366
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
es gibt keine Zecken.
Vielleicht ist diese Wirkung auf das Fehlen einer Normalisierung innerhalb der EA zurückzuführen.
Wenn jedoch die Registerkarte Eingabeparameter erscheint, findet die Optimierung selbst nicht statt.
Der Tester tut etwas, an der Unterseite können Sie die aktuelle Anzahl der Überschreitungen (7/62) zu sehen, aber bei der Fertigstellung in den Registerkarten Optimierung Ergebnisse, und die Optimierung Graph ist Empty!
Das Häkchen bei dem Parameter ist natürlich ....
Ich weiß nicht einmal, in welche Richtung ich schauen soll...
Das Prüfgerät liefert keine wiederholbaren Ergebnisse bei unveränderten Daten, da sich die Streuung bei der Prüfung unbewusst ändert.
Heilung:https://www.mql5.com/ru/forum/119830
Leere Werte können darauf hinweisen, dass das Ergebnis der Optimierung bestimmter Parameter unrentabel ist, d. h. ein Verlust. Versuchen Sie, einen der Parameter mit Visualisierung auszuführen, und Sie werden möglicherweise dieses Ergebnis sehen.
Was die Normalisierung anbelangt, so glaube ich nicht, dass es eine solche Auswirkung geben wird, denn da die Werte gleich sind, werden auch die mathematischen Zahlen genau gleich sein - also keine Veränderung.
Manchmal ist es besser, nicht darüber nachzudenken und die Frage aufzuschieben - die Idee und die Gedanken kommen später. Sie müssen Ihrem Gehirn Raum geben, um zu manövrieren, sich auszuruhen und zu denken, ohne es zu überfordern.
1. der Berater rentabel ist.
2. ich habe es bereits von Hand überprüft - es ist über den gesamten Bereich des Parameters profitabel. Ich wollte nur den Bereich etwas erweitern und den Schritt kleiner machen.
Das Prüfgerät liefert keine wiederholbaren Ergebnisse bei unveränderten Daten, da sich die Streuung während der Prüfung unbewusst ändert.
Das Heilmittel:https://www.mql5.com/ru/forum/119830
Der Spread ist fließend, nicht wahr?
eine andere Sache ist, dass sie in der Geschichte verankert werden muss...
Im Allgemeinen schwankt das Ergebnis geringfügig und die Anzahl der Abschlüsse ändert sich nicht... daher beunruhigt mich dieses Problem nicht allzu sehr...
Die andere Sache ist, dass der Optimierer überhaupt nicht funktioniert! Das ist ärgerlich...
Das sagt der Prüfer im Protokoll..:
2013.05.29 12:20:10 Während der Optimierung wurden 8 Durchgänge durchgeführt, 8 Ergebnisse wurden als unbedeutend verworfen
Das Prüfgerät liefert keine wiederholbaren Ergebnisse bei unveränderten Daten, da sich die Streuung während der Prüfung unbewusst ändert.
Das Heilmittel:https://www.mql5.com/ru/forum/119830
Es ist möglich, aber meine Streuungsgröße ist in Info eingestellt - und wenn Sie sie ändern, wird sie angezeigt. Auf dem Testgerät habe ich das Aufschwimmen nicht bemerkt. Es übernimmt die Standardparameterdaten aus MarketInfo des Kontokorrents und ändert sie nicht mehr.
Diese Kur verändert die Streuung p-r, so dass Sie unterschiedliche Optimierungsergebnisse mit verschiedenen Streuungen sehen können. Soweit ich weiß, ist dies der einzige Zweck, für den die Software unter dem Link benötigt wird.
2013.05.29 12:20:10 Während der Optimierung wurden 8 Durchgänge durchgeführt, 8 Ergebnisse wurden als unbedeutend verworfen
Nun, das ist richtig - diese Ergebnisse wurden als unbedeutend markiert. - Deshalb taucht sie weder in den Ergebnissen noch in der Grafik auf.
Ich glaube, ich habe hier ein tieferes Problem.
Meine erste Frage gestern war, wie man die Parameter innerhalb einer Benutzerfunktion optimieren kann.
Mir wurde gesagt: Verschiebe sie nach extern double
Ich habe es getan.
und jetzt wirft der Optimierer das Ergebnis aus... ich muss sie falsch eingegeben haben.
Hier ist der Code, ein üblicher Modifikator von Stop and Take
Anstelle von STOP und TAKE gab es früher die Zahlen 100 und 200
Ich habe die Zahlen in STOP und TAKE geändert.
und am Anfang des Codes habe ich hinzugefügt
extern double STOP = 100;
extern double TAKE = 200;
Liegt hier irgendwo ein Fehler vor?
(der Modifikator selbst funktioniert zu 100%)
Ich schaue mir gerade den Code an, aber ich werde ein paar Kommentare dazu abgeben.
Diese Zeile macht überhaupt keinen Sinn:
point=MarketInfo(Symbol(),MODE_POINT); /* поскольку это ровным счетом то же самое, что штатный параметр */ PointSie wird nur benötigt, wenn Sie eine Mehrwährungsstrategie haben, aber dann müssen Sie anstelle einer Mehrwährungsstrategie die
Symbol()Sie werden andere vordefinierte Werte verwenden müssen, aber nicht diese normale Funktion.
Diese Variable ist ebenfalls unnötig.
total=OrdersTotal();Denn innerhalb Ihrer Funktion wird sie nur einmal angewendet, in der Aufzählung, die aus irgendeinem Grund auskommentiert ist, und sie verunreinigt den Code nur. - Daher die Frage: Warum haben Sie die Aufzählung nach Reihenfolge auskommentiert?
Dies:
im Allgemeinen besser in Gruppen zusammengefasst werden - die Bedingung ist die gleiche. Übrigens, Sie haben sie von der Struktur her anders geschrieben. - ist die Frage des Strukturverlustes. Der Schreibstil muss einheitlich sein - dann kann man die Struktur erkennen und eventuelle Fehler treten wie Unebenheiten nach dem Schneefall hervor.
In Ihren Ausführungen habe ich keine wesentlichen Punkte gefunden, die das Ergebnis beeinflussen könnten. Aber... Sie haben hier nur eine Funktion vorgestellt (ziemlich schlampig geschrieben, es sei denn, Sie zählen die kommentierte Aufzählung - dies spiegelt sich in der Frage wider). Um das Urteil zu fällen - man braucht nicht die Funktion, man braucht den Programmcode, weil man nicht weiß, wo die Ursache liegt, und man muss sie suchen. Dazu müssen Sie das Programm im Testprogramm ausführen und mit eigenen Augen sehen, welche Fehler auftreten können. Gehen Sie dann bereits den Code durch (oder in umgekehrter Reihenfolge) und suchen Sie nach der Ursache.
Generell kann ich sagen, dass du, Oleg, ziemlich viele Schlampereien hast (Gleichgültigkeit, würde ich sagen). Dies kann dazu führen, dass 1. Zur Verschmutzung des Systems im Einsatz. 2. Verlust von Strukturen durch diese Vermüllung und Schwierigkeiten bei der Identifizierung und Entdeckung des Käfers. Mein Rat ist also folgender. - Wenn möglich, werfen Sie den ganzen "Müll" (Überflüssiges) aus dem Code - der Fehler ist dann leichter zu finden. - Dies ist ein klassischer Fehler der meisten Menschen, die um Hilfe bitten - Nachlässigkeit.
Wahrscheinlich geht es tiefer als das.
Meine erste Frage gestern war, wie man die Parameter innerhalb einer benutzerdefinierten Funktion optimiert.
Mir wurde gesagt, ich solle sie in externes Double packen.
Ich habe es getan.
Und jetzt wirft der Optimierer das Ergebnis aus... offenbar habe ich sie irgendwie falsch herausgenommen.
Nein, ich glaube, Sie irren sich. Der Prüfer verwirft das Ergebnis nicht wegen der von uns angegebenen Parameter, sondern weil die Ergebnisse das Signifikanzkriterium nicht erfüllen.
Aber es ist möglich, dass das Programm selbst einen Fehler enthält. Außerdem sind instabile Ergebnisse ein indirekter Hinweis darauf. - Das bedeutet, dass etwas nicht in Ordnung ist. In meiner Praxis erlaube ich solchen Programmen nicht, in die reale Welt zu gelangen. Denn wenn etwas nicht in Ordnung ist, bedeutet das, dass die Situation unkontrollierbar ist. Und alles kann herauskommen.
Die Stop-Loss- und Take-Profit-Parameter befinden sich per Definition in externen Variablen in jedem Programm, und das nicht nur, weil sie optimiert werden müssen. Es ist ja nicht so, dass Sie jedes Mal, wenn Sie sie ändern wollen, in Ihren Code gehen müssen. Es spielt also keine Rolle, ob es sich um externe oder interne Variablen handelt. - Das steht fest.
Ich schaue mir gerade den Code an, aber ich werde ein paar Kommentare dazu abgeben.
Diese Zeile macht überhaupt keinen Sinn:
Sie brauchen es nur, wenn Sie eine Mehrwährungsstrategie verfolgen, aber dann müssen Sie statt
Sie werden andere vordefinierte Werte ersetzen müssen, aber nicht diese Grundfunktion.
Diese Variable ist ebenfalls unnötig.
Sie wird nur einmal innerhalb der Funktion in der Aufzählung verwendet, die aus irgendeinem Grund auskommentiert ist und den Code nur unübersichtlich macht. - Daher die Frage: Warum haben Sie die Aufzählung nach Aufträgen auskommentiert?
Hier ist sie.
Im Allgemeinen wäre es besser, sie zusammenzufassen - die Bedingung ist die gleiche.
Nun, ich habe in Ihren Ausführungen keine grundsätzlichen Punkte gefunden, die das Ergebnis beeinflussen könnten. Aber!... Sie haben hier nur eine Funktion vorgestellt (ziemlich schlampig geschrieben, es sei denn, Sie zählen die auskommentierte Aufzählung - dies spiegelt sich in der Frage wider). Um das Urteil zu fällen - man braucht nicht die Funktion, man braucht den Programmcode, weil man nicht weiß, wo die Ursache liegt, und man muss sie suchen. Dazu müssen Sie das Programm im Testprogramm ausführen und mit eigenen Augen sehen, welche Fehler auftreten können. Gehen Sie dann bereits den Code durch (oder in umgekehrter Reihenfolge) und suchen Sie nach dieser Ursache.
Generell kann ich sagen, dass du, Oleg, ziemlich nachlässig bist (Gleichgültigkeit, würde ich sagen). Dies kann dazu führen, dass 1. Zur Verschmutzung des Systems im Einsatz. 2. Verlust von Strukturen durch die Vermüllung und Schwierigkeiten bei der Identifizierung und Entdeckung des Käfers. Mein Rat ist also folgender. - Wenn möglich, werfen Sie den ganzen "Müll" (Überflüssiges) aus dem Code - der Fehler ist dann leichter zu finden. - Dies ist ein klassischer Fehler der meisten Menschen, die um Hilfe bitten - Nachlässigkeit.
Ich habe diesen Modifikator nicht geschrieben.
Ich habe es in den Bibliotheken vorbereitet.
Die Hauptsache ist, dass es zu 100 % funktioniert.
Aber warum ist der Parameter darin nicht optimiert - das ist die Frage.....
Es gibt keine grundlegenden Fehler!
Der Rest des Codes funktioniert.
Legen Sie beliebige Bedingungen für den Algorithmus fest.
- kaufen
-Änderung
- schließen
---------------------------
und versuchen, den Parameter in meinem Auftrag MODIFICATOR zu optimieren - d.h. Stop und Take
Nein, ich glaube, Sie liegen falsch. Der Tester wird nicht wegen der von Ihnen eingegebenen Parameter verworfen, sondern weil die Ergebnisse die Signifikanzkriterien nicht erfüllen.
Es ist jedoch möglich, dass die Software selbst einen Fehler enthält. Außerdem sind instabile Ergebnisse ein indirekter Hinweis darauf. - Das bedeutet, dass etwas nicht in Ordnung ist. In meiner Praxis erlaube ich solchen Programmen nicht, in die reale Welt zu gelangen. Denn wenn etwas nicht in Ordnung ist, bedeutet das, dass die Situation unkontrollierbar ist. Und alles kann herauskommen.
Die Stop-Loss- und Take-Profit-Parameter befinden sich per Definition in externen Variablen in jedem Programm, und das nicht nur, weil sie optimiert werden müssen. Es ist ja nicht so, dass Sie jedes Mal in den Code gehen müssen, wenn Sie sie ändern wollen. Es spielt also keine Rolle, ob es sich um externe oder interne Variablen handelt. - Das steht fest.
Nun, sehen Sie,
Wenn ich jetzt alles zurücknehme, d.h. die externen Parameter STOP und TAKE entferne und stattdessen Zahlen in die Funktion schreibe, dann läuft der EA seit 10 Wochen Woche für Woche und zeigt klare Ergebnisse.
Und wenn ich die Parameter von Stop und Take manuell ändere, wird alles funktionieren und leicht unterschiedliche Ergebnisse liefern (das ist normal)
Aber warum werden diese Parameter, wenn ich sie außerhalb des Modifikators verschiebe, vom Optimierer als unbedeutend angesehen?