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

 
Renat Fatkhullin:

R ist ein erstaunliches System, das mir persönlich die Augen geöffnet hat, wie weit wir in MetaTrader/MQL von den wirklichen Bedürfnissen des "komplexe Berechnungen einfach und sofort machen" entfernt waren.

Wir (C++-Entwickler) haben den Ansatz "Sie können alles selbst machen, und wir geben Ihnen die niedrige Basis und die Geschwindigkeit der Berechnungen" in unserem Blut. Wir sind fanatisch, wenn es um Leistung geht, und wir sind gut darin - MQL5 ist großartig auf 64 Bit.

Als ich anfing, selbst mit R zu arbeiten, wurde mir klar, dass ich so viele leistungsstarke Funktionen wie möglich in einer Zeile benötigte, um allgemein forschen zu können.

Wir haben also eine Kehrtwende vollzogen und mit dem Upgrade von MetaTrader 5 begonnen:

  • Aufnahme der zuvor umgeschriebenen mathematischen Bibliotheken Alglib und Fuzzy in die Standardauslieferung, versehen mit Unit-Tests
  • ein Analogon der statistischen Funktionen von R entwickelt, Tests durchgeführt und sie mit Tests abgedeckt. Die Arbeit ist noch im Gange und die Bibliothek wird erweitert
  • entwickelte die erste Beta-Version der Grafikbibliothek als Analogon zu plot in R. fügte einzeilige Funktionen für schnelle Ausgaben hinzu
  • Sie änderten die Richtung der Ausgabe, fügten die Deaktivierung nicht benötigter Spalten hinzu, änderten die Schriftart im Ausgabefenster des Expert Advisors auf Monospaced
  • eine leistungsfähige ArrayPrint-Funktion zum automatischen Drucken von Arrays, einschließlich Strukturen, wurde hinzugefügt.
  • Hinzufügen der Funktionen FileLoad und FileSave zum schnellen Laden/Entladen von Arrays auf der Festplatte.


Natürlich stehen wir noch am Anfang des Weges, aber der richtige Vektor der Bemühungen ist bereits klar.

Ihre Motivation ist großartig! Wenn es genau so ist, wie du sagst, wirst du den Ninja schnell in den Hintern beißen c multichart)))

Allerdings, IMHO, hier haben wir etwas radikal Neues zu schaffen, das heißt, zusätzlich zu dem, was Sie schrieb, Herr Reshetov, brauchen Sie nur ein Forschungs-Studio, mit beliebigen Datensätzen zu arbeiten, nicht nur aus dem Markt heruntergeladen werden, weil viele Dinge zu versuchen, sehr trivial, synthetische Beispiele zu verstehen, was passiert, gut, sollten Sie mich als Programmierer Programmierer verstehen)) Ich möchte verschiedene Diagramme, Streudiagramme, Hitmaps, Verteilungen und so weiter zeichnen. Im Allgemeinen wäre es wirklich cool, wenn ein solcher Satz von Werkzeugen direkt von MetaEditor aus verfügbar wäre, aber ehrlich gesagt, habe ich keine Hoffnung...

Aber im Allgemeinen gefällt mir natürlich die Tendenz Ihrer Gedanken))

 
Renat Fatkhullin:

Es war eine höfliche Antwort ohne Einzelheiten oder Überprüfung. Und die Antwort stimmte nicht mit Wolfram Alpha und Matlab überein, was ein Problem darstellt.

Es gibt keinen Grund zum Ausweichen - das eigentliche Problem wurde klar benannt.

Was meinen Sie damit, dass seine Antwort nicht mit Wolfram übereinstimmte? Passt es nicht, dass die Antwort der Person nicht "Null" war? Der Mann antwortete, er glaube nicht, dass am Nullpunkt, wo das Integral = 0 ist, die Dichte notwendigerweise Null sein muss (ich habe ihm die Frage so gestellt). Das hat er ausdrücklich gesagt. Und er fügte hinzu, dass der Dichtewert an einem beliebigen Punkt irrelevant ist (ich lese "irrelevant" als irrelevant für die vorliegende Frage). Dies ist eine ganz klare mathematische Aussage.

In der vorliegenden Frage ist die Mathematik wichtig.

Wir haben das Integral der so-und-so-Funktion ( Wahrscheinlichkeitsdichtefunktion der Gamma-Verteilung). Jeder ist daran gewöhnt, dass man Wolfram eine Gleichung mit Parametern geben kann: Geben Sie den Integrationsbereich und die Funktionsparameter an, und es wird integrieren und die Antwort geben. Aber haben Sie jemals daran gedacht, dass Sie, wenn Sie sich selbst hinsetzen und dieses Integral auf einem gegebenen Gebiet berechnen würden, 0 bei Null und 1 über das gesamte Gebiet und irgendeinen Wert [0,1] auf irgendeinem Teilgebiet erhalten würden? Einfach durch Lösen der Gleichung!

Die Tatsache, dass der Grenzwert der Wahrscheinlichkeitsdichtefunktion der Gammaverteilung irgendwo im positiven Bereich liegt, ist eine Eigenschaft dieser Funktion. Es hat nichts damit zu tun, was man durch die Integration dieser Funktion erhält. Das ist es, worüber der Mann geschrieben hat.

Ich weiche den eigentlichen Problemen nicht aus. Ich wiederhole, dass unser Punkt von einer Person bestätigt wurde, auf die wir keinen Einfluss haben - die Dichte bei Null ist irrelevant (irrelevant).

 
Zhenya:

Ihre Motivation ist großartig! Wenn alles genau so ist, wie Sie sagen, werden Sie schnell auf den Knochen Ninja c multichart beißen)))

Allerdings, IMHO, hier haben wir etwas radikal Neues zu schaffen, das heißt, zusätzlich zu dem, was Sie schrieb Herr Reshetov , brauchen Sie nur ein Forschungs-Studio, mit beliebigen Datensätzen zu arbeiten, nicht nur aus dem Markt heruntergeladen werden, weil viele Dinge müssen sehr trivial, synthetische Beispiele zu versuchen, zu verstehen, was passiert, gut, sollten Sie mich als Programmierer Programmierer verstehen)) Ich müsste verschiedene Diagramme, Streudiagramme, Hitmaps, Verteilungen und so weiter zeichnen. Im Allgemeinen wäre es wirklich cool, wenn ein solcher Satz von Werkzeugen direkt von MetaEditor aus verfügbar wäre, aber ehrlich gesagt, habe ich keine Hoffnung...

Aber im Allgemeinen, natürlich, ich mag den Trend Ihrer Gedanken)))

Beziehen Sie sich auf diesen "Schuss" von Reshetov?

"Dieses R ist eine Art verrottetes Fahrrad mit eckigen Rädern. Was soll man über einige seiner Pakete sagen, wenn die Basis, d.h. der Kern in R, schief ist und eine ernsthafte Feinabstimmung mit einer "Bleistiftfeile" benötigt? Wie glaubwürdig kann jemand sein, der sich seit Jahren nicht einmal die Mühe macht, die Korrektheit grundlegender Funktionen in R zu überprüfen? Worin kann die "Stärke" in der Schwäche von R - der Fehlerhaftigkeit der Berechnungen durch R - liegen?

Es ist gut, dass MetaQuotes einigen Nutzern die Augen geöffnet hat und Tests mit Open Source durchführt, so dass jeder unabhängig voneinander überprüfen und sich vergewissern kann, dass sie nicht unbegründet sind. Natürlich nicht alle Open Source, denn einige religiöse Fanatiker aus der destruktiven Sekte von R werden weiterhin blind an die "Unfehlbarkeit" der Berechnungen in ihrer krummen Sprache und ihren Paketen glauben, anstatt sich den vorgestellten Tests zuzuwenden und sie unabhängig zu überprüfen, anstatt bigott zu schwafeln und die Krummheit von R als "allgemein anerkannten Standard" zu verteidigen.

Nun ist es ganz offensichtlich, dass es besser wäre, die MQL-Funktionalität zur Erstellung von Handelsstrategien zu verwenden, da das Ergebnis korrekter sein wird, als zu versuchen, dies über Kurve und Steigung R zu tun.

Besonderer Dank gilt den Entwicklern von MetaQuotes für den konstruktiven Ansatz, die Tests und den Quellcode sowie für die Identifizierung des "nackten Königs - R"!"

 
Vladimir Perervenko:

Ist dies der "Schuss", auf den sich Reshetov bezieht?

Nein, das ist die Botschaft:

Yury Reshetov:

R, wie auch viele andere Sprachen, ist für maschinelles Lernen weitaus geeigneter als MQL, da es über eine inhärente Funktionalität zur Verarbeitung von Daten in Arrays verfügt. Ein Beispiel für maschinelles Lernen ist meist ein zweidimensionales Datenarray, so dass eine Funktion für die Arbeit mit Arrays erforderlich ist:

  1. Einfügen von Zeilen und Spalten als Arrays kleinerer Dimension in ein anderes Array
  2. Ersetzen von Zeilen und Spalten in einem Array durch Arrays mit geringerer Größe
  3. Löschen von Zeilen und Spalten aus einem Array (z. B. um unwichtige Prädiktoren oder Beispiele mit offensichtlichen "Ausreißern" aus einer Stichprobe zu entfernen)
  4. Aufteilung von Feldern in Teile, was zu zwei oder mehr Feldern führt, die Teile des ursprünglichen Feldes sind (erforderlich für die Aufteilung einer Probe in Trainings- und Testteile oder in mehrere Teile, z. B. für Walling Forward).
  5. Zufälliges Mischen von Zeilen und Spalten in einem Array mit gleichmäßiger Verteilung (es ist notwendig, dass bestimmte Beispiele aus einer Stichprobe in verschiedene Teile fallen, vorzugsweise gleichmäßig über diese Teile verteilt).
  6. Verschiedene Funktionen für die Datenverarbeitung pro Zeile oder Spalte (z. B. Berechnung des arithmetischen Mittels pro Zeile oder pro Spalte, Varianz oder Ermittlung des Maximal- oder Minimalwerts in einer Zeile zur weiteren Normalisierung).
  7. Und so weiter und so fort.

Bis MQL die oben erwähnten Funktionen für die Handhabung von Mustern in Arrays implementiert hat, werden die meisten Entwickler von Algorithmen für maschinelles Lernen andere Programmiersprachen bevorzugen, die bereits über all dies verfügen. Oder sie verwenden den unprätentiösen MLP (Algorithmus der 1960er Jahre) aus der AlgLib-Bibliothek, in der, wenn ich mich richtig erinnere, zweidimensionale Arrays der Einfachheit halber als eindimensional dargestellt werden.

Natürlich sind auch Funktionen für Dichten von Zufallsverteilungen eine notwendige Funktionalität. Aber solche Funktionen werden bei Aufgaben des maschinellen Lernens nicht immer benötigt, und bei einigen Aufgaben werden sie überhaupt nicht verwendet. Aber Operationen mit Stichproben als mehrdimensionale Arrays sind das, was die Implementierung von Algorithmen des maschinellen Lernens immer für jede Aufgabe benötigt, es sei denn natürlich, es ist eine Aufgabe, einem Gitter beizubringen, offensichtlich normalisierte Daten aus trivialen CWR zu lernen.

 
Vladimir Perervenko:

Ist dies der "Schuss", auf den sich Reshetov bezieht?

"Dieses R ist faul - ein Fahrrad mit eckigen Rädern. Was soll man über einige seiner Pakete sagen, wenn die Basis, d.h. der Kern von R schief ist und ernsthafte Verbesserungen "mit einer Bleistiftfeile" benötigt? Wie glaubwürdig kann jemand sein, der sich seit Jahren nicht einmal die Mühe macht, die Korrektheit grundlegender Funktionen in R zu überprüfen? Worin kann die "Stärke" in der Schwäche von R - der Fehlerhaftigkeit der Berechnungen durch R - liegen?

Es ist gut, dass MetaQuotes einigen Nutzern die Augen geöffnet hat und Tests mit Open Source durchführt, so dass jeder unabhängig voneinander überprüfen und sich vergewissern kann, dass sie nicht unbegründet sind. Natürlich nicht alle Open Source, denn einige religiöse Fanatiker aus der zerstörerischen Sekte von R werden weiterhin blind an die "Unfehlbarkeit" der Berechnungen in ihrer krummen Sprache und ihren Paketen glauben, anstatt sich den vorgestellten Tests zuzuwenden und sie unabhängig zu überprüfen, anstatt fanatischen Blödsinn zu machen und die Krummheit von R als "allgemein anerkannten Standard" zu verteidigen.

Nun ist es ganz offensichtlich, dass es besser wäre, die MQL-Funktionalität zur Erstellung von Handelsstrategien zu verwenden, da das Ergebnis korrekter sein wird, als zu versuchen, dies über Kurve und Steigung R zu tun.

Besonderer Dank gilt den Entwicklern von MetaQuotes für ihren konstruktiven Ansatz, ihre Tests und ihre Quellen sowie für die Identifizierung des "Naked King - R"!"

Haben Sie Ihren Beitrag über das "minky MQL" schon gelöscht? Sie reiben sich an Ihren Beiträgen, so wie die Radovianer nach der Wahl von Trump an ihren Facebooks reiben.

 

Hier ist ein Beispiel für eine Gamma-Verteilung in Wolfram Alpha, nur so zum Spaß.

Ihm wird eine Funktion gegeben, eine leicht vereinfachte Gamma-Verteilungsdichtefunktion.

Der Punkt liegt im Nenner x. Der Grenzwert auf der rechten Seite, wie Sie sehen, bei x->0 Wolfram schätzt richtig: inf.

Das heißt, im rechten Grenzwert ist die Dichte bei Null unendlich (dies ist genau die Antwort auf dgamma).

Integrieren wir diese Funktion in den großen Saport:

Das Integral ist 1 (natürlich gerundet, da nicht die volle Summe genommen wird).

Fazit: Trotz der Tatsache, dass die Funktion am Extrempunkt ins Unendliche geht, zählt das Integral dieser Funktion wie gewünscht.

 
Alexey Burnakov:

Hier ist ein Beispiel für die Gamma-Verteilung in Wolfram Alpha, nur so zum Spaß.

Die Schlussfolgerung ist, dass das Integral dieser Funktion, auch wenn die Funktion am Extrempunkt ins Unendliche geht, wie es sein sollte, gut zählt.

Danke für das Beispiel, Sie haben Recht. Dieses Integral ist konvergent.

Das Extremum im Punkt x=0 kann auch zur Bestimmung der Dichte verwendet werden und führt nicht zu Divergenzen.

 
Quantum:

Danke für das Beispiel, Sie haben Recht. Dieses Integral ist konvergent.

Die Grenzwerte bei x=0 können auch zur Bestimmung der Dichte verwendet werden, ohne dass dies zu Divergenzen führt.


Ich danke Ihnen! Respekt.

 

Beispiel von R mit Schnellverarbeitungspaketen.

library(data.table)

library(ggplot2)


start <- Sys.time()


set.seed(1)

dummy_coef <- 1:9


x <- as.data.table(matrix(rnorm(9000000, 0, 1), ncol = 9))

x[, (paste0('coef', c(1:9))):= lapply(1:9, function(x) rnorm(.N, x, 1))]


print(colMeans(x[, c(10:18), with = F]))


x[, output:= Reduce(`+`, Map(function(x, y) (x * y), .SD[, (1:9), with = FALSE], .SD[, (10:18), with = FALSE])), .SDcols = c(1:18)]


x[, sampling:= sample(1000, nrow(x), replace = T)]


lm_models <- x[, 

{

lm(data = .SD[, c(1:9, 19), with = F], formula = output ~ . -1)$coefficients

}, 

by = sampling]


lm_models[, coefs:= rep(1:9, times = 1000)]


avg_coefs <- lm_models[, mean(V1), by = coefs]

plot(dummy_coef, avg_coefs$V1)


lm_models[, 

  print(shapiro.test(V1)$p.value)

  , by = coefs]


ggplot(data = lm_models, aes(x = V1)) +

geom_histogram(binwidth = 0.05) +

facet_wrap(~ coefs, ncol = 3)


Sys.time() - start

Laufzeit: 5 Sek. Es wurden 1.000 lineare Modelle erstellt. Jeweils für 1000 Beobachtungen.

[1] 0.8908975

[1] 0.9146406

[1] 0.3111422

[1] 0.02741917

[1] 0.9824953

[1] 0.3194611

[1] 0.606778

[1] 0.08360257

[1] 0.4843107

Alle Koeffizienten sind normal verteilt.

Und ggplot-ic für die Visualisierung.

 

Und ein weiteres Beispiel. Bezieht sich auch auf die große Stichprobenrotation für statistische Simulationen.

########## simulate diffference between mean density with different sample size


library(data.table)

library(ggplot2)


rm(list=ls());gc()


start <- Sys.time()


x <- rnorm(10000000, 0, 1)

y <- rnorm(10000000, 0, 1)


dat <- as.data.table(cbind(x, y))

dat[, (paste0('sampling_', c(100, 1000, 10000))):= lapply(c(100, 1000, 10000), function(x) sample(x, nrow(dat), replace = T))]


dat_melted <- melt(dat, measure.vars = paste0('sampling_', c(100, 1000, 10000)))


critical_t <- dat_melted[, 

   {

    mean(x) - mean(y)

   }

   , by = .(variable, value)]


ggplot(critical_t, aes(x = V1, group = variable, fill = variable)) + 

stat_density(alpha = 0.5)


Sys.time() - start


gc()

Die Laufzeit beträgt 3,4 Sekunden.

Es werden normalverteilte Stichproben erstellt, die bei Null zentriert sind:

1.000 mal 10.000 Wertepaare

10 000 auf 1 000 Wertepaare

100.000 von 100 Wertepaaren

Die Differenz zwischen den Mittelwerten (MO == 0) für jede Stichprobe wird gezählt.

Es werden die Dichten von Stichprobenmittelverteilungen für Stichproben unterschiedlicher Größe abgeleitet.

Nur hier bedeutet sampling_100, dass Sie 10.000.000 / 100 benötigen, um den Stichprobenumfang zu erhalten. Das heißt, bei kleineren Stichproben ist der Standardfehler größer...

Grund der Beschwerde: