işte bağlantı https://www.mql5.com/en/forum/50458
Ve Hurst göstergeleri farklı olarak kabul edilir. 3 şekilde duydum. Risk yöneticileri forumunda.
formül anladığım kadarıyla
H = MathLog (R/S)/MathLog(N/2)
#property indicator_separate_window #property indicator_buffers 3 #property indicator_color1 Red #property indicator_color2 Yellow extern int PeriodHerst = 24 , PeriodA = 100 ; double ExtMapBuffer1 [] ; double ExtMapBuffer2 [] ; int init (){ SetIndexStyle ( 0 , DRAW_LINE ) ; SetIndexBuffer ( 0 , ExtMapBuffer1 ) ; SetIndexStyle ( 1 , DRAW_LINE ) ; SetIndexBuffer ( 1 , ExtMapBuffer2 ) ; SetIndexDrawBegin ( 0 , PeriodHerst + PeriodA ) ; SetIndexDrawBegin ( 1 , PeriodHerst + PeriodA ) ; return ( 0 ) ; } int start (){ int limit = Bars - IndicatorCounted () ; for ( int i = limit - 1 ; i >= 0 ; i -- ){ int MaxH = Highest ( NULL , 0 , MODE_HIGH , PeriodHerst , i ) ; int MinL = Lowest ( NULL , 0 , MODE_LOW , PeriodHerst , i ) ; double Average = iMA ( NULL , 0 , PeriodA , 0 , 0 , 0 , i ) ; double swap = 0 ; for ( int j = 0 ; j < PeriodA ; j ++ ){ swap = swap + MathPow ( Open [ j + i ] - Average , 2 ) ; swap = swap + MathPow ( High [ j + i ] - Average , 2 ) ; swap = swap + MathPow ( Low [ j + i ] - Average , 2 ) ; swap = swap + MathPow ( Close [ j + i ] - Average , 2 ) ; } double Deviation = MathSqrt ( swap / (( PeriodA - 1 ) * PeriodA )) ; ExtMapBuffer1 [ i ] = ( High [ MaxH ] - Low [ MinL ]) / Deviation ; for ( j = 0 ; j < PeriodA ; j ++ ){ swap = swap + ExtMapBuffer1 [ i + j ] ; } ExtMapBuffer2 [ i ] = swap / PeriodA ; } return ( 0 ) ; }
Ne olduğunu anlamadım ama PeriodHerst değişkenine bakılırsa, bunun Hurst ile bir ilgisi var.
Dmitry kodu için teşekkürler.
Bu bir tür yanıltıcı göstergedir. Hurst sabiti 0,5 değeri civarında dalgalanmalıdır. 1'den büyük değil ve 0'dan az değil. Ama burada durum biraz farklı.
Herkesin Hurst serisini bilmesi güzel. Tek kötü şey, kimsenin kodun içine bakmamasıdır. Biri bana hızın hesaplanması gereken bu göstergede hangi değerin hesaplandığını açıklayabilir mi?
#property copyright " Черный Кот " #property link "" #property indicator_separate_window #property indicator_minimum 0 #property indicator_maximum 1 #property indicator_buffers 1 #property indicator_color1 Red extern int nBars = 1000 ; extern int PerM = 1 ; //поля в массиве Rates #define RATE_TIME 0 #define RATE_OPEN 1 #define RATE_LOW 2 #define RATE_HIGН 3 #define RATE_CLOS 4 #define RATE_VOL 5 //---- buffers double HurstBuf [] ; //буфер индикатора double RateM [][ 6 ] ; //массив баров младшего таймфрейма, по которому вычисляется Херст int nM ; //число баров младшего таймфрейма, доступных в истории bool CriticalError = false ; //флаг критической ошибки устанавливается если не удалось //загрузить младший таймфрейм //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int init () { //инициализируем буфер SetIndexStyle ( 0 , DRAW_LINE ) ; SetIndexBuffer ( 0 , HurstBuf ) ; //получаем доступ к младшему таймфрейму CriticalError = false ; for ( int i = 0 ; i < 10 ; i ++ ) //делаем 10 попыток { nM = ArrayCopyRates ( RateM , NULL , PerM ) ; if ( GetLastError () == 0 ) break ; Sleep ( 5000 ) ; } if ( i == 10 ) { Print ( " Cannot load lower timeframe " ) ; CriticalError = true ; } Print ( " nM= " , nM ) ; return ( 0 ) ; } //+------------------------------------------------------------------+ //| Custom indicator deinitialization function | //+------------------------------------------------------------------+ int deinit () { //---- //---- return ( 0 ) ; } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int start () { if ( CriticalError ) return ( 0 ) ; int counted_bars = IndicatorCounted () ; // for(int i=1; i<nBars; i++) HurstBuf[i]=0.5; for ( int i = 1 ; i < nBars ; i ++ ) //считаем с первого бара { double avg = ( High [ i ] + Low [ i ]) / 2 ; //среднее в баре double R = High [ i ] - Low [ i ] ; //размах бара //находим последний бар младшего таймфрейма, принадлежащий i-му бару текущего datetime t = Time [ i ] + Period () * 60 ; //время закрытия i-го бара в секундах // Print("Bar ",i," Time=",TimeToStr(Time[i])); for ( int j = 0 ; j < nM ; j ++ ) //ищем во всей доступной истории { // Print("*****Bar ",j," Time=",TimeToStr(RateM[j][RATE_TIME])); if ( RateM [ j ][ RATE_TIME ] <= t ) break ; } if ( j == nM ) return ( 0 ) ; //история по младшему таймфрейму кончилась и считать больше нечего //сейчас j указывает на искомый последний бар в младшем таймфрейме //вычисляем СКО. Как его считать, это самый непонятный во всём этом момент int N = 0 ; double s = 0 ; while ( Time [ i ] <= RateM [ N + j ][ RATE_TIME ]) //считаем пока находимся в пределах i-го бара { //double m=avg - (RateM[N+j][RATE_HIGН]+RateM[N+j][RATE_LOW ])/2; double m = RateM [ N + j ][ RATE_HIG ] - RateM [ N + j ][ RATE_LOW ] ; s += m * m ; // s += (avg - RateM[N+j][RATE_HIGН])*(avg - RateM[N+j][RATE_HIGН]); // s += (avg - RateM[N+j][RATE_LOW ])*(avg - RateM[N+j][RATE_LOW ]); N ++; } double S = MathSqrt ( s / N ) ; double h = MathLog ( R / S ) / MathLog ( N ) ; //вычисляем показатель Херста // Print("Lo=", Low[i], " Hi=",High[i], " t=",TimeToStr(Time[i]), " h=",h, " R=",R, " S=", S, " avg=", avg); HurstBuf [ i ] = h ; //загоняем его в буфер } // CriticalError=true; return ( 0 ) ; } //+------------------------------------------------------------------+
Merhaba Eugene!
Hurst'u daha yaşlı olanda hesaplamak için genç t / f'yi kullanma fikriniz bence çok doğru. Ama SKO'nun yanlış olduğunu düşünüyorsunuz. Orada neden (Yüksek - Düşük) bir fark var? RMS, serinin değerlerinin ortalamadan sapmalarının karelerinin toplamıdır. Aşağıda yorumlananlar, COEX'e çok daha benzer.
Ek olarak Hurst, logaritmaların bir oranı değil, bu logaritmalar üzerine inşa edilen doğrusal bir regresyonun eğimidir. Bir gerileme inşa etmemek mümkündür. Log(R/S) = H*Log(N/2) +C denklemindeki toplamsal terimi farklı bir şekilde düşünün.
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hurst üssünün bir göstergesine sahip olan varsa, lütfen atın
Ve internette sadece mql2 veya 3'te buldum
Ben kendim bir şekilde çarpık yazmaya çalıştım ... (1'den büyük değerler)
Formüle göre hesaplayın