가격 움직임 패턴: 2부. 바 시리즈

 

이 부분은 막대(촛대) 시리즈 의 연구에 할애할 것입니다.
아래 스크립트에서 다음 용어를 사용했습니다. 상승 막대 - 종가가 시가보다 높은 막대, 하강 막대 - 종가 가 시가보다 낮은 막대.

먼저 스크립트를 게시하겠습니다. 나는 프로그래밍 전문가에게 막대 계산에서 논리적 오류가 있는지 확인하도록 요청합니다. 계산 논리에 오류가 있으면
메시지에 감사드립니다.
스크립트는 주어진 길이의 시리즈에 대한 상승 및 하강 막대의 최소 비율을 계산합니다. 시리즈 길이는 초기 데이터 창에서 설정되며 기본적으로 100bar로 설정됩니다.

스크립트 작업의 결과는 스크립트 실행 후 일정 시간이 지나면 차트에 표시됩니다. 예를 들어 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개일 확률은 약 10억분의 1입니다. 이것이 분 막대라면 하루가 1440분이고 1년(달력 기간)이 365일이라고 가정할 때 이러한 시리즈는
그리스도의 탄생(2천 년 전)의 어딘가에 이전 시간이 빠졌을 것입니다.
 
시리즈의 길이는 작은 몸을 가진 도그 또는 반대 종류의 양초에 의해 중단됩니까?
 

글쎄, 그들이 "짧다"-짧다, "길다"- 길었다는 것은 이유가 없습니다.

주식에서 불균형은 일반적으로 좋을 것이고 핸디캡에서는 완전히 흐려져야 합니다.

 
sever32 :
시리즈의 길이는 작은 몸을 가진 도그 또는 반대 종류의 양초에 의해 중단됩니까?

그렇습니다.

문제는 장기 시리즈가 도그 또는 반대 촛불에 의해 중단되고 이전 시리즈가 다시 반복될 수 있다는 것입니다.

여기에는 이익이 없습니다. 하지만 얘기하자면, 네, 주제가 있습니다)

 

나는 그러한 분석이 줄 수 있는 것을 입력할 수 없지만, 우리는 그것을 나의 어리석음으로 기록할 것입니다.
그러나 분석의 본질에 대한 메모가 있습니다.
제가 알기로는 높이가 0인 양초는 계산에서 제외됩니다. 최소 높이(1, 2, 3)의 양초가 그것들과 많이 다른가요? 별로라고 생각합니다.
"상당한"길이의 양초 만 고려하는 것이 더 정확할 것이라고 생각합니다. 유의성 기준의 경우 (OC)/(HL) 비율의 계수를 사용할 수 있습니다.
임계값은 별도로 고려해야 합니다.

 

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개의 떨어지는 막대가 있을 것입니다.
저것들. 하락과 상승은 거의 동일할 것입니다.

물론 막대의 높이는 고려되지 않습니다.

여기와 ficus-picus가 있습니다.
 
MikeM :

난 그냥 들어갈 수 없어, 그런 분석은 무엇을 줄 수 있습니까_

나는 이미 이것에 대해 두 번 이상 썼습니다. 전문성은 프로세스를 이해하는 많은 요소로 구성됩니다. 각 요소는 별도로 아무것도 제공하지 않으며 제공할 수도 없습니다.
그러나 요소 조합의 이점을 충분히 누릴 수 있습니다.
프로세서의 요점은 무엇입니까? 그가 혼자 있는 동안에는 아무도 없습니다. 하지만 거기에 마더보드, 비디오 카드, 전원 공급 장치 등을 추가하면. ... - 당신은 무슨 일이 일어날지 압니다.
 
DmitriyN :
이 ficus picus는 가격이 디지털화되면 쉽게 제거될 수 있습니다. 디지털 형식으로 변환 - 주어진 단계가 있는 그리드. 그러나 나중에 더 자세히 설명합니다.

시작해야 했던 곳입니다.