Índice Hearst - página 18

 
surfer >> :

Acabei de cometer um erro em um lugar no indicador.

O fator de ponderação não dá nada, é uma diferença de milésimos.

Bem, o fato de saltar, sim.

Você já tentou a segunda função?

Fotos seria bom ver... não do indicador, mas da linha resultante em si.

 
TheXpert >> :

Você já tentou a segunda função?

Eu gostaria de ver algumas fotos... Não do indicador, mas da linha resultante.

Ainda não experimentei o segundo.

Não tenho certeza das fotos que você quer ver.

estou lhe dando o indicador, talvez ele mostre as fotos :)


Arquivos anexados:
ivar_2.mq4  5 kb
 
Prival >>:

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

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

Tudo funciona se você não tomar n de 1 a 10...mas pelo menos até 3000

Sua segunda versão do cálculo também está correta - mais uma vez, alimente mais dados...

 
tenyps писал(а) >>

Tudo funciona se você não tomar n de 1 a 10...mas pelo menos até 3000

Sua segunda versão do cálculo também está correta - mais uma vez, alimente mais dados...

O que segue? Afixado, sem conexão com o quociente ou estou perdendo algo?

 

Boa tarde) Li parcialmente todas as páginas, mas infelizmente não entendo todos os algoritmos. Uma pergunta semelhante já foi lançada aqui. Até onde entendi a sintaxe MQL4 e C é mais ou menos a mesma, mas as estruturas são diferentes, e há mais "bibliotecas" com diferentes funções estatísticas.

Eu escrevi o algoritmo em C, então aqui está um pouco de código:


duplo Herst( duplo *S, int n)

{

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

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

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

*Hn = (duplo *) 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("Não há memória suficiente!!!\n");

retornar -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( (duplo *)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;

livre(h);

livre(hn);

livre(h1);

livre(h2);

retornar RSn;

}


Em seguida, as matrizes são empurradas para dentro das matrizes:

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

{

x1[i - n_min] = log( duplo( i * 0,5) )

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

}

e uma linha reta é traçada usando ANC.

Pergunta - ocasionalmente encontro um valor superior a 1, mas muito raramente. Eu não consigo entender qual é o erro. Eu verifiquei ANC em linhas simples ( y=ax+b, para a={0,0.5,1,2,3} e b = {-1,0,1,2} )

E se, para os primeiros 3-5 valores de amostra, o desvio padrão for 0? Então RS é igual a infinito e não considera estes pontos?

Oh, e o principal - estou certo em manter a seqüência de pontos (no início para n_min, depois para o mesmo n_min + o próximo valor, etc.) ou devo dividir o segmento de n em algumas partes iguais e contar para cada um?

Eu mesmo tentei descobrir, mas duas semanas depois desisti. O algoritmo foi baseado nos seguintes livros - "Fractal Analysis of Financial Markets" de Peters e "The Fundamentals of Financial Mathematics" de Shiryaev.

 
Disa >>:

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


Perdoe-me por não responder à pergunta, mas pode vir a ser útil.
Com um caso de teste, porém.
Estritamente de acordo com Peters "Análise Fractal dos Mercados Financeiros".

Arquivos anexados:
 
Vita >>:

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

O arquivo de teste em si. H~0.72

Arquivos anexados:
brown72.txt  10 kb
 
Eu fiz uma longa conversão para acelerar o cálculo,
e acabei com esta fórmula simplificada para o expoente 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 logicamente correto,
embora sem logaritmos.
 
Urain >>:
Долго преобразовывал чтоб ускорить расчёт,
в результате получил вот такую упрощённую формулу для показателя Херста :
логически вроде бы всё верно,
хотя без логарифмов.

Esta não é uma fórmula simplificada para o índice Hearst. Você está enganado.
Há muitas maneiras de calcular a figura do Hearst e todas elas são de mão-de-obra intensiva. Qual delas você simplificou?
E sua fórmula pode ser inferior a zero, o que não ajuda em nada.

 
Vita >>:

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

Não se trata dos números absolutos, mas sim da idéia.

A fórmula mostra a relação entre a taxa de regressão (ângulo) e o desvio padrão, o que eu acho que está no espírito de Hirst.