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

 
fxsaber:
Si estas son las fórmulas correctas


El probador calcula estas cifras de manera muy diferente. Tengo diferencias llamativas en los resultados entre estas fórmulas y lo que muestra el Probador (aparte del beneficio).

Sugiero que lleguemos al fondo de esto. La pega es exactamente lo que MT5 considera una operación rentable.

const double Profit = OrderProfit() + OrderCommission() + OrderSwap();

Retire uno, o los dos a la vez, y compare.

O aquí (si lo anterior no ayuda) eliminar "="

if (Profit >= 0)
 
Slava:

¿De qué estamos hablando ahora? ¿Desactivar los agentes o permitir el uso de personajes en las pruebas/optimización?

Si hay dos problemas, probablemente deberíamos discutir y resolver ambos. ¿O es imposible?

1. Por qué hay una desactivación de los agentes después de la optimización.

2. ¿Por qué se detiene la adición automática de caracteres al probador?

 
Artyom Trishkin:

Retire uno, o los dos a la vez, y compare.

O aquí (si lo anterior no ayuda) eliminar "="

Así es como funciona MT5

double ProfitPlus = 0;  // Профит неотрицательных закрытых позиций.
double ProfitMinus = 0; // Профит отрицательных закрытых позиций.

int AmountPlus = 0;  // Количество неотрицательных закрытых позиций.
int AmountMinus = 0; // Количество отрицательных закрытых позиций.

for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
  if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
  {
    const double Profit = OrderProfit()+ (OrderCommission() / 2) + OrderSwap();
    
    if (Profit >= 0)
    {
      ProfitPlus += Profit;
      AmountPlus++;
    }
    else
    {
      ProfitMinus += Profit;
      AmountMinus++;
    }      

    ProfitMinus += OrderCommission() / 2;
  }

const double PF = ProfitMinus ? -ProfitPlus / ProfitMinus : DBL_MAX; // Профит-фактор.
const double Profit = ProfitPlus + ProfitMinus;                      // Профит

Es decir, en MT5 puede cerrar una posición y obtener una pérdida (el saldo antes de la apertura es menor que el saldo después del cierre). Pero en este caso el MT5-Tester (el terminal no lo ha comprobado) considerará esta operación como rentable.


Por ejemplo, MT5_PF = 1,89 y MT4_PF = 2,01.

 
fxsaber:
Si estas son las fórmulas correctas


El probador calcula estas cifras de forma muy diferente. Tengo diferencias llamativas en los resultados entre estas fórmulas y lo que muestra el Probador (aparte del beneficio).

Sugiero que hagamos el análisis exacto. La pega es lo que MT5 considera una operación rentable.

¿Por qué hay un modificador const aquí?

const double Profit = OrderProfit() + OrderCommission() + OrderSwap();

Cuando esta variable salga del ámbito, probablemente se reiniciará... imho, const no es necesario


Si eliminamos OrderCommission() + OrderSwap() ? - ¿hablamos de beneficios en las operaciones, no de comisiones?

SZZ: como opción, el probador puede trabajar con el balance, si la orden se cierra, el balance ha cambiado, compararlo con el antiguo balance, en general, no puedo adivinar.... , no he encontrado la fuente, pero hay un artículohttps://www.mql5.com/ru/articles/4226 con el mismo cálculo de beneficios, pero no lo he leído.

Пользовательский тестер стратегий на основе быстрых математических вычислений
Пользовательский тестер стратегий на основе быстрых математических вычислений
  • www.mql5.com
Тестер стратегий, предоставляемый MetaTrader 5, имеет мощный функционал для решения разнообразных задач. С его помощью можно тестировать как сложные стратегии торговли корзинами инструментов, так и одиночные стратегии с простыми правилами входов и выходов. Однако такой обширный функционал нам пригождается далеко не всегда. Часто нам просто...
 
Igor Makanu:

¿Por qué hay un modificador const aquí?

Es necesario calcular la variable Profit en todas las iteraciones del bucle , aunque es posible que cuando esta variable salga del ámbito, se reinicie... imho, no necesitas const.

Se recreará. Todo es correcto allí.

¿Qué pasa si elimino OrderCommission() + OrderSwap() ? - ¿hablamos de beneficios por operaciones, no por comisiones?

Fórmula MT5 arriba. Esto crea graves distorsiones a la hora de calcular la FP de las TS de scalping. ¿Y cómo puede ser que la FP dependa de la plataforma? Tiene que ser inequívoco.

 
zevs1980:
Este problema ya ha sido planteado por mí en anteriores ramas de construcción. Nunca se arregló. Encontré mi muleta. Deshabilito algunos de los agentes (3 de 10 en mi caso) y los habilito después de 0 iteración, y todo va bien. Sin embargo, a veces algunos agentes se detienen en el proceso, pero rara vez el algoritmo de solución es el mismo.

Es una pena, pero la dirección manual no es una opción. Tengo la optimización automática.

 
KENT3004:

Si hay dos problemas, quizá haya que discutir y resolver ambos. ¿O es imposible?

1. Por qué los agentes se desconectan después de la optimización.

2. ¿Por qué se detiene la adición automática de caracteres al probador?

1. Mira los registros de los probadores, está todo ahí.

2. ya está arreglado. Pero hasta que no tengas una compilación con correcciones, puedes usar la función de arrastrar y soltar (no discutimos por qué se detuvo la adición de caracteres, sino que discutimos cómo puedes seguir probando en estas condiciones)

 
fxsaber:

Ejecuto carreras individuales alternativamente en cada símbolo personalizado. A partir de cierto punto es imposible ver el camino hacia ellos en el Comprobador, pero siguen siendo seleccionables mediante la función de arrastrar y soltar desde la Observación del Mercado. Luego, después de un tiempo, esto tampoco funciona: puedes seleccionar un símbolo normal, o sólo un símbolo personalizado. Los otros no son posibles. La siguiente animación muestra esta situación.


Reproducido y corregido. Gracias.
 
Slava:

1. Mira los registros de los probadores, está todo ahí.

2. ya está arreglado. Pero hasta que no tengas una compilación con correcciones, puedes usar la función de arrastrar y soltar (no discutimos por qué se detuvo la adición de caracteres, discutimos cómo puedes seguir probando en estas condiciones)

Gracias por su rapidez y sus útiles consejos. Me atrevo a "informar" de un detalle menor pero inconveniente. El botón de inicio/parada cubre el botón de herramientas/prueba, lo que hace que se realicen acciones adicionales. Sin embargo, no es muy conveniente.
 
Edgar:
Durante la optimización genética utilizo muchos parámetros. En cuanto el número de variantes es tan grande que aparece en notación científica (6,8768769e+21), la optimización continúa con la mitad de los agentes (4 de 8) después de la generación 0. No se menciona esto en los registros. La optimización en sí funciona bien, pero con media carga, el doble de tiempo.

El comportamiento no siempre se reproduce, lo que puede ser la razón por la que no se corrige. Ayer lo tenía, hoy no. Tal vez dependa también del EA. Lo tengo con marcos. El tamaño de ex5 es de unos 0,5 Mb. Tengo 8 Gb de memoria. Intel i7, 4 núcleos, 8 hilos. Divorciado. Sin supervisión.