Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 2064

 
Aleksey Nikolayev:

Procure por Di - o quadrado médio dos incrementos para o i-ésimo minuto do dia. Em seguida, divida todos os incrementos por seus correspondentes di=sqrt(Di). Some os incrementos ao quadrado e procure por desvios da SB na nova série. O preço é enviesado, mas o tempo não muda.

Qual é o objectivo de 2 meses por minuto? As mudanças a cada minuto serão pequenas, e os cálculos serão grandes. Ou um minuto para trás ou um mês para trás e um mês para a frente. Código para a primeira barra.

for(int i = 1,i<= 43200*2, i++);
{
Di+=pow((iClose(NULL,1,i) - iOpen(NULL,1,i)),2)/i ;
}
di=sqrt(Di);

Nova fila

for(int i = 1,i<= 43200*2, i++);
{
NewClose[i]=iClose(NULL,1,i)/di;
NewOpen[i]=iOpen(NULL,1,i)/di ;
}

Está correcto?

 
Valeriy Yastremskiy:

Isso é correcto?


Eu acho que não.

Eu entendi o algoritmo desta forma: vamos assumir que a hora é 10:00, você calcula Di para barras m1 deste tempo e depois para 10:00 minutos (fechar[i] - abrir[i])/di e assim por cada minuto.

 
Evgeniy Chumakov:


Eu não acho.

Eu entendi o algoritmo desta forma: digamos que são 10:00, você calcula Di para barras m1 deste tempo e depois para 10:00 minutos (fechar[i] - abrir[i])/di e assim por cada minuto.

Código para a primeira barra. Tens de o mover mais fundo, é outro laço no topo.
 
Evgeniy Chumakov:


Eu não acho.

Eu entendi o algoritmo desta forma: digamos que são 10:00, você calcula Di para barras m1 deste tempo e depois para 10:00 minutos (fechar[i] - abrir[i])/di e assim por cada minuto.

Isto é correcto. Criamos dois arquivos - real e inteiro com o tamanho 1440=24*60. No primeiro, soma os quadrados de incrementos, e no segundo - o número de barras para determinado minuto, e depois divide primeiro por segundo (para números com número de barras superior a 1). Depois extraímos a raiz quadrada e só depois renormalizamos os incrementos e montamos a soma cumulativa - uma nova série, que depois investigamos para ver se ela difere da SB.

 
Aleksey Nikolayev:

Sim, isto é correcto. Temos dois arquivos - real e inteiro, tamanho 1440=24*60. No primeiro, soma os quadrados de incrementos, e no segundo - o número de barras para um determinado minuto, e depois divide o primeiro pelo segundo (para números com um número de barras superior a 1). Depois extraímos a raiz quadrada e só depois renormalizamos os incrementos e os acumulamos em uma nova série, que analisamos em termos de diferença da SB.

A média quadrada das minúcias por 24 horas, e assim por 2 meses de minúcias. Número de barra do minuto? Dividimos a soma dos quadrados por 1440?

 
Valeriy Yastremskiy:

Você divide a soma dos quadrados por 1440?


Você divide a soma dos quadrados pelo número de barras por um determinado minuto e depois extrai a raiz.

 
Aleksey Nikolayev:

Sim, isto é correcto. Temos dois arquivos, um real e um inteiro de tamanho 1440=24*60.


ou seja, precisamos de construir uma soma diária acumulada = 1440 minutos?

 
Evgeniy Chumakov:


Você divide a soma dos quadrados pelo número de barras por um determinado minuto e depois extrai a raiz.

Então eu não entendo. Para a profundidade da barra 3 a soma será três e este valor será calculado para a terceira barra ou para a primeira. Entendo que a média tem que ser calculada para o mesmo número de barras e não cumulativamente. Seria melhor dar a fórmula imediatamente. Todos nós entendemos as palavras de forma diferente).

for(int i = 1,i<= 1440, i++);
{
Di+=pow((iClose(NULL,1,i) - iOpen(NULL,1,i)),2)/i ;
di=sqrt(Di);
DVal[i]=(iClose(NULL,1,i) - iOpen(NULL,1,i)/di; 
}

Não me parece correcto para mim.

 
Valeriy Yastremskiy:


Não me parece certo para mim.


código errado

 

Assumindo que não há lacunas na história e que há 1440 minutos em todos os dias (menos na sexta-feira) então o código deve ser assim

double di = 0;

int n = 40; // глубина 40 суток (два месяца)

int pos = 0; // текущий бар

int step = 0; // шаг


for(int i = 0; i < n; i++){

di += MathPow( close[pos + step] - open[pos + step],2);

step += 1440;
}

di = MathSqrt(di/n);

double x = (close[pos] - open[pos])/di;