Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 2064

 
Aleksey Nikolayev:

Busque Di - el cuadrado medio de los incrementos para el i-ésimo minuto del día. A continuación, divide todos los incrementos por su correspondiente di=sqrt(Di). Sume los incrementos al cuadrado y busque las desviaciones de la SB en la nueva serie. El precio está sesgado, pero el tiempo no cambia.

¿Qué sentido tienen 2 meses por cada minuto? Los cambios en cada minuto serán pequeños, y los cálculos serán grandes. Un minuto hacia atrás o un mes hacia atrás y un mes hacia adelante. Código de la primera barra.

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

Nueva fila

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

¿Es correcto?

 
Valeriy Yastremskiy:

¿Está bien?


Creo que no.

Entendí el algoritmo así: supongamos que la hora es 10:00, se calcula Di para las barras m1 de esta hora y luego para las 10:00-minuto (close[i] - open[i])/di y así para cada minuto.

 
Evgeniy Chumakov:


No lo creo.

Entendí el algoritmo de esta manera: digamos que son las 10:00, se calcula Di para las barras m1 de esta hora y luego para el minuto 10:00 (close[i] - open[i])/di y así para cada minuto.

Código de la primera barra. Tienes que moverlo más profundamente, es otro bucle en la parte superior.
 
Evgeniy Chumakov:


No lo creo.

Entendí el algoritmo de esta manera: digamos que son las 10:00, se calcula Di para las barras m1 de esta hora y luego para el minuto 10:00 (close[i] - open[i])/di y así para cada minuto.

Esto es correcto. Creamos dos archivos - real y entero con tamaño 1440=24*60. En el primero, sume los cuadrados de los incrementos, y en el segundo - el número de barras para el minuto dado, y luego divida el primero por el segundo (para números con número de barras mayor que 1). A continuación, extraemos la raíz cuadrada y sólo entonces renormalizamos los incrementos y ensamblamos la suma acumulada: una nueva serie, que luego investigamos para ver si difiere de SB.

 
Aleksey Nikolayev:

Sí, esto es correcto. Tenemos dos archivos - real y entero, tamaño 1440=24*60. En el primero, sume los cuadrados de los incrementos, y en el segundo - el número de compases para un minuto determinado, y luego divida el primero por el segundo (para los números con un número de compases superior a 1). Luego extraemos la raíz cuadrada y sólo después renormalizamos los incrementos y los acumulamos en una nueva serie, que analizamos en términos de diferencia con respecto a SB.

Es decir, la media cuadrada de los puntos característicos durante 24 horas, y así durante 2 meses de puntos característicos. ¿Número de barra de minutos? ¿Dividimos la suma de cuadrados entre 1440?

 
Valeriy Yastremskiy:

¿Divides la suma de los cuadrados entre 1440?


Se divide la suma de cuadrados por el número de barras de un minuto determinado y se extrae la raíz.

 
Aleksey Nikolayev:

Sí, esto es correcto. Tenemos dos archivos, uno real y otro entero de tamaño 1440=24*60.


es decir, ¿necesitamos construir la suma diaria acumulada = 1440 minutos?

 
Evgeniy Chumakov:


Se divide la suma de los cuadrados por el número de barras de un minuto determinado y se extrae la raíz.

Entonces no lo entiendo. Para la profundidad de la barra 3 la suma será de tres y este valor se calculará para la 3ª barra o para la primera. Entiendo que la media debe calcularse para el mismo número de barras y no de forma acumulativa. Sería mejor dar la fórmula de inmediato. Todos entendemos las palabras 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; 
}

A mí no me parece bien.

 
Valeriy Yastremskiy:


No me parece correcto.


código incorrecto

 

Suponiendo que no haya huecos en el historial y que haya 1440 minutos en todos los días (menos el viernes), el código debería ser así

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;