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

 
anonym:

apply(embed(pattern, length(signal)), 1, cor, y = signal, method = 'pearson')

Danke! Ich frage mich, wie viel R auf diese Weise zählt. Ich habe den Bibla-Algorithmus mit 1 000 000 Signallängen und 100 000 Mustern gemessen - 1 Sekunde.
 
fxsaber:
Ich danke Ihnen! Ich frage mich, wie viel R auf diese Weise zählt. Ich habe den Bibel-Algorithmus mit einer Signallänge von 1.000.000 und einem Muster von 100.000 - 1 Sekunde gemessen.

Eine Million Mal schneller! Na und? Handelssysteme messen wie Prozessoren?
 
SanSanych Fomenko:

Eine Million Mal schneller! Was also? Handelssysteme werden wie Prozessoren gemessen?
Sie haben eine Art Komplex.
 
fxsaber:
Sie haben eine Art Komplex.


Nein, kein Komplex.

μl und R sind völlig unterschiedliche und sich nicht überschneidende Systeme. Und was gibt es zu vergleichen? Und Sie sind nicht der Einzige!

 
SanSanych Fomenko:

μl und R sind völlig unterschiedliche und sich nicht überschneidende Systeme. Und was gibt es zu vergleichen? Und Sie sind nicht der Einzige!

Ich interessierte mich nur für die Geschwindigkeit der Realisierung von nicht seltenen statistischen Aufgaben in einer der Sprachen.

R ist die populärste statistische Sprache, und es gibt viele Nutzer. Deshalb wird hier die Frage des Vergleichs gestellt.

Der Algorithmus der Implementierung und damit seine Effizienz ist von Interesse. Dabei spielt es keine Rolle, in welcher Sprache sie verfasst ist.

 
fxsaber:

Ich war nur an der Geschwindigkeit der Implementierung einer nicht ungewöhnlichen statistischen Aufgabe in einer der Sprachen interessiert.

R ist die beliebteste statistische Sprache und viele Menschen hier kennen sie. Aus diesem Grund wird hier die Frage nach dem Vergleich gestellt.

Der Algorithmus der Implementierung und damit seine Effizienz ist von Interesse. Dabei spielt es keine Rolle, in welcher Sprache sie verfasst ist.

MT ist ein Handelsterminal. Deshalb diskutiere ich hier auf dieser Website und in diesem Thread über die Entwicklung von TS. Aber wir finden immer wieder Leute, die über irgendwelche Programmiertricks diskutieren, die praktisch keine Auswirkungen auf die Handelsergebnisse haben. Die Korrelationsfunktion selbst ist für andere Algorithmen nützlich.

Diese Funktion kann in Handelsentscheidungsblöcken verwendet werden (zumindest verwende ich sie), aber ihre Ausführungsgeschwindigkeit spielt überhaupt keine Rolle, da die Hauptzeit für die Berechnung eines Handelssignals durch andere, rechnerisch komplexe Algorithmen bestimmt wird, die in mql überhaupt nicht vorhanden sind.

Das ist in der Phase der Ausführung.

Betrachtet man das Stadium der TS-Entwicklung, so ist R µl grundsätzlich überlegen, da es sich um einen Interpreter handelt, der in der Phase, in der der Algorithmus noch nicht ganz klar ist und man viele Varianten ausprobieren muss, um beispielsweise Korrelationen von Währungspaaren zu vergleichen, sehr nützlich ist. Bei R ist die Überprüfung der Korrelation ein Klopfen auf die Tastatur, mit ein paar Zeilen, einschließlich einer sehr praktischen Bildung von Anfangsvektoren.

Das war der Punkt, auf den ich hinauswollte, nämlich dass es keinen Sinn macht, die Ausführungsgeschwindigkeit dieser Funktionen und generell aller anderen in mcl und R implementierten Funktionen zu vergleichen.


PS.

Aber Ihre Bibliothek hat mich vor dem Studium von mcl5 bewahrt, vielen Dank dafür.

 
SanSanych Fomenko:

MT ist ein Handelsterminal. Dementsprechend diskutiere ich hier auf dieser Seite und in diesem Thread die Entwicklung des TS. Aber wir finden immer wieder Leute, die über irgendwelche Programmiertricks diskutieren, die fast keine Auswirkungen auf die Handelsergebnisse haben. In der Tat ist Ihre Frage die gleiche, denn die Korrelationsfunktion selbst ist bei anderen Algorithmen sinnvoll.

Zuvor konnten einige Ideen nicht durch TC getestet werden, da die geringe Leistung einiger Algorithmen dies verhinderte. In diesem Fall ist genau das passiert - ein alternativer Algorithmus ermöglichte es dem Optimierer, eine Idee zu erforschen, die so alt ist wie die Welt, aber bisher nicht in einer angemessenen Zeit berechnet werden konnte.


Wenn man Hunderte von Milliarden von Pearson QC in Mustern von einigen tausend Längen berechnen muss, wird die geringe Geschwindigkeit einer scheinbar einfachen Aufgabe zu einem unüberwindbaren Engpass. Wenn ein Problem zu rechenintensiv erscheint, könnte man sagen, dass es sich um ein schlecht formuliertes Problem mit wenig Verständnis handelt. Vielleicht ist es das. Aber was geschehen ist, ist geschehen. Und es ist immer interessant zu sehen, wie andere solche Dinge umsetzen.

 

Ist es besser, etwas mehr Zeit auf die Entwicklung zu verwenden, aber dann immer schnell zu rechnen, oder schnell zu entwickeln und dann immer langsame Berechnungen in Kauf zu nehmen?

Wenn R schnell in der Entwicklung, aber langsam in der Berechnung ist, wo soll dann die Berechnung stattfinden? Um schnell einen langsamen Supersportwagen zu entwickeln? Ein solches Superauto brauchen Sie nicht.

 
fxsaber:

Ich war nur an der Geschwindigkeit der Implementierung einer nicht ungewöhnlichen statistischen Aufgabe in einer der Sprachen interessiert.

R ist die beliebteste statistische Sprache und viele Menschen hier kennen sie. Aus diesem Grund wird hier die Frage nach dem Vergleich gestellt.

Der Algorithmus der Implementierung und damit seine Effizienz ist von Interesse. Dabei spielt es keine Rolle, in welcher Sprache sie verfasst ist.


Nun, bei einem Signal der Länge 1000000 und einem Muster der Länge 100000 ist es unwahrscheinlich, dass diese Implementierung überhaupt in einer vernünftigen Zeit abläuft, da sie die Erstellung einer 900001x100000 Zeitmatrix erfordern würde :D Aber es hat weniger als 30 Sekunden gedauert, um sie zu schreiben, und bis zu einer gewissen Aufgabengröße wird sie durchaus anwendbar sein. Wir könnten das Gleiche mit fft/convolve machen, in diesem Fall müssten wir mehr Code schreiben, aber es wäre genauso schnell wie C-Code.

In R ist es sehr bequem, Prototypen von komplexen Modellen zu erstellen - das ist seine starke Seite. Die Leistung des Codes ist eine Frage der Fähigkeiten und der Erfahrung:

1. Einige R-Konstruktionen und Datentypen arbeiten schneller als andere (veränderliche vs. unveränderliche Typen (Liste vs. Umgebung), for vs. lapply/sapply/etc., S4 vs. R6).

2. die einfache Parallelisierung in R für einige Probleme ermöglicht es Ihnen, eine langsame Code-Lösung schneller zu erhalten, als es dauern würde, um schnellen Code in einer anderen Sprache + Berechnung zu schreiben.

3. Einzelne Operationen in der Sprache werden universell, aber ineffizient durchgeführt. Wenn Sie kleine, aber rechenintensive Funktionen in C++ implementieren, können Sie enorme Ergebnisse erzielen, ohne die Entwicklungsgeschwindigkeit so stark zu verringern, wie wenn Sie den gesamten Code in einer C-ähnlichen Sprache schreiben. Beispielsweise kann das Summieren von Matrixelementen über Zeilen oder Spalten in R 4 bis 15 Mal schneller sein als rowSums/colSums/apply(, 1, sum)/apply(, 2, sum).

 
anonym:


Nun, bei einem Signal der Länge 1000000 und einem Muster der Länge 100000 kann diese Implementierung kaum in einer vernünftigen Zeit berechnet werden, da sie die Erstellung einer 900001x100000 Zeitmatrix erfordern würde :D Aber es hat weniger als 30 Sekunden gedauert, sie zu schreiben, und bis zu einer gewissen Aufgabengröße wird sie recht gut anwendbar sein. Wir könnten das Gleiche mit fft/convolve machen, in diesem Fall müssten wir mehr Code schreiben, aber es wäre genauso schnell wie C-Code.

R eignet sich sehr gut für die Erstellung von Prototypen komplexer Modelle - das ist seine Stärke. Die Geschwindigkeit des Codes ist eine Frage des Könnens und der Erfahrung:

1. Einige R-Konstrukte und Datentypen sind schneller als andere (veränderliche vs. unveränderliche Typen (Liste vs. Umgebung), for vs. lapply/sapply/etc., S4 vs. R6).

2. die einfache Parallelisierung in R für einige Probleme ermöglicht es Ihnen, eine langsame Code-Lösung schneller zu erhalten, als es dauern würde, um schnellen Code in einer anderen Sprache + Berechnung zu schreiben.

3. einzelne Operationen in der Sprache werden universell, aber ineffizient durchgeführt. Wenn Sie kleine, aber rechenintensive Funktionen in C++ implementieren, können Sie enorme Ergebnisse erzielen, ohne die Entwicklungsgeschwindigkeit so stark zu verringern, wie wenn Sie den gesamten Code in einer C-ähnlichen Sprache schreiben. Beispielsweise kann das Summieren von Matrixelementen über Zeilen oder Spalten in R 4 bis 15 Mal schneller sein als rowSums/colSums/apply(, 1, sum)/apply(, 2, sum).

Vielen Dank für die ausführliche Antwort! Ich habe immer das gleiche Problem - meine eigene mangelnde Kompetenz.