Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 1071

 
Anaxagor:

Es klingt wie ein Kompliment, wenn es vom Hersteller dieses Missverständnisses kommt.

Nun, nutzen Sie es, solange ich freundlich bin :-) Es tut mir nicht leid..... Und die Tatsache, dass Sie den Artikel nicht verstehen konnten, freut mich sogar. Je weniger wir sind, desto mehr sind wir :-)

 

Hallo Maxim,

Wenn ich Höchst- und Tiefstpreise hinzufügen möchte, muss ich lediglich die Funktion calcsignal () ändern. Liege ich richtig?

Ist der folgende Code korrekt? Oder muss ich andere Änderungen im EA-Code oder Bibliothekscode vornehmen?

Können Sie auch einen Indikatorcode in diesem Code angeben?

void calcSignal ()

{

sig1 = 0;

for (int i = 0; i <ArraySize (ag1.agent); i ++)

{

CopyClose (_Symbol, 0.0, 100, ag1.agent [i] .inpVector);

normalizeArrays (ag1.agent [i] .inpVector);

}

for (int i = 0; i <ArraySize (ag1.agent); i ++)

{

CopyHigh (_Symbol, 0.0, 100, ag1.agent [i] .inpVector);

normalizeArrays (ag1.agent [i] .inpVector);

}

for (int i = 0; i <ArraySize (ag1.agent); i ++)

{

CopyLow (_Symbol, 0.0, 100, ag1.agent [i] .inpVector);

normalizeArrays (ag1.agent [i] .inpVector);

}

sig1 = ag1.getTradeSignal ();

}

 
Mmmm... traurige Programmierung
 
Maxim Dmitrievsky:
mde ... traurige Programmierung

Sie meinen, dass der obige Code nicht korrekt ist, oder beziehen Sie sich auf die Implementierung des GMDH-Codes? Der GMGH-Code war nur eine grobe Implementierung, die ich schnell gefunden habe. Aber ich kann es im Moment nicht verbessern. Ich denke, es gibt bessere Möglichkeiten, es zu kodieren, die ich auch versuchen werde.

In Ihrem aktuellen Quellcode gibt es viele Agenten oder Variablen mit ähnlichen Namen und mehreren Punktoperatoren wie " ag1.agent [i] .inpVector ", was mich verwirrt, bis ich den gesamten Code durchgegangen bin...

 
FxTrader562:

Sie meinen, dass der obige Code nicht korrekt ist, oder beziehen Sie sich auf die Implementierung des GMDH-Codes? Der GMGH-Code war nur eine grobe Implementierung, die ich schnell gefunden habe... Aber ich denke, dass es bessere Möglichkeiten gibt, es zu tun... aber ich weiß es im Moment nicht

In Ihrem aktuellen Quellcode gibt es viele Agenten oder Variablen mit ähnlichen Namen und mehreren Punktoperatoren wie " ag1.agent [i] .inpVector ", was mich verwirrt, bis ich den gesamten Code durchgegangen bin...

Ich habe es bereits erklärt. Sie haben 100 Prädiktoren, also müssen Sie in dieses Array 25 verschiedene Schlusskurse, 25 verschiedene Eröffnungskurse, 25 Hochs und 25 Tiefs kopieren. Insgesamt 100

oder machen Sie 4 Prädiktoren arrayy, und kopieren Sie 1 close, 1 open, ..... oder andere verschiedene Indikatorwerte

Oder warten Sie einen Artikel ab, denn die Kommunikation im Forum nimmt (für mich) zu viel Zeit in Anspruch.

Über gdmh - es gibt eine Menge verschiedener Implementierungen, keine Probleme mit ihm. Aber für meine Aufgabe brauche ich zusätzliche Forschung

 
Maxim Dmitrievsky:

Ich habe es bereits erklärt. Sie haben 100 Prädiktoren, also müssen Sie in dieses Array 25 verschiedene Schlusskurse, 25 verschiedene Eröffnungskurse, 25 Hochs und 25 Tiefs kopieren. Insgesamt 100

oder machen Sie 4 Prädiktoren arrayy, und kopieren Sie 1 close, 1 open, ..... oder andere verschiedene Indikatorwerte

Oder warten Sie einen Artikel ab, denn die Kommunikation im Forum nimmt (für mich) zu viel Zeit in Anspruch.

Über gdmh - es gibt eine Menge verschiedener Implementierungen, keine Probleme mit ihm. Aber für meine Aufgabe brauche ich zusätzliche Forschung

Ja, ich verstehe.

Außerdem habe ich Ihren Quellcode, und daher wird es einige Zeit dauern, bis ich ihn verstehen und ändern kann, da er nicht viel kommentiert ist. Außerdem bin ich kein Programmierer auf Expertenebene. Ich habe also nur versucht, den Prozess mit Ihrer Hilfe zu beschleunigen :))

Ich werde auf jeden Fall auf Ihren Artikel mit einer ausführlichen Erklärung warten.

Ja, in Bezug auf GMDH gibt es, wie bereits erwähnt, mehrere Ansätze und mehrere Formeln, und dementsprechend müssen Sie eine auswählen, die für die RDF-Implementierung geeignet ist. Ich habe einfach die allgemeine Formel von GMDH aus dem Wikipedia-Link in den MQL5-Code übersetzt oder umgewandelt, den Sie mir zuvor zur Verfügung gestellt haben.

Außerdem habe ich den Code ausreichend erklärt, um ihn verständlich zu machen. Ich habe versucht, in mehrere Python-Codes zu suchen, bevor ich den MQL5-Code schrieb, aber nichts befriedigt meine Bedürfnisse. Deshalb habe ich die einfachste Art von GMDH mit einer Funktion und einer switch case-Anweisung geschrieben.

 
FxTrader562:

Ja, ich verstehe.

Außerdem habe ich Ihren Quellcode, und daher wird es einige Zeit dauern, bis ich ihn verstehen und ändern kann, da er nicht viel kommentiert ist. Außerdem bin ich kein Programmierer auf Expertenebene. Ich habe also nur versucht, den Prozess mit Ihrer Hilfe zu beschleunigen :))

Ich werde auf jeden Fall auf Ihren Artikel mit einer ausführlichen Erklärung warten.

Ja, in Bezug auf GMDH gibt es, wie bereits erwähnt, mehrere Ansätze und mehrere Formeln, und dementsprechend müssen Sie eine auswählen, die für die RDF-Implementierung geeignet ist. Ich habe einfach die allgemeine Formel von GMDH aus dem Wikipedia-Link in den MQL5-Code übersetzt oder umgewandelt, den Sie mir zuvor zur Verfügung gestellt haben.

Außerdem habe ich den Code ausreichend erklärt, um ihn verständlich zu machen. Ich habe versucht, in mehrere Python-Codes zu suchen, bevor ich den MQL5-Code schrieb, aber nichts befriedigt meine Bedürfnisse. Deshalb habe ich die einfachste Art von GMDH mit einer Funktion und einer switch case-Anweisung geschrieben.

Es wird ein linearer Fall beschrieben. Wir suchen zum Beispiel die besten Mitglieder für die 1. Linie, die 2. usw. Und dann fügen Sie die besten Mitglieder zu einer (neuen) Variablen aus der Formel hinzu. Im Fall von RDF können wir dies nicht tun, da es sich um ein nichtlineares Modell handelt. Daher müssen wir einfach alle Zeilen als unabhängige Variablen zu den Eingaben hinzufügen, und zwar in jeder Runde der Auswahl

 
Maxim Dmitrievsky:

Es wird ein linearer Fall beschrieben. Wir suchen zum Beispiel die besten Mitglieder für die 1. Linie, die 2. usw. Und dann fügen Sie die besten Mitglieder zu einer (neuen) Variablen aus der Formel hinzu. Im Fall von RDF können wir dies nicht tun, da es sich um ein nichtlineares Modell handelt. Daher müssen wir einfach alle Zeilen als unabhängige Variablen zu den Eingaben hinzufügen, und zwar in jeder Runde der Auswahl

Können Sie mir bitte einen Beispielcode geben, wo genau Sie versuchen, zu implementieren, damit ich Ihnen besser helfen kann?

Meinen Sie damit Gewichte wie w1, w2, w3....? Das sind die Dinge, die während des Trainings berechnet und in RDF gespeichert werden müssen, wenn wir x1.w1,x2.w2,x3.w3 eingeben.... als individuelle Eingaben.

Beachten Sie, dass es in der Realität bei Funktionen keine linearen und nichtlinearen Funktionen gibt, da man eine nichtlineare Funktion immer in unendlich viele lineare Funktionen zerlegen kann, so dass ich die Dinge nicht ohne Grund verkompliziere. Deshalb verwenden wir kleine Teile linearer Funktionen als Eingabe und können sie bei Bedarf auf eine beliebige Anzahl erweitern. Aber ich kann im Moment nicht viel über den Codierungsteil sagen.

Bitte geben Sie mir den RDF-Code, bei dem Sie nicht weiterkommen, damit ich ihn besser verstehen kann.

Oder Sie können anhand meines Codes erklären, wonach Sie sonst noch suchen, denn nach meinem Verständnis habe ich die GMDH-Formel in Code umgewandelt. Wenn es also erforderlich ist, können wir den Zufall einbeziehen oder einfach die Komponenten der Basisfunktion auf eine beliebige Zahl erweitern und nach dem Zufallsprinzip auswählen.

 
FxTrader562:

Können Sie mir bitte einen Beispielcode geben, wo genau Sie versuchen, zu implementieren, damit ich Ihnen besser helfen kann?

Meinen Sie damit Gewichte wie w1, w2, w3....? Dies sind die Dinge, die während des Trainings berechnet und in RDF gespeichert werden müssen, wenn wir x1.w1,x2.w2,x3.w3 eingeben.... als individuelle Eingaben.

Beachten Sie, dass es in der Realität bei Funktionen keine linearen und nichtlinearen Funktionen gibt, da man eine nichtlineare Funktion immer in unendlich viele lineare Funktionen zerlegen kann, so dass ich die Dinge nicht ohne Grund verkompliziere. Deshalb verwenden wir kleine Teile linearer Funktionen als Eingabe und können sie bei Bedarf auf eine beliebige Anzahl erweitern. Aber ich kann im Moment nicht viel über den Codierungsteil sagen.

Bitte geben Sie mir den RDF-Code, bei dem Sie nicht weiterkommen, damit ich ihn besser verstehen kann.

Oder Sie können anhand meines Codes erklären, wonach Sie sonst noch suchen, denn nach meinem Verständnis habe ich die GMDH-Formel in Code umgewandelt. Wenn es also erforderlich ist, können wir den Zufall einbeziehen oder einfach die Komponenten der Basisfunktion auf eine beliebige Zahl erweitern und nach dem Zufallsprinzip auswählen.

Um lineare Koeffizienten zu finden, müssen wir die lineare Regression verwenden, können dies aber auch direkt mit RF tun. Ich lese gerade ein interessantes Buch darüber

In diesem Buch werden verschiedene Polynome in Form von baumstrukturierten Netzwerken entwickelt, darunter algebraische Netzwerkpolynome, Kernel-Netzwerkpolynome, orthogonale Netzwerkpolynome, trigonometrische Netzwerkpolynome, rationale Netzwerkpolynome und dynamische Netzwerkpolynome.
 
Maxim Dmitrievsky:

Um lineare Koeffizienten zu finden, müssen wir die lineare Regression verwenden, können dies aber auch direkt mit RF tun. Ich lese gerade ein interessantes Buch darüber.

Ok, wenn Sie eine genaue Implementierung von GMDH wünschen und wir meinen Code mit einem höheren Wert von m weiter ausbauen müssen, dann kann ich das tun. Aber ich möchte, dass Sie es zunächst mit einem m-Wert von 3 implementieren und es im M1-Zeitrahmen testen, weil die Kerzenschlusskurse im M1-Zeitrahmen sehr klein sind und daher eine Aufteilung in 3 Teile ausreicht, um unser Ziel zu erreichen.

Auf diese Weise, wenn Sie GMDH implementieren können und es funktioniert irgendwie in M1 Zeitrahmen, dann für höhere Zeitrahmen können wir die for-Schleife auf größere Werte von m wie 10 oder 15 usw. erweitern.

Übrigens, haben Sie in Ihrer aktuellen Implementierung des Codes den Kernel-Trick verwendet, wenn Sie den folgenden Code verwenden?

#define _kernel(ker,degree) (cos(MathPow(ker,degree))

Ich habe gründlich recherchiert, konnte aber nicht herausfinden, welche Kernel-Funktion Sie in Ihrem Code verwendet haben, weil ich verschiedene Kernel testen wollte, bevor ich mein Algo implementiere:

http://crsouza.com/2010/03/17/kernel-functions-for-machine-learning-applications/

Können Sie mir einen Hinweis darauf geben, um welche Kernel-Funktion es sich handelt, oder ist das nur Ihre Formel?

Außerdem habe ich den Kerzen-Simulationsalgorithmus erfolgreich in Ihren aktuellen Code implementiert. Aber es kann sein, dass es erst nach einer Woche der Simulationen funktioniert. Ich wollte also nur ein paar Dinge bestätigen, bevor ich mit den Simulationen beginne.

1. gibt es eine Grenze für die Anzahl der Modelle, die ich verwenden kann. Kann ich 1 Million Modelle verwenden?

Gibt es eine Grenze für die Anzahl der Agenten, die ich einsetzen kann? Kann ich 1000 Mittel einsetzen?

3. wenn die trainierten Daten zu groß sind, wird das System dann langsamer, wenn es Handelsentscheidungen trifft? Ich meine, wenn die ".rl"-Datei zu groß ist, wie viel Zeitverzögerung bei der Handelsausführung können wir dann ungefähr erwarten? Haben Sie irgendwelche Berechnungen in Bezug auf die Anzahl der Iterationen pro Sekunde oder for-Schleife usw. durchgeführt?

Grundsätzlich verwende ich Ihre Modelle und Agenten, um während des Trainings Zufallskerzen zu erzeugen, die in ".rl"-Dateien für den LIVE-Handel gespeichert werden. Die ".rl"-Dateien in dieser Version ähneln den "Mtrees"-Dateien Ihrer vorherigen Version, stimmt das?

Ich plane, eine Simulation mit insgesamt 10 bis 100 Millionen Kerzen durchzuführen, was einer Optimierungsdauer von 280 bis 2800 Jahren entspricht. Aber bevor ich das Training durchführe, wollte ich mehrere Dinge über den Code und die Schnelligkeit der Ausführung usw. überprüfen.

Wenn Sie Zeit haben, gehen Sie bitte meine obigen Fragen durch und geben Sie mir einige Antworten, die mir bei der weiteren Berechnung helfen können....

Grund der Beschwerde: