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

 
Alexey Burnakov:
OK, mögen Sie denken. Stellen Sie sich zum Beispiel vor, dass das neuronale Netz bei jeder Iteration keine Standardfehler-Rückwärtsfortpflanzung auf der Grundlage der Zielabweichung von der Vorhersage durchführt, sondern Daten erhält, die bei der vorherigen Version der Gewichte um so viele Punkte vom Idealwert abweichen . Und aktualisiert die Gewichte auf der Grundlage dieser Informationen. Das heißt, die Informationen sollten parallel zur Maschine fließen. Vielleicht ist es machbar.

Warum brauchen Sie Gewichte? Warum sprechen Sie überhaupt über sie?

Ich habe verstanden, dass man vorherige Gewichte braucht, jetzt verstehe ich, dass ich nichts verstehe)

 
mytarmailS:

Warum brauchen Sie Gewichte? Warum reden Sie überhaupt über sie?

Ich habe verstanden, dass man vorherige Gewichte braucht, jetzt verstehe ich, dass ich nichts verstanden habe)

Nun, es sieht so aus ))

Wir brauchen die Gewichte nicht. Ich habe sie nur erwähnt, um IHNEN das klar zu machen. Wir müssen wissen, wie das System bei früheren Gewichten gehandelt hat. Wir brauchen das Ergebnis des Handels in einer integrierten Form. Alles.

Die Gewichte werden durch den Algorithmus aktualisiert.

 

Hier funktioniert eine einfache Funktion. Es muss eine komplexere Lösung ausprobiert werden. Es muss noch differenziert werden, das ist der schwierige Teil.

library(neuralnet)


y <- as.data.frame(matrix(runif(n = 10000, min = -15, max = 15), ncol = 2))

y$V3 <- runif(n = 5000,  min = -15, max = 15)

y$V4 <- runif(n = 5000,  min = -15, max = 15)

y$V5 <- runif(n = 5000,  min = -15, max = 15)

y$V6 <- runif(n = 5000,  min = -15, max = 15)

y$V7 <- runif(n = 5000,  min = -15, max = 15)

y$V8 <- y$V1 ^ 2 + y$V2 ^ 2

colnames(y) <- c('input_1', 'input_2', 'noise_1', 'noise_2', 'noise_3', 'noise_4', 'noise_5', 'output')


f_f <- function(x, y){

1/2*(y-x)^2

}


print(

nn_model <- neuralnet(formula = output ~ input_1 + input_2 + noise_1

, data = y

, hidden = 1

, threshold = 0.01

, stepmax = 1e+05

, rep = 100

, startweights = NULL

, learningrate.limit = NULL

, learningrate.factor = list(minus = 0.5, plus = 1.2)

, learningrate=NULL

, lifesign = "none"

, lifesign.step = 10

, algorithm = "rprop+"

, err.fct = f_f #"sse"

, act.fct = "logistic"

, linear.output = F

, exclude = NULL

, constant.weights = NULL

, likelihood = FALSE

)

)

 

f_f <- Funktion(x, y) 1/2*(y-x)^2

f_f - zählt der Fehler für das Netzwerk richtig?

x ist der Wert, der erreicht werden soll (Idealkurve)

y ist, wie es sein sollte (die echte Kurve)

Der Unterschied zwischen ihnen ist der Fehler

Ich benötige einen Vektor von Geschäften nach vorherigen Candlesticks, ich benötige die Regeln für die Eröffnung von Geschäften, ich benötige die Regeln für die Eröffnung von Geschäften, ich benötige das allgemeine Aussehen der Eingabedaten

 
mytarmailS:

f_f <- Funktion(x, y) 1/2*(y-x)^2

f_f - zählt der Fehler für das Netzwerk richtig?

x ist der Wert, der erreicht werden soll (Idealkurve)

y ist, wie es sein sollte (die echte Kurve)

Der Unterschied zwischen ihnen ist der Fehler

Ich denke, ich brauche einen Vektor des Handels von Candlesticks, aber ich verstehe nicht, wie man Geschäfte nach welchen Regeln zu öffnen, wie diese Input-Daten aussehen sollte

Fast richtig. X ist ein Vektor von ns-Vorhersagen. Ygrek ist der Vektor der Preiserhöhungen pro Bar Forward (z. B. ), den das Netz vorhersagt. Und die gesamte Funktion ist das, was der NS-Algorithmus bei jeder Iteration sehen wird. Bisher liegen noch keine Ergebnisse vor. Sie müssen modelliert werden.

Wie? Wir sollten die Logik des Öffnens der Positionen beschreiben und die Streuung direkt in den Funktionskörper eingeben. Schreiben Sie das Ergebnis der offenen Positionen in den Vektor und berechnen Sie die intrinsischen Merkmale auf dem Vektor.

Zum Beispiel: buy<-(y-spread)[x>0]. Dies wird ein Vektor für Long-Positionen sein. Dann all<-append(buy, sell).

Aber es wird wahrscheinlich nicht funktionieren. Es gibt eine Reihe von Einschränkungen bezüglich der Art der Funktion (.
 
In der Zwischenzeit setze ich mein Experiment fort. Ich trainierte die Maschine nur auf eurusd und bekam kleine positive MO auf Validierung.

Im Anhang finden Sie einen Screenshot des aktuellen Modelltests in MT4. Die Ausbildungsphase ist noch im Gange... Die vollständigen Ergebnisse werden erst morgen vorliegen. Die Berechnungen sind in Verbindung mit R recht lang und erfolgen minütlich, wenn keine offenen Geschäfte vorliegen. Start im Jahr 1999. Die Validierung beginnt ab 2010.09. Die aktuelle Tabelle ist für 2003.

Ich verwende 10 fünfstellige Punktespannen. Erwarten Sie 7-8 Pips bei der MO-Validierung. Nicht dichten.... Aber jetzt können Sie bereits DC finden, wo der Spread 10 Pips beträgt, deshalb denke ich, dass das Ergebnis fast signifikant ist.
Dateien:
 

Ein Kollege hat mir einen Link zu einem Kurs über maschinelles Lernen geschickt, möchten Sie ihn sich ansehen? Es ist kostenlos, aber aus irgendeinem Grund in Python ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

 
Alexey Volchanskiy:

Ein Kollege hat mir einen Link zu einem Kurs über maschinelles Lernen geschickt, möchten Sie ihn sich einmal ansehen? Es ist kostenlos, aber aus irgendeinem Grund in Python ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

Die effektivste:

1. Sie setzen R - 5 Minuten ein.

2. laden Sie das rattle-Paket herunter, das als GUI konzipiert ist und daher keine Kenntnisse von R erfordert.

3. Um Ihre Anlaufkosten zu senken, können Sie meinen Artikel nutzen. Sie enthält Erklärungen und, was noch wichtiger ist, eine fertige Datei. Wenn Sie meine Datei gesehen haben, können Sie leicht Ihre eigene erstellen.

4. Sie erhalten sechs Modelle.

5. Das Wichtigste an Rattle ist, dass man den gesamten Zyklus des maschinellen Lernens sehen kann:

  • erste Datenaufbereitung (Data Mining)
  • Modellierung
  • Ergebnisauswertung
  • als Bonustext auf dem R aller Ihrer Rasselaktivitäten. Dieser Text kann dann außerhalb der Rassel verwendet werden.

All dies wird Ihnen eine lückenlose Grundlage und vor allem eine konkrete Erfahrung mit maschinellem Lernen im Zusammenhang mit dem Devisenhandel bieten.

PS.

Die Rassel wird Ihnen nicht nur bei den ersten Schritten sehr nützlich sein, sondern auch später: minimale Kosten, um etwas zu schätzen, zu experimentieren...

PSPS

Natürlich kann man auf Bücher nicht verzichten. Davon gibt es hier reichlich. Die Suche funktioniert einwandfrei.

 
mytarmailS:

Danke für die ausführliche Erläuterung, Dr. Trader!

Wissen Sie, wahrscheinlich wäre es das Beste und Richtigste, die Umkehrungen selbst zu lehren, sogar den gleichen Zickzack, das heißt, drei Zustände zu geben 1) U-Turn nach oben

2) Umkehrung nach unten

3) keine Kehrtwendung

Aber ob es zu lehren, ist es ziemlich schwierig, Umkehrungen zu fangen, plus die Schieflage in der Anzahl der Beobachtungen, Klassen "nicht Umkehrung" wird Dutzende oder vielleicht Hunderte von Malen mehr sein

Und welche Prädiktoren verwenden Sie und wie sehen die Ergebnisse aus?

Ich habe gerade begonnen, die Spektralanalyse zu verwenden, die ersten Tests erwies sich als viel besser als mit den Indikatoren, lief ich es durch Rattle, der Fehler der Ausbildung und Prüfung war etwa 6%, aber wenn ich begann, R zu verwenden, stieg der Fehler auf 30%, wenn ich mich nicht irre, San Sanich sagt, dass es retraining, so dass ich immer noch nicht viel verstehen

Es gibt auch eine Möglichkeit, durch Spektralanalyse herauszufinden, welche Perioden auf dem Markt dominieren, und diese Perioden dann in Indikatoren zu verwenden. Ich werde adaptive Indikatoren erhalten, die nicht an die Geschichte angepasst sind.

Ich verwende Standardindikatoren als Grundlage für die Erstellung von Prädiktoren. Ich selbst experimentiere noch mit ihnen, indem ich die Ideen aus diesem Forumsthread ausprobiere.

Ich habe es für die letzten Wochen, jetzt das beste Ergebnis ist die folgende: (eine Menge von Berechnungen, ich versuche, D1 Zeitrahmen für schnellere Berechnung verwenden, später werde ich kleinere Zeitrahmen verwenden)

1) Export von mt5 nach csv: ohlc, Zeit, Indikatoren, alle für die letzten 10 Bars. Ich habe vor kurzem damit begonnen, die Zeit nur vom neuesten Takt zu nehmen, ich glaube, die Zeit der anderen Takte ist berechenbar und bringt daher keine neuen Informationen. Es werden mehrere Hundert "primäre" Prädiktoren veröffentlicht. Das gewünschte Ergebnis des Lernens ist "1" oder "0" - Anstieg oder Rückgang des Kurses im nächsten Balken. Meine Methode mit den Zickzacklinien ist nicht stabil und komplex, ich kann jetzt besser mit engen Preisen arbeiten. Wenn ich einen vollständigen Algorithmus für die Modellschulung von Grund auf ausgearbeitet habe, kann ich mit der Arbeit an Zickzacklinien und Trendvorhersagen beginnen.

2) In R führe ich verschiedene mathematische Operationen mit den verfügbaren Daten durch - Addition, Deltas, Minimum, Maximum usw. Es gibt bereits mehr als tausend Prädiktoren.

3) Offensichtlich gibt es nach dem zweiten Schritt mehr Müll als nötig. Ich siebe es nach der Methode des Artikels über die Grundkomponentenhttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych schrieb darüber früher. Ich unterrichte das PCR-Modell selbst nicht und habe mich vorerst auf die Funktion zur Vorauswahl der Prädiktoren beschränkt:

library('vtreat')
PrunePredictors <- function(srcTable, pruneSig = -1) {
        targetName <- tail(colnames(srcTable), 1)
        
        treatmentsN <- designTreatmentsN(srcTable,setdiff(colnames(srcTable),targetName),targetName, verbose=FALSE)
        if(pruneSig<0){
                pruneSig = 1.0/(ncol(srcTable)-1)
        }

        scoreFrameSorted <- treatmentsN$scoreFrame[,c("origName", "psig", "code")]
        scoreFrameSorted <- subset( scoreFrameSorted, code == "clean")[,1:2]
        scoreFrameSorted <- scoreFrameSorted[with(scoreFrameSorted, order(psig)), ]
        
        scoreFrameSortedPruned <- subset( scoreFrameSorted, psig < pruneSig)
        scoreFrameSortedPruned <- scoreFrameSortedPruned[,1] 
        
        cat("Minimal psig:", scoreFrameSorted[1,2], "\n")
        cat("Maximal psig:", scoreFrameSorted[nrow(scoreFrameSorted),2], "\n")
        cat("Threshold:", pruneSig, "\n")
        cat("Good predictors:", nrow(subset( scoreFrameSorted, psig < pruneSig)), "\n")
        
        return(scoreFrameSortedPruned)
}

srcTable ist eine Tabelle mit Prädiktoren, die letzte Spalte sollte das gewünschte Trainingsergebnis sein.pruneSig sollte besser -1 sein.

Als Ergebnis gibt die Funktion eine Liste mit Spaltennamen aus der Tabelle zurück, die einige nützliche Informationen enthalten. Oder eine leere Liste, wenn nichts Brauchbares gefunden wird. Diese Methode wird in dem Artikel als nicht sehr aussagekräftig bezeichnet, aber sie erweist sich als durchaus geeignet, da sie den Müll sehr gut aussortiert. Außerdem wird die Ergebnisliste nach Relevanz sortiert, d. h. von eher nützlich bis weniger nützlich.

4) Wenn die Funktion eine leere Liste zurückgibt, führe ich den zweiten Schritt erneut aus, generiere erneut verschiedene mathematische Kombinationen aus den verfügbaren Daten und wähle dann den dritten Schritt zur Sichtung aus. Ich muss diesen Schritt 3-4 Mal wiederholen. Die Datenmenge wächst mit jeder Wiederholung, daher ist es besser, die Menge der neu erzeugten Daten irgendwie zu begrenzen. Wir können diese Funktion für die Sichtung so ändern, dass sie, wenn die Liste leer ist, die hundert oder zwei besten Ergebnisse zurückgibt und nur aus diesen neue Prädiktoren erzeugt.

5) Als Nächstes müssen wir laut dem Artikel das Hauptkomponentenmodell selbst trainieren. Ich habe Probleme damit - bis jetzt ist das beste r-Quadrat für das trainierte Modell 0,1, das ist nicht genug, der Artikel sagt, dass ich mindestens 0,95 brauche. Ich kann jedoch ein anderes R-Modell auf die erhaltenen Prädiktoren trainieren, das bessere Ergebnisse liefert. Ich habe die meiste Erfahrung mit Neuronics, das beste Ergebnis im Fronttest damit kommt mit einem Fehler von etwa 37% heraus. Das PCE-Modell soll stabiler sein, ohne Nachschulung usw., aber bisher habe ich noch keine Prädiktoren dafür gefunden.

Wenn Sie Fehler von 30% in Fronttest haben, dann ist es ein ziemlich profitables Modell, machen Expert Advisor für mt5 und überprüfen Sie es in Strategie-Tester.

 
Alexey Volchanskiy:

Ein Kollege hat mir einen Link zu einem Kurs über maschinelles Lernen geschickt, möchten Sie ihn sich einmal ansehen? Es ist kostenlos, aber aus irgendeinem Grund in Python ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

Ich habe angefangen, diesen Kurs zu beobachten, er schenkt dem Pandas-Framework in Python viel Aufmerksamkeit. Die ersten Lektionen sehen eher wie ein Tutorium über eben diesen Rahmen als über die Datenanalyse aus. Aber das Tutorial sieht adäquat aus, ohne das typische "Ich bin ein Forex-Guru, ich werde Ihnen die Augen öffnen und Sie werden Millionen machen" wie in vielen anderen nutzlosen Trainings, es gibt Hoffnung, dass sie angemessene Dinge bis zum Ende erzählen. Aber es ist auch erwähnenswert, dass dieser Kurs für den Aktienhandel und nicht für den Devisenhandel konzipiert ist. Ich weiß nicht, ob die Modelllernprozesse in diesen beiden Bereichen ähnlich sind.
Grund der Beschwerde: