Die Regelmäßigkeiten der Preisbewegungen: Teil 2. Serie von Stäben

 

Dieser Teil konzentriert sich auf die Untersuchung von Balken (Candlestick).
Im folgenden Skript habe ich die folgende Terminologie verwendet: Ein steigender Balken ist ein Balken, dessen Schlusskurs höher als der Eröffnungskurs ist, und ein fallender Balken ist ein Balken, dessen Schlusskurs niedriger als der Eröffnungskurs ist.

Zunächst werde ich das Skript veröffentlichen. Ich bitte Fachleute auf dem Gebiet der Programmierung, sie auf logische Fehler in den Balkenberechnungen zu überprüfen. Wenn es Logikfehler in den Berechnungen gibt - ich werde
dankbar für Ihr Feedback.
Das Skript berechnet den minimalen Anteil an steigenden und fallenden Balken in einer Reihe mit der angegebenen Länge. Die Länge der Serie wird im Fenster der Quelldaten festgelegt, sie ist standardmäßig auf 100 Balken festgelegt.

Die Ergebnisse der Skriptoperationen werden einige Zeit nach dem Start des Skripts im Diagramm angezeigt. Bei einer Serie von 100 Balken für EURUSD TF H1 zum Beispiel ist das Minimum historisch Anzahl der ansteigenden Balken ist
34 Balken (34%):

Ich möchte Sie darauf aufmerksam machen, dass das Skript den gesamten Verlauf durchläuft, und wenn der Verlauf lang ist (kleine TF) oder große Serien hat (mehr als 100), wird das Skript
kann Berechnungen lange genug durchführen, bis zu mehreren Minuten (je nach den Fähigkeiten des PCs):

Drehbuch:

// Скрипт для подсчёта минимальных долей растущих и падающих баров в серии баров //
// Skript MinRastPadBarSeriya, июнь 2012
// Примечание: скрипт подвешивает терминал при больших сериях на малых ТФ - ждите
#property  copyright "Copyright © Svinotavr-2000"
#property  link      "https://www.mql5.com/ru/users/DmitriyN" 
#property show_inputs             // Показываем окно исходных данных   

extern int DlinSer=100;           // Вводим длину серии, бар, по умолчанию - 100 бар.
   
int start()
 { 
   // Декларация переменных
   double DliPer;                 // Длительность периода исследования, лет
   double n;                      // Количество бар главного цикла, шт
   double Pogreshnost;            // Погрешность, %
   
   double progr;                  // Переменная прогресс-индикатора (доля единицы)
   
   double DolyRastBar;            // Доля растущих бар в серии, %
   double MinDolyRastBar=101;     // Минимальная доля ростущих бар %, для начала - >100
   double KolRast;                // Количество растущих баров в серии, шт
   
   double DolyPadBar;             // Доля падающих бар в серии, %
   double MinDolyPadBar=101;      // Минимальная доля падающих бар %, для начала - >100
   double KolPad;                 // Количество падающих баров в серии, шт
   
   // Берём число бар на DlinSer меньшее, чтобы не залезть за пределы истории
   n=Bars-DlinSer-1;
   // Цикл по всем барам
        Comment("Ждите, идёт расчёт");               // На мелких ТФ скрипт подвисает
        for(int j = 0; j < n; j++)                 // Главный цикл - по всем доступным барам
        { 
            KolRast=0;                             // Обнуляем счётчик для след. цикла серии
            KolPad=0;                              // Обнуляем счётчик для след. цикла серии
            for(int i = j; i < (j+DlinSer+1); i++) // Цикл серии
            {   
                if (Close[i] > Open[i]) KolRast=KolRast+1; // Добавляем к счётчику 1 бар      
                if (Close[i] < Open[i]) KolPad=KolPad+1;   // Добавляем к счётчику 1 бар              
                    
            DolyRastBar=KolRast/DlinSer*100;       // Вычисляем долю растущих бар, %
            DolyPadBar= KolPad/DlinSer*100;        // Вычисляем долю падающих бар, %
            }                                      // Конец цикла серий
         // Если доля растущих бар за этот цикл меньше, чем минимальная доля за предыдущие _
         // _ циклы, то принимаем её как минимальную в главном цикле
         if (MinDolyRastBar > DolyRastBar) MinDolyRastBar= DolyRastBar;
         // Если доля падающих бар за этот цикл меньше, чем минимальная доля за предыдущие _
         // _ циклы, то принимаем её как минимальную в главном цикле     
         if (MinDolyPadBar > DolyPadBar) MinDolyPadBar= DolyPadBar;                      
         
             // Прогресс-индикатор ======================================
             progr=(j/n)*1000 - MathFloor((j/n)*1000);
             if (progr>0.9999)                     // Частые комменты тормозят расчёты, _
             {                                     // _ поэтому ограничим число изменений
             Comment("Ждите, идёт расчёт, выполнено: ", (j/n)*100 , " %");
             } //========================================================
        }                                          //Конец цикла по всем барам
  // Вычисляем длительность периода истории исследования (календарный период)
  DliPer = n*Period()/(1440*365);
  // Вычисляем относительную погрешность расчётов (погрешность частичная)
  Pogreshnost=(DlinSer/n)*100;         
  // Формируем строки для печати
   string S0 = "\n" + "================= Результаты расчётов =================" + "\n" + "\n";  
   string S1 = "1. Исследовано бар = " + DoubleToStr(n,0)+ " шт" + "\n";
   string S2 = "2. Длительность периода исследования = " + DoubleToStr(DliPer,2)+ " лет" + "\n";
   string S3 = "3. Длина серии = " + DlinSer+ " бар"+ "\n"+ "\n";
   string S4 = "4. Минимальная доля рaстущих бар = " + DoubleToStr(MinDolyRastBar,2)+ " %"+ "\n";
   string S5 = "5. Минимальное количество рaстущих бар = " + DoubleToStr(MinDolyRastBar*DlinSer/100,0)+ " шт"+ "\n"+ "\n";
   string S6 = "6. Минимальная доля падающих бар = " + DoubleToStr(MinDolyPadBar,2)+ " %"+ "\n";
   string S7 = "7. Минимальное количество падающих бар = " + DoubleToStr(MinDolyPadBar*DlinSer/100,0)+ " шт"+ "\n"+ "\n"; 
   string S8 = "8. Погрешность расчётов (по длине серии/истории) = " + DoubleToStr(Pogreshnost,4)+ " %";  
  // Выводим строки на экран     
   Comment(S0, S1, S2, S3, S4, S5, S6, S7, S8);          
 }
Ich möchte Sie auch darauf aufmerksam machen, dass das Skript keine Null-Balken berücksichtigt, d.h. Balken, bei denen der Eröffnungskurs gleich dem Schlusskurs ist.

Wenn jemand Kritik an den Berechnungen des Skripts oder an Ergebnissen auf dem Gebiet ähnlicher Forschungen hat, bitte ich um Mitteilung.
Später werde ich mich der Diskussion über Regelmäßigkeiten im Zusammenhang mit den Balkenreihen und einigen Aufgaben zu diesem Thema anschließen.
 

meine Ergebnisse zeigen eine Serienwahrscheinlichkeit von 0,5^n

Bei MA ist es dasselbe

 
Rorschach:
Nach meinen Ergebnissen ist die Wahrscheinlichkeit einer Serie 0,5^n
Auch nach meinen Ergebnissen. Die Wahrscheinlichkeit für eine Serie von 30 Balken liegt zum Beispiel bei einem Milliardstel. Wenn es sich um Ein-Minuten-Balken handelt, dann ergibt sich unter Berücksichtigung der Tatsache, dass ein Tag 1440 Minuten und ein Jahr 365 Tage hat (Kalenderperiode), die Reihe
wäre das letzte Mal um die Weihnachtszeit (vor ein paar tausend Jahren) gefallen.
 
Wird die Serie durch einen Regen oder eine entgegengesetzt aussehende Kerze mit einem kleinen Körper unterbrochen?
 

Es gibt einen Grund, warum man "Short" als Short und "Long" als Long bezeichnet.

Bei Aktien wird das Missverhältnis meist gut sein, bei Devisen dürfte es ziemlich verschwommen sein.

 
sever32:
Wird die Länge der Serie durch ein Doj oder eine gegenüberliegende Kerze mit kleinem Körper unterbrochen?

Es ist klar, dass ja.

Die Frage bezog sich darauf, dass eine lange Serie durch ein Doj oder eine entgegengesetzte Kerze unterbrochen wird und sich dann die vorherige Serie wiederholen kann.

Hier gibt es keinen Gewinn, aber es gibt ein Thema, über das man reden kann).

 

Ich kann mir nicht erklären, was eine solche Analyse bewirken kann, aber das ist wohl meiner Ungeschicklichkeit zuzuschreiben.
Es gibt jedoch eine Beobachtung über das Wesen der Analyse.
So wie ich es verstanden habe, werden Kerzenleuchter mit einer Höhe von Null von der Berechnung ausgeschlossen. Unterscheiden sich Kerzenständer mit minimaler Höhe (1, 2, 3) sehr stark von ihnen? Ich denke, es gibt keine großen Unterschiede.
Meiner Meinung nach wäre es korrekter, nur die Kerzenständer mit "signifikanter" Länge zu berücksichtigen. Als Signifikanzkriterium können Sie den Modul des Verhältnisses (O-C)/(H-L) heranziehen.
Der Schwellenwert sollte gesondert betrachtet werden.

 

So sieht das Ergebnis für eine 4-Uhr-Serie aus:

Eine Serie von 100 Takten sollte mindestens 36 steigende Takte haben.
Daraus können Sie schließen, dass Sie bei einer Serie von 50 Balken bereits 10 steigende Balken gehabt haben,
dann müssen Sie auf den nächsten 50 Takten mindestens 36-10=26 steigende Takte haben (mindestens).
Folglich werden die fallenden Balken dort etwa 50-26=24 betragen.
D.h. es wird ungefähr die gleiche Anzahl von fallenden und steigenden Balken geben.

Die Höhe der Stange wird dabei natürlich nicht berücksichtigt.

 
DmitriyN:

So sieht das Ergebnis für eine 4-Uhr-Serie aus:

Eine Serie von 100 Takten sollte mindestens 36 steigende Takte haben.
Daraus können Sie schließen, dass Sie bei einer Serie von 50 Balken bereits 10 steigende Balken gehabt haben,
dann müssen Sie auf den nächsten 50 Takten mindestens 36-10=26 steigende Takte haben (mindestens).
Folglich werden die fallenden Balken dort etwa 50-26=24 betragen.
D.h. es wird ungefähr die gleiche Anzahl von fallenden und steigenden Balken geben.

Die Höhe der Stange wird dabei natürlich nicht berücksichtigt.

Das ist der schwierige Teil.
 
MikeM:

Ich bekomme nicht in den Griff, was diese Art von Analyse bewirken kann_

Ich habe schon oft darüber geschrieben, dass Professionalität aus einer Vielzahl von Elementen besteht, um den Prozess zu verstehen. Jedes Element für sich genommen kann und darf nichts bewirken.
Es ist jedoch durchaus möglich, von der Gesamtheit der Elemente zu profitieren.
Wozu ist ein Prozessor gut? Keine, solange es die einzige ist. Aber wenn Sie ein Motherboard, eine Grafikkarte, ein Netzteil usw. hinzufügen ... - Sie wissen, was passiert.
 
DmitriyN:
Dieser Fauxpas lässt sich leicht beseitigen, indem man den Preis digitalisiert, d. h. in ein digitales Format umwandelt - ein Raster mit einem bestimmten Abstand. Aber dazu später mehr.

Dort hätten Sie anfangen sollen.