eine Handelsstrategie auf der Grundlage der Elliott-Wellen-Theorie - Seite 58

 
Es gibt viele Dinge im Leben, die auf den ersten Blick wichtig oder unwichtig erscheinen. Wie die Ergebnisse eines primitiven Expert Advisors, der laut Avals erst einmal gerechtfertigt werden musste, obwohl die intuitive Idee dahinter richtig ist. Aber es war für mich einfacher, es in der Realität zu testen, als zu versuchen, es zu widerlegen. Wenn es bis zum Ende des Jahres hält - dann werde ich es wahrscheinlich im Tester testen :)
<br / translate="no">
Zusammenfassung:
Einzahlung/Abhebung: 5.000,00 Kreditrahmen: 0,00
Geschlossener Handel P/L: 1 186,63 Gleitender P/L: 560,29 Marge: 961,62
Saldo: 6 186,63 Eigenkapital: 6 746,92 Freier Spielraum: 5 785,30

Bruttogewinn: 3 669,45 Bruttoverlust: 2 482,82 Nettogewinn insgesamt: 1 186,63
Gewinnfaktor: 1,48 Erwartete Auszahlung: 23,27
Absoluter Drawdown: 143,75 Maximaler Drawdown (%): 858,39 (13,20%)

Total Trades: 51 Short-Positionen (Won %): 26 (42.31%) Long-Positionen (Won %): 25 (56.00%)
Gewinn-Trades (% der Gesamtzahl): 25 (49,02%) Verlust-Trades (% der Gesamtzahl): 26 (50,98%)
Größter Gewinn Handel: 540.94 Verlust Handel: -292.62
Durchschnittlicher Gewinn Handel: 146.78 Verlust Handel: -95.49
Maximale aufeinanderfolgende Gewinne ($): 6 (1.099,13) aufeinanderfolgende Verluste ($): 4 (-744,95)
Maximaler fortlaufender Gewinn (Anzahl): 1.099,13 (6) fortlaufender Verlust (Anzahl): -744,95 (4)
Durchschnittliche aufeinanderfolgende Siege: 2 aufeinanderfolgende Niederlagen: 2
 
Ich habe meinen Expert Advisor ein wenig optimiert, um die Bedingungen für den Markteintritt zu lockern, und ein variables Lot hinzugefügt.
Die Ergebnisse finden Sie hier https://c.mql5.com/mql4/forum/2006/06/new_results.zip
Die Losgröße schwankte zwischen $5 und $80.
Der Einstiegs-/Ausstiegsalgorithmus wurde unter Berücksichtigung des EURUSD entwickelt, so dass der Expert Advisor seit 3 Jahren beachtliche Ergebnisse in der Historie aufweist. Aufgrund der umfangreichen Berechnungen habe ich einfach die Stichprobe, in der die Kanäle geschätzt werden, auf nur 300 Takte in absehbarer Zeit begrenzt. Das sind 12,5 Handelstage. In der Tat sollten wir viel längere Stichproben in Betracht ziehen, um die Zuverlässigkeit eines Einstiegspunktes zu erhöhen. Ich werde den Expert Advisor noch einmal mit langen Stichproben laufen lassen, um einen experimentellen Beweis für meine Annahme zu erhalten, aber das erfordert eine gewisse Zeit für die Berechnung. Nachdem ich das in der Datei gezeigte Ergebnis für EURUSD erhalten hatte, ließ ich den Expert Advisor mit denselben Parametern (einschließlich des Trailing-Stop-Parameters!), mit denen er für EURUSD optimiert wurde, auf GBPUSD und USDCAD laufen. Natürlich ist es uns nicht gelungen, bei den anderen 2 Paaren ein nennenswertes Ergebnis zu erzielen, aber ich denke, das erzielte Ergebnis ist immer noch positiv beeinflusst. Daraus kann ich zwei Schlussfolgerungen ziehen. Der erste ist, dass das von Vladislav vorgeschlagene System bei genauer technischer Umsetzung durchaus rentabel sein kann. Vielleicht ist es Vladislav gelungen, die universellen Merkmale zu finden, die bei allen Währungspaaren ohne Korrektur funktionieren. Wenn wir diese 3 Währungspaare vergleichen, können wir die folgenden Unterschiede feststellen. USDCAD weist im Vergleich zu EURUSD schnellere Bewegungen auf. D.h. wenn EURUSD 3 Stunden braucht, um 1,5 zu überschreiten, kann es bei USDCAD 1 Stunde dauern, um 1,5 zu überschreiten, was zu dem ernsten Problem einer Verzögerung führt, zumindest für den Zeitrahmen H1, für den wir das Ergebnis erhalten haben. Generell werde ich meine Forschung in dieser Richtung fortsetzen. Ich halte nun eine vernünftige Verschärfung der Anschläge für außerordentlich wichtig. Wann und um wie viel man sie beim Handel nach oben ziehen sollte. Da es offensichtlich ist, dass der Standard-Trailing-Stopp nicht erlaubt, viel zu nehmen. Wir werden sie weiter analysieren.
 
Guten Tag Solandr!

Können Sie mir sagen, welche Bedingungen Sie gelockert haben?
 
Können Sie mir sagen, welche Bedingungen Sie gelockert haben?

Ich habe den Stichprobenumfang für die Berechnung und auch den Zeitraum für die Berechnung des Murray Level Indikators reduziert. Wenn Sie eine kurze Stichprobengröße haben, gibt es mehr lokale Hochs und Tiefs, die den Einstiegspunkt erfüllen. Wenn die Murray-Levels für einen kürzeren Zeitraum berechnet werden, liegen sie auch näher beieinander, was die Wahrscheinlichkeit eines Markteintritts erhöht. Vergleichen Sie 31 Geschäfte aus der vorherigen Datei und 80 aus der neuen Datei. Infolgedessen hat die Zahl der Geschäfte zugenommen, aber ihre Qualität hat entsprechend abgenommen. Die Einführung einer variablen Losgröße wie die von Vladislav konnte jedoch das Ergebnis der vorherigen Datei für denselben Zeitraum mit demselben Risiko übertreffen.
 
Ich habe neue Testergebnisse des Expert Advisors https://c.mql5.com/mql4/forum/2006/06/new_results2.zip veröffentlicht.
Die Ergebnisse zeigen die für EURUSD erhaltenen Daten bei verschiedenen Stichprobenlängen, auf denen die Suche nach Kanälen stattfindet. Ich habe bei 300 und 1000 Balken im H1-Zeitraum getestet. Wie erwartet, hat eine längere Stichprobe den Bericht über den Test des Expert Advisors verbessert. Sie ist jedoch nicht sehr bedeutend. Eine Vergrößerung der Stichprobenlänge um mehr als das Dreifache führte zu einem Anstieg des Endgewinns um nur 4 %. Erwartungsgemäß ist die Anzahl der Geschäfte in einer längeren Stichprobe geringer geworden (um 19 %), aber die Qualität der Geschäfte hat sich verbessert, wie der Anstieg des Rentabilitätsindex um 14 % zeigt. Infolgedessen haben der Rückgang der Zahl der Geschäfte und die Steigerung der Rentabilität dennoch zu einem gewissen Anstieg des Gesamtgewinns geführt.

Diese Datei enthält auch die Ergebnisse des für EURUSD entwickelten Expert Advisors, der auf USDCHF und USDJPY über einen 300-Bar-Zeitrahmen auf H1 gehandelt wurde. Beim Währungspaar USDCHF hat sich das Ergebnis deutlich ins Positive verschoben. Das Ergebnis des USDJPY bewegte sich während des gesamten Testzeitraums um den Nullpunkt. Gleichzeitig war die Anzahl der durchgeführten Transaktionen ca. dreimal geringer als bei den Tests für den gleichen Zeitraum mit anderen Währungspaaren. Daraus kann ich schließen, dass sich der USDJPY deutlich von den Paaren unterscheidet, die bereits getestet wurden. Wenn also meine Version der Strategie für USDJPY funktioniert, bedarf es einiger Anstrengungen und möglicherweise eines überarbeiteten Einstiegs-/Ausstiegsalgorithmus für dieses Paar.
Übrigens, Vladislav handelt aus irgendeinem Grund nicht mit allen Paaren in der Demo (obwohl es keine technischen Probleme gibt oder sie lösbar sind), sondern er handelt nur mit 3 Paaren - EURUSD, USDCHF, GBPUSD. Und ich denke, dass er das vielleicht nicht nur aus Spaß macht, sondern dass er dafür auch Gründe hat.
 
Hallo zusammen, ich bin irgendwie fertig mit MTSinka ;) - Wie ich bereits sagte, werde ich am Montag den direkten Zugang zum Lites-Konto schließen - das Konto, das zum Hochladen in das Empire verwendet wird. Vielleicht ändere ich einfach das Passwort des Investors und lasse es vielleicht sogar zu Testzwecken stehen - es hat keinen Sinn, den Computer umsonst laufen zu lassen: Ich werde mit einem echten Konto testen. Was als Nächstes passieren wird - wir werden sehen.
Ich hoffe, dass viele zur praktischen Umsetzung übergegangen sind?

Viel Glück und gute Trends.
 
Guten Tag , Vladislav!

Sehr schön, dass Sie auf diesen Thread zurückkommen.
Während Ihrer Abwesenheit gab es viele Diskussionen über verschiedene Fragen:

1.
Jhonny 16.06.06 16:48 <br / translate="no">
Vladislav, könnten Sie bitte ein paar Fragen beantworten....
1) Die Wichtigkeit der Kriterien für die Kanalauswahl ist gleich (d. h. Sie finden die optimale Kombination dieser Kriterien), oder es gibt eine konsistente Auswahl von wichtigeren zu weniger wichtigen Kriterien.
2) Nachdem ich viele kluge Bücher gelesen hatte, vergaß ich, wonach ich suchte :). Wenn ich richtig verstanden habe, dass Sie unter dem Begriff der funktionalen potentiellen Energie verstehen, ist es nicht klar, warum wir danach suchen, da das Ergebnis der Suche die Gleichung (nicht der Wert, sondern die Funktion!) der Trajektorie bei der Bewegung sein wird, entlang derer die Veränderung der potentiellen Energie (während der Bewegung, anstatt beim Erreichen des Endpunktes!Ich verstehe, dass sich der Preis entlang genau dieser Bahn bewegt und wir haben bereits die Gleichung gewählt, die diese Bahn annähert (Regressionsgleichung), es bleibt nur noch festzustellen, wie gut wir diese Bahn annähern. Aber wenn wir trotzdem danach suchen, finden wir vielleicht tatsächlich eine quadratische Funktion, und wenn die Koeffizienten В und С in der Gleichung Ах^2+Вх+С gleich (oder sehr nahe) an denen in der Regressionsgleichung sind, ist dies vielleicht der notwendige Kanal, obwohl ich schon in Zweifel gezogen habe :)


2. Die Frage nach der Verteilung in den Kanälen...

Wladislaw 13.03.06 21:38

....Es gibt auch einen zentralen Grenzwertsatz, der besagt, dass jede konvergente Verteilung mit zunehmenden Freiheitsgraden gegen eine Normalverteilung konvergiert (es ist also egal, was sie enthält, solange sie konvergiert ;)....

Ich habe diesen Satz so verstanden, dass wir die Verteilung im Kanal als normal annehmen und die Konfidenzintervalle anhand der Normalverteilungsfunktion berechnen. Aber es gab auch andere logisch fundierte Meinungen...


solandr 18.06.06 08:42

Ehrlich gesagt interessiert mich nur der Unterschied bei verschiedenen Werten von N. Die Student'sche Verteilung bleibt in ihrer Form qualitativ gleich, ändert aber ihre quantitativen Parameter mit unterschiedlichen Freiheitsgraden. Wenn die Zahl der Freiheitsgrade sehr groß ist, sollte sie mit der Normalverteilung übereinstimmen. Wenn die Zahl der Freiheitsgrade klein ist, weicht sie von der Normalverteilung ab.
Die Student-Verteilung hat verschiedene Freiheitsgrade:
Mit einer Wahrscheinlichkeit von 99 %:
q(30 bar)=2.750
q(100 bar)=2,626
q(300 bar)=2,593
q(1000 bar)=2,581
Wenn Sie der Meinung sind, dass der Unterschied von 6 % zwischen dem Quantilwert für 30 Balken und dem für 1000 Balken den zusätzlichen Aufwand nicht wert ist, dann ist das Ihre persönliche Entscheidung. Ich habe eine etwas andere Meinung.


3. und noch eine Frage zum Hurst-Koeffizienten


Jhonny 17.06.06 16:49

...Ich habe tatsächlich einen Hearst-Wert >1 für Kanäle mit Samples kleiner als etwa 80, also muss irgendwo ein Fehler vorliegen...

Aber auf der Seite http://www.xaoc.ru/index.php?option=com_forum&Itemid=0&page=viewtopic&p=2380 gibt es eine solche Aussage darüber:
Es ist nur so, dass es einen Fehler bei der linearen Annäherung gibt, wenn man den Index findet, stellen Sie sich diesen als 1

Kann diese Aussage als wahr angesehen werden, oder ist es wahrscheinlicher, dass ich einen Fehler in meinem Algorithmus habe?

P.S. Ich hoffe, ich belästige Sie nicht zu sehr mit diesen Fragen und freue mich, von Ihnen zu hören.
 
Guten Tag Vladislav!

Sehr nett von Ihnen, dass Sie noch einmal in diesen Thread schauen.
Während Ihrer Abwesenheit gab es einige Fragen, die in diesem Thread aktiv diskutiert wurden:

1.
Jhonny 16.06.06 16:48

Vladislav, könnten Sie bitte ein paar Fragen beantworten....
1) Das Niveau der Wichtigkeit der Kriterien der Auswahl der Kanäle bei Ihnen einheitlich (d.h. Sie finden eine optimale Kombination dieser Kriterien), oder es gibt eine konsekutive Auswahl von wichtigeren Kriterien zu weniger wichtigen.

Nein, denn jeder hat seinen eigenen Gewichtungsfaktor.

2) Nachdem ich viele kluge Bücher gelesen habe, habe ich vergessen, was ich finden sollte :). Wenn ich richtig verstanden habe, dass Sie unter dem Begriff des Funktionals der potentiellen Energie verstehen, ist es nicht klar, warum wir danach suchen, da das Ergebnis der Suche die Gleichung (nicht der Wert, sondern die Funktion!) der Trajektorie sein wird, bei der die Bewegung die Veränderung der potentiellen Energie (während der Bewegung, anstatt bei der Erreichung des Endpunktes!Ich verstehe, dass sich der Preis entlang genau dieser Bahn bewegt und wir haben bereits die Gleichung gewählt, die diese Bahn annähert (Regressionsgleichung), es bleibt nur noch festzustellen, wie gut wir diese Bahn annähern. Aber wenn wir trotzdem danach suchen, finden wir vielleicht eine quadratische Funktion, und wenn die Koeffizienten B und C in der Gleichung Ah^2+Bx+C gleich (oder sehr nahe) an denen in der Regressionsgleichung sind, ist dies vielleicht der notwendige Kanal, obwohl ich schon anfange, Zweifel zu haben :)


Darüber habe ich schon oft geschrieben. Wenn Sie nach einer Stichprobe suchen, um einen Regressionskanal zu konstruieren, werden Sie feststellen, dass diese Stichprobe zu diesem Zeitpunkt möglicherweise nicht auf die einzige Weise konstruiert wird. Irgendwie muss eine Auswahl getroffen werden. Ich habe dies als mein Hauptkriterium gewählt - die Gründe dafür wurden weiter oben im Thread dargelegt. Der Algorithmus ist einfach: bauen, prüfen, den Extremfall auswählen.

2. Frage zur Verteilung im Kanal...

Wladislaw 13.03.06 21:38

....Es gibt auch einen zentralen Grenzwertsatz, der besagt, dass jede konvergente Verteilung mit zunehmenden Freiheitsgraden gegen eine Normalverteilung konvergiert (es ist also egal, was sie enthält, solange sie konvergiert ;)....

Ich habe den Satz so verstanden, dass wir die Verteilung im Kanal als normal annehmen und die Konfidenzintervalle mit Hilfe der Normalverteilungsfunktion berechnen. Aber es gab auch andere logisch fundierte Meinungen...


Nein - es gilt als das schlechteste Konvergenzmittel :) (mit zunehmenden Freiheitsgraden konvergiert sie auch gegen normal). Ich habe darüber geschrieben und solandr hat alles richtig verstanden.

solandr 18.06.06 08:42

Ehrlich gesagt interessiert mich nur der Unterschied bei verschiedenen Werten von N. Die Student'sche Verteilung bleibt in ihrer Form qualitativ gleich, ändert aber ihre quantitativen Parameter mit unterschiedlichen Freiheitsgraden. Wenn die Zahl der Freiheitsgrade sehr groß ist, sollte sie mit der Normalverteilung übereinstimmen. Wenn die Zahl der Freiheitsgrade klein ist, weicht sie von der Normalverteilung ab.
Die Student-Verteilung hat verschiedene Freiheitsgrade:
Mit einer Wahrscheinlichkeit von 99 %:
q(30 bar)=2.750
q(100 bar)=2,626
q(300 bar)=2,593
q(1000 bar)=2,581
Wenn Sie der Meinung sind, dass der Unterschied von 6 % zwischen dem Quantilwert für 30 Balken und dem für 1000 Balken den zusätzlichen Aufwand nicht wert ist, dann ist das Ihre persönliche Entscheidung. Ich habe eine etwas andere Meinung.



3 Und noch eine Frage zum Hurst-Koeffizienten


Jhonny 17.06.06 16:49

...Ich habe tatsächlich einen Hearst-Wert >1 für Kanäle mit Samples kleiner als etwa 80, also muss irgendwo ein Fehler vorliegen...

Aber auf http://www.xaoc.ru/index.php?option=com_forum&Itemid=0&page=viewtopic&p=2380 gibt es diese Aussage dazu:
Es ist nur so, dass es einen Fehler bei der Ermittlung des Index durch lineare Annäherung gibt, stellen Sie sich das als 1

Kann diese Aussage als wahr angesehen werden, oder ist es wahrscheinlicher, dass ich einen Fehler in meinem Algorithmus habe?

P.S. Ich hoffe, ich belästige Sie nicht zu sehr mit diesen Fragen und freue mich, von Ihnen zu hören.



Bei den Berechnungen kommt es natürlich zu einem Fehler. Das Hauptkriterium ist ein Wert über/unter 0,5 (in der Version der Formel mit k-Wert 0,5, wenn man ihn auf Null oder Eins verschiebt, dann jeweils relativ zum Verschiebungsparameter). Was den Fehler in Ihrem Algorithmus angeht - es kann sein ;). Wer außer Ihnen kann sie überprüfen?

Viel Glück und gute Trends.
 
Vielen Dank , Vladislav. Du wirst mir verzeihen, und ich bin schon so schamlos...
Aber die Frage nach funkitsonal bleibt, zumindest für mich, offen. Ich werde versuchen, selbst etwas in diesem Bereich zu erfinden :). Nochmals vielen Dank!
 
Ich besuche diesen Thread schon seit langem, aber damals gab es noch keinen vierten Thread, in dem all die interessanten Dinge anfingen. Vielen Dank an alle Teilnehmer, ich habe eine Menge interessanter Dinge für mich gelernt. Aber wie man so schön sagt: Viel Wissen ist nicht so sehr Unglück, sondern eher Fragen.

Nach der Lektüre von weiterem Material über die Berechnung des Hurst-Indexes stieß ich auf eine Studie von Feder. Er behauptete, dass das empirische Gesetz - H=Log(R/S)/Log(0,5*N) - ziemlich schlecht funktioniert und nur für kleine Stichproben relativ korrekte Daten liefert (obwohl nichts über die Größe dieser Stichproben gesagt wurde). Also beschloss ich, die Berechnung des Hearst-Index streng nach methodischen Gesichtspunkten vorzunehmen (und es stellte sich heraus, dass es noch schlimmer war, als Herr Feder gewarnt hatte).

Ich weiß, dass der Code vielleicht nicht die optimalste in Bezug auf die Leistung (eine Menge von Funktionsaufrufen und alles), aber die Hauptsache ist die andere - ich wollte klären, ob ich richtig verstanden, die Logik der Berechnung, weil die Ergebnisse scheinen mir fraglich, und ich beschloss, Menschen zu fragen, kenntnisreich.

Bei meinen Berechnungen habe ich nur die Formeln in den Handbüchern berücksichtigt, nichts Zusätzliches.

Die Umsetzung ist recht einfach und erfolgt in Form eines Skripts. Es gibt nur acht Funktionen, deren Beschreibung ich unten anhänge, ebenso wie Kommentare im Quellcode. Abrufen des Arrays mit den berechneten Daten aus der Funktion, wie folgt implementiert. Jede Funktion erhält ein double out[]-Array, das im Funktionsrumpf initialisiert wird und in das je nach Zweck der Funktion Berechnungsdaten geschrieben werden.

void GetVn(double out[], int N, int i)
I bilden "Zufluss" - v[]. Ich betrachte den Schlusskurs als Zufluss. Das Ergebnis wird in das Array out[] geschrieben

void SetArrayMv(double v[], double out[], int N)
Ich berechne den durchschnittlichen Zufluss - mv[] für alle Beobachtungen. Die Funktion erhält den Zufluss und die Anzahl der Beobachtungen - N

void SetArrayDv(double v[], double out[], double mv[], int N)
Ich berechne die kumulierte Abweichung des Zuflusses - dv[]. Ich übergebe die Arrays "inflow", "average inflow" und Anzahl der Beobachtungen

void SetArrayR(double dv[], int N, double out[])
Ich berechne spread - r[]. Ich übergebe den Zufluss und die Anzahl der Beobachtungen an die Funktion.

void SetArrayS(double v[], double mv[], double out[], int N)
Ich berechne die Standardabweichung s[]. Ich übergebe "inflow", "mean inflow" und die Anzahl der Beobachtungen

void SetArrayRS(double r[], double s[], double out[], int N)
Ich berechne den normalisierten Spread. Ich schreibe die Werte von R/S in das Array rs[]. Ich übergebe die Funktionen "Streuung", "Standardabweichung" und Anzahl der Beobachtungen

void LogN(double out[], int N)
Berechnet den Array-Logarithmus von N

void GetLine(double x[],double y[], int N)
Ich berechne die Koeffizienten der Näherungslinie.

//+------------------------------------------------------------------+
//|                                                        HERST.mq4 |
//+------------------------------------------------------------------+
#property copyright ""
#property link      "grasn@rambler.ru"

int start()
{
   int i=0;
   int N=100;

   double v[];                         // Приток
   
   double mv[];                        // Средний приток
   double dv[];                        // Накопившееся отклонение
   
   double r[];                         // Размах
   double s[];                         // Стандартное отклонение
   
   double rs[];                        // Нормированный размах
   double logN[];                      // логарифм от N
   
   GetVn(v, N, i);
   SetArrayMv(v, mv, N);
   SetArrayDv(v, dv, mv, N);

   SetArrayR(dv, N, r);
   SetArrayS(v, mv, s, N);
   SetArrayRS(r, s, rs, N);
   
   LogN(logN, N);
            
   GetLine(logN, rs, N);
   
   return(0);
}

// Приток
// ________________________________________________________________________________________
// "Приток".....................................................................double out[]
// Длина выборки......................................................................int N
// номер бара с которого выполняется выборка..........................................int i

void GetVn(double out[], int N, int i)
{
   int n;
   int k;      

   double x[];

   ArrayResize(x, N);
   ArrayInitialize(x, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);

   k=i+N-1;
      
   for(n=0; n<=N-1; n++)
   {
      x[n]=Close[k];
      k=k-1;
   }

   ArrayCopy(out, x, 0, 0, WHOLE_ARRAY);
      
   return(0);
}

// Средний приток 
// ________________________________________________________________________________________
// Приток ........................................................................double v[]
// Средний приток ..............................................................double out[]
// Число наблюдений...................................................................int N

void SetArrayMv(double v[], double out[], int N)
{
   int n;
   int i;
   
   double SUM;
   double mv[];

   ArrayResize(mv, N);
   ArrayInitialize(mv, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);
      
   for(n=0; n<=N-1; n++)
   {
      SUM=0.0;   
      
      for(i=0; i<=n; i++)
      {
         SUM=SUM+v[i];
      }
      
      mv[n]=(1.0/(n+1))*SUM;
   }
   
   ArrayCopy(out, mv, 0, 0, WHOLE_ARRAY);
 
   return(0);
}

// Накопившееся отклонение притока от среднего
// ________________________________________________________________________________________
// Приток ........................................................................double v[]
// Накопившееся отклонение притока..............................................double out[]
// Средний приток................................................................double mv[]
// Число наблюдений...................................................................int N

void SetArrayDv(double v[], double out[], double mv[], int N)
{
   int n;
   int i;
   
   double dv[];
   double SUM;

   ArrayResize(dv, N);
   ArrayInitialize(dv, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);

   for(n=0; n<=N-1; n++)
   {
      SUM=0.0;
      
      for(i=0; i<=n; i++)
      {
         SUM=SUM+(v[i]-mv[i]);
      }
      
      dv[n]=SUM;
   }
   
   ArrayCopy(out, dv, 0, 0, WHOLE_ARRAY);
      
   return(0);   
}

// Размах
// ________________________________________________________________________________________
// Накопившееся отклонение притока от среднего...................................double dv[]
// Размах.......................................................................double out[]
// Число наблюдений...................................................................int N

void SetArrayR(double dv[], int N, double out[])
{
   int n;
   
   int idMax;
   int idMin;
   
   double rn[];
      
   double max;
   double min;

   ArrayResize(rn, N);
   ArrayInitialize(rn, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);   

   for(n=1; n<=N; n++)
   {
      idMax=ArrayMaximum(dv, n, 0);
      idMin=ArrayMinimum(dv, n, 0);
      
      max=dv[idMax];
      min=dv[idMin];
      
      rn[n]=MathAbs(max-min);
   }
   
   ArrayCopy(out, rn, 0, 0, WHOLE_ARRAY);
   
   return(0);
}

// Стандартное отклонение
// ________________________________________________________________________________________
// Приток.........................................................................double v[]
// Среднее приток................................................................double mv[]
// Стандартное отклонение.......................................................double out[]
// Число наблюдений...................................................................int N

void SetArrayS(double v[], double mv[], double out[], int N)
{
   int n;
   int i;
   
   double sn[];
   double SUM;

   ArrayResize(sn, N);
   ArrayInitialize(sn, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);   
   
   for(n=0; n<=N-1; n++)
   {
      SUM=0.0;
      
      for(i=0; i<=n; i++)
      {
         SUM=SUM+MathPow((v[i]-mv[i]), 2);
      }
     
      sn[n]=MathSqrt((1.0/(n+1))*SUM);
   }
   
   ArrayCopy(out, sn, 0, 0, WHOLE_ARRAY);
   
   return(0);
}

// Нормированный размах
// ________________________________________________________________________________________
// Размах.........................................................................double r[]
// Стандартное отклонение.........................................................double s[]
// Нормированный размах.........................................................double out[]
// Число наблюдений...................................................................int N
void SetArrayRS(double r[], double s[], double out[], int N)
{
   int n;
   
   double rs[];

   ArrayResize(rs, N);
   ArrayInitialize(rs, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);  
      
   for(n=3; n<=N-1; n++)
   {  
      if(s[n]==0)
      {
         rs[n]=0.0;
      }
      else 
      {
         rs[n]=MathLog(r[n]/s[n]);
//         Print("rs ", rs[n]);
      }
   }
   
   ArrayCopy(out, rs, 0, 0, WHOLE_ARRAY);
   
   return(0);
}

// Логарифм N
// ________________________________________________________________________________________
// Логарифм N...................................................................double out[]
// Число наблюдений...................................................................int N
void LogN(double out[], int N)
{
   int n;
      
   double logN[];
   
   ArrayResize(logN, N);
   ArrayInitialize(logN, 0.0);

   ArrayResize(out, N);
   ArrayInitialize(out, 0.0);   
   
   for(n=3; n<=N-1; n++)
   {
      logN[n]=MathLog(n);
//      Print("n ", logN[n]);
   }
   
   ArrayCopy(out, logN, 0, 0, WHOLE_ARRAY);
   
   return(0);   
}

// Расчет коэффициентов аппроксимирующей линии
// ______________________________________________________________
// log(R/S).......................................................................double x[]
// log(N)................................................................................y[]
// Число наблюдений...................................................................int N
void GetLine(double x[],double y[], int N)
{
   double m=0;
   double b=0;
   double tan = 0;
      
   int size=N;
   double sum_x=0.0;
   double sum_y=0.0;
   double sum_xy=0.0;
   double sum_xx=0.0;
      
   for (int i=3; i<size; i++)
   {
      sum_x=sum_x+x[i];
      sum_y=sum_y+y[i];
      sum_xy=sum_xy+(x[i]*y[i]);
      sum_xx=sum_xx+(x[i]*x[i]);
   }

   m = (size*sum_xy - sum_x*sum_y) / (size*sum_xx - sum_x*sum_x);
   b = sum_y/size - m * sum_x / size;

           
   Print("Аппроксимирующая прямая: y(x)=", m, "x+", b);
   Print("Показатель Херста= ", m);
   
   return(0);
}



Hier sind log(R/S) und log(N) Diagramme für die Zufallsreihe und für die täglichen EURUSD-Kurse
Die Zufallsreihe wurde mit MathRand() mit den folgenden Parametern erzeugt.
N=100
Ergebnis:
H=0.5454
Y(x)=0.5454x+0.2653

Mit steigendem N nähert sich der Hurst-Index 0.5


EURUSD D1 Berechnung wurde mit folgenden Parametern durchgeführt:
i=0 (ab 27.06)
N=100

Berechnungsergebnisse
H=1,0107 (warum ist es so groß?)
y(x)=1,0197x-0,5885



Es gibt einige Fragen:
1. Was ist für den Zufluss zu nehmen? Der volle Preis, die Modulo-Differenz oder nur die positive Differenz? Mit anderen Worten: Hat das Konzept des "Zuflusses" in der fraglichen Methode irgendeine Auswirkung auf die Aufbereitung der Daten? Oder sollen die zu untersuchenden Daten als Zufluss betrachtet werden. Intuitiv habe ich zum Beispiel den Schlusskurs in die Berechnungen einbezogen.

2. Wie bestimmt man die normalisierte Streuung, wenn die Werte der Streuung und insbesondere der Standardabweichung gleich Null sind? Dies ist bei kleinen Array-Indizes fast immer der Fall. Für den Fall, dass Nullen entdeckt werden, weise ich der normalisierten Streuung vorerst ebenfalls Null zu. Ist dies richtig? Verzichten Sie vorerst auf die Berechnung der ersten Werte.

3. Die Ergebnisse selbst gefallen mir nicht. Hier ein Beispiel für mehrere Berechnungsvarianten für EURUSD:

Inflow (Close[] D1) auf allen Bars Hurst-Index 0,9069
Inflow (Close[] D1) i=0, N=200 Hurst-Index 0,8264

Die Zahlen sind zu optimistisch und die Daten stimmen nicht mit denen von Vladislava (0,64 für die gesamte Serie) überein, aber es gibt auch sehr niedrige Werte. Für die Preisdifferenz aller Barren erhalte ich den Hearst-Index 0,5119

4. Berechne ich den durchschnittlichen Zufluss richtig? Ein Wert für alle Iterationen oder sollte er sich je nach dem aktuellen N ändern?

5. Es besteht die Möglichkeit, dass ich alles verwechselt habe und die Zahl falsch berechnet wurde. Bitte erklären Sie mir, was ich falsch gemacht habe :o(

PS: Ich hoffe, die Mitglieder dieses Forums können mir helfen, das zu verstehen. Ich wäre Vladislav sehr dankbar, wenn er sich einen Moment Zeit nehmen und erklären könnte, was ich bei einer so einfachen Methodik falsch mache.