Errores, fallos, preguntas - página 2438

 
Slava:

2. un tipo de cuadros se lee en OnTesterPass, y se termina en OnTesterDeinit. Otros cuadros se leen en OnTesterDeinit

Esta función no permite trabajar en tiempo real con los resultados de los pases calculados si hay varios cuadros por pase.

 
Parece que se trata de un fallo puramente metodológico

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

Pruebas de los calendarios de las estrategias con la autosustitución de los resultados en los EA

Slava, 2013.04.10 15:04

void OnTesterDeinit()
  {
   string        name;
   ulong         pass;
   long          id;
   double        value;
   int           handle,i;
   BalanceInTime balance[];
   MqlRates      rates[];
//---
   FrameFirst();
   FrameFilter("",1);
   while(FrameNext(pass,name,id,value,balance))
     {
      handle=FileOpen(name+"_"+string(id)+"_"+IntegerToString(pass,5,'0')+".txt",FILE_WRITE|FILE_CSV|FILE_ANSI);
      if(handle!=INVALID_HANDLE)
        {
         for(i=0; i<ArraySize(balance); i++)
            FileWrite(handle,balance[i].date,EnumToString(balance[i].entry),DoubleToString(balance[i].price,5),DoubleToString(balance[i].balance,2));
         FileClose(handle);
        }
     }
//---
   FrameFirst();
   FrameFilter("",2);
   while(FrameNext(pass,name,id,value,rates))
     {
      handle=FileOpen(name+"_"+string(id)+"_"+IntegerToString(pass,5,'0')+".txt",FILE_WRITE|FILE_CSV|FILE_ANSI);
      if(handle!=INVALID_HANDLE)
        {
         for(i=0; i<ArraySize(rates); i++)
            FileWrite(handle,rates[i].time,DoubleToString(rates[i].open,5),DoubleToString(rates[i].high,5),DoubleToString(rates[i].low,5),DoubleToString(rates[i].close,5),string(rates[i].tick_volume));
         FileClose(handle);
        }
     }
//---
  }
Antes de FrameNext en el bucle, sería bueno llamar a ArrayFree en cada pasada del bucle.
 
Slava:

1. Sí. Puede ser redundante.

2. un tipo de cuadros se lee en OnTesterPass y se termina en OnTesterDeinit. Los cuadros restantes se leen en OnTesterDeinit

Esta capacidad de transmitir-recibir varios tipos de tramas nos permitió corregir algunos errores difíciles de reproducir en el probador. Y las tramas se transmitían sólo si había una diferencia con algún valor de referencia.

Antes mencioné la pérdida de fotogramas, si se pasan muchos fotogramas en una pasada y hay problemas con el agente -la conexión se rompe- ¿se hará algo con esta situación?

 
fxsaber:

¿Abrirás el opt-format?

Sí.

A cambio de publicar el código para leer el archivo opt

 
fxsaber:

Esta función no permite trabajar en tiempo real con los resultados de los pases contados si hay varios cuadros por pase.

Sí.

Por eso hay que leer los cuadros de tipo "no central" una vez terminada la optimización.

 
Aleksey Vyazmikin:

Antes he hablado de la pérdida de tramas, si se transmiten muchas tramas en una sola pasada y hay problemas con el agente -una interrupción de la comunicación-, ¿se hará algo con esta situación?

¿Qué puedes hacer?

El resultado de la optimización saldrá en cualquier caso antes y más rápido que su marco. Si el agente se ha paralizado (se ha apagado el ordenador, se ha detenido el servicio), definitivamente no hay nada que pueda hacer al respecto.

Podríamos intentar hacer lo siguiente: hasta que no se envíe la trama, no enviar el resultado. Pero no sabemos cuándo lo arreglaremos.

 
fxsaber:
Esto parece ser un defecto puramente metodológico
Antes de FrameNext en el bucle, es una buena idea llamar a ArrayFree en cada paso del bucle.

Evitamos la reasignación innecesaria de memoria.

En este caso hay un 99% de probabilidades de que el buffer del array se asigne una vez

 
Slava:

¿Qué puedes hacer?

El resultado de la optimización saldrá de todos modos antes y más rápido que su marco. Si el agente está parado (el ordenador se ha apagado, el servicio se ha detenido), no hay nada que hacer.

Podríamos probar lo siguiente: hasta que no se envíe una trama, no enviar el resultado. Pero no se sabe cuándo lo corregiremos.

¿Tal vez antes de la transmisión de las tramas, se pueda decir cuántas tramas se esperan, y si es menos de lo esperado y el agente no está disponible, entonces dar el pase a otro agente y sobrescribir las tramas ya recibidas?

O bien, en el cuerpo de cada cuadro escribir el número total y su número de secuencia en ese número, y de la misma manera, si todos no llegó, reoptimizar.
 
Slava:

Sí.

A cambio de publicar el código para leer el archivo opt

Me interesa aún más la grabación. Haré la lectura, si se conoce el formato.

 
Aleksey Vyazmikin:

¿Se puede saber cuántas tramas se esperan antes de empezar a transmitir, y si llegan menos de las esperadas y el agente no está disponible, dar el pase a otro agente y sobrescribir las tramas ya recibidas?

O en el cuerpo de cada marco para escribir el número total y su número de secuencia en esta cantidad, y de la misma manera, si todos no vino, volver a optimizar.

¿Y si no todos los pases devuelven un fotograma?

Más arriba di un ejemplo sobre la captura de errores en el probador. Sólo se enviaron tramas cuando algún valor del resultado no coincidía con el de referencia

Razón de la queja: