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

 
Aleksey Vyazmikin:

¿Estás de acuerdo en que en el momento de la apertura de la barra de minutos se tome la OI para la entrada anterior? Por ejemplo, tomamos la apertura a las 10:00 horas como 23:49:55.

Creo que es mejor utilizar el indicador en M1 y tomar toda la información necesaria de la barra cero y hacer diferentes comparaciones en el Asesor Experto teniendo en cuenta la solicitud de información del búfer del indicador con el desplazamiento requerido.

¿Cuál es el tercer valor en el archivo - el primero es la fecha, el segundo es OM y el tercero es OI? Pensé que era un delta pero no funciona.

Intenté modificar el indicador como escribí arriba, lee y muestra el OM, la velocidad de trabajo es mucho más rápida ahora, sólo pruébalo.

Sí, y la lectura desde el archivo debería funcionar en caso de interrupción de datos y presencia de datos en el archivo, pero el mercado está cerrado y no lo he comprobado.

Realmente no importa. Es importante que los datos escritos se carguen siempre correctamente en el indicador. La cuestión es que estos errores se permiten antes de que se haya guardado el archivo de formación. Si especificamos esta regla, que sea así, lo más importante es que el indicador real ejecute esta regla correctamente.

Alexey, gracias por el indicador, pero tengo una pregunta sobre un Asesor Experto en tiempo real. Si no se utiliza, se guardará cada minuto y no cada cambio de OM en un minuto.

No utilizo la barra cero en mi trabajo. Además, realizo todos los cálculos 30 segundos después de la señal de la primera barra. Por lo tanto, no se realizan cálculos entre la señal. Pero la señal de la primera barra en 30 segundos se aplica a todos los indicadores que participan en el modelo y, en teoría, estos indicadores deberían calcular todo el historial desde la última referencia (señal) hasta la actual con la condición de que no estén en el gráfico. Este es el agujero que el indicador debe leer del archivo para obtener el valor actual con precisión.

La cuestión es que utilizo datos dependientes de las cotizaciones (yo mismo los llamé así :-)) que son sensibles a las lagunas y agujeros de la historia.

Por favor, ayúdame a llevar el código de indicadores que utilizo y te agradeceré un par de ideas clave a la hora de preparar los kits de formación. + Tengo 37 libras en mi servicio te las daré sin problema. Pero sólo a condición de que se garantice la plena fiabilidad de los datos para el EA en el comercio real.

El principal problema que tengo es que cuando alimento mi EA con la IA en un gráfico y obtengo una nueva señal tengo que volver a compilarlo y entonces solicitará los datos adecuados de los indicadores. Pero el problema está en los indicadores. Los envío a un gráfico, muestra el historial correctamente y sigue presentando datos. Lo recompilo después de algún tiempo y la cola que se dibujó en la cuenta real cambia sus valores.

También hay un indicador delta acumulativo que calcula correctamente en relación con las barras. Sin embargo, cuando el historial de este indicador es largo, es de 3 meses en М5, no tiene tiempo de ser calculado para un ciclo ya que toma datos de copitic, que por sí mismo entiende cuántos ciclos obtiene.

Recientemente la actualización ha comenzado a comer memoria al crear un archivo de entrenamiento, porque se solicita para 14 instrumentos en 3-6 meses de historia. Por ello, 8 gigas de RAM no son suficientes. Y esta herramienta escribe la barra cero en tiempo real, lo que no necesito. Me basta con cargar sólo la primera cuando aparece la barra de cero.

Si quieres dar alguna ayuda escribe en un mensaje personal y más particularmente de acuerdo. ¡¡¡¡Gracias!!!!

Archivos adjuntos:
CumDelta.mq5  55 kb
 
Mihail Marchukajtes:

Realmente no importa. Lo importante es que los datos registrados se carguen siempre correctamente en el indicador. La cuestión es que estos errores son aceptables antes de guardar el archivo de formación. Si especificamos esta regla, que sea así, lo más importante es que el indicador real ejecute esta regla correctamente.

Alexey, gracias por el indicador, pero tengo una pregunta sobre un Asesor Experto en tiempo real. Si no se utiliza, ¿se guardará cada minuto y no cada vez que la OI cambie en un minuto?

No utilizo la barra cero en mi trabajo. Además, realizo todos los cálculos 30 segundos después de la señal de la primera barra. Por lo tanto, no se realizan cálculos entre la señal. Pero la señal de la primera barra en 30 segundos se aplica a todos los indicadores que participan en el modelo y, en teoría, estos indicadores deberían calcular todo el historial desde la última referencia (señal) hasta la actual con la condición de que no estén en el gráfico. Es el hueco que el indicador debe leer del archivo para obtener adecuadamente el valor actual.

La cuestión es que no podemos reproducir perfectamente la formación y la aplicación, especialmente en el mercado rápido. Ahora resulta que el retraso es de hasta 10 segundos con respecto a los nuevos datos (si hablamos del histórico) y si analizamos sólo la apertura de la barra, el retraso será de 60 segundos o más. Si trabajamos con los datos obtenidos en la apertura de la barra (no desplazados), habrá un error en el indicador, es decir, que podremos vislumbrar el futuro. En general hay que volver a pensar en la ideología, ahora los datos son más recientes, pero todo es teoría. Puede ser suficiente con tomar los datos registrados cuando aparece una nueva barra y entrenar sobre ella.

Bien, podemos hacer un script que simplemente elimine las líneas innecesarias en un minuto y el tamaño del archivo será 10 veces menor.

Mihail Marchukajtes:

El principal problema es que cuando envío el EA con la IA al gráfico y obtengo una nueva señal necesita ser recompilado y entonces solicitará los datos adecuados de los indicadores. Pero el problema está en los indicadores. Los envío a un gráfico, muestra el historial correctamente y sigue presentando datos. Lo recompilo después de un tiempo y la cola que se dibujó en la cuenta real cambia sus valores.

Prueba la versión del indicador que he dado. Si el problema persiste, probablemente esté en el EA, no en los indicadores. Por favor, muestre el código para obtener los datos del indicador.

 
Mihail Marchukajtes:
Si la ruptura es global del corredor, no hay nada que podamos hacer. El asesor para guardar los datos está en el servidor de la UPU y los datos se escribieron sin ninguna pérdida.

Ahora se espera que el asesor guarde los datos en paralelo con el trabajo del indicador y del asesor de operaciones, de modo que cuando se pierda la conexión o se cierre el terminal, se tomarán los nuevos datos históricos del archivo, lo que permitirá seguir trabajando con urgencia y luego reemplazar el archivo con VPS y reiniciar el asesor.

 
Mihail Marchukajtes:

\Alexey, gracias por el indicador, pero tengo una pregunta sobre el Asesor de Expertos. ¿Es posible hacer que escriba por minutos, pero no con cada cambio de OM en un minuto?

Si no te lo piensas mucho, comprueba esta variante

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick))
      StartDate=last_tick.time;
   else StartDate=TimeCurrent();
   if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {
      for (int i=0; i<100 && !IsStopped(); i++)
      {
         h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
         if(h!=INVALID_HANDLE)
         {

            FileSeek(h,0,SEEK_END);
            FileWrite(h,StartDate,DoubleToString(interest,0));
            FileClose(h);
            Sleep(100);
            break;
         }
      }
      //inter=interest;
      // byOR=byORD;
      // sellOR=sellORD;
   }
 
Aleksey Vyazmikin:

Si no es mucha molestia, compruébalo.

Alexey, muchas gracias. Seguramente lo comprobaré y os informaré de los resultados. En cuanto a mirar hacia el futuro, no importa y no sucederá si el EA escribirá de la misma manera que el indicador. Si no hay diferencia entre ellos, no importará. Alternativamente, cuando aparece una nueva barra, esperamos al primer cambio de OI y registramos el nuevo valor de la primera barra anterior, incluso podemos registrar no un nuevo valor, sino el antiguo que fue el último de la primera barra. Es decir, de hecho, empezaremos a escribirlo al final de la barra anterior.

Lo importante no es la OI que asignamos a la barra de minutos, sino cómo se lee el indicador desde el archivo.

 
Mihail Marchukajtes:

Alexei, muchas gracias. Sin duda, lo comprobaré todo y le comunicaré el resultado. En cuanto a mirar hacia el futuro, no tiene ninguna importancia y no ocurrirá si el EA escribe como el indicador lee. Si no hay diferencia entre ellos, no importará. Alternativamente, cuando aparece una nueva barra, esperamos al primer cambio de OI y registramos el nuevo valor de la primera barra anterior, incluso podemos registrar no un nuevo valor, sino el antiguo que fue el último de la primera barra. Es decir, de hecho, empezaremos a escribirlo al final de la barra anterior.

Lo importante no es la OI que asignaremos a la barra de minutos, sino cómo se leerá el indicador desde el archivo.

Por favor, mire el código completo y pregunte

interest=SymbolInfoDouble(Name_instrFS,SYMBOL_SESSION_INTEREST); 


  if ((interest!=inter))
  {

   MqlTick last_tick;
   /*if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();*/
    StartDate=iTime(Name_instrFS,PERIOD_M1,1);
  if(isNewBar(Name_instrFS,0,PERIOD_M1))
   {  
    for (int i=0;i<100 && !IsStopped();i++)
    { 
      h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
       if(h!=INVALID_HANDLE)                                                         
       {  
         
         FileSeek(h,0,SEEK_END);
         FileWrite(h,StartDate,DoubleToString(inter,0)); 
         FileClose(h); 
         Sleep(100);
         break; 
       }
    }   
    inter=interest;
   // byOR=byORD;
   // sellOR=sellORD;
  }
}


Si se abre una nueva barra y no hay cambio de OI en 5 ticks, ¿entrará en la condición de nueva barra?

Creo que debería porque será la primera llamada de la nueva función de barra y sólo después de eso el resultado se cambiará a un falsh? ¿Verdad?

 
He simulado el trabajo del código en mi cabeza y he encontrado un cuello de botella. La última barra de la sesión de ayer se escribirá a las primeras de cambio en la apertura de la barra del minuto de la sesión de hoy, en caso de reinicialización del EA, se perderá el valor OI, lo que llevará a una desagradable entrada a cero en la última barra de la sesión de ayer. Creo que la solución sigue siendo no escribir el valor de la OM anterior en la primera barra, sino exactamente la OM actual, es decir, la que será primera en la nueva barra. Vale, quería sincronizarlos perfectamente, pero creo que servirá tal y como está... Así que... sólo pensando en voz alta...
 
Aleksey Vyazmikin:

Esa es la cuestión, no se puede reproducir perfectamente la formación y la aplicación, especialmente en un mercado rápido. Ahora resulta que el retraso es de hasta 10 segundos con respecto a los nuevos datos (si hablamos del historial), y si utilizamos sólo la apertura de la barra, el retraso será de 60 segundos o más. Si trabajamos con los datos obtenidos en la apertura de la barra (no desplazados), habrá un error en el indicador, es decir, que podremos vislumbrar el futuro. En general hay que volver a pensar en la ideología, ahora los datos son más recientes, pero todo es teoría. Puede ser suficiente con tomar los datos registrados cuando aparece una nueva barra y entrenar sobre ella.

Bien, podemos hacer un script que simplemente elimine las líneas innecesarias en un minuto y el tamaño del archivo será 10 veces menor.

Prueba la versión del indicador que he dado. Si el problema persiste, probablemente esté en el EA y no en los indicadores. Por favor, muestre el código para obtener los datos del indicador.

He comprobado el indicador en el historial y me da error. La cuestión es que la primera vela de un minuto tiene la hora 10:00 en la ventana de cotizaciones, pero el valor de esta vela se toma de la vela anterior. Es decir, la vela se abrió a las 10:00:00 y se cerró a las 10:00:59. Este es el valor que debe escribirse, ¿no? Y el indicador durante la construcción toma el valor de la barra de las 23:59:59.
 
Mihail Marchukajtes:
He comprobado el indicador en el historial y el error es evidente. La cuestión es que la primera vela de un minuto tiene la hora 10:00 en la ventana de cotizaciones, pero el valor de esta vela se toma de la vela anterior. Significa que la vela se abrió a las 10:00:00 y se cerró a las 10:00:59. Este es el valor que tenemos que escribir, ¿no? Y el indicador toma el valor de las 23:59:59 al trazar la barra.
Lo hice. Ahora no importa si el archivo se escribe por minuto o por tic, escribirá los valores correctos para la vela. Es decir, si una vela tiene una hora de apertura, escribimos en ella el valor al cierre de esta vela...
 
Mihail Marchukajtes:
He comprobado el indicador en el historial y el error es evidente. La cuestión es que la primera vela de un minuto tiene la hora 10:00 en la ventana de cotizaciones, pero el valor de esta vela se toma de la vela anterior. Es decir, la vela se abrió a las 10:00:00 y se cerró a las 10:00:59. Este es el valor que debe escribirse, ¿no? Y el indicador toma el valor de las 23:59:59 al construir la barra.

Si el EA trabaja en la apertura de la barra, aunque sea con retraso, ¿es correcto alimentarlo con los datos del cierre de la vela, es decir, mirar hacia el futuro? Por eso se utilizan los datos más frescos antes de esta vela, es decir, un pequeño retraso, en lugar de adelantarse.


Mihail Marchukajtes:

Por favor, revise el código completo y pregunte


Si se abre una nueva barra y no hay cambio de OI en 5 ticks, ¿entrará en la condición de nueva barra?

Creo que debería porque será la primera llamada de la función de la nueva barra y sólo después de ella el resultado cambiará a una falsa? ¿Verdad?

¿Dónde está el recuento de las 5 garrapatas aquí? Ocurre que en todo el minuto no hay ninguna transacción, y entonces se pierde la barra, y por eso he quitado la comparación para los cambios de OI, para que los datos se escriban inmediatamente en la apertura de una nueva vela. Puede que se me haya olvidado, tengo que probarlo con datos, pero ayer no tuve ninguno y es entre semana :(