Fiyat Hareket Kalıpları: Bölüm 2. Bar Serisi

 

Bu bölüm , çubuk (şamdan) serisinin çalışmasına ayrılacaktır.
Aşağıdaki komut dosyasında şu terminolojiyi kullandım: yükselen çubuk - kapanış fiyatı açılış fiyatından yüksek olan bir çubuk , düşen bir çubuk - kapanış fiyatı açılış fiyatından düşük olan bir çubuk.

İlk önce senaryoyu yayınlayacağım. Programlama uzmanlarından çubuk hesaplamalarındaki mantıksal hataları kontrol etmelerini istiyorum. Hesaplamaların mantığında hatalar varsa, yapacağım.
mesajlar için teşekkürler.
Komut dosyası, belirli bir uzunluktaki bir dizi için yükselen ve düşen çubukların minimum oranını hesaplar. Seri uzunluğu ilk veri penceresinde ayarlanır; varsayılan olarak 100 bar'a ayarlanmıştır.

Komut dosyası işleminin sonuçları, komut dosyası başlatıldıktan bir süre sonra grafikte görüntülenir. Örneğin, EURUSD TF H1 için 100 çubukluk bir dizi için, minimum tarihsel yükselen çubuk sayısı
34 adet (%34):

Senaryonun tüm tarih boyunca ve uzun bir geçmişi (küçük TF'ler) ve büyük serileri (örneğin 100'den fazla) olduğu gerçeğine dikkatinizi çekmek istiyorum.
oldukça uzun bir süre için hesaplamalar yapabilir - birkaç dakikaya kadar (bilgisayarın özelliklerine bağlı olarak):

Senaryo:

 // Скрипт для подсчёта минимальных долей растущих и падающих баров в серии баров //
// 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);          
 }
Ayrıca, senaryonun açılış fiyatı kapanış fiyatına eşit olan sıfır çubukları - çubukları hesaba katmadığı gerçeğine de dikkatinizi çekmek isterim.

Birinin senaryonun hesaplanan kısmı hakkında bir eleştirisi varsa, bu tür araştırma alanındaki sonuçları - lütfen konuşun.
Biraz sonra, bir dizi çubukla ilişkili kalıpların yanı sıra bu konuyla ilgili bazı görevlerin tartışmasına katılacağım.
 

benim sonucuma göre, bir serinin olasılığı 0,5 ^ n

MA'da aynı

 
Rorschach :
sonuçlarıma göre, bir serinin olasılığı 0,5 ^ n
Benimkine göre de. Örneğin, 30 barlık bir serinin olasılığı milyarda birdir. Bunlar dakika çubukları olsaydı, günde 1440 dakika ve yılda 365 gün (takvim dönemi) olduğu düşünülürse, böyle bir dizi
daha önce İsa'nın Doğuşunda bir yerde (birkaç bin yıl önce) düşmüş olurdu.
 
Dizinin uzunluğu, küçük bir gövdeye sahip bir doge veya zıt türden bir mum tarafından kesintiye uğradı mı?
 

Eh, "kısa" - kısa ve "uzun" - uzun demeleri sebepsiz değil.

Hisse senetlerinde orantısızlık genellikle iyi olur, handikapta ise tamamen bulanık olmalıdır.

 
sever32 :
Dizinin uzunluğu, küçük bir gövdeye sahip bir doge veya zıt türden bir mum tarafından kesintiye uğradı mı?

evet olduğu açık.

soru, uzun bir serinin köpekler veya zıt bir mum tarafından kesintiye uğratılması ve ardından önceki serinin tekrar tekrar edebilmesiydi.

burada kâr yoktur. ama konuşmak, evet, bir konu var)

 

Böyle bir analizin neler verebileceğine giremem, ama bunu benim aptallığım olarak yazacağız.
Ancak analizin özü hakkında bir not var.
Anladığım kadarıyla, sıfır yükseklikteki mumlar hesaplamanın dışında tutuluyor. Minimum yükseklikteki (1, 2, 3) mumlar onlardan çok farklı mı? bence pek değil.
Sadece "önemli" uzunluktaki mumları dikkate almanın daha doğru olacağını düşünüyorum. Önem kriteri için (OC)/(HL) oranının modülünü alabiliriz.
Eşik değeri ayrı olarak düşünülmelidir.

 

4 saat boyunca sonuç böyle görünüyor:

100 barlık bir seride en az 36 yükselen bar olmalıdır.
Bundan, 50 barlık bir seride zaten 10 büyüyen barınız varsa,
sonraki 50 barda en az 36-10=26 büyüyen bara sahip olmalısınız (en az değil).
Bu nedenle, orada yaklaşık 50-26=24 düşen çubuk olacaktır.
Onlar. düşen ve yükselen yaklaşık olarak aynı olacaktır.

Tabii ki, çubuğun yüksekliği dikkate alınmaz.

 
DmitriyN :

4 saat boyunca sonuç böyle görünüyor:

100 barlık bir seride en az 36 yükselen bar olmalıdır.
Bundan, 50 barlık bir seride zaten 10 büyüyen barınız varsa,
sonraki 50 barda en az 36-10=26 büyüyen bara sahip olmalısınız (en az değil).
Bu nedenle, orada yaklaşık 50-26=24 düşen çubuk olacaktır.
Onlar. düşen ve yükselen yaklaşık olarak aynı olacaktır.

Tabii ki, çubuğun yüksekliği dikkate alınmaz.

İşte bu ve ficus-picus'ta.
 
MikeM :

Ben giremiyorum böyle bir analiz ne verebilir ki?

Bu konuda bir kereden fazla yazdım, profesyonellik süreci anlamak için çok sayıda unsurdan oluşuyor. Her unsur ayrı ayrı bir şey vermez ve veremez.
Ancak elementlerin birleşiminden faydalanmak oldukça mümkündür.
Bir işlemcinin amacı nedir? O yalnızken yok. Ancak buna bir anakart, ekran kartı, güç kaynağı vb. eklerseniz. ... - ne olacağını biliyorsun.
 
DmitriyN :
Bu ficus picus, fiyat sayısallaştırılırsa kolayca ortadan kaldırılabilir, yani. dijital formata dönüştürün - belirli bir adıma sahip bir ızgara. Ancak, daha sonra bunun hakkında.

başlaması gereken yer burasıydı.