Diskussion zum Artikel "Random Decision Forest und Reinforcement-Learning" - Seite 3

 
FxTrader562:

Ich danke Ihnen für diesen sehr nützlichen Artikel.

Ich habe versucht, zusätzliche Indikatoren in den Code zu implementieren, aber ich bin kein erfahrener Programmierer und habe keine gute Erfahrung mit der Verwendung von Zugehörigkeitsfunktionen. Daher konnte ich nicht herausfinden, wie ich weitere Indikatoren hinzufügen kann, die zusammen mit den Regeln innerhalb der OnInit()-Funktion verwendet werden. Der Code enthält nur den RSI-Indikator und erstellt die BUY- und SELL-Regeln aus diesem Indikator. Können Sie bitte einige weitere Beispielcodes von Indikatoren wie gleitender Durchschnitt oder MACD oder Stochastik oder SAR zur Verfügung stellen, die im Code verwendet werden können?

Insbesondere möchte ich wissen, wie man Regeln erstellt und zu den Einstiegsbedingungen hinzufügt, während man sie mit dem aktuellen Preis vergleicht. Das Hauptproblem mit dem aktuellen Code ist, dass es manchmal verliert Trades für lange Zeit hält, während profitable Trades schnell zu schließen und so jede Beratung zu diesem wird geschätzt werden. Ich denke, dass die Ausstiegslogik stärker gefiltert werden muss.

Außerdem habe ich eine Frage, wenn Sie bitte beantworten können:

Wird die OPT-Datei kontinuierlich aktualisiert, um die Ein- und Ausstiege im Laufe der Zeit zu verbessern, indem die Richtlinie selbst fein abgestimmt wird?

Oder verwendet der EA nur den Strategietester, um die EA-Werte zu optimieren und verwendet die gleichen Einstiegs- und Ausstiegswerte, die vor kurzem profitabel waren, wie reguläre optimierte EA?

Ich meine, wie bei anderen EAs mit neuronalem Netzwerk, wird die Gesamtstrategie für den Handelseinstieg und -ausstieg im Laufe des Handels feinabgestimmt?

Hallo. Bitte warten Sie auf den nächsten Artikel. Dort werde ich die Arbeit mit anderen Indikatoren sowie mit einer Vielzahl von Agenten untersuchen. Und zwar ohne Fuzzy-Logik.

 
Maxim Dmitrievsky:

Hallo. Bitte warten Sie auf den nächsten Artikel. Dort werde ich die Arbeit von anderen Indikatoren sowie mit einer Vielzahl von Mitteln untersuchen. Und zwar ohne Fuzzy-Logik.

Danke für Ihre schnelle Antwort...ich werde warten...

Wenn es Ihnen nichts ausmacht, können Sie bitte erwähnen, wann Sie planen, den nächsten Artikel mit dem Code für die Indikatorimplementierung zu veröffentlichen...

 
FxTrader562:

Danke für Ihre schnelle Antwort...ich werde warten...

Wenn es Ihnen nichts ausmacht, können Sie bitte erwähnen, wann Sie planen, den nächsten Artikel mit dem Indikator-Implementierungscode zu veröffentlichen...

Ich denke, 1-2 Wochen auf Russisch, und dann werden sie es übersetzen

 

Aber auch wenn der Artikel auf Russisch sein wird, wird er zum Download und zur Verwendung im regulären MT5 verfügbar sein, richtig?

Übrigens, ich habe ein paar Vorschläge zur Verbesserung der Logik der Reward-Funktion. Da ich mir bei der Codierung noch nicht 100%ig sicher bin, werde ich jetzt nicht am Code herumpfuschen, aber wenn Sie meine Vorschläge nützlich finden, sollten Sie sie in der nächsten Version umsetzen.

Ich möchte, dass die Belohnungsfunktion den Agenten basierend auf der Summierung der Belohnungen von 2 Faktoren belohnt:

1.Nettogewinn( Orderprofit()+OrderCommission()+OrderSwap()): NetProfit(NP) für eine bestimmte Order close Reward(RW1) wird durch einen Reward Factor(RF1) behandelt, dessen Wert größer als 1 ist, so dass je größer der Handelsgewinn, desto größer die Belohnung und je größer der Verlust, desto größer die negative Belohnung.

RW1=NP*MathPow(RF1,2); Der Wert von RF1 kann zum Beispiel 1.1 oder 1.2 oder mehr sein.

Ich meine, dass RW1 für einen bestimmten Auftragsabschluss die Multiplikation des Nettogewinns (positiver oder negativer Gewinn) mit dem Quadrat des Reward-Faktors (RF1) sein sollte.

2. die Anzahl der aufeinanderfolgenden Gewinne oder Verluste (NCount): Ein weiterer Reward (RW2) sollte auf der Grundlage von aufeinanderfolgenden Gewinnen oder Verlusten durch den Reward-Faktor (RF2) und die Anzahl der aufeinanderfolgenden Verluste oder Gewinne (NCount) vergeben werden.

Bevor der EA einen Reward vergibt, sollte er den letzten Order-Gewinn oder -Verlust für dieses bestimmte Symbol prüfen. Wenn es sich um einen Nettoverlust handelt, der die OrderCommission und OrderSwap berücksichtigt, wird ein negativerer Reward vergeben, und wenn die Order mit Gewinn geschlossen wird, wird ein positiverer Reward vergeben.

RW2=MathPow(NCount,RF2); RF2 Wert kann 1.1 oder 1.2 oder mehr sein

Zum Beispiel, wenn der aktuelle geschlossene Auftrag positiv und der vorherige Auftrag negativ ist, dann ist NCount=1-1=0 und RW2 wird Null sein. Oder wenn der aktuelle geschlossene Auftrag positiv und der vorherige Auftrag positiv ist, dann ist NCount=1+1=2 und somit RW2=(2)^(1.2) unter Berücksichtigung des Wertes von RF2=1.2

Die Nettobelohnung (RW) für einen bestimmten Auftragsabschluss sollte nun RW=RW1+RW2 sein.

Wenn Sie den Code in der nächsten Version des EA implementieren können, dann wäre das großartig, oder wenn Sie mir einfach sagen können, wo ich diesen Code einfügen soll, dann werde ich versuchen, es selbst zu tun.

Der beste Teil, den ich denke, wird sein, wenn wir RF1 und RF2 als globale Variable für die Optimierung durch den EA deklarieren können, so dass er die beste Kombination von RF1 und RF2 herausfinden wird, während er den EA vorwärts testet

 

Hallo Maxim Dmitrievsky,

Entschuldigen Sie, dass ich so viele Fragen stelle... denn ich fand diesen Artikel sehr nützlich beim Studium und der Implementierung von maschinellem Lernen in mql5.... Natürlich warte ich auf Ihren nächsten Artikel...

Meine Frage ist, wie man den Agenten trainiert, eine Strategie zu entwickeln, um den Gewinn zu maximieren, NICHT die Anzahl der profitablen Trades?

Ich habe den updateReward()- und updatePolicy()-Code studiert, und es scheint mir, dass nur die Anzahl der profitablen Geschäfte optimiert wird, ohne den Gewinn jedes Geschäfts zu berücksichtigen und ohne zu berücksichtigen, ob der Kontostand wächst oder nicht.

Können Sie mir also bitte erklären, wie man die Gewinnbeträge in die Belohnungsfunktion integrieren kann, und gibt es eine Möglichkeit, das zu tun?

Ich habe versucht, meinen eigenen, oben vorgeschlagenen Code zu implementieren, aber wahrscheinlich funktioniert er nicht (obwohl es keinen Codierungsfehler gab) oder ich weiß nicht, wie man ihn implementiert. Oder wahrscheinlich habe ich nicht ganz verstanden, was genau die Funktionen updateReward() und updatePolicy() tun. Ich wäre Ihnen sehr dankbar für Ihren wertvollen Beitrag, wenn Sie mir ein wenig mehr über den Code in den beiden Funktionen erklären könnten und wie und was genau die RDFPolicyMatrix speichert und wie die Werte bei den nächsten Handelseinträgen verwendet werden.

Vielen Dank im Voraus.

 

Ich kann die besten Ergebnisse des EA sofort nach der Optimierung sehen und während der Agent sich selbst trainiert, werden die Ergebnisse von Tag zu Tag schlechter. Also fragte ich mich, ob es möglich ist, den Optimierer aus dem Code nach jedem Verlust zu starten. Ich meine, anstatt die Belohnung für jeden Verlust zu aktualisieren, sollte sich der EA für die Daten der letzten paar Tage bis heute optimieren.

Wenn entweder der Autor oder jemand anderes weiß, wie dies zu implementieren, dann bitte teilen Sie es.

 
Maxim Dmitrievsky:
Es geht nicht um Bäume, sondern darum, mehrere Wälder auf denselben Daten zu trainieren, ja, das tut es. Denn der Konstruktionsprozess ist zufällig und die Ergebnisse können variieren. Ich war überrascht, dass ein Ensemble von Wäldern eine spürbare Verbesserung bringt, d. h. mehrere Wälder auf denselben Daten trainieren und die Ergebnisse mitteln. (5-15 Stück) Sie können auch andere Einstellungen vornehmen. Noch bessere Ergebnisse sollte es bei Bousting geben, aber dazu bin ich noch nicht gekommen.

Danke für den Artikel, er ist informativ und man kann etwas mitnehmen (zumindest für mich).

So wie ich das verstehe, wurde die Fuzzy-Logik als Beispiel für den Artikel genommen. Es gibt keine Verbote, den Wert von ts direkt zu erhalten (ich habe es implementiert, ich habe keine besonderen Unterschiede in der Effizienz festgestellt - Wald ersetzt die Fuzzy-Logik vollständig). Es kann als eine weitere Möglichkeit betrachtet werden, das Objekt zu belohnen. Wie mir scheint (ich kann es mit dem Programm nicht bestätigen), bringt eine Erhöhung der Anzahl der optimierten Mitgliedsfunktionen keinen Gewinn, denn schon jetzt verstopft der Wald die Fuzzy-Logik. Ich habe versucht, den Durchschnitt der Ergebnisse der Wälder (einschließlich Fuzzy wie in dem Artikel), das Ergebnis verbessert, nach neuronalen Netzen von AlgLIB Ich war überrascht von der Geschwindigkeit des Lernens auf Werte für mehrere Jahre. Um offensichtliche Unterschiede zu setzen, verwendete ich die zweite Form der Waldbildung mit expliziter Angabe der Verwendung einer unterschiedlichen Anzahl von Indikatoren (gut, mit der Zusammensetzung der Indikatoren zu spielen ist nicht einmal diskutiert):

CDForest::DFBuildRandomDecisionForestX1(RDFpolisyMatrix,numberOfsamples,iNeuronEntra,iNeuronSal,number_of_trees,7,regularization,RDFinfo,RDF[0],RDF_report);
CDForest::DFBuildRandomDecisionForestX1(RDFpolisyMatrix,numberOfsamples,iNeuronEntra,iNeuronSal,number_of_trees,5,regularization,RDFinfo,RDF[0],RDF_report);

Können Sie mir sagen, welche anderen Formen der Belohnung ausprobiert werden können? Ich bin daran interessiert, ein Ensemble von Wäldern mit verschiedenen Formen der Belohnung zu erstellen, übrigens, heißt das Ensemble Mittelwertbildung? Oder eine spezielle Formel für die Kombination des Ergebnisses? Ich glaube nicht, dass AlgLIB Ensembles von Wäldern hat?

Vielleicht ist es für jemanden nützlich, denn es ist unpraktisch, Daten in einem Haufen von Dateien zu speichern, wenn es mehrere Wälder gibt, also habe ich beschlossen, es so zu machen:

StructToHiden strHider;
   strHider.iNeuronEntra=iNeuronEntra;
   strHider.iNeuronSal=iNeuronSal;
   strHider.iTrees=number_of_trees;
   DataTekOpt=TimeLocal();
   strHider.DataTekOpt=DataTekOpt;
   
   int filehnd=FileOpen(NameFile+"_fuzzy.txt",FILE_WRITE|FILE_BIN|FILE_COMMON);
      strHider.iBufsize=RDFfuzzy.m_bufsize;
      FileWriteStruct(filehnd, strHider);//Kopf der Aufzeichnungsdatei
      FileWriteArray(filehnd,RDFfuzzy.m_trees); //Baumsatz
      FileClose(filehnd);


int filehnd=FileOpen(NameFile+"_fuzzy.txt",FILE_READ|FILE_BIN|FILE_COMMON);
      FileReadStruct(filehnd,strHider);//den Dateikopf lesen
      RDFfuzzy.m_nvars=strHider.iNeuronEntra;
      RDFfuzzy.m_nclasses=strHider.iNeuronSal;
      RDFfuzzy.m_ntrees=strHider.iTrees;
      RDFfuzzy.m_bufsize=strHider.iBufsize;
      DataTekOpt=strHider.DataTekOpt;
      FileReadArray(filehnd,RDFfuzzy.m_trees);//den Baum lesen
      FileClose(filehnd);
Die Struktur wird durch eine beliebige Struktur beschrieben, da ihre Länge fest ist, stellt sich heraus, dass man sowohl sie als auch den Wald in einer Datei speichern kann (die Struktur steht notwendigerweise am Anfang). Ein Wald - eine Datei.

Nochmals vielen Dank für den Artikel, dank ihm habe ich angefangen, mich ernsthaft mit AlgLIB zu beschäftigen.
 
mov:

Danke für den Artikel, informativ und in der Anwendung gibt es eine Menge zu verkraften (zumindest für mich).

So wie ich das verstehe, wurde die Fuzzy-Logik als Beispiel für den Artikel genommen. Es gibt keine Verbote, ts-Wert direkt zu erhalten (ich habe es implementiert, ich habe keine besonderen Unterschiede in der Effizienz bemerkt - Wald ersetzt vollständig Fuzzy-Logik). Es kann als eine weitere Möglichkeit der Belohnung des Objekts betrachtet werden. Wie mir scheint (ich kann es mit dem Programm nicht bestätigen), bringt eine Erhöhung der Anzahl der optimierten Zugehörigkeitsfunktionen keinen Gewinn, denn schon jetzt verstopft der Wald die Fuzzy-Logik. Ich habe versucht, den Durchschnitt der Ergebnisse der Wälder (einschließlich Fuzzy wie in dem Artikel), das Ergebnis verbessert, nach neuronalen Netzen von AlgLIB Ich war überrascht von der Geschwindigkeit des Lernens auf Werte für mehrere Jahre. Um offensichtliche Unterschiede zu setzen, habe ich die zweite Form des Waldes Schaffung mit expliziten Hinweis auf die Verwendung der unterschiedlichen Anzahl von Indikatoren (gut, mit der Zusammensetzung der Indikatoren zu spielen ist nicht einmal diskutiert):

Können Sie mir sagen, welche anderen Formen der Belohnung ausprobiert werden können? Ich bin daran interessiert, ein Ensemble von Wäldern mit verschiedenen Formen der Belohnung zu erstellen, übrigens, heißt das Ensemble Mittelwertbildung? Oder eine spezielle Formel für die Kombination des Ergebnisses? Ich glaube nicht, dass AlgLIB Ensembles von Wäldern hat?

Vielleicht ist es für jemanden nützlich, es ist unpraktisch, Daten in einem Haufen von Dateien zu speichern, wenn es mehrere Gerüste gibt, also habe ich beschlossen, es so zu machen:

Die Struktur wird durch eine beliebige Struktur beschrieben, da ihre Länge festgelegt ist, stellt sich heraus, dass sowohl sie als auch der Wald in der Datei gespeichert werden können (die Struktur steht notwendigerweise am Anfang). Ein Wald - eine Datei.

Nochmals vielen Dank für den Artikel, dank ihm habe ich angefangen, mich ernsthaft mit der AlgLIB zu beschäftigen.

Ja, Fuzzy-Logik als Beispiel. Ich habe es selbst schon aufgegeben, weil sich nach verschiedenen Experimenten herausstellte, dass es in dieser Form nicht viel Sinn macht, sie zu verwenden.

Man kann versuchen, in Form der aktuellen Sharpe Ratio oder des R^2 auf Geschäfte zu belohnen. Oder man kann gar nicht die Ergebnisse von Geschäften bewerten, sondern zum Beispiel die Marktbedingungen - wenn man gekauft hat und der Trend seit einiger Zeit steigt, ist das Signal geeignet. So etwas in der Art.

Mit Ensemble meinte ich die einfache Mittelwertbildung der Ergebnisse, ja. Aber für jeden Wald können Sie Ihre eigenen Prädiktoren und / oder Ziele festlegen.

Ich habe vor, einen zusätzlichen Artikel nur mit dem Ensemble von Agenten + einigen weiteren Pluspunkten in Form einer Klasse zu schreiben. Ich werde ihn wahrscheinlich bald fertigstellen.

Ein weiterer wichtiger Punkt, der in diesem Artikel noch nicht angesprochen wurde, ist die Schätzung der Fehler bei der Waldklassifizierung für Trainings- und Testproben (oob), dieser Punkt wird ebenfalls beschrieben.

Vielen Dank für die Code-Beispiele, es gibt auch eine Option zum Speichern durch Serialisierung

 
Maxim Dmitrievsky: + einige weitere Vergünstigungen, in Form einer Klasse. Ich werde es wahrscheinlich bald fertigstellen.

Bitte, wenn möglich, betrachten Sie als Beispiel die Funktion der Ausbildung durch die Geschichte, zum Beispiel beim Start eines Expert Advisor (Handel Emulation), ohne Verwendung einer Strategie-Tester. Ich habe versucht, es selbst zu tun, aber ich sehe, dass meine Hände krumm sind, es funktioniert, aber es ist viel schlechter in der Effizienz der Ausbildung auf die Ausbildung in der Strategie-Tester.

 
mov:

Bitte, wenn möglich, betrachten Sie als Beispiel die Funktion des Trainings durch die Geschichte, zum Beispiel beim Starten eines Expert Advisors (Handelsemulation), ohne die Verwendung der Strategie-Tester. Ich habe versucht, es selbst zu tun, aber ich sehe, dass meine Hände krumm sind, es funktioniert, aber es ist viel schlechter in der Effizienz des Trainings als das Training im Strategietester.

Ja, ein virtueller Tester ist auch in Planung, aber im Moment müssen wir andere Aspekte verfeinern, z. B. sind die automatische Auswahl und die Reduzierung der Prädiktoren jetzt am wichtigsten, damit das Modell nicht so sehr auf die Historie umtrainiert wird.