Probador de Estrategias de MetaTrader 5: errores, fallos, sugerencias de mejora - página 47

 
traveller00:

Construye 2280. Bolsa, mercado de futuros. Todo el historial se carga, pero las pruebas se realizan sin conexión. iBarShift funciona de forma extraña en los indicadores. Y el mismo código funciona bien en el script. ¿Es un error o me estoy perdiendo algo?

Existe un código de este tipo. Esencialmente, recorre todos los símbolos de la revisión del mercado y arranca eliBarShift. El mismo código funciona bien en el script. El indicador produce -1 para todos los símbolos, excepto para el actual (en el gráfico en el que se está ejecutando) con el error de que no hay historial. Al mismo tiempo, en la segunda ejecución, carga el historial y lo muestra normalmente.

La disponibilidad de los datos en el indicador no está garantizada, por lo que debe comprobar el éxito de la recuperación de datos. Si falla, vuelva a intentarlo enOnCalculate. Referirse a los datos en OnInit no es una buena idea.


#property indicator_separate_window

void OnInit()
{
}

int OnCalculate(const int rates_total,const int prev_calculated,const datetime& time[],const double& open[],const double& high[],
  const double& low[],const double& close[],const long& tick_volume[],const long& volume[],const int& spread[])
{
  static bool printed = false;
  
  if( !printed ){
    printed = TryToPrint();
  }
  return 0;
}

bool TryToPrint(){


  datetime Time[];
  ArraySetAsSeries(Time, true);
  Print("try");
  if( CopyTime(_Symbol,_Period,0,1,Time) != 1 )return false;

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  
  bool fail = false;
  if( Shift < 0 )fail = true; 
  string toprint = "Symbol="+_Symbol+", Shift="+(string)Shift;
  
  

  for(int i=0;i!=SymbolsTotal(true);++i)
  {
    const string SymbName=SymbolName(i,true);
    Shift=iBarShift(SymbName,_Period,Time[0]);
    
    if( Shift < 0 )fail = true;
    toprint = toprint + "\r\n" + "Symbol="+SymbName+", Shift="+(string)Shift;

  }
  if( !fail ) Print( toprint );
  
  return !fail;
}
 

El nombre del servidor no siempre aparece en los registros de la caché.


 
En el formato tst, los tiempos de las operaciones/órdenes sólo están en segundos (fecha y hora). No hay milisegundos.
 
¿Es correcto que el archivo tst no se genere para un EA de este tipo?
input int i = 0;

void OnInit() {}


¿Qué condición debe cumplirse para crear una caché de una sola pasada?

 
fxsaber:
¿Es correcto que el archivo tst no se genere para un EA de este tipo?


¿Qué condición debe cumplirse para crear una caché de una sola pasada?

Sí, correcto.

Si no hay operaciones, el archivo tst no se guarda

 
Slava:

Sí, así es.

Si no hay operaciones, el archivo tst no se guarda

Gracias.

 
Repetiré mi pregunta (al parecer se perdió):

Desarrolladores, una pregunta para ustedes. ¿Es posible personalizar los parámetrosdel algoritmo genético? Por ejemplo, ¿para establecer los criterios de parada y mutación?

A menudo me encuentro con problemas para detenerme antes de llegar a los extremos.

También una pregunta. ¿Piensa aplicar otros métodos, por ejemplo, el recocido simulado?

 
Hola a todos, cambié de mt4 a mt5 y no entiendo cómo guardar los archivos de set en el probador. ¿Puede aconsejarnos, por favor? Sólo pude encontrar cómo guardar ini y opt
 

Hago funcionar el robot en el probador. Opero con un determinado símbolo. Ingreso por OnTimer y tomo cotización de SymbolInfoTick.

Si utilizo diferentes símbolos (cuando opero con el mismo símbolo), por alguna razón, los resultados son muy diferentes. ¿Puede ser que alguien se haya enfrentado a este problema? Actualmente estoy estudiando este comportamiento con más detalle.

PS. Cada tic se basa en uno real y una ejecución perfecta sin retrasos
 

Lo he descubierto. Si te interesa, para ahorrar recursos de la CPU, compruebo TimeCurrent en OnTimer y si no ha cambiado desde la última actualización, no hay que hacer nada. Si no hay citas, el estado es el mismo. Si se hace un seguimiento de las sesiones de negociación, es una operación que consume mucho.

Todo funciona bien para múltiples símbolos. Pero cuando sólo hay dos, todo depende de las cotizaciones, que vienen y empiezan a cambiar el tiempo de las posiciones de apertura y otras cosas. En consecuencia, los resultados enel probador de estrategias son diferentes.

PS. En general, comprobaré los estados de los símbolos individualmente a través deSymbolInfoTick