Cálculo da diferença, exemplos. - página 5

 
Aleksey Panfilov:

Sobre o assunto de Fourier, é um tópico rico. Se houver interesse, iremos abordar o assunto periodicamente.

Muito provavelmente, as principais questões surgirão com a declaração do problema (devido a um método diferente). Agora, tanto quanto sei, o indicador selecciona a maioria das frequências de amplitude do espectro de Fourier.

Tive a ideia de aparafusar um indicador deFourier a uma linha polinomial já com média. Suspeito que as suas leituras extrapoladas mudariam mais lentamente.


Geralmente estás a pensar na direcção certa.

As extrapolações pelos métodos polinomial e Fourier são completamente diferentes na natureza. A extrapolação de Fourier só pode ser aplicada a um mercado plano devido à sua natureza periódica (esta linha é uma soma de sinusóides de diferentes frequências, fases e amplitudes), e tende sempre a recuar.

Enquanto a extrapolação polinomial, pelo contrário, é boa para a tendência, porque continua a tentar "voar" para baixo ou para cima, devido à sua natureza gradual.
É, portanto, muito sensato combinar os dois métodos. Claro que não te vais safar com uma simples soma. Mas tenho uma ideia clara de como melhor combiná-los, e isso deve ser feito usando o reconhecimento de padrões. E eu já tenho um trabalho sério a fazer sobre este assunto. Eu até publiquei o meu primeiro algoritmo de reconhecimento há muito tempo atrás, em código aberto. Este algoritmo encontra canais lineares (polinomial de grau 1) em todos os TFs. Embora seja o mais primitivo e lento do meu algoritmo, ainda não encontrei um melhor mesmo no Mercado (estou a gabar-me em ).

A extrapolação de Fourier é muito mais lenta que a polinomial, por isso seria bom tentar acelerá-la; no entanto, você ainda pode fazer muito bem com a velocidade atual.

 
Evgeny Belyaev:

Isso é o que todos têm feito... ...escrito...


Para começar uma série de comparações, vamos voltar ao que é bem conhecido.

 
      a1_Buffer[i] =iMA(NULL,0,145,0,MODE_EMA,PRICE_OPEN,i);// a1_Buffer[i]=  ((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800   *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z]  ;  }}



      a2_Buffer[i]= ( (open[i] - Znach)  + 72   *a2_Buffer[i+1 ] )/73;
      
      a6_Buffer[i+92]=a2_Buffer[i];   if(i<=1) { for(z=92-1;z>=0;z--){         a6_Buffer[i+0+z]=  2*a6_Buffer[i+1+z] -  1*a6_Buffer[i+2+z]  ;  }}

A primeira linhaa1_Buffer é traçada como uma EMA clássica com um período de 145 (72*2+1), com base nos pontos de abertura e deslocada 72 passos para a esquerda. A ampla linha cinza na foto.

A segunda linhaa5_Buffer mostra extrapolação usando uma linha reta nos dois últimos pontos da primeira linha. A linha cinza é mais fina na figura.

A terceira linhaa2_Buffer é traçada diretamente da equação de diferença do primeiro grau. Alinha azul na figura.

1*Y_(-1)-2*Y_0+1*Y_(+1)=0 Equação de diferença de primeiro grau para pontos igualmente espaçados.

2*Y_(-1)-3*Y_0+1*Y_(+2)=0 Equação de diferença de primeiro grau para o ombro em 2 intervalos.

72*Y_(-1)-73*Y_0+1*Y_(+72)=0 Equação da diferença de primeiro grau para o ombro em intervalos de 72.

É essencialmente uma equação de Archimedean Lever do primeiro grau.

A quarta linhaa6_Buffer mostra a extrapolação usando uma linha reta dos dois últimos pontos da terceira linha. A linha vermelha na figura que é baseada no ponto de abertura.

Podemos ver a identidade completa das duas construções. Dei um exemplo para não mostrar a transformação do código e a transformação da fórmula clássica da EMA para a forma de diferença.

Quero notar que isso significa que, dentro da terminologia estabelecida, podemos chamar a construção usando polinómios, EMA de certo grau. Uma vez que a questão de nomear as linhas construídas permanece em aberto. )

Se não se importa, é claro:))

Arquivos anexados:
 
Nikolai Semko:

Eu até publiquei o meu primeiro algoritmo de reconhecimento há muito tempo atrás, em código aberto. Este algoritmo encontra canais lineares (polinômio de grau 1) em todos os TFs. Apesar de ser o mais primitivo e mais lento do meu algoritmo, não encontrei melhor nem no Mercado(estou me vangloriando em).

Na minha opinião, bastante justificado. :))
 

Gostaria de salientar que o ponto pode ser extrapolado através do cálculo prévio dos coeficientes(a2_Buffer linha azul) ou tomando o valor requerido da linha que está sendo redesenhada(a6_Buffer linha amarela). Embora, é claro, a segunda variante seja consumidora de recursos.

      a1_Buffer[i] =iMA(NULL,0,145,0,MODE_EMA,PRICE_OPEN,i);// a1_Buffer[i]=  ((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800   *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z]  ;  }}



      a2_Buffer[i]= 37* a1_Buffer[i] -36 *a1_Buffer[i+1];
      
      a6_Buffer[i+56]=a5_Buffer[i+56];  


Arquivos anexados:
 

Agora calculando a média por polinômio de segundo grau (EMA de segundo grau) e extrapolando para uma alavancagem diferente usando uma linha reta.

      a1_Buffer[i]=  ((open[i] - Znach)    +5328*a1_Buffer[i+1 ]-   2628 *a1_Buffer[i+2 ])/2701;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z]  ;  }}



      a2_Buffer[i+20]=a5_Buffer[i+20]; 
      
      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
      a4_Buffer[i+56]=a5_Buffer[i+56];
        
      a6_Buffer[i+74]=a5_Buffer[i+74];
    

A primeira figura é o esquema de plotagem, na segunda todas as linhas que não são redesenhadas são desenhadas até o último valor.

Os indicadores no subsolo diferem apenas no offset da linha definida.



 

Médias por polinômio de segundo grau (EMA de segundo grau) e extrapolação para diferentes alavancagens usando uma parábola quadrada (polinômio de segundo grau).

      a1_Buffer[i]=  ((open[i] - Znach)    +5328*a1_Buffer[i+1 ]-   2628 *a1_Buffer[i+2 ])/2701;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  3*a5_Buffer[i+1+z]  -  3*a5_Buffer[i+2+z]  +  1*a5_Buffer[i+3+z]  ;  }}


      a2_Buffer[i+20]=a5_Buffer[i+20]; 
      
      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
      a4_Buffer[i+56]=a5_Buffer[i+56];
        
      a6_Buffer[i+74]=a5_Buffer[i+74];
  

A primeira figura é o esquema de plotagem, na segunda todas as linhasque não são redesenhadas são desenhadas até o último valor.

Os indicadores no subsolo diferem apenas no offset da linha definida.


 

Já olhei através do fio algumas vezes e não entendo: do que estamos falando?

Uma citação é um processo aleatório que pode ser aproximado por todos os tipos de curvas analíticas, em particular as que estão aqui no fio.

Mas há um ponto muito fundamental.

Os coeficientes nestas curvas analíticas são constantes, o que é uma ideia muito ousada.

Como aproximamos um processo aleatório, os coeficientes também são quantidades RARAS e devem ser AVALIADOS em vez de calculados, com tudo o que isso implica. Por exemplo, pode-se facilmente obter o valor de um coeficiente, ver o seu valor e, ao olhar para a sua avaliação, ver que o erro na determinação do valor do coeficiente é um múltiplo do próprio valor.

E o problema não acaba aí. Um erro é um erro se for distribuído normalmente, e se NÃO estiver parado então não há coeficiente algum, embora possamos vê-lo.

É por isso que todos os indicadores acabam por se revelar não funcionais. Mas eles podem ser indescritivelmente bonitos.


PS.

Havia um post acima que o futuro não flui do passado. Então, acima é uma revelação deste triste facto.

 
SanSanych Fomenko:

Já olhei através do fio algumas vezes e não entendo: do que estamos falando?

Uma citação é um processo aleatório que pode ser aproximado por todos os tipos de curvas analíticas, em particular as que estão aqui no fio.

Mas há um ponto muito fundamental.

Os coeficientes destas curvas analíticas são constantes, o que é uma ideia muito ousada.

Como aproximamos um processo aleatório, os coeficientes também são quantidades RARAS e devem ser AVALIADOS em vez de calculados, com tudo o que isso implica. Por exemplo, pode-se facilmente obter o valor de um coeficiente, ver o seu valor e, ao olhar para a sua avaliação, ver que o erro na determinação do valor do coeficiente é um múltiplo do próprio valor.

E o problema não acaba aí. Um erro é um erro se for distribuído normalmente, e se NÃO estiver parado, não há coeficiente algum, embora possamos vê-lo.

É por isso que todos os indicadores acabam por se revelar não funcionais. Mas eles podem ser indescritivelmente bonitos.


PS.

Havia um post acima que o futuro não flui do passado. Então, acima é uma revelação deste triste facto.

Obrigado pelo seu posto.

Também lembrado:

Fórum sobre negociação, sistemas de negociação automatizados e testes de estratégia de negociação

Você sabe como preparar os canais?

SanSanych Fomenko, 2017.12.31 11:00

Fórum sobre negociação, sistemas de negociação automatizados e teste de estratégias de negociação

Você sabe como preparar os canais?

Aleksey Ivanov, 2017.12.31 10:48

Sim, esqueci de especificar que construí estas distribuições de probabilidade móvel sem atraso(as médias móveis construídas por 2n+1 pontos estão atrasadas por n pontos, o mesmo, é claro, é verdade para as distribuições), para as quais apenas pelo modelo

GARCH previu uma série de pontos e criou um modelo de distribuição não degenerada na parte final da história (o que é importante), considerando as estatísticas adicionais fornecidas por eles. Minha pergunta ao SanSanych(SanSanych Fomenko): "Esta abordagem será mais correta para saltos ou também causará problemas?


Eu não posso avaliar o seu método e dar uma resposta.

Você está tentando considerar uma idéia, da qual há inúmeras no mercado, mas como um número esmagador de autores de idéias você não se pergunta: em que base tudo o que você vê nos dados históricos será repetido no futuro? Ou mais precisamente: a sua ideia tem sequer uma capacidade de previsão?

Os autores do GARCH não chegaram imediatamente a este modelo e, aliás, numa amarga luta com os ideólogos do mercado eficiente, que eles entenderam como estacionário.

Sabemos pelas estatísticas que os processos estacionários podem ser previstos, mas os não estacionários são muito mal previstos. Este é precisamente o problema. A não-estacionariedade tornou montanhas inúteis de matemática extremamente eficazes em outras áreas.

Ideologia GARCH:

  • A premissa subjacente NÃO é estacionaridade
  • formulamos com precisão o significado da palavra não-estacionariedade
  • começar a ir do NÃO para a estacionaridade, pouco a pouco.
  • Quanto mais próxima a estacionaridade, maior a capacidade de prever o futuro que o algoritmo tem


A tua ideia vai por aqui?


Acho que vai ser muito útil.
 

Média por polinômio de quarto grau com alavancagem 72 (EMA de quarto grau) e extrapolação para diferentes alavancagens usando uma linha reta.

      a1_Buffer[i]=((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800    *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  2*a5_Buffer[i+1+z]  -  1*a5_Buffer[i+2+z]  +  0*a5_Buffer[i+3+z]  ;  }}


      a2_Buffer[i+20]=a5_Buffer[i+20]; 
      
      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
      a4_Buffer[i+56]=a5_Buffer[i+56];
        
      a6_Buffer[i+74]=a5_Buffer[i+74];
 

A primeira figura é o esquema de plotagem, na segunda todas as linhasque não são redesenhadas são desenhadas até o último valor.

Os indicadores no subsolo diferem apenas no offset da linha definida.


 

Média por polinômio de quarto grau com alavancagem 72 (EMA de quarto grau) eextrapolação para diferentes alavancagens usandouma parábola quadrada (polinômio de segundo grau).

      a1_Buffer[i]=((open[i] - Znach)    +5061600*a1_Buffer[i+1 ]-7489800    *a1_Buffer[i+2 ]+4926624*a1_Buffer[i+3 ]-1215450*a1_Buffer[i+4 ])/1282975;

      a5_Buffer[i+92]=a1_Buffer[i];   if(i<=1100) { for(z=92-1;z>=0;z--){        a5_Buffer[i+0+z]=  3*a5_Buffer[i+1+z]  -  3*a5_Buffer[i+2+z]  +  1*a5_Buffer[i+3+z]  ;  }}


      a2_Buffer[i+20]=a5_Buffer[i+20]; 
      
      a3_Buffer[i+38]=a5_Buffer[i+38]; 
      
      a4_Buffer[i+56]=a5_Buffer[i+56];
        
      a6_Buffer[i+74]=a5_Buffer[i+74];

A primeira figura é um esquema de plotagem, na segunda todas as linhasque não são redesenhadas são desenhadas até o último valor.

Os indicadores no subsolo diferem apenas no offset da linha definida.


Razão: