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

 
Mihail Marchukajtes:
Standard con icustom... Pero lee los datos del archivo donde se escribe cada tick, y el indicador lee los datos cuando aparece una nueva barra y resulta que toma un valor erróneo.

En primer lugar, no todas las garrapatas están escritas

  if ((interest!=inter))
  {

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();
    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;
  }

La OI se escribe sólo si ha cambiado y si ha cambiado hace más de 10 (100 ciclos de escritura de líneas idénticas multiplicados por 0,1 segundos de espera después de cada escritura) segundos. De hecho, se saltan muchos ticks, por lo que la sincronización exacta ya no es posible durante la reproducción. Aunque no estoy trabajando con ticks - ¿especificar en el probador todos los ticks o sólo aquellos en los que se produjo la compra/venta de instrumento(activo)?

Es mejor crear un símbolo basado en los resultados de un minuto cerrado - hay menos datos basura, la sincronización en el indicador es más conveniente.


En cuanto al indicador - supongamos que algo se ha dibujado en el historial correctamente.

Y entonces en la barra cero se producirá la siguiente situación

  BufOI[0]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);
 LastUPdate=FileGetInteger("OpenI\\"+FileName1,FILE_MODIFY_DATE,true);
  if ((LastUPdate!=UPdate))
     {
       int h=FileOpen("OpenI\\"+FileName1,FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON,",");
       string str=FileReadString(h);                            // читаем очередную строку из файла

    BufOI[1]=StringToDouble(str);
       FileClose(h);
   BufOI[0]=BufOI[1];

 UPdate=LastUPdate;   

Tomamos los datos de OM del servidor y no están presentes en el probador - y no se utilizan.

Luego, si hay una nueva fecha de modificación del archivo, que se actualiza una vez cada 15 minutos en vivo, pero no en el probador, leemos los datos del archivo (la última línea) FileName1=_Symbol+FileNames+"_TMP.csv" y asignamos los datos a la primera barra y cerramos el archivo y asignamos el valor a la barra cero. Está claro que esta variante no funcionará en el probador.

Se necesitan dos modos del indicador: para el historial y para el tiempo real, creo.


¿Has comprobado que los datos del historial son correctos? Se ve extraño al leer los datos del archivo...

         while(!FileIsEnding(h))
           {
            ArrayResize(oi,ct+2,1000);
            string str=FileReadString(h);                            // читаем очередную строку из файла
            if(cnt==0) oi[ct].time=StringToTime(str);                 //если запись первая, т.е. дата, то конвертируем из стринга в дататайм
            else if(cnt==2) oi[ct].oi=StringToDouble(str);   //если запсиь вторая, т.е. ОИ, то конвертируем в инт и 

            cnt++; // увеличиваем счетчик прочитанных строк
            if(FileIsLineEnding(h)) {cnt=0; ct++;}
           }

Resulta que los datos fueron leídos

 
Aleksey Vyazmikin:

Para empezar, no todas las garrapatas están escritas

La OI sólo se escribe si ha cambiado y si ha cambiado hace más de 10 (100 ciclos de grabación de las mismas líneas multiplicados por 0,1 segundos de espera después de cada grabación) segundos. De hecho, se pierden muchos ticks, por lo que la sincronización exacta ya no es posible durante la reproducción. Aunque no estoy trabajando con ticks - ¿especificar en el probador todos los ticks o sólo aquellos en los que se produjo la compra/venta de instrumento(activo)?

Es mejor crear un símbolo basado en los resultados de un minuto cerrado - hay menos datos basura, la sincronización en el indicador es más conveniente.


En cuanto al indicador - supongamos que algo se ha dibujado en el historial correctamente.

Y entonces en la barra cero se producirá la siguiente situación

Tomamos los datos de OM del servidor y no están presentes en el probador - y no se utilizan.

Luego, si hay una nueva fecha de modificación del archivo, que se actualiza una vez cada 15 minutos en vivo, pero no en el probador, leemos los datos del archivo (la última línea) FileName1=_Symbol+FileNames+"_TMP.csv" y asignamos los datos a la primera barra y cerramos el archivo y asignamos el valor a la barra cero. Está claro que esta variante no funcionará en el probador.

Se necesitan dos modos del indicador: para el historial y para el tiempo real, creo.


¿Has comprobado que los datos del historial son correctos? Se ve extraño al leer los datos del archivo...

Resulta que los datos fueron leídos...

Estoy absolutamente de acuerdo contigo en eso. Y escribe varios valores en un minuto, no es cada tick, pero aún así. A continuación, construye cualquier TF a partir de estos datos.

Sobre el archivo ТМP que fue mi propia escritura. Intenté actualizar el indicador en cada llegada de una nueva vela y fue algo correcto en la cuenta real. Pero en un momento dado tomará el último valor de la vela anterior o el primer valor de la vela ya abierta. Le pedí al autor que lo cambiara por una vela de minuto pero no se ha cumplido.

Recuerdo que para cada señal tenía que recompilar el EA para inicializar el indicador correctamente y obtener los resultados correctos. Esto podría cambiar la señal actual. Esto es lo que realmente ha molestado....

Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
 
Mihail Marchukajtes:

Estoy absolutamente de acuerdo contigo en eso. Y los datos que escribe varios valores dentro de un minuto, no es cada tick, pero todavía. Luego construye cualquier TF a partir de estos datos

Así que para qué escribir múltiples OI dentro de un minuto si se toman datos del indicador - no habrá menos TF. Y sí, me equivoco, hay una salida del bucle, si se escribe con éxito, pero todavía 0,1 segundos de intervalo mínimo. ¿Construyes el modelo en base a ticks?

Mihail Marchukajtes:

Escribí sobre el archivo TMP. He hecho que el indicador se actualice cuando llega una nueva vela y parece que funciona correctamente en la cuenta real. Pero en un momento dado tomará el último valor de la vela anterior o el primer valor de la vela ya abierta. Le pedí al autor que lo cambiara para los indicadores de minutos, pero no hubo resultado.

Para una operación real, basta con esta línea en el indicador: ¿por qué leer los datos del archivo cuando puedes tomarlos del mercado?

BufOI[rates_total-1]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);

¿Representa el historial correctamente en el visualizador?

 
Mihail Marchukajtes:

Recordé que para obtener resultados reales en la entrada NS, tenía que recompilar el Asesor Experto en cada señal para que el indicador se inicializara correctamente y produjera los resultados correctos. Esto podría cambiar la señal actual. Esto es lo que realmente me molestaba ....

Esto es extraño. ¿Tal vez deberíamos rechazar cualquier indicador para el EA y leer directamente del archivo en la estructura y buscar el valor en la estructura del array?

Por favor, deja el archivo de XI en Si durante un par de días - es difícil razonar en abstracto.
 
elibrarius:

Yo también tenía una idea similar, pero por ahora estoy ocupado con otra cosa. Espero experimentar con él pronto.
También tiene la desventaja de que el modelo aprenderá a partir de 10 veces menos datos. Me parece que en este caso la capacidad de generalización disminuirá.

Podrías hacerlo de otra manera: aprender en 9/10, y cortar en el 1/10 restante de la muestra.

 
Aleksey Vyazmikin:

También puede hacerlo de otra manera: aprender en 9/10 y recortar en el 1/10 restante de la muestra.

Aleksey Vyazmikin:

Entonces, ¿qué sentido tiene escribir la OI varias veces en un minuto, si se toman los datos del indicador - no será menos de TF. Y sí, me equivoco, hay una salida del bucle allí, si se escribe con éxito, pero todavía 0,1 segundos de intervalo mínimo. ¿El modelo se basa en las garrapatas?

Así que para la cuenta real esta línea es suficiente en el indicador - ¿por qué leer los datos del archivo, si se pueden tomar del mercado?

¿Se ha dibujado correctamente en el visualizador del Probador de Estrategias?

Sí, pero en caso de fallo de conexión habrá un agujero. No se comprueba la plenitud de la historia. Estoy completamente de acuerdo con lo de las actas.

Archivo OI

http://fayloobmennik.cloud/7399404

 
Mihail Marchukajtes:

Sí, pero en caso de fallo de conexión, habrá un agujero. No se comprueba la integridad de la historia. En cuanto al acta, estoy totalmente de acuerdo.

Archivo OI

http://fayloobmennik.cloud/7399404

Entonces, ¿cómo se escribirán los datos en el archivo si se interrumpe la conexión?

 
Romano:

Los datos fundamentales tienen muchos indicadores que dan valores numéricos.
Incluso aquí, en el sitio web, el calendario de noticias ofrece estadísticas sobre los eventos.
Sí, estoy de acuerdo, en los enunciados del discurso faltan valores numéricos.
Por eso, estos datos deberían clasificarse probablemente como 0 1.
Lo principal es enseñar la diferencia entre el discurso positivo o negativo ))
¡Pero aquí, esto también es una idea, para pensar! ))

para usar la fundación, faltan algunos números

que yo recuerde, no encontré ningún agregado monetario, hay varios

algunos de ellos no se han hecho públicos desde aproximadamente 2010.

 
Mihail Marchukajtes:

Sí, pero en caso de fallo de conexión, habrá un agujero. No se comprueba la integridad de la historia. En cuanto al acta, estoy totalmente de acuerdo.

Archivo OI

http://fayloobmennik.cloud/7399404

¿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, a la hora de apertura a las 10:00 horas, tomamos la OM 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 buffer 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 si hay datos en el archivo, pero el mercado está cerrado y no lo ha comprobado.

Archivos adjuntos:
OI_Test.mq5  16 kb
 
Aleksey Vyazmikin:

Entonces, ¿cómo se escribirán los datos en el archivo cuando se interrumpa la conexión?

Si la conexión es cortada globalmente por el corredor, entonces no se puede hacer nada. El asesor de ahorro de datos está en el servidor de la UPU y puedo decir que los datos se escribieron sin ninguna pérdida.