Suche nach einer Reihe von Indikatoren, die in die Eingänge des neuronalen Netzes eingespeist werden. Diskussion. Ein Instrument zur Bewertung der Ergebnisse.

 

Grüße an alle Forumsteilnehmer und Besucher.


Ich möchte allen Interessierten anbieten, zu diskutieren und nach einer Reihe von Indikatoren zu suchen, die sich am besten für die Eingabe in neuronale Netze eignen.

Die Rentabilität von neuronet in meinem Programm kann als ein Schätzungswerkzeug verwendet werden, kann ich auch MQL4 Expert Advisor mit einem ausgebildeten neuronet legen. Natürlich innerhalb vernünftiger Grenzen.


Ich habe selbst geschrieben (in Java) perseptron mit beliebiger Anzahl von Schichten und Neuronen in jeder Schicht trainiere ich es mit genetischen Algorithmus von JGAP-Bibliothek (http://jgap.sourceforge.net/).

Die Anzahl der Neuronen in der ersten Schicht ist gleich der Anzahl der Eingänge und in der zweiten Schicht - willkürlich, in der dritten Schicht 1 Neuron. Das Neuronet erzeugt Handelssignale (Ausgang des Neuronets >0,5 - kaufen, Ausgang des Neuronets<-0,5 - verkaufen), die von einem selbstgeschriebenen Trading-Tester verarbeitet werden, der auf der Grundlage des Neuronet-Signals die Position umkehrt (oder in den Markt einsteigt, wenn keine Position eröffnet wurde). Die Zielfunktion des genetischen Algorithmus ist der resultierende Gewinn. Ein solcher Ansatz ermöglicht es uns meiner Meinung nach, alle möglichen Fehler zu minimieren und das Training so nah wie möglich an den realen Handel heranzuführen. Ich exportiere das trainierte Netzwerk in MQL4 Expert Advisor und teste es im Strategie-Tester von MT4. Ich bilde die Eingaben für das neuronale Netz im MT4-Indikator und lade sie in eine Datei hoch. Der Indikator und der Expert Advisor werden vom Programm gebildet und in die Dateien geschrieben (weniger Verwirrung und weniger Fehler).

Meiner Meinung nach bringen 4-Schicht-Netze nicht mehr Gewinn (in der Regel weniger) als 3-Schicht-Netze, aber sie brauchen länger zum Trainieren.
Ich habe ein 8-10-1-Netzwerk 4 Tage lang auf einem Core2 Quadro 2.3 trainiert. 10 parallele Threads mit verschiedenen Ausgangspopulationen, die miteinander konkurrieren, um zu sehen, "wer den größten Gewinn hat". 4 Tage vergingen, etwa 4000 Generationen mit 200 Chromosomen in einer Population. Der maximale Gewinn wurde in den ersten 2000 Generationen erzielt, danach stieg der Gewinn nicht mehr an. Den größten Gewinnzuwachs gab es in den ersten 100 Generationen.

Ich habe die Ergebnisse dieses Netzes im MT4-Strategietester überprüft. Ich habe festgestellt, dass das Netzwerk fast nie die Schwelle von +-0,5 erreicht und das Handelssignal nicht ausgelöst wird. Der Grund dafür ist unklar, d.h. ich habe die Korrektheit des Exports nach MQL4 überprüft (mit den gleichen Eingabewerten in Java und MQL4 gibt das Netz die gleichen Werte aus, vielleicht hätte der gesamte eingehende Stream übermittelt werden müssen, nicht einige zufällige Werte). Ich habe den Schwellenwert auf 0,4 gesenkt und es scheint zu funktionieren... Dann entdeckte ich, dass der Expert Advisor eine Position nicht auf einen Schlag umkehren kann... Mein Expert Advisor schließt den Balken und der Preis hat Zeit, sich vor dem nächsten Balken zu bewegen. In der Lernphase (ich lerne am 1-08-09 bis 1-10-09) war der Gewinn in MT4 geringer als in meinem Testgerät, in der Testphase in MT4 (1-10-09 bis 1-11-09) war der Nettogewinn größer. Ich habe mir angesehen, an welchen Stellen unrentable Einträge auftreten, und ich habe den Eindruck, dass die Daten, die in das neuronale Netz eingehen, nicht genügend Informationen enthalten...

I Eingabe neuronales Netz: (k=100)

a[0]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k;
a[1]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[2]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[3]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[4]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[5]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.9;
a[6]=(iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.8;
a[7]=(iMA(NULL,0, 377,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.6;
Ich verstehe, wie Indikatoren funktionieren, aber ich verstehe sie und den Markt nicht genug, um eine minimale Anzahl von Indikatoren selbst auszuwählen...

Ich habe das Forum durchsucht und bin fündig geworden (an den Autor des Beitrags, von dem ich die Idee übernommen habe, erinnere ich mich leider nicht mehr):

a[0]=(iMA(NULL,0, 3,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[1]=(iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[2]=(iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[3]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[4]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[5]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[6]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i))*140;
a[7]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i))*130;
a[8]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i))*120;
untersucht in 10 Threads, 200 Generationen, Populationsgröße 200 für den Zeitraum 1-08-09 bis 1-10-09 (mein Java-Tester liefert die Ergebnisse):
Netzwerk 9-10-1 : Gewinn 10521
9-20-1 netto: Gewinn 10.434
9-30-1 Netzwerk : Gewinn 10361
9-50-1 Netzwerk : Gewinn 10059
das Ergebnis ist gut, aber es schien mit der vorherigen Version besser zu sein... ich werde es mit den vorherigen Eingaben vergleichen müssen (ich habe die Ergebnisse des letzten Trainings nicht gespeichert)

Zur Anpassung von Werten im Bereich von -1 bis +1 sind zusätzliche Multiplikatoren erforderlich.


Nachdem ich gelesen habe, was ich geschrieben habe, habe ich über einen möglichen Fehler beim Exportieren des trainierten neuronalen Netzes in den Expert Advisor nachgedacht - es sollte erneut getestet werden.

P.S. Jetzt schreibe ich ein rekurrentes neuronales Netz mit beliebiger Struktur (so wie ich es verstehe, berücksichtigt das rekurrente neuronale Netz nicht nur den Wert, sondern auch den Neigungswinkel).

 

Das Problem ist dem Ihren sehr ähnlich. Der Ansatz ist anders.

Ich bin noch weniger ein Genetiker als ein Ingenieur, aber ich verstehe es ungefähr.

Lassen Sie mich Ihnen ein paar Fragen stellen: Die Zielfunktion der Maximierung der Punktzahl ist nicht die beste Option. Wenn ich richtig aus dem obigen Beispiel verstanden - Sie gehen, um eine Reihe von Systemen zu suchen, in Ihrem Fall - 9, gut, auf einen Blick zu optimieren stoppt Gewinne + mehr Phantasie insgesamt mindestens ein System (hier verwenden wir einen Indikator) hat mindestens 2-3 hundert mögliche Varianten. Wir werden diese Varianten innerhalb des Rahmens nicht bekommen, sagen wir CCI oder RSI wird aus dem Blickfeld fallen. Dann haben wir einen magischen Indikator für den aktuellen Moment. Es sei mov(20) -mov(10) > < 0. Wie kann man einschätzen oder zumindest abschätzen, wie lange die Situation andauern wird?

 
iliarr >> :

Ich habe ein selbstgeschriebenes (in Java) Perseptron mit einer beliebigen Anzahl von Schichten und Neuronen in jeder Schicht. Ich trainiere es mit einem genetischen Algorithmus aus der JGAP-Bibliothek (http://jgap.sourceforge.net/).

Wie machen Sie die Ausbildung? Bitte beschreiben Sie den Trainingsalgorithmus.

Wenn ich mich richtig erinnere, ist JGap nur eine Bibliothek für genetische Algorithmen und nichts weiter, nichts mit NS zu tun. Die Frage ist vielleicht, wie das Genom gebildet wird und wie korrekt die Auswahl der Fitnessfunktionen ist.

 

Es gibt viele Fallstricke bei der Ausbildung eines Netzwerks mit Ga, die Sie wahrscheinlich nicht lösen können... Zumindest die Frage "Wie lange wird das Netz so gut funktionieren wie im Training?" scheint mir beim Training mit Ga nicht möglich.

Ich empfehle, eine Standardvorhersage zur Problemlösung mit ns-i zu verwenden.

 
rip >> :

Wie führen Sie die Schulung durch? Bitte beschreiben Sie den Trainingsalgorithmus.

Wenn ich mich richtig erinnere, ist JGap nur eine Bibliothek für Gen-Algorithmen und nichts weiter, es hat nichts mit NS zu tun. Die Frage ist vielleicht, wie das Genom gebildet wird und ob die Fitnessfunktion korrekt ist.

JGap ist eine Bibliothek, die einen genetischen Algorithmus implementiert. für mich ist es eine Blackbox, der eine Zielfunktion gegeben werden muss, die von einem Vektor einer bestimmten Länge abhängt. der genetische Algorithmus aus dieser Bibliothek wählt die Werte dieses Vektors so aus, dass die Zielfunktion maximal ist. meine Zielfunktion gibt Gewinne aus der Geschichte aus, die von einem Handelsemulator durchlaufen wird, der Signale von einem neuronalen Netz widerspiegelt. der Vektor, dessen Werte der genetische Algorithmus auswählt, bestimmt die Gewichte der neuronalen Netze.

ivandurak >> :

Das Problem ist dem Ihren sehr ähnlich. Der Ansatz ist anders.

Ich bin weniger ein Genetiker als ein Ingenieur, aber ich verstehe das Wesentliche.

Lassen Sie mich Ihnen ein paar Fragen stellen: Die Zielfunktion der Maximierung der Punktzahl ist nicht die beste Option. Wenn ich richtig aus dem obigen Beispiel verstanden - Sie gehen, um eine Reihe von Systemen zu suchen, in Ihrem Fall - 9, gut, auf einen Blick zu optimieren stoppt Gewinne + mehr Phantasie insgesamt mindestens ein System (hier verwenden wir einen Indikator) hat mindestens 2-3 hundert mögliche Varianten. Wir werden diese Varianten innerhalb des Rahmens nicht bekommen, sagen wir CCI oder RSI wird aus dem Blickfeld fallen. Dann haben wir einen magischen Indikator für den aktuellen Moment. Es sei mov(20) -mov(10) > < 0. Wie kann man abschätzen, wie lange die gutartige Situation andauern wird?

Leider habe ich nicht genügend Rechenressourcen, um die optimalen Indikatoren zu suchen (Netzwerk 9-10-1 in 10 Threads, 200 Generationen, Populationsgröße 200 von 1-08-09 bis 1-10-09 über eine Stunde gelernt, obwohl die Anzahl der Neuronengewichte (Vektorlänge, die der genetische Algorithmus aufnimmt) = 181)

Ich brauche eine Reihe von Indikatoren, die die Marktsituation widerspiegeln. die Indikatoren sollten einfach sein, vorzugsweise Standard MT4 (Frage der Umsetzung und mögliche Fehler) gibt es nur 30 von ihnen. kein Ziel Indikatoren sollten Informationen geben, wo der Markt geht. ich brauche sie, um so viele Informationen wie möglich von Preisschwankungen zu erhalten.


Ich mag es hier... Ich denke, wie und was zu schreiben, zu formulieren, und mehr Verständnis erscheint... Dank an das Forum und an Sie ivandurak . :)

 
iliarr >> :

JGap ist eine Bibliothek, die einen genetischen Algorithmus implementiert. meine Zielfunktion ist eine Blackbox, der eine Zielfunktion gegeben werden muss, die von einem Vektor einer bestimmten Länge abhängt. der genetische Algorithmus aus dieser Bibliothek passt Werte dieses Vektors so an, dass die Zielfunktion maximal ist. meine Zielfunktion generiert Gewinn aus der Geschichte, die von einem Handelsemulator durchlaufen wird, der Signale von einem neuronalen Netzwerk verarbeitet. der Vektor, dessen Werte der genetische Algorithmus anpasst, definiert die Gewichte der Neuronen des neuronalen Netzwerks.

Das ist genau das, was ich meine...


Wie bilden Sie einen Vektor, den Sie dann an JGap übergeben, ist es nur ein Vektor von W-Werten oder sind sie kodiert W-Werte.

Was ist die Ziel-f-Funktion. Ich kann ein Beispiel geben - wenn wir als Ziel eine f-Funktion E[i](t) = D[i](t) - Y[i](t) nehmen, wobei E ein Fehler ist, D ein am Ausgang erwarteter Wert ist, Y ein Wert ist, den man erhält, wenn man das Trainingsmuster X einspeist, i die Neuronennorm ist, t die Epochennummer ist. Nimmt man E[i](t) = Sign(D[i](t) - Y[i](t))*(D[i](t) - Y[i](t))^2 für eine Reihe von Aufgaben, ist das Ergebnis wesentlich besser. Wenn wir z.B. eine Reihe von Attraktoren klassischer dynamischer Systeme (Lorenz, Henon, Rössler, ...) bilden, können wir das Netz sogar darauf trainieren, solche Daten zu approximieren, zwar nicht tief, aber immerhin.


Ich habe es noch nicht ausprobiert :), weil ich nicht glaube, dass es funktionieren wird :)

 
Mit einer solchen Konstruktion können Sie nahezu senkrechte Ausweichstellen ohne Schlupf erreichen. Werden Sie das Problem des Übertrainings bei den Neuronen ansprechen?
 
IlyaA >> :
Mit einem solchen Design können Sie eine nahezu vertikale Eviti ohne Verrutschen erreichen. Werden Sie die Frage der Umschulung auf neuronaler Ebene ansprechen?

Und vielleicht gibt es keine Umschulung ... Wenn der Autor den Fehler auf dem Testmuster grafisch darstellt, können Sie sofort erkennen, was bei einer Umschulung passiert.

 
rip >> :

Und eine Umschulung findet vielleicht nicht statt ... Wenn der Autor eine Fehlerkurve für ein Testmuster angibt, können Sie auf einen Blick erkennen, was bei Übertraining passiert.


Ich stimme zu. Es funktioniert mit einer Blackbox. Übertraining ist sehr wahrscheinlich. Liebe iliarr, können Sie einen Zeitplan für die Ausbildung veröffentlichen.
 
iliarr >>:.............

Sie sollten die winkenden Arme nicht benutzen. Oder besser gesagt, Sie sollten nicht nur gleitende Durchschnitte verwenden. Versuchen Sie, mit verschiedenen Arten von Indikatoren zu experimentieren, wobei sich der Algorithmus eines jeden Indikators möglichst radikal von dem der anderen unterscheiden sollte. Dann erhalten Sie weitere Informationen über das Netz.

Ein weiterer Punkt.

Sie verwenden ein umgekehrtes Handelssystem, das auf NN-Signalen basiert. Dies ist genau dasselbe wie bei dem Standard-Experten muvingaverage. Weder besser noch schlechter.

Suchen Sie nach einer Möglichkeit, die SL- und TP-Größe mit Hilfe von NN zu bestimmen, und nach Möglichkeiten, offene Positionen zu begleiten. Es ist auch möglich, nach dem Zufallsprinzip zu öffnen.


StatBars schrieb :>>

Im Netzwerktraining gibt es eine Menge Fallstricke, die man kaum lösen kann... Zumindest scheint mir die Beantwortung der Frage "Wie lange wird das Netz so gut funktionieren wie im Training?" beim Training mit Ga überhaupt nicht möglich.

Ich empfehle, eine Standardlösung für ns-ey Vorhersageprobleme zu verwenden.

GA ist nur ein Optimierungswerkzeug (Schraubenzieher für die Maschine). Mit minimalen Unterschieden können Sie ihn oder jeden anderen Optimierungsalgorithmus (Schraubenzieher) verwenden.

 

Hallo

Ich war schon immer daran interessiert, etwas über NS zu erfahren, aber sobald ich anfange, Literatur zu diesem Thema zu lesen, fängt mein Kopf an zu brodeln und schließlich kann ich nicht einmal verstehen, was NS ist.

Könnten Sie anhand eines einfachen Beispiels (sozusagen an den Fingern) erklären, worum es sich handelt?

Dankeschön