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

 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algorithmenhandel

Maxim Dmitrievsky, 2023.10.01 10:55 AM

residuals_a = a_mat - a_mat. column_means residuals_b = b_mat - b_mat. column_means a_residual_sums = residuals_a. column_sums b_residual_sums = residuals_b. column_sums residual_products = dot_product( residuals_a. transpose, residuals_b)

sum_products = sqrt( dot_product( a_residual_sums, b_residual_sums))

Korrelationen = Residuen_Produkte / Summe_Produkte

Dies scheint eine frontale Berechnung der Korrelationsmatrix zu sein.

 
fxsaber #:
Richtig, danke! Ich verstehe nicht, warum die falsche Option mit inCols < 100 funktioniert.

Anscheinend

Sens = 1 e-10
zu viel. Zufällig - die durchschnittliche Korrelation liegt dort wahrscheinlich bei 0.
 
Forester #:

Wahrscheinlich zu viel. Zufällig - wahrscheinlich besteht eine durchschnittliche Korrelation von etwa 0.

Dort wird nicht der durchschnittliche Fehler gemessen, sondern die maximale Differenz zwischen den entsprechenden Elementen.

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

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

fxsaber, 2023.10.01 09:38 Uhr

bool IsEqual( matrix<double> &Matrix1, const matrix<double> &Matrix2, const double Sens = 1 e-10 )
{
  Matrix1 -= Matrix2;  
  
  const bool Res = (MathMax(MathAbs(Matrix1.Max()), MathAbs(Matrix1.Min())) < Sens);
  
  Matrix1 += Matrix2;
  
  return(Res);
}


Deshalb ist es nicht klar, wie der falsche Code

  for (int i = 0; i < (int)Matrix.Rows(); i++)

einen Treffer erhält.

inRows = 5 inCols = 50 
matrix<double> Matrix1 = CorrMatrix(Matrix) - 242 mcs, 0 MB
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 117 mcs, 0 MB
IsEqual(Matrix1, Matrix4) = true 
 
Forester #:
Und PearsonCorrM2 kann um das 2-fache beschleunigt werden, wenn man mit Dreiecken zählt, d.h. vom Ende ausgeht. Zählen Sie 100 Zeile mit allen, dann 99 mit allen 0-99, 99 und 100. bereits gezählt - Sie können einfach kopieren. ...50. Zeile mit allen bis 50. usw. Also, nicht mit sich selbst zählen, weil =1.
Das hat leider keinen Sinn.
inRows = 100 inCols = 15000 
matrix<double> Matrix1 = CorrMatrix(Matrix) - 14196778 mcs, 1717 MB
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 538256223 mcs, 1717 MB
IsEqual(Matrix1, Matrix4) = true 
Die furchtbare Bremse wird noch langsamer werden. Hier geht es eindeutig nicht ohne selbstgemachte Werkzeuge.
 
fxsaber #:

Deshalb ist es nicht klar, wie das mit dem falschen Code geht.

einen Treffer erhält.

Ich habe es herausgefunden, wenn man die Matrixberechnungen vertauscht, erhält man eine Fehlanpassung.

inRows = 5 inCols = 50 
matrix<double> Matrix4 = CorrMatrix2(Matrix) - 113 mcs, 0 MB
matrix<double> Matrix1 = CorrMatrix(Matrix) - 214 mcs, 0 MB
IsEqual(Matrix1, Matrix4) = false 

D.h. bei der Berechnung der ersten Matrix ist Müll aus dem Speicher in die neue Matrix gelangt und durch irgendein Wunder mit dem gewünschten Ergebnis übereingestimmt.

 
fxsaber #:

Ich denke, es handelt sich um eine Kopf-an-Kopf-Berechnung der Korrelationsmatrix.

Ja, wenn wir μl ohne Zyklen auf neuen Matrizen machen, wird es dann nicht schneller sein?
 
fxsaber #:
196

500 Sekunden gegenüber 14 - deshalb erinnere ich mich, dass es

PearsonCorrM

die schnellste, wegen des Algorithmus.

Maxim Dmitrievsky #:
Nun, ja, wenn Sie es mit neuen µl-Matrizen machen, wird es dann nicht schneller sein?

Ich denke, alle 9 Funktionen, die in PearsonCorrM und PearsonCorrM2 verwendet werden, können in Matrizen umgeschrieben und verglichen werden. Im Prinzip würde es eine Stunde Arbeit kosten, die Matrixdeklarationen und -referenzen neu zu schreiben. Gleichzeitig werden wir herausfinden, ob Matrizen besser sind als din. arrays.

Titel
IsFiniteMatrix(
IsFiniteVector(
AblasInternalSplitLength(
AblasSplitLength(
RMatrixGemmK(
RMatrixGemm(
RMatrixSyrk2(
RMatrixSyrk(
RankX(

 
Forester #:

Ich denke, alle 9 in PearsonCorrM und PearsonCorrM2 verwendeten Funktionen können in Matrizen umgeschrieben und verglichen werden. Im Prinzip wird es eine Stunde Arbeit kosten, die Matrixansagen und -referenzen neu zu schreiben. Gleichzeitig werden wir herausfinden, ob Matrizen besser sind als din. Arrays.

Alles ist bereits getan: MQ hat sie für ihre Matrizen umgeschrieben.

Förster #:

500 sec vs 14 - deshalb habe ich mich daran erinnert.

die schnellste, wegen des Algorithmus.

Ich habe den Algorithmus dort nicht erkannt. NumPy liegt nur deshalb nicht weit zurück, weil es keine wiederholten Berechnungen durchführt.

NumPy scheint einen anderen Algorithmus zu haben als ALglib, da die Leistung sehr unterschiedlich ist. Aber es ist klar, dass es in der riesigen Python-Gemeinschaft einige sehr starke Algorithmiker gab, die sich intensiv mit diesem Thema befasst haben.
 
fxsaber #:

Das ist bereits geschehen: Die MQs haben sie so umgeschrieben, dass sie in ihre Matrizen passen.

Und es wurde langsamer?)

 
Forester #:

Und es wurde langsamer ??))))

Vergleichen Sie mit der alten Version von Alglib. Ich habe keine Daten, dass es langsamer geworden ist.