Discusión sobre el artículo "Optimización móvil continua (Parte 8): Mejorando el programa y corrigiendo los errores encontrados" - página 3

 
fxsaber:
Solicito al Autor que grabe un video mostrando los diferentes usos de este proyecto.

Si tiene tiempo libre. Pero en general la petición de usted es un poco inesperado, usted ha visto mis publicaciones desde el primer artículo (aunque tal vez no todos fueron seguidos).

 

Hola,

Increíble proyecto, muchas gracias por esto.

Tengo un problema con la compilación de la DealHistoryGetter.mqh y el mensaje de error es: 'calcContracts' - función miembro no definida línea 488.


Muchas gracias de nuevo.

 

Hola,

Increíble proyecto,muchas gracias por esto.

Tengo un problema con la compilación de la DealHistoryGetter.mqh y el mensaje de error es: ' calcContracts' -función miembro no definida línea 488.


Muchas gracias de nuevo.

Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
Documentation on MQL5: Constants, Enumerations and Structures / Named Constants / Predefined Macro Substitutions
  • www.mql5.com
Predefined Macro Substitutions - Named Constants - Constants, Enumerations and Structures - MQL5 Reference - Reference on algorithmic/automated trading language for MetaTrader 5
 
Franco87:

Hola,

Increíble proyecto.Muchas gracias por esto.

Tengo un problema con la compilación de la DealHistoryGetter.mqh y el mensaje de error es: ' calcContracts' -función miembro no definida línea 488.


Muchas gracias de nuevo.

Hola, recientemente conpiled mi experto que está utilizando este archivo y todo estaba bien.

 
Si compilo los archivos .mq5 que enviaste desde tu expert advisor llamado "New uploading variant" muestra muchos errores como puedes ver en la imagen de abajo. Acabo de descargar la última versión publicada (artículo 8).

¿Qué debo hacer para resolver esto?





Saludos
 

Hola Andrei Decidí volver a la búsqueda del grial y me alegró encontrar tu optimizador funcionando y finalizado. Las soluciones construidas enteramente en Mql5 resultaron ser exigentes para el soporte del autor y se descarrilaron. Y tu optimizador funcionará mientras exista C# y la ventana del probador de estrategias en MT5 no cambiará. Es extraño que no haya una demanda masiva deoptimización back-forward. De todos modos, ¡muchas gracias por tu duro trabajo!


El probador ya está funcionando, pero voy a expresar algunos deseos. Puede que incluso alguien más siga perfeccionando el proyecto y lo ponga en la base de código.
1. Me gustaría tener tooltips con explicaciones en la cabecera de las tablas con resultados. Que son: var 90, var 95, mx....
2. Los valores de PL y DD en las ventanas 1 y 3 de la pestaña "resultados" no coinciden. Bueno, ¿y las unidades de medida?
3. La función OnTester() no se compila porque está definida en los archivos del optimizador, por lo que se anulan los criterios totalmente personalizados. A partir de los estándar el programa permite escribir cualquier conjunto.
4. ¿Cómo prescindir de los gráficos de balance? Usted puede pegar todos los delanteros juntos y ejecutarlos en un probador, por ejemplo. O mejor - un gráfico aproximado en la ventana del optimizador de una vez para evaluar la valía de la EA para seguir perdiendo el tiempo. Por lo menos, el optimizador debe mostrar el resultado final de todos los pases hacia adelante.
5. El cálculo de los beneficios en pips es necesario. Especialmente teniendo en cuenta cómo funciona el probador con cripto. Añadir una casilla de verificación.
6. Y por último, me gustaría soñar con la posibilidad de añadir múltiples TFs. Similar a la posibilidad de añadir varios activos.
Bueno, y mucho, mucho dinero....

 
Good Beer optimización back-forward. De todas formas, ¡muchas gracias por tu trabajo!


El probador ya está funcionando, pero voy a expresar algunos deseos. Puede que incluso alguien más siga perfeccionando el proyecto y lo ponga en la base de código.
1. Me gustaría tener tooltips con explicaciones en la cabecera de las tablas con resultados. Que son: var 90, var 95, mx....
2. Los valores de PL y DD en las ventanas 1 y 3 de la pestaña "resultados" no coinciden. Bueno, ¿y las unidades de medida?
3. La función OnTester() no se compila porque está definida en los archivos del optimizador, por lo que se anulan los criterios totalmente personalizados. A partir de los estándar el programa permite escribir cualquier conjunto.
4. ¿Cómo prescindir de los gráficos de balance? Usted puede pegar todos los delanteros juntos y ejecutarlos en un probador, por ejemplo. O mejor - un gráfico aproximado en la ventana del optimizador de una vez para evaluar la valía de la EA para seguir perdiendo el tiempo. Por lo menos, el optimizador debe mostrar el resultado final de todos los pases hacia adelante.
5. El cálculo de los beneficios en pips es necesario. Especialmente teniendo en cuenta cómo funciona el probador con cripto. Añadir una casilla de verificación.
6. Y por último, me gustaría soñar con la posibilidad de añadir múltiples TFs. Similar a la posibilidad de añadir varios activos.
Bueno, y mucho, mucho dinero....

Gracias por sus comentarios, yo no apoyo este proyecto, pero sí que debería estar trabajando durante mucho tiempo.

Si alguien tiene un deseo de refinar, ajustar el proyecto - a continuación, hacerlo)
https://github.com/AndreyKrivcov/MetaTrader-Auto-Optimiser.

GitHub - AndreyKrivcov/MetaTrader-Auto-Optimiser
GitHub - AndreyKrivcov/MetaTrader-Auto-Optimiser
  • AndreyKrivcov
  • github.com
Experts mast use class CAutoUploader (CustomInclude/History manager/AutoLoader.mqh)
 
EDUARDO RODRIGUES NASCIMENTO #:
Si compilo los archivos .mq5 que enviaste desde tu expert advisor llamado "New uploading variant" muestra muchos errores como puedes ver en la imagen de abajo. Acabo de descargar la última versión publicada (8 º artículo).

¿Qué debo hacer para resolver esto?





Saludos

Pues eso. Descargar el archivo adjunto al artículo y ver dos carpetas en el mismo:

Así. Descargamos el archivo adjunto al artículo y vemos dos carpetas en él:


Mover la carpeta MetaTrader-Auto-Optimiser desde el archivo al directorio raíz donde se encuentra MetaTrader 5:

Mueva la carpeta MetaTrader-Auto-Optimiser del archivo al directorio raíz donde se encuentra MetaTrader 5:


En la carpeta MQL5 del archivo hay dos carpetas - cópielas en la carpeta MQL5 de su terminal. En consecuencia, la carpeta Test Expert se copiará en la carpeta MQL5, y dos carpetas: CustomGeneric y History manager se copiarán en la carpeta MQL5.

Compila el archivo SimpleMA.mq5 en la carpeta Experts\Test Expert\Nnueva variante de carga:

Hay dos carpetas en el archivo, en la carpeta MQL5 - cópialas en la carpeta MQL5 de tu terminal. En consecuencia, la carpeta Test Expert se copiará en la carpeta MQL5\Experts, y dos carpetas se copiarán en la carpeta MQL\Include: CustomGeneric y History manager.

Compila el archivo SimpleMA.mq5 que se encuentra en la carpeta Experts\Test Expert\NNNew uploading variant:


Obtenemos 100 errores y 60 advertencias:

Obtenemos 100 errores y 60 advertencias:


Pasemos al primer error y veamos que no es una importación cerrada:

Pasemos al primer error y veamos que no se trata de una importación cerrada:


Haga doble clic en la inscripción sobre el error y vaya al archivo UploadersEntities.mqh en la línea con el error:

Haga doble clic en la inscripción sobre el error y entre en el fichero UploadersEntities.mqh en la línea con el error:


¿Qué vemos? Vemos que realmente no se ha cerrado la importación. Vamos a arreglarlo:

¿Qué vemos? Y vemos realmente no cerrada la importación. Lo arreglamos:

//+------------------------------------------------------------------+
//|UploadersEntities.mqh
//| Copyright 2020, MetaQuotes Software Corp.
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"

#include "ReportCreator.mqh"
#import "ReportManager.dll"
#import
//+------------------------------------------------------------------+
//| Estructura que almacena datos sobre los parámetros de entrada |
//+------------------------------------------------------------------+
struct BotParams
  {
   string            name,value;
  };

// Añadir un nuevo valor a la matriz dinámica
#define ADD_TO_ARR(arr, value) \
{\
   int s = ArraySize(arr);\
   ArrayResize(arr,s+1,s+1);\
   arr[s] = value;\
}

// añade un nuevo parámetro robot a la matriz de parámetros dinámicos
#define APPEND_BOT_PARAM(Var,BotParamArr) \
{\
   BotParams param;\
   param.name = #Var;\
   param.value = (string)Var;\
   \
   ADD_TO_ARR(BotParamArr,param);\
}

//+------------------------------------------------------------------+
//|| Función que copia la lista de matrices ||
//+------------------------------------------------------------------+
void CopyBotParams(BotParams &dest[], const BotParams &src[])
  {
   int total = ArraySize(src);
   for(int i=0; i<total; i++)
     {
      ADD_TO_ARR(dest,src[i]);
     }
  }

//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
double GetAverageCoef(CoefChartType type, CReportCreator &report_manager)
  {
   CoefChart_item coef_chart[];
   report_manager.GetCoefChart(false,type,coef_chart);

   double ans= 0;
   int total = ArraySize(coef_chart);
   for(int i=0; i<total; i++)
      ans+=coef_chart[i].coef;

   ArrayFree(coef_chart);
   return (ans/(double)total);
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
string get_path_to_expert(void)
  {
   string arr[];
   StringSplit(MQLInfoString(MQL_PROGRAM_PATH),'\\',arr);
   string relative_dir=NULL;

   int total= ArraySize(arr);
   bool save= false;
   for(int i=0; i<total; i++)
     {
      if(save)
        {
         if(relative_dir== NULL)
            relative_dir=arr[i];
         else
            relative_dir+="\\"+arr[i];
        }

      if(StringCompare("Experts",arr[i])==0)
         save=true;
     }

   return relative_dir;
  }
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
typedef void(*TCallback)();
typedef double(*TCustomFilter)();
typedef int (*TOnTesterInit)();


//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
void EmptyCallback() {}
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
double EmptyCustomCoefCallback() {return 0;}
//+------------------------------------------------------------------+
//||
//+------------------------------------------------------------------+
int EmptyOnTesterInit() {return(INIT_SUCCEEDED);}

enum ENUM_CALLBACK_TYPE
  {
   CB_ON_TICK,
   CB_ON_TESTER_DEINIT
  };

struct Data
  {
   int tf, // ReportItem.TF
       laverage, // ReportReader.Laverage
       totalTrades, // ReportItem.OptimisationCoefficients.TotalTrades
       totalProfitTrades, // ReportItem.OptimisationCoefficients.MaxPLDD.Profit.TotalTrades
       totalLooseTrades, // ReportItem.OptimisationCoefficients.MaxPLDD.DD.TotalTrades
       consecutiveWins, // ReportItem.OptimisationCoefficients.MaxPLDD.Profit.ConsecutivesTrades
       consequtiveLoose, // ReportItem.OptimisationCoefficients.MaxPLDD.DD.ConsecutivesTrades
       numberProfitTrades_mn, // ElementoInforme.CoeficientesOptimización.DíasContratación[Mn].Beneficio.Operaciones
       numberProfitTrades_tu, // ElementoInforme.CoeficientesOptimización.DíasContratación[Tu].Beneficio.Operaciones
       numberProfitTrades_we, // ElementoInforme.CoeficientesOptimización.DíasContratación[Nosotros].Beneficio.Operaciones
       numberProfitTrades_th, // ElementoInforme.CoeficientesOptimización.DíasContratación[D].Beneficio.Operaciones
       numberProfitTrades_fr, // ElementoInforme.CoeficientesOptimización.DíasContratación[Fr].Beneficio.Operaciones
       numberLooseTrades_mn, // ReportItem.OptimisationCoefficients.TradingDays[Mn].DD.Trades
       numberLooseTrades_tu, // ReportItem.OptimisationCoefficients.TradingDays[Tu].DD.Trades
       numberLooseTrades_we, // ElementoInforme.CoeficientesOptimización.DíasContratación[Nosotros].DD.Operaciones
       numberLooseTrades_th, // ReportItem.OptimisationCoefficients.TradingDays[Th].DD.Trades
       numberLooseTrades_fr; // ReportItem.OptimisationCoefficients.TradingDays[Fr].DD.Trades
   ulong startDT, // ReportItem.DateBorders.From
         finishDT; // ReportItem.DateBorders.Till
   double payoff, // ReportItem.OptimisationCoefficients.Payoff
          profitFactor, // ReportItem.OptimisationCoefficients.ProfitFactor
          averageProfitFactor, // ReportItem.OptimisationCoefficients.AverageProfitFactor
          recoveryFactor, // ReportItem.OptimisationCoefficients.RecoveryFactor
          averageRecoveryFactor, // ReportItem.OptimisationCoefficients.AverageRecoveryFactor
          pl, // ReportItem.OptimisationCoefficients.PL
          dd, // ReportItem.OptimisationCoefficients.DD
          altmanZScore, // ReportItem.OptimisationCoefficients.AltmanZScore
          var_90, // ReportItem.OptimisationCoefficients.VaR.Q_90
          var_95, // ReportItem.OptimisationCoefficients.VaR.Q_95
          var_99, // ElementoInforme.CoeficientesOptimización.VaR.Q_99
          mx, // ReportItem.OptimisationCoefficients.VaR.Mx
          std, // ReportItem.OptimisationCoefficients.VaR.Std
          max_profit, // Valor.MaxPLDD.Profit.ReportItem.OptimisationCoefficients
          max_dd, // Valor.MaxPLDD.DD.ReportItem.OptimisationCoefficients
          averagePl_mn, // ElementoInforme.CoeficientesOptimización.DíasContratación[Mn].Beneficio.Valor
          averagePl_tu, // ElementoInforme.CoeficientesOptimización.DíasContratación[Tu].Beneficio.Valor
          averagePl_we, // ElementoInforme.CoeficientesOptimización.DíasContratación[Nosotros].Beneficio.Valor
          averagePl_th, // ElementoInforme.CoeficientesOptimización.DíasContratación[Th].Beneficio.Valor
          averagePl_fr, // ElementoInforme.CoeficientesOptimización.DíasContratación[Fr].Beneficio.Valor
          averageDd_mn, // ElementoInforme.CoeficientesOptimización.DíasContratación[Mn].DD.Valor
          averageDd_tu, // ElementoInforme.CoeficientesOptimización.DíasContratación[Tu].DD.Valor
          averageDd_we, // ElementoInforme.CoeficientesOptimización.DíasContratación[Nosotros].DD.Valor
          averageDd_th, // ElementoInforme.CoeficientesOptimización.DíasContratación[D].DD.Valor
          averageDd_fr, // ElementoInforme.CoeficientesOptimización.DíasContratación[Fr].DD.Valor
          balance; // ReportReader.Balance
   char              currency[100];
  };
//+------------------------------------------------------------------+

Compila de nuevo. El error de importación ha desaparecido, pero ahora el compilador no ve las funciones y métodos del fichero importado:

Compilemos de nuevo. El error de importación ha desaparecido, pero ahora el compilador no ve las funciones y métodos del fichero importado:


Recuerda que estamos importando métodos y clases de una dll de terceros. Debe estar ubicado en la carpeta MQL5/Libraries.

Abrimos la carpeta MetaTrader-Auto-Optimiser, copiada del archivo al directorio raíz de MetaTrader 5. Vemos el archivo Metatrader Auto Optimiser.sln en ella:

Recordamos que estamos importando métodos y clases de una dll de terceros. Y debería estar en la carpeta MQL5\Libraries.

Abrimos la carpeta MetaTrader-Auto-Optimiser copiada del archivo al directorio raíz de MetaTrader 5. Vemos el archivo Metatrader Auto Optimiser.sln en ella:


Haga doble clic en este archivo para abrir el proyecto en MS Visual Studio.

Al abrir el proyecto, vemos que es para una plataforma obsoleta:

Haga doble clic en este archivo para abrir el proyecto en MS Visual Studio.

Al abrir el proyecto, vemos que es para una plataforma obsoleta:


Dejamos marcada la casilla "Upgrade target to .NET Framefork 4.8 platform" y pulsamos el botón "Continue".

A continuación, de nuevo para el segundo proyecto:

Deje marcada la casilla "Upgrade target to .NET Framefork 4.8 platform" y haga clic en el botón "Continue".

A continuación, de nuevo para el segundo proyecto:


Después de cargar los proyectos, seleccione "Release" y Cualquier CPU:

Después de cargar los proyectos, selecciona "Release" y Any CPU:


Y pulsa Ctrl+F5 para compilar y construir los proyectos.

Después de compilar el proyecto en MS Visual Studio vaya al directorio raíz de la terminal y en ella a la carpeta \MetaTrader-Auto-Optimiser\ReportManager\bin\Release. Copia el archivo de la biblioteca ReportManager.dll de esta carpeta al directorio MQL5/Libraries del terminal.

Ahora compila de nuevo el archivo SimpleMA.mq5 de la carpeta MQL5\Experts\Test Expert\Nnew uploading variant.

Hecho, sin errores:

Y pulse Ctrl+F5 para compilar y construir los proyectos.

Después de compilar el proyecto en MS Visual Studio, vaya al directorio raíz del terminal y en él a la carpeta \MetaTrader-Auto-Optimiser\ReportManager\bin\Release. Copiamos el archivo compilado ReportManager.dll de esta carpeta al directorio MQL5\Libraries del terminal.

Ahora vamos a compilar de nuevo el archivo SimpleMA.mq5 de la carpeta MQL5\Experts\Test Expert\NNew uploading variant.

Hecho, sin errores:


Disfruta

Archivos adjuntos:
 
Artyom Trishkin #:

Entonces. Descargar el archivo adjunto al artículo y ver dos carpetas en el mismo:

Así. Descargamos el archivo adjunto al artículo y vemos dos carpetas en él:


Transferir la carpeta MetaTrader-Auto-Optimiser desde el archivo al directorio raíz donde se encuentra MetaTrader 5:

Trasladar la carpeta MetaTrader-Auto-Optimiser desde el archivo comprimido al directorio raíz donde se encuentra MetaTrader 5:


En la carpeta MQL5 del archivo hay dos carpetas - cópielas en la carpeta MQL5 de su terminal. En consecuencia, la carpeta Test Expert se copiará en la carpeta MQL5, y dos carpetas: CustomGeneric y History manager se copiarán en la carpeta MQL5.

Compila el archivo SimpleMA.mq5 que se encuentra en la carpeta Experts\Test Expert\Nnueva variante de carga:

Hay dos carpetas en el archivo, en la carpeta MQL5 - cópialas en la carpeta MQL5 de tu terminal. En consecuencia, la carpeta Test Expert se copiará en la carpeta MQL5\Experts, y dos carpetas se copiarán en la carpeta MQL\Include: CustomGeneric y History manager.

Compila el archivo SimpleMA.mq5 ubicado en la carpeta Experts\Test Expert\NNNueva variante de subida:


Obtenemos 100 errores y 60 advertencias:

Obtenemos 100 errores y 60 advertencias:


Ve al primer error y verás que no es una importación cerrada:

Vayamos al primer error y veamos que no es una importación cerrada:


Gracias, actualizadas las fuentes adjuntas al artículo