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

 
Aleksey Nikolayev:

Suchen Sie nach Di - dem durchschnittlichen Quadrat der Inkremente für die i-te Minute des Tages. Anschließend werden alle Inkremente durch die entsprechenden di=sqrt(Di) geteilt. Addieren Sie die quadrierten Inkremente und suchen Sie in der neuen Reihe nach Abweichungen von der SB. Der Preis ist verzerrt, aber die Zeit ändert sich nicht.

Was nützen 2 Monate für jede Minute? Die Änderungen in jeder Minute sind klein, die Berechnungen sind groß. Entweder eine Minute rückwärts oder einen Monat rückwärts und einen Monat vorwärts. Code für den ersten Takt.

for(int i = 1,i<= 43200*2, i++);
{
Di+=pow((iClose(NULL,1,i) - iOpen(NULL,1,i)),2)/i ;
}
di=sqrt(Di);

Neue Zeile

for(int i = 1,i<= 43200*2, i++);
{
NewClose[i]=iClose(NULL,1,i)/di;
NewOpen[i]=iOpen(NULL,1,i)/di ;
}

Ist das richtig?

 
Valeriy Yastremskiy:

Ist das in Ordnung?


Ich glaube nicht.

Ich habe den Algorithmus so verstanden: Nehmen wir an, die Zeit ist 10:00, Sie berechnen Di für die Balken m1 dieser Zeit und dann für 10:00-Minuten (close[i] - open[i])/di und so für jede Minute.

 
Evgeniy Chumakov:


Das glaube ich nicht.

Ich habe den Algorithmus so verstanden: Nehmen wir an, es ist 10:00 Uhr, Sie berechnen Di für die Balken m1 dieser Zeit und dann für die Minute 10:00 (close[i] - open[i])/di und so für jede Minute.

Code für den ersten Takt. Man muss tiefer gehen, es ist eine weitere Schleife oben drauf.
 
Evgeniy Chumakov:


Das glaube ich nicht.

Ich habe den Algorithmus so verstanden: Nehmen wir an, es ist 10:00 Uhr, Sie berechnen Di für die Balken m1 dieser Zeit und dann für die Minute 10:00 (close[i] - open[i])/di und so für jede Minute.

Das ist richtig. Wir erstellen zwei Archive - Real und Integer mit der Größe 1440=24*60. In der ersten summieren Sie die Quadrate der Inkremente, in der zweiten die Anzahl der Takte für eine bestimmte Minute und dividieren dann die erste durch die zweite (für Zahlen mit einer Anzahl von Takten größer als 1). Dann extrahieren wir die Quadratwurzel und renormieren erst dann die Inkremente und setzen die kumulative Summe zusammen - eine neue Reihe, die wir dann daraufhin untersuchen, ob sie sich von SB unterscheidet.

 
Aleksey Nikolayev:

Ja, das ist richtig. Wir haben zwei Archive - Real und Integer, Größe 1440=24*60. In der ersten addieren Sie die Quadrate der Inkremente, in der zweiten die Anzahl der Takte für eine bestimmte Minute und dividieren dann die erste durch die zweite (bei Zahlen mit einer Anzahl von Takten größer als 1). Dann extrahieren wir die Quadratwurzel und erst danach renormieren wir die Inkremente und kumulieren sie zu einer neuen Reihe, die wir in Bezug auf die Differenz zu SB analysieren.

Mit anderen Worten: der quadratische Durchschnitt der Minutien für 24 Stunden, also für 2 Monate. Minute Taktzahl? Teilt man die Summe der Quadrate durch 1440?

 
Valeriy Yastremskiy:

Teilt man die Summe der Quadrate durch 1440?


Man teilt die Summe der Quadrate durch die Anzahl der Balken für eine bestimmte Minute und zieht dann die Wurzel.

 
Aleksey Nikolayev:

Ja, das ist richtig. Wir haben zwei Archive, ein reales und ein ganzzahliges mit der Größe 1440=24*60.


d.h. wir müssen eine kumulative Tagessumme = 1440 Minuten bilden?

 
Evgeniy Chumakov:


Man teilt die Summe der Quadrate durch die Anzahl der Balken für eine bestimmte Minute und zieht dann die Wurzel.

Dann verstehe ich das nicht. Für die Tiefe von Balken 3 wird die Summe drei sein und dieser Wert wird für den dritten Balken oder für den ersten Balken berechnet. Ich verstehe, dass der Durchschnitt für die gleiche Anzahl von Balken und nicht kumulativ berechnet werden muss. Es wäre besser, die Formel gleich zu verabreichen. Wir alle verstehen Wörter anders.)

for(int i = 1,i<= 1440, i++);
{
Di+=pow((iClose(NULL,1,i) - iOpen(NULL,1,i)),2)/i ;
di=sqrt(Di);
DVal[i]=(iClose(NULL,1,i) - iOpen(NULL,1,i)/di; 
}

Das sieht für mich nicht richtig aus.

 
Valeriy Yastremskiy:


Das scheint mir nicht richtig zu sein.


falscher Code

 

Unter der Annahme, dass es keine Lücken in der Historie gibt und alle Tage 1440 Minuten lang sind (am Freitag weniger), sollte der Code folgendermaßen aussehen

double di = 0;

int n = 40; // глубина 40 суток (два месяца)

int pos = 0; // текущий бар

int step = 0; // шаг


for(int i = 0; i < n; i++){

di += MathPow( close[pos + step] - open[pos + step],2);

step += 1440;
}

di = MathSqrt(di/n);

double x = (close[pos] - open[pos])/di;
Grund der Beschwerde: