价格变动的规律性:第二部分。系列酒吧

 

这一部分将重点探讨条形(烛台)系列
在下面的脚本中,我使用了以下术语:上升柱 是指收盘价高于开盘价 的柱子,下降柱 是指收盘价低于开盘价的柱子。

首先,我将公布剧本。我请编程领域的专业人员检查一下,看看是否有酒吧计算的逻辑错误。如果计算中存在逻辑错误--我将在
感谢你的反馈。
该脚本计算给定长度的系列中增加和减少的条形的最小 份额。系列长度在源数据窗口中设置,默认为100条。

脚本操作结果在启动脚本后的一段时间内显示在图表上。例如,对于EURUSD TF H1的100条系列,最小的 历史 增加的条数是
34条(34%)。

我想提请你注意的是,该脚本会贯穿整个历史,如果历史很长(小TF)或有大系列(超过100),该脚本会
可以进行足够长的计算,最长可达数分钟(取决于PC的能力)。

脚本。

// Скрипт для подсчёта минимальных долей растущих и падающих баров в серии баров //
// 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);          
 }
我还想提请你注意,该脚本不考虑零条,即开盘价等于收盘价的条。

如果有人对剧本的计算方法或类似研究领域的任何结果有任何批评意见,请说出来。
稍后我将加入讨论与系列酒吧有关的规律性问题,以及与这个主题有关的一些任务。
附加的文件:
 

我的结果显示系列概率为0.5^n

在MA上是一样的

 
Rorschach:
根据我的结果,一个系列的概率是0.5^n
按我的结果也是如此。例如,一系列30条的概率约为十亿分之一。如果它们是一分钟的条形图,那么考虑到一天有1440分钟,一年有365天(日历期),该系列
上次在圣诞节前后(几千年前)就会掉出来。
 
系列的长度是否被雨或对立面的小体的蜡烛打断?
 

他们把 "短 "称为短,把 "长 "称为长,是有原因的。

在股票中,比例失调大多是好的,在外汇中,它应该是相当模糊的。

 
sever32:
该系列的长度是否被一个doj或一个有小体的相反的蜡烛所打断?

很明显,是的。

问题是关于一个长的系列被一个十字星或一个相反的蜡烛打断,然后之前的系列可以再次重复。

这里没有利润,但有一个话题可谈)。

 

我搞不清楚这样的分析能做什么,但还是把它归结为我的无能吧。
但有一个关于分析的本质的观察。
按照我的理解,零高度的烛台不在计算范围之内。高度最小的烛台(1、2、3)与它们有很大的不同吗?我认为这没有什么不同。
我认为只考虑 "重要 "长度的蜡烛图会更正确。作为重要性的标准,我们可以采取(O-C)/(H-L)比率的模数。
阈值应单独考虑。

 

这就是4点钟方向系列的结果是什么样的。

一系列的100个小节应该至少有36个上升小节。
由此你可以得出结论,如果在一个50个柱子的系列中,你已经有10个上升柱子了。
那么在接下来的50个小节中,你必须至少有36-10=26个上升小节(至少)。
因此,那里的跌停板将约为50-26=24。
也就是说,将有大约相同数量的下降和上升条。

当然,酒吧的高度没有被考虑在内。

 
DmitriyN:

这就是4点钟方向系列的结果是什么样的。

一系列的100个小节应该至少有36个上升小节。
由此你可以得出结论,如果在一个50个柱子的系列中,你已经有10个上升柱子了。
那么在接下来的50个小节中,你必须至少有36-10=26个上升小节(至少)。
因此,那里的跌停板将约为50-26=24。
也就是说,将有大约相同数量的下降和上升条。

当然,酒吧的高度没有被考虑在内。

这是最棘手的部分。
 
MikeM:

我无法掌握这种分析能做什么_

我已经多次写过这个问题,专业性是由大量的理解过程的要素组成的。每个元素都没有也不可能孤立地提供任何东西。
然而,从全部要素中获益是很有可能的。
一个处理器有什么用?没有,只要它是唯一的一个。但如果你增加一块主板、一块显卡、一个电源,等等......- 你知道会发生什么。
 
DmitriyN:
通过将价格数字化,也就是将其转换为数字格式--具有设定间距的网格,可以很容易地消除这种畏缩现象。但以后会有更多关于这个问题的内容。

这就是你应该开始的地方。