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

 
elibrarius:
Sí. Los sinónimos son fic, input, predictor.
gracias, siempre he tenido "fiches", aunque la palabra está torcida
 
Evgeny Dyuka:
gracias, siempre he tenido una "cosa", aunque la palabra es torcida

incluso desagradable....

la palabra más correcta en mi opinión es" características". pero hay muchos sinónimos. y no son los mejores.

elibrarius:
Sí. Los sinónimos son fic, input, predictor.
 
Evgeny Dyuka:
gracias, siempre he tenido "fiches", aunque la palabra está torcida

Especialmente cuando no estás familiarizado con la transliteración.

 
Maxim Kuznetsov:

la barra no se abrirá hasta que se produzca un tick en el instrumento. Puede que no haya una garrapata durante mucho tiempo ;-)

Y este problema, por desgracia, no está totalmente resuelto en el código. ¿Tenéis ideas de cómo se puede resolver de forma que sea posible recibir los mismos datos de un símbolo en el que el EA no se encuentre en modo de modelado OHLC y en modo "Cada tick se basa en ticks reales"? En general, ¿tiene alguna idea de cómo resolver el problema de OHLC con la sincronización sin retraso, es decir, si no hay barra en otro símbolo todavía, entonces utilizamos los datos de la barra anterior? Si comprobamos todos los ticks, podemos (aunque no lo he probado) recibir los datos del primer tick de la barra y estar seguros de la sincronización, es decir, saber si había una barra en el gráfico actual en el momento de abrir uno nuevo o no.

 
Aleksey Vyazmikin:

Y este problema, por desgracia, no se resuelve del todo con el código. ¿Hay alguna idea de cómo se puede resolver para que sea posible recibir los mismos datos del símbolo, donde el EA no se encuentra, tanto en el modo de simulación OHLC como en el modo "Cada tick basado en ticks reales"? En general, ¿tiene alguna idea de cómo resolver el problema de la sincronización sin retraso cuando OHLC, es decir, si no hay barra en otro símbolo todavía, entonces usamos los datos de la barra anterior? Si lo comprobamos con todos los ticks, entonces es posible (aunque no lo he probado) recibir los datos del primer tick de la barra y estar seguro de la sincronización usándolos, es decir, saber si había una barra en el gráfico actual en el momento de abrirse una nueva o no.

Puede que incluso se pierda alguna barra diminuta. Forma una barra al precio de cierre de la anterior. Esto puede ser bueno para el análisis del comportamiento combinado de varios símbolos. Puede no ser importante para un par de divisas.
 
elibrarius:
Puede que incluso se pierdan algunos bares de minutos. Forma una barra al precio de cierre de la anterior. Para el análisis del comportamiento conjunto de varios instrumentos estará bien. Para una moneda probablemente no sea importante.

De esta forma se producirá una desincronización, ya que según OHLC la barra anterior será la anterior, pero en la operativa real puede ser la anterior.

 

Para los que no sabían que el modo OHLC es una serie temporal de símbolos no sincronizados, es fundamental para MO


Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Nueva versión de MetaTrader 5 build 2615: Análisis Fundamental y Criterios Complejos en el Probador de Estrategias

Aleksey Vyazmikin, 2020.09.26 13:26


Build 2622, marco temporal de 1 minuto, herramienta Si-12.20 broker "Otkrytie".

Imprimir en la apertura de una nueva barra en el modo"Cada tick basado en los ticks reales" y "OHLC en M1". :

Print("Time",TimeToString(iTime(Symbol(),PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES), " Time_TOM=",TimeToString(iTime("USDRUB_TOM",PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES));

Los resultados anteriores están tabulados y tengo preguntas sobre ellos:

1. Esperaba que el retraso se produjera si había una nueva barra para el símbolo actual, pero aún no para el símbolo del que solicitamos la información - esta situación se produce realmente, pero sólo en la apertura de un nuevo día - se resalta en verde.

2) La situación es la misma que en el primer punto sin marcar, pero si se espera en la prueba potik, entonces por qué esta situación ocurre en"OHLC en M1" - por qué hay una desincronización - no está claro.

3. la situación en la que se reciben dos ticks al mismo tiempo o un tick para el símbolo solicitado es más rápido que para el símbolo del que se llama la información, se resalta con amarillo; pero ¿por qué no hay ningún tick en esta barra en el modo "OHLC en M1", si ya se ha recibido en el modo tickwise?

Pido a los desarrolladores que se aclaren, ¿esta era la intención, entonces cuál es la lógica, o se trata de un error que se solucionará?


Respuesta:

Foro sobre comercio, sistemas de comercio automatizados y prueba de estrategias de comercio

Nueva versión de MetaTrader 5 build 2615: Análisis Fundamental y Criterios Complejos en el Probador de Estrategias

Renat Fatkhullin, 2020.09.26 13:33

Su pregunta se refiere sólo al modo de prueba OHLC, porque todo es correcto en el modo poticky?

La respuesta es sencilla, no se puede garantizar la sincronización exacta de los caracteres extraños en las pruebas de OHLC. La OHLC es exclusivamente para pruebas sucias.


 

Parece que se ha resuelto el problema de la desincronización, cuando se solicitan datos de otro símbolo - tuvo que sacrificar una barra de un minuto en algunos casos, pero resultado estable cuando se modela en todos los ticks y en OHLC, lo que significa que se espera lo mismo en el comercio real.

//+------------------------------------------------------------------+
//|Получение информации о ценах OHLC текущего бара                   |
//+------------------------------------------------------------------+
void Get_OHLC(string symbol,ENUM_TIMEFRAMES TF, double &arr_OHLC[])
{
   ArrayResize(arr_OHLC,4);
   arr_OHLC[0]=iOpen(symbol,TF,0);
   arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
   datetime s=iTime(symbol,TF,0);
   datetime f=iTime(symbol,PERIOD_M1,1);
   datetime Time_1=iTime(Symbol(),PERIOD_M1,1);

   if(TF!=PERIOD_M1)
   {
      double arr_High[];
      double arr_Low[];
      int copied=0;
      if(Symbol()!=symbol)//Если берем данные с другого символа, то проверяем синхронизацию - нужно, так как при открытии новой свечи на текущем символе данных можнт небыть на опрашиваемом символе
      {
         if(Time_1>f)//На текущем символе открылись раньше появления нового бара на запрашиваемом
         {
            f=iTime(symbol,PERIOD_M1,0);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
         }
         else
         {
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
         }
         if(s>f)//Если текущий бар ТФ открылся раньше, чем минутный бар до которого включительно берем информацию OHLC
         {
            s=iTime(symbol,TF,1);
            arr_OHLC[0]=iOpen(symbol,TF,1);
         }
         copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
         if (copied>0)
         {
            arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
         }
         else
         {
            Print("Ошибка копирования в массив arr_High");
         }
         copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
         if (copied>0)
         {
            arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
         }
         else
         {
            Print("Ошибка копирования в массив arr_Low");
         }

      }
      else
      {
         if(s<f)
         {
            copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
            if (copied>0)
            {
               arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
            }
            else
            {
               Print("Ошибка копирования в массив arr_High");
            }
            copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
            if (copied>0)
            {
               arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
            }
            else
            {
               Print("Ошибка копирования в массив arr_Low");
            }
         }
         else
         {
            if(s==f)//Если ТФ открылся на прошлом минутном баре
            {
               arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
               arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
            }
            if(s>f)//Если ТФ открылся на текущем минутном баре
            {
               arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
               arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
            }
         }
      }
   }
   else
   {
      arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
      if(Symbol()!=symbol)
      {
         if(Time_1>iTime(symbol,PERIOD_M1,1))//Если не появился новый бар
         {
            arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
            arr_OHLC[1]=iHigh(symbol,PERIOD_M1,0);
            arr_OHLC[2]=iLow(symbol,PERIOD_M1,0);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
         }
         else//Если появился новый бар
         {
            arr_OHLC[0]=iOpen(symbol,PERIOD_M1,1);
            arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
            arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
         }
      }
   }
}
 
Para un algo normal y robusto, un pequeño retraso no tiene ningún efecto. (Se trata de un problema muy lejano).
 
Maxim Dmitrievsky:
Para un algo normal y robusto, un poco de retraso no afecta a nada. Se trata de problemas muy lejanos).

¿Dónde conseguir estos "normales"? Y afecta o no - es aleatorio aquí, si durante la cuantificación uno se pone en el límite entre los cuantiles, entonces durante el entrenamiento puede parecer que sólo 1 diferencia de cuantiles causará salto de entrada en el real. En general, no me gusta cuando no puedo reproducir una operación de un día cerrado en el probador, así que identifiqué el motivo y empecé a solucionarlo.

Razón de la queja: