Показатель Херста - страница 18

 
surfer >>:

это я просто ошибся в одном месте в индюке

учет коэф. весов ничего не дает, отличия в тысячных

ну а то, что он скачет - это да

А вторую функцию не пробовал?

Картинки бы посмотреть... не индикатора а самой результирующей линии.

 
TheXpert >>:

А вторую функцию не пробовал?

Картинки бы посмотреть... не индикатора а самой результирующей линии.

2ю не пробывал

не совсем понял какие картинки есть желание увидеть

индюк выкладываю, может он покажет эти картинки :)


Файлы:
ivar_2.mq4  5 kb
 
Prival >>:

Ерунда какая то с этим херстом. Добиться 0.5 не получилось (хотя давал на вход rnd()). Единицы тоже не получилось добиться, хотя подавал x(i)=i (ряд все время растет)

Файл прилагаю, версия маткада 14

Все получается, если взять n не от 1 до 10...а хотя бы до 3000

Твой второй вариант расчета тоже верен - опят таки подать больше данных...

 
tenyps писал(а) >>

Все получается, если взять n не от 1 до 10...а хотя бы до 3000

Твой второй вариант расчета тоже верен - опят таки подать больше данных...

А что дальше? Прицепил, никакой связи с котиром или я что-то не догоняю?

 

День добрый) Прочитал частично все страницы, но к сожалению не все алгоритмы понял. Похожий вопрос тут уже пролетал. Как я понял синтаксис MQL4 и Си прям почти один в один, но различны структуры и больше "библиотек" с различными статистическими функциями.

Написал алгоритм на Си, вот привожу кусок кода:


double Herst( double *S, int n)

{

double *h1 = (double *) malloc(sizeof(double ) * n),

*h2 = (double *) malloc(sizeof(double ) * n),

*h = (double *) malloc(sizeof(double ) * n),

*Hn = (double *) malloc(sizeof(double ) * n),

h_ = 0, Rn = 0, Sn = 0, RSn = 0;

h[0] = 0, h[1] = 0, Hn[0] = 0, Hn[1] = 0;

if( h == NULL || Hn == NULL || h1 == NULL || h2 == NULL )

{

printf("Not enought memory!!!\n");

return -1;

}

for( int i = 1; i < n ; i++ ) h[i-1] = log( S[i] / S[i-1] );

for(int i = 1; i < n; i++) Hn[i] = Hn[i-1] + h[i-1];

if( (n - 1) != 0) h_ = Hn[n - 1] / ( n - 1 );

h2[0] = (h[0] - h_) * (h[0] - h_);

h1[0] = (h[0] - h_);

for( int i = 1; i < n - 1; i++ )

{

h1[i] = h1[i-1] + (h[i] - h_);

h2[i] = h2[i-1] + (h[i] - h_) * (h[i] - h_);

}

qsort( (double *)h1, n-1, sizeof(T), Comp );

Rn = h1[n-2] - h1[0];

if( (n - 1) != 0 ) Sn = h2[n-2] / ( n - 1 );

if( (n - 1) == 0 ) Sn = h2[n-2];

RSn = Rn / Sn;

free(h);

free(Hn);

free(h1);

free(h2);

return RSn;

}


Далее в массивы запихиваются:

for( int i = n_min; i < n; i++ )

{

x1[i - n_min] = log( double( i * 0.5) );

y1[i - n_min] = log( Herst( S1, i ) );

}

и по МНК строится прямая.

Вопрос - периодический выскакивает значение больше 1, но очень редко. Не могу понять в чем ошибка. МНК проверял на простых прямых ( y=ax+b, для a={0,0.5,1,2,3} и b = {-1,0,1,2} )

Что делать если для первых 3-5ти значений выборки среднеквадратичное отклонение - 0? Получается RS равно бесконечности и эти точки просто не рассматривать?

А, да и главный - правильно ли я стою последовательность точек(в начале для n_min, потом для этих же n_min + следующее значение и т.д.) или же нужно отрезок из n делить на какие-то равные участки и для каждого считать?

Пытался сам разобраться, но спустя две недели опустил руки. Алгоритм строился на основе след. книг - Петерс "Фрактальный Анализ финансовых рынков" и "Основы финансовой математики" Ширяева.

 
Disa >>:

День добрый) Прочитал частично все страницы, но к сожалению не все алгоритмы понял.


Пардон, что не по вопросу ответ, но возможно пригодится.
С тестовым примером зато.
Строго по Петерсу "Фрактальный Анализ финансовых рынков"

Файлы:
 
Vita >>:

Пардон, что не по вопросу ответ, но возможно пригодится.
С тестовым примером зато.

Собственно тестовый файл. H~0.72

Файлы:
brown72.txt  10 kb
 
Долго преобразовывал чтоб ускорить расчёт,
в результате получил вот такую упрощённую формулу для показателя Херста :
for(i=limit;i>=0;i--)
    {double LWma=iMA(NULL,0,period,0,MODE_LWMA,PRICE_CLOSE,i);
     double Sma=iMA(NULL,0,period,0,MODE_SMA ,PRICE_CLOSE,i);     
     double Bma=iBands(NULL,0,period,1,0,PRICE_CLOSE,MODE_PLUSDI,i);
     if(Bma!=Sma) e0[i]=(LWma - Sma)/(Bma-Sma);           
    } 
логически вроде бы всё верно,
хотя без логарифмов.
 
Urain >>:
Долго преобразовывал чтоб ускорить расчёт,
в результате получил вот такую упрощённую формулу для показателя Херста :
логически вроде бы всё верно,
хотя без логарифмов.

Это не упрощенная формула для показателя Херста. Вы заблуждаетесь.
Способов расчета показателя Херста много и все они трудоемки. Вы какую упрощали?
И ваша формула по ходу может быть меньше нуля, что совсем не кстати.

 
Vita >>:

Это не упрощенная формула для показателя Херста. Вы заблуждаетесь.
Способов расчета показателя Херста много и все они трудоемки. Вы какую упрощали?
И ваша формула по ходу может быть меньше нуля, что совсем не кстати.

Дело ведь не в абсолютных цифрах, а в идее.

Формула отображает отношение скорости регресии(угол) к стандартному отклонению, помоиму вполне в духе Херста.

Причина обращения: