Librerías: BestInterval

 

BestInterval:

Cálculo del mejor intervalo del trading.

BestInterval

Autor: fxsaber

 

Puede parecer que la biblioteca tiene algo en común con un gráfico de este tipo en el informe estándar de MT5 Tester


A continuación se muestra un ejemplo de cómo obtener datos para un gráfico de este tipo

#include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006
#include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/es/code/22710

void OnStart()
{
  BESTINTERVAL BestInterval; // Creado un objeto para calcular el mejor intervalo de negociación
  
  BestInterval.Set(); // Publicado un historial de pujas  
  BestInterval.DeleteWorseInterval() // Tiró un intervalo malo

  double Profit[24], Loss[24];
  
  ArrayInitialize(Profit, 0);
  ArrayInitialize(Loss, 0);
  
  for (int i = BestInterval.GetAmount() - 1; i >= 0; i--)
  {
    const DEAL Deal = BestInterval[i];     // i-ésima operación en el historial de operaciones recalculado
    const int hour = Deal.OpenTime % 3600; // hora de la transacción i-ésima
    
    // Distribuir el beneficio a las matrices respectivas
    if (Deal.Profit > 0)
      Profit[hour] += Deal.Profit;
    else
      Loss[hour] -= Deal.Profit;    
  }
}


Pero en realidad la biblioteca no está pensada para ejecuciones individuales o visualización. Es 99% necesaria para la optimización de TS, porque le permite desenterrar modos frescos de cualquier TS, si tales modos están incrustados en él, aunque secretamente.


El registro que se muestra en la biblioteca corresponde a la fase de análisis posterior a la optimización: una única ejecución. Este registro muestra simplemente cómo se comporta una instancia concreta de la TS (un conjunto de parámetros de entrada) en los intervalos calculados. Es decir, es un control adicional, pero en la fase final. La base es la Optimización.

 

La biblioteca utiliza MT4Orders para recuperar el historial de operaciones.

Puede haber varias razones por las que no se deba utilizar MT4Orders. Por ejemplo, para analizadores de operaciones de terceros.

En cualquier caso, se proporciona este escenario:

#include <fxsaber\BestInterval\BestInterval.mqh> // Cálculo del mejor intervalo de negociación

void OnDeinit( const int )
{
  BESTINTERVAL BestInterval; // Creado un objeto para calcular el mejor intervalo de negociación
  
  // Conjunto de operaciones de cierre
  DEAL Deals[];
  
  // Necesitamos escribir dos campos para cada transacción de cierre
  // Operaciones[i].Beneficio - beneficio de la operación que cierra la posición
  // Deals[i].OpenTime - hora de apertura (no de cierre) de la posición que cierra la operación
      
// BestInterval.Set(); // Historial de operaciones de venta - utiliza MT4Orders
  BestInterval.Set(Deals); // Publicó una historia de licitación preparada por él mismo
  
  const int AmountIntervals = 3; // Cuántos intervalos comerciales en el peor de los casos hay que tirar
  
  for (int i = 0; i < AmountIntervals; i++)
    if (BestInterval.DeleteWorseInterval()) // Si se ha tirado algo
      Print(BestInterval.ToString());       // Imprimamos los datos comerciales obtenidos
    else
      break;                                // De lo contrario, estamos fuera
}

Es decir, puede introducir los datos que desee para calcular el mejor intervalo. La biblioteca es independiente de la plataforma.


Tenga en cuenta que el algoritmo bibla no implica ninguna optimización interna de los parámetros. No hay overshooting, porque la base es de una sola pasada: O(n) (n es el número de operaciones que cierran posiciones ). Y el enlace "más lento" es uno QuickSort: O(n*log(n)). Por eso se adapta perfectamente a la optimización, porque no ralentiza el proceso.


Los desarrolladores podrían adoptar el algoritmo (ya que es de paso único), para poner sus resultados en el informe de paso único y crear un indicador estándar.

Identificador

Descripción del indicador estadístico

Tipo

STAT_PROFIT

Beneficio neto al final de la prueba, suma deSTAT_GROSS_PROFIT y STAT_GROSS_LOSS (STAT_GROSS_LOSS es siempre menor o igual que cero).

doble

STAT_BESTPROFIT

Beneficio en el mejor intervalo.

doble

 

La idea de la biblioteca es clara y la implementación es sorprendentemente fácil de usar. Gracias por el trabajo realizado.

Sin embargo, tengo una sugerencia para el autor: necesitamos un ejemplo de su uso en un Asesor Experto específico - desde el principio de la habilitación de las bibliotecas a la formación del filtro.

 
Sergey Pavlov:

La idea de la biblioteca es clara y la implementación es sorprendentemente fácil de usar. Gracias por el trabajo realizado.

Sin embargo, tengo una sugerencia para el autor: necesitamos un ejemplo de su uso en un Asesor Experto específico - desde el principio de habilitar las bibliotecas para filtrar la formación.

Apoyo 101% :)

 
Sergey Pavlov:

Usted necesita un ejemplo de su uso en un Asesor Experto específico - desde el inicio de la habilitación de las bibliotecas a la formación de un filtro.

Echa un vistazo a BestInterval_Example.mq5.

 

Чтобы применить найденный интервал после его расчета, нужно во входных параметрах указать BestInteval Action = true.



Características.

  • El cálculo del mejor intervalo y su aplicación en el Probador se realiza sin cambiar el código fuente original del Asesor Experto.

  • S

    Por favor, comparta en los comentarios los resultados de la aplicación (como arriba) de la biblioteca ANTES y DESPUÉS en forma de imágenes y trozos correspondientes de los registros de una sola pasada de MT4/5.


    Ahora es mucho más fácil aplicar el resultado del cálculo al Asesor Experto. Para ello, sólo tiene que hacer clic unas cuantas veces.

    A modo de pequeño resumen

    1. tome cualquier Asesor Experto y escriba estas líneas en su inicio

    #include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006
    
    #define  BESTINTERVAL_ONTESTER // El criterio de optimización es el beneficio del mejor intervalo.
    #include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/es/code/22577
    #include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/es/code/22710

    2. Establecer el número de intervalos a lanzar y la opción de no aplicarlos.


    3. Establecer Optimización, o inmediatamente ejecución única. Habrá datos de cálculo en el registro del Probador si le interesa.

    Amount of Delete Intervals = 0
    00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 18385.00, Total = 1070, PF = 1.61, Mean = 17.18, DD = 1769.00, RF = 10.39
    
    Amount of Delete Intervals = 1
    00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13
    11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 21628.00, Total = 949, PF = 1.97, Mean = 22.79, DD = 862.00, RF = 25.09


    4. Después de la ejecución única, active la opción de activar el mejor intervalo e inicie de nuevo la ejecución única.


    5. Obtenga el informe del Comprobador


    y los datos sobre los intervalos aplicados en el registro.

    Amount of Delete Intervals = 1
    00:00:00 - 10:07:47 : Profit = 4279.00, Total = 181, PF = 2.02, Mean = 23.64, DD = 834.00, RF = 5.13
    11:06:12 - 23:59:59 : Profit = 17349.00, Total = 768, PF = 1.95, Mean = 22.59, DD = 933.00, RF = 18.59
    SUMMARY: 00:00:00 - 23:59:59 : Profit = 0.00, Total = 0, PF = Max, Mean = 0.00
    


    En resumen, todos los resultados ANTES y DESPUÉS + datos detallados (reducción máxima añadida y factor de recuperación - por saldo) para cada subintervalo del mejor intervalo.

     

    Puede consultar la biblioteca de este asesor.

     

    ¿Qué quiere decir?

    'OnTester' - function already defined and has body      BestInterval.mqh        504     8
    

    no compila

     
    Sergey Chalyshev:

    ¿A qué te refieres?

    no compila.

    ¿Qué has hecho?

     
    fxsaber:

    ¿Qué has hecho?

    No he hecho nada todavía, sólo estoy tratando de compilar este código:

    #include <MT4Orders.mqh> // https://www.mql5.com/es/code/16006
    
    #define  VIRTUAL_TESTER // Ejecutar en un entorno comercial virtual
    #define  BESTINTERVAL_ONTESTER // El criterio de optimización es el beneficio del mejor intervalo.
    #include <fxsaber\Virtual\Virtual.mqh> // https://www.mql5.com/es/code/22577
    #include <fxsaber\BestInterval\BestInterval.mqh> // https://www.mql5.com/es/code/22710
    
    #include <..\Experts\fxsaber\TesterEA\TesterEA.mq4>

    sin Virtual , compila,

    sin BestInterval también compila,

    pero no compilan juntos.