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

 
traveller00:
Bild 2280, pero esto también ocurría en las versiones anteriores. Si ejecuto un script o un EA para depurar, se abre una nueva ventana del primer símbolo de la visión general del mercado en el timeframe 1H. ¿Y si necesito depurar no en el primer símbolo o en otro marco temporal? ¿Hay alguna forma de hacerlo sin borrar todos los símbolos para que el correcto sea el primero?
Vaya a la configuración del terminal. Allí puede seleccionar el símbolo a depurar.
 
Artyom Trishkin:
Vaya a la configuración del terminal. Allí hay una selección de símbolos para la depuración.

Artyom, lo has entendido mal. Se trata de ajustes del ME, no de ajustes del terminal.


Tienes que trabajar menos)))

 
Artyom Trishkin:
Vaya a la configuración del terminal. Allí puede seleccionar un símbolo para la depuración.

Lo tengo, gracias. Soy nuevo en MT5, aún no lo sé todo.

 
Alexey Viktorov:

Artyom, lo has entendido mal. Estos son los ajustes del ME, no los ajustes del terminal


Deberías trabajar menos)))

Sí, mi error... A veces, cuando escribes desde un teléfono móvil, ni siquiera puedes mirar...
 

Construye 2280. Hay 4 procesadores en el ordenador. Hay 2 MT5 en funcionamiento. El primero está ejecutando un script largo, terminal64.exe se está comiendo el 100% de 1 CPU, resultando en una carga total del 25%. El segundo MT5 está ejecutando la optimización genética. Hay 4 agentes por el número de procesadores de serie. La primera tanda de trabajos recibe los 127. Las tareas restantes son recibidas y ejecutadas por 2 agentes, las 2 restantes se quedan colgadas en finalizadas y ni siquiera recibidas. Si se fuerza su desactivación, se incorporan al trabajo. Hasta que la optimización comience de nuevo. Si matas primero a MT5, la situación sigue igual. Si reinicias la segunda MT5 después de eso, estará bien. ¿Se trata de un equilibrador de carga complicado o de un error en alguna parte? Si es lo primero, entonces no es muy bueno, porque termina cargando al 75% (primeros agentes de MT5+2) y aun así debería ser manejado por las prioridades del viento.

P.D. No parece estar necesariamente relacionado con la carga de la CPU. Acaba de comenzar la genética sólo después de reiniciar, nada más que se ejecuta en absoluto, también 2 agentes eran perezosos hasta que los apagué / encendido. Si mantengo sólo 3 agentes activos y deshabilito 1 en absoluto, todavía 2 se retrasan, sólo 1 funciona.

P.P.S. Si hay 6 procesadores, entonces hay 3.
 

Construye 2280. Depuración del indicador, realizado paso a paso en el depurador. En la línea

StartTime = iTime(Symbols[0], _Period, Pos + PosAddon);

La depuración se bloqueó. Algo así como un error crítico, la depuración se detuvo. En el registro dice

           crash -->  000000 B7250C38B1 038424 B8000000    add        eax, [rsp+0xb8]
                      000000 B7250C38B8 89442460          mov        [rsp+0x60], eax
                      000000 B7250C38BC 448 B4C2460        mov        r9d, [rsp+0x60]
                      000000 B7250C38C1 49 B8010000000000  mov        r8, 0x1
                                       0000
                      000000 B7250C38CB 488 B542468        mov        rdx, [rsp+0x68]
                      000000 B7250C38D0 48 B9E8DD4220B700  mov        rcx, 0xb72042dde8
                                       0000
                      000000 B7250C38DA 49 FF96580F0000    call       qword near [r14+0xf58]  ; #11037 (terminal64.exe)
        
        00: 0x000000B7250C38B1

Vuelve a ocurrir, pero rara vez. Sin saberlo, nada ha cambiado mucho entre la depuración.

 

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?

#property indicator_separate_window

void OnInit()
{
  datetime Time[];
  ArraySetAsSeries(Time, true);
  CopyTime(_Symbol,_Period,0,1,Time);

  int Shift=iBarShift(_Symbol,_Period,Time[0]);
  Print("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]);
    Print("Symbol="+SymbName+", Shift="+(string)Shift);
  }
}

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[])
{
  return 0;
}

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, aparentemente carga el historial y ya lo muestra normalmente.

 
traveller00:

el mismo código funciona bien en el script. ¿Es un error o me estoy perdiendo algo?

A diferencia del guión, el indicador funciona de forma asíncrona, es decir, no espera a que la historia esté lista.

 
fxsaber:

A diferencia del script, el indicador funciona de forma asíncrona: no espera a que el historial esté listo.

Bueno, toda la historia está ahí. Como he dicho, funciona sin conexión, todo el historial ya está descargado del servidor. ¿O necesita algo más?

 
traveller00:

Bueno, toda la historia está ahí. Como he dicho, está trabajando sin conexión, todo el historial ya está descargado del servidor. ¿O necesita algo más?

En teoría, por supuesto, hay que subir todo desde el arranque en frío. En la práctica, sin embargo, no me dedico a los indicadores, así que no puedo asegurarlo.

Razón de la queja: