Índice Hearst - página 18

 
surfer >> :

Sólo me he equivocado en un lugar del indicador.

El factor de ponderación no da nada, es una diferencia de milésimas.

Bueno, el hecho de que rebote, sí.

¿Has probado la segunda función?

Estaría bien ver fotos... no del indicador sino de la propia línea resultante.

 
TheXpert >> :

¿Has probado la segunda función?

Me gustaría ver algunas fotos... No del indicador, sino de la línea resultante.

No he probado el segundo.

No estoy seguro de qué fotos quieres ver.

te doy el indicador, tal vez muestre las fotos :)


Archivos adjuntos:
ivar_2.mq4  5 kb
 
Prival >>:

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

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

Todo funciona si se toma n no de 1 a 10...sino al menos hasta 3000

Tu segunda versión del cálculo también es correcta - de nuevo, alimenta más datos...

 
tenyps писал(а) >>

Todo funciona si se toma n no de 1 a 10...sino al menos hasta 3000

Tu segunda versión del cálculo también es correcta - de nuevo, alimenta más datos...

¿Y ahora qué? Anclado, ¿no hay relación con el cociente o me estoy perdiendo algo?

 

Buenas tardes) He leído parcialmente todas las páginas, pero lamentablemente no entiendo todos los algoritmos. Una pregunta similar ya ha volado aquí. Por lo que he entendido la sintaxis de MQL4 y C es más o menos la misma, pero las estructuras son diferentes, y hay más "bibliotecas" con diferentes funciones estadísticas.

He escrito el algoritmo en C, así que aquí hay un poco de código:


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("¡¡¡No hay suficiente memoria!!!");

devuelve -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;

libre(h);

libre(hn);

libre(h1);

libre(h2);

devuelve RSn;

}


Luego se meten las matrices en las matrices:

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 );

}

y se dibuja una línea recta utilizando el CNA.

Pregunta - De vez en cuando me encuentro con un valor superior a 1, pero muy raramente. No puedo entender cuál es el error. He comprobado el CNA en líneas simples ( y=ax+b, para a={0,0,5,1,2,3} y b = {-1,0,1,2} )

¿Y si para los primeros 3-5 valores de la muestra la desviación estándar es 0? ¿Así que la RS es igual al infinito y simplemente no tiene en cuenta estos puntos?

Ah, y lo principal - ¿estoy en lo cierto al situar la secuencia de puntos (al principio para n_min, luego para el mismo n_min + el siguiente valor, etc.) o debo dividir el segmento de n en algunas partes iguales y contar para cada una?

Intenté resolverlo yo mismo, pero dos semanas después me rendí. El algoritmo se basó en los siguientes libros: "Fractal Analysis of Financial Markets" de Peters y "The Fundamentals of Financial Mathematics" de Shiryaev.

 
Disa >>:

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


Perdona que no responda a la pregunta, pero puede ser útil.
Pero con un caso de prueba.
Estrictamente según el "Análisis Fractal de los Mercados Financieros" de Peters.

Archivos adjuntos:
 
Vita >>:

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

El propio archivo de prueba. H~0.72

Archivos adjuntos:
brown72.txt  10 kb
 
Hice una larga conversión para acelerar el cálculo,
y terminé con esta fórmula simplificada para el exponente de Hurst:
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);           
    } 
Parece ser lógicamente correcto,
aunque sin logaritmos.
 
Urain >>:
Долго преобразовывал чтоб ускорить расчёт,
в результате получил вот такую упрощённую формулу для показателя Херста :
логически вроде бы всё верно,
хотя без логарифмов.

Esta no es una fórmula simplificada para el índice Hearst. Se equivoca.
Hay muchas formas de calcular la cifra de Hearst y todas son muy laboriosas. ¿Cuál has simplificado?
Y su fórmula puede ser inferior a cero, lo que no ayuda en absoluto.

 
Vita >>:

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

No se trata de los números absolutos, sino de la idea.

La fórmula muestra la relación entre la tasa de regresión (ángulo) y la desviación estándar, lo que creo que está en el espíritu de Hirst.

Razón de la queja: