Descargar MetaTrader 5

Optimizamos la estrategia usando el gráfico del balance y comparamos los resultados con el criterio "Balance + max Sharpe Ratio"

1 noviembre 2017, 16:17
Vladimir Karputov
0
934

Contenido

1. Introducción

En el proceso del trabajo, me ha surgido la siguiente idea: lo que el gráfico del balance crece en el historial ya no es suficiente para nosotros. Hace falta que sea también bastante plano, es decir, que la desviación media cuadrática desde la línea de tendencia sea cuanto menos posible. Eso significa que aparte de la rentabilidad, también queremos la estabilidad. Para eso, comprobaremos otro parámetro de la optimización: vamos a analizar la pendiente del gráfico del balance y la dispersión de la desviación de sus valores de la línea de la regresión.

Para obtener los coeficientes de la ecuación de la regresión lineal y algunas otras características estadísticas, usamos la librería del análisis numérico ALGLIB.


2. ¿Cómo calcular la línea de tendencia para el gráfico del balance?

Necesitamos construir la línea de tendencia para el gráfico del balance de tal manera que la suma de los cuadrados de las desviaciones desde dicha recta sea mínima.

Los coeficientes de la ecuación tipo y=ax+b para el cálculo de la línea se encuentran usando el método de los cuadrados mínimos (MCM). No vamos a presentar aquí todas las fórmulas para los cálculos. Simplemente usaremos la función hecha de la librería ALGLIB y la adaptamos para nuestras necesidades.

2.1. Algoritmo del cálculo del criterio de optimización

Vamos a ver un ejemplo de cinco transacciones:

Fig. 1. Balance and Linear regression.png

Fig. 1. Gráfico del balance y la regresión lineal

Estas cinco transacciones forman la línea del balance "Balance" 1-2-3-4-5. La línea de la regresión «Linear regression» se calcula y se traza usando el método de los cuadrados mínimos (los cálculos se realizan por la librería del análisis numérico ALGLIB).

2.2. Introducimos la primera variable TrendProfit. 

Ella significa el beneficio para una transacción para la línea de regresión construida:

Fig. 2. Parameter TrendProfit

Fig. 2. Parámetro TrendProfit

La variable se calcula como la razón entre la altura de la subida de la línea de la regresión y el número de transacciones. La altura de la subida, en su lugar, se calcula como la diferencia entre los valores de la línea de regresión en el punto «B» Y en el punto «A».

Ahora, hay que obtener el error de la construcción de la línea de regresión, o sea, la desviación media de la línea de regresión de la línea del balance. Este parámetro lo llamaremos la desviación estándar del Balance de la regresión lineal, y lo marcaremos como LR Standard error:

Fig. 3. LR Standard error

Fig. 3. LR Standard error

En esta fórmula, error se calcula como la diferencia entre el valor del balance y la regresión lineal. Aquí puede obtener más información sobre esta fórmula. 

En el caso considerado en la imagen 1, estas errores serán los siguentes:

error #1 error #2 error #3 error #4 error #5
10000 - 10600 = - 600 12000 - 11200 = 800 11000 - 11800 = - 800 14000 - 12400 = 1600 12000 - 13000 = - 1000

Por consiguiente, LR Standard error será igual a:

Fig. 4. Calculated LR Standard error

Fig. 4. LR Standard error calculado

2.3. Variable ProfitStability.

Este parámetro se encarga del suavizado del gráfico del balance: Nuestras tareas son las siguientes:

  • la línea de regresión tiene que estar más inclinada posible respecto al horizonte. Eso significa más beneficios;
  • la desviación media cuadrática de la línea del balance respecto a la línea de regresión tiene que ser cuanto menos. Eso supone que el trading es más estable.

ProfitStability se calcula como la razón entre TrendProfitLR Standard error:

Fig. 5. Variable ProfitStability

Fig. 5. Variable ProfitStability 

Para reducir la influencia de las transacciones con diferentes volúmenes, se puede dividir la variable ProfitStability por el volumen total de todas las transacciones.


3. Trabajamos con la librería ALGLIB

A estas alturas, (versión 1645) la librería ALGLIB ya desde hace tiempo está integrada en la librería estándar: [date folder]\MQL5\Include\Math\Alglib\alglib.mqh

Fig. 6. alglib

Fig. 6. Ruta hacia la librería ALGLIB en la librería estándar

Clases de la librería ALGLIB 

Para trabajar con la regresión lineal, vamos a necesitar las siguientes clases:
  • clase CLinReg — clase principal del cálculo de la regresión lineal
    • método CLinReg::LRBuild — construcción (cálculo) del modelo de la regresión lineal
    • método CLinReg::LRUnpack — devolución de los coeficientes del modelo lineal
  • clase CLinearModel — clase auxiliar
  • clase CLRReport — estructura que contiene la información ampliada sobre el modelo lineal. En particular, nos va a interesar el campo m_rmserror  (error medio cuadrático).

Clase "BalanceRegression.mqh"

Todo el trabajo del cálculo de la regresión lineal y el cálculo de los parámetros va a realizarse en la clase "Balance regression.mqh".

Métodos de la clase

 Establecimiento de parámetros
 SetStartBalance   Establecemos el balance inicial
 SetFromDate  Establecemos la fecha inicial para solicitar el historial de trading
 SetVolumeNormalization  Establece el modo de normalización de los volúmenes negociados
 Acceso a los resultados de los cálculos
 GetProfitStability  Acceso a los resultados de los cálculos 


La metodología del trabajo con la clase CBalanceRegression es la siguiente.

  1. Establecemos el balance inicial (llamamos al método SetStartBalance).
  2. Establecemos la fecha inicial para solicitar el historial de trading (llamamos al método SetFromDate).
  3. Establecemos el modo de normalización de los volúmenes negociados (llamamos al método SetVolumeNormalization). Si queremos usar la normalización del volumen negociado, pasamos true, de los contrario, false. 
  4. Obtenemos el resultado del cálculo (llamamos al método GetProfitStability, y pasamos el resultado obtenido usando el procedimiento OnTester).

3.1. Pasos del cálculo (método GetProfitStability)

Los resultados de las transacciones donde (comisión + swap + beneficio) > 0,0 van a guardarse en el array arr_profits. El volumen de todas las transacciones va a sumarse en la variable total_volume.

//---
   double   arr_profits[];                            // array of results deals 
   double   total_volume=0;                           // total volume

Luego recorremos todas las transacciones (llenamos el array arr_profits y sumamos el volumen de las transacciones en la variable total_volume:

//--- request trade history 
   HistorySelect(m_from_date,to_date);
   uint total_deals=HistoryDealsTotal();
   ulong ticket_history_deal=0;
//--- for all deals 
   for(uint i=0;i<total_deals;i++)
     {
      //--- try to get deals ticket_history_deal 
      if((ticket_history_deal=HistoryDealGetTicket(i))>0)
        {
         long     deal_type         =HistoryDealGetInteger(ticket_history_deal,DEAL_TYPE);
         double   deal_volume       =HistoryDealGetDouble(ticket_history_deal,DEAL_VOLUME);
         double   deal_commission   =HistoryDealGetDouble(ticket_history_deal,DEAL_COMMISSION);
         double   deal_swap         =HistoryDealGetDouble(ticket_history_deal,DEAL_SWAP);
         double   deal_profit       =HistoryDealGetDouble(ticket_history_deal,DEAL_PROFIT);

         if(deal_type!=DEAL_TYPE_BUY && deal_type!=DEAL_TYPE_SELL)
            continue;

         if(deal_commission==0.0 && deal_swap==0.0 && deal_profit==0.0)
            continue;

         total_volume+=deal_volume;

         int arr_size=ArraySize(arr_profits);
         ArrayResize(arr_profits,arr_size+1,50);   // resize the aray

         if(arr_size==0)
            arr_profits[arr_size]=GetSetStartBalance()+deal_commission+deal_swap+deal_profit;
         else
            arr_profits[arr_size]=arr_profits[arr_size-1]+deal_commission+deal_swap+deal_profit;

         int d=0;
        }
     }

Nótese: cuando hacemos la primera escritura en el array arr_profits, sumamos el balance inicial y el resultado financiero de la transacción. Para todas las demás escrituras, sumamos la escritura anterior y el resultado financiero de la transacción.

Declaramos el objeto de la clase CMatrixDouble. En realidad, se trata de una matriz. Vamos a rellenarla: número de la transacción (partiendo de "1") y el resultado financiero de la transacción.

//--- CMatrixDouble object
   CMatrixDouble xy(arr_size,2);
   for(int i=0;i<arr_size;i++)
     {
      xy[i].Set(0,i+1);
      xy[i].Set(1,arr_profits[i]);
      //Print(arr_profits[i]); // for debag
     }

Declaramos los objetos de las clases necesarias (CLinReg, CLinearModel, CLRReport) y construimos (calculamos) la regresión lineal:

//--- linear regression construction
   CLinReg        linear_regression;
   CLinearModel   linear_model;
   CLRReport      linear_report;
   int retcode;
   linear_regression.LRBuild(xy,arr_size,1,retcode,linear_model,linear_report);
   if(retcode!=1)
     {
      Print("Linear regression failed, error code=",retcode);
      return(0.0);
     }
   int nvars;
   double coefficients[];
   linear_regression.LRUnpack(linear_model,coefficients,nvars);
   double coeff_a=coefficients[0];
   double coeff_b=coefficients[1];
   PrintFormat("y = %.1f x + %.1f",coeff_a,coeff_b);

Por último, para obtener los coeficientes de la ecuación de la línea tipo y = a*x + b, llamamos al método LRUnpack. Los coeficientes que buscamos van a encontrarse en el array coefficients.

Ahora, cuando la regresión lineal está calculada y construida a través de la librería ALGLIB, podemos proceder directamente al cálculo del parámetro por el que ha sido ideado este artículo.

//--- сalculation of parameters
   double TrendProfit=((double)arr_size*coeff_a+coeff_b)-(1.0*coeff_a+coeff_b);  // the projection of the regression line on the "Y" axis 
   TrendProfit/=(double)arr_size;                                                // divided by the number of trades
   double TrendMSE=linear_report.m_rmserror;                                     // root mean square error on a training set
   double ProfitStability=TrendProfit/TrendMSE;
//--- normalize the trading volume
   if(GetVolumeNormalization())
      ProfitStability/=total_volume;
//--- we multiply by the number of deals - we aren't interested in passes which have few deals
   ProfitStability*=arr_size;
//---
   return(ProfitStability*10000.0);

Dependiendo del parámetro inicial que se establece a través del método SetVolumeNormalization, o dividimos el parámetro ProfitStability por el volumen sumario negociado, o no dividimos. Multiplicamos el resultado por 10 000, eso se hace para la mejor presentación de los resultados.


4. Conexión de la clase CBalanceRegression

Vamos a considerar el algoritmo de la conexión de la clase CBalanceRegression  para diferentes Asesores Expertos. 

4.1. Asesor Experto generado por el Asistente MQL5

Queremos comprobar la influencia de la normalización de los volúmenes negociados en los resultados. Entonces, necesitamos un EA que va a calcular dinámicamente los volúmenes de las posiciones abiertas. Se puede hacer eso en el Asistente MQL5: seleccionar el punto Asesor Experto (generar) y conectar uno de los módulos de la gestión de capital en la página «Gestión de capital»:

  • "Trading with fixed margin" — cálculo del lote en por cientos a base del margen libre
  • "Trading with fixed risk" — cálculo del lote en por cientos a base del balance
  • "Trading with optimized trade volume" — cñalculo del lote dependiendo del historial del trading

Para este artículo, he elegido el módulo de la gestión de capital "Trading with fixed risk", y he llamado el Asesor Experto "EA test balance regression.mq5". En su ejemplo, mostraré cómo conectar el archivo incluido de la clase CBalanceRegression.

Paso 1. Conectamos el archivo de la clase CBalanceRegression y declaramos el objeto de esta clase (m_balance_regression).

ATENCIÓN: el archivo de la clase CBalanceRegression debe ubicarse en la carpeta [data folder]\MQL5\Include\Balance regression.

//--- available money management
#include <Expert\Money\MoneyFixedRisk.mqh>
//--- available module Balance Regression
#include <Balance regression\BalanceRegression.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+

y

//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+
CExpert ExtExpert;
CBalanceRegression m_balance_regression;
//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+

Paso 2. Añadimos el parámetro que se encarga de la activación/desactivación de la normalización de los volúmenes negociados a los parámetros de entrada.

input double             Money_FixRisk_Percent=10.0;                            // Percentage of risk
//--- inputs for balance normalization
input bool               InpVolumeNormalization=true;                           // Volume normalization
//+------------------------------------------------------------------+
//| Global expert object                                             |
//+------------------------------------------------------------------+

Paso 3. Establecemos los parámetros para el objeto m_balance_regression de la clase CBalanceRegression: la fecha inicial para solicitar el historial del trading y el modo de la normalización de los volúmenes negociados:

//+------------------------------------------------------------------+
//| Initialization function of the expert                            |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Set parameters of CBalanceRegression
   m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE));
   m_balance_regression.SetFromDate(TimeCurrent());
   m_balance_regression.SetVolumeNormalization(InpVolumeNormalization);
//--- Initializing expert

Paso 4. Añadimos el procedimiento OnTester al final del archivo. Aquí, vamos a obtener el criterio de usuario de la optimización (llamando a GetProfitStability) y pasar el parámetro al Probador:

//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=m_balance_regression.GetProfitStability(TimeCurrent());
//---
   return(ret);
  }

4.2. Asesores Expertos a base de MACD Sample estándar y Moving Average

Los originales de los EAs se encuentran en [data folder]\MQL5\Experts\Examples\MACD\MACD Sample.mq5 y [data folder]MQL5\Experts\Examples\Moving Average\Moving Average.mq5, respectivamente.

¿Qué hacemos? Es necesario coger los EAs originales y guardar sus copias con otros nombres. He elegido los nombres "MACD Sample balance regression.mq5" y "Moving Average balance regression.mq5".

Paso 1. Conectamos el archivo de la clase CBalanceRegression y declaramos el objeto de esta clase (m_balance_regression).

ATENCIÓN: el archivo de la clase CBalanceRegression debe ubicarse en la carpeta [data folder]\MQL5\Include\Balance regression.

MACD Sample balance regression.mq5Moving Average balance regression.mq5
#include <Trade\AccountInfo.mqh>
//--- available module Balance Regression
#include <Balance regression\BalanceRegression.mqh>
CBalanceRegression m_balance_regression;
//---
input double InpLots          =0.1; // Lots
#include <Trade\Trade.mqh>
//--- available module Balance Regression
#include <Balance regression\BalanceRegression.mqh>
CBalanceRegression m_balance_regression;

input double MaximumRisk        = 0.02;    // Maximum Risk in percentage

Paso 2. Añadimos el parámetro que se encarga de la activación/desactivación de la normalización de los volúmenes negociados a los parámetros de entrada.

MACD Sample balance regression.mq5 Moving Average balance regression.mq5
input int    InpMATrendPeriod =26;  // MA trend period
//--- inputs for balance normalization
input bool   InpVolumeNormalization=true; // Volume normalization
//---
int ExtTimeOut=10; // time out in seconds between trade operations
input int    MovingShift        = 6;       // Moving Average shift
//--- inputs for balance normalization
input bool   InpVolumeNormalization=true;  // Volume normalization
//---
int    ExtHandle=0;

Paso 3. Establecemos los parámetros para el objeto m_balance_regression de la clase CBalanceRegression: la fecha inicial para solicitar el historial del trading y el modo de la normalización de los volúmenes negociados:

MACD Sample balance regression.mq5  Moving Average balance regression.mq5
//+------------------------------------------------------------------+
//| Initialization and checking for input parameters                 |
//+------------------------------------------------------------------+
bool CSampleExpert::Init(void)
  {
//--- Set parameters of CBalanceRegression
   m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE));
   m_balance_regression.SetFromDate(TimeCurrent());
   m_balance_regression.SetVolumeNormalization(InpVolumeNormalization);
//--- initialize common information
  
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit(void)
  {
//--- Set parameters of CBalanceRegression
   m_balance_regression.SetStartBalance(AccountInfoDouble(ACCOUNT_BALANCE));
   m_balance_regression.SetFromDate(TimeCurrent());
   m_balance_regression.SetVolumeNormalization(InpVolumeNormalization);
//--- prepare trade class to control positions if hedging mode is active

Paso 4. Añadimos el procedimiento OnTester al final del archivo de ambos EAs. Aquí, vamos a obtener el criterio de usuario de la optimización (llamando a GetProfitStability) y pasar el parámetro al Probador:

//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
  {
//---
   double ret=m_balance_regression.GetProfitStability(TimeCurrent());
//---
   return(ret);
  }

5. Optimización en EURUSD, H4, sin la prueba forward

Pues bien, tenemos tres EAs los cuales vamos a usar para comprobar la idea sobre la optimización del gráfico del balance aplicando el método de la regresión. En el proceso del trading, dos EAs ("EA test balance regression.mq5" y "Moving Average balance regression.mq5") calculan el volumen de la posición dinámicamente, y el EA "MACD Sample balance regression.mq5" usan el lote fijo en el proceso del trading.

5.1. EA test balance regression.mq5, EURUSD, H4, sin la prueba forward

Para no perder ninguna variante y acelerar al mismo tiempo la prueba, he elegido dos parámetros para la optimización: los parámetros límite para las señales de apertura y cierre de las posiciones:

Fig. 7. Tester, Inputs tab

Fig. 7. Probador, pestaña Parámetros

  • Prueba № 1: optimización del parámetro estándar "Balance + max Sharp Ratio" 
  • Prueba № 2: optimización del parámetro de usuario "Custom max", y el parámetro de optimización de los volúmenes negociados false, 
  • Prueba № 3: optimización del parámetro de usuario "Custom max", y el parámetro de optimización de los volúmenes negociados true.

5.1.1 Prueba №1: optimización del parámetro estándar "Balance + max Sharp Ratio".

Configuraciones del Probador para la prueba №1 (fíjese: el parámetro "Optimization" es igual a "Balance + max Sharpe Ratio"):

Fig. 8. Tester, Settings tab

Fig. 8. Probador, pestaña Parámetros

5.1.2. Comparación de la velocidad de la simulación en una red local doméstica de dos ordenadores y en la nube

En la red doméstica se usan dos ordenadores:

  1. el portátil a base del procesador de cuatro núcleos Intel Core i3-3120M @2.50GHz, 8077 MB, en la prueba se usaban sólo tres agentes de cuatro, porque el terminal necesitaba comunicarse con los agentes en el segundo ordenador;
  2. el ordenador de sobremesa a base del procesador de seis núcleos AMD Phenom II X6 1075T Processor, 4058 MB, en la prueba se usaban sólo cuatro agentes para no recalentar la CPU.

Fig. 9. Optimization in the home network

Fig. 9. Optimización en una red local doméstica

La prueba 1 en la red doméstica duraba 21 minutos y43 segundos.

Ahora, voy a eliminar los resultados de cache, e iniciaré la Prueba №1 en la nube en MQL5 Cloud Europe 1. En la nube, la prueba duró 1 minuto y 9 segundos.El coste de la prueba llegó a $0,06.

Aquí tenemos los resultados de la Prueba №1, ordenamiento de la columna "Result" en orden descendiente, cinco mejores resultados:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
346 4349,76 17818,98 181,83 1,28 1,45 0,16 27989,31 60,48 98 30 100
345 4349,76 17818,98 181,83 1,28 1,45 0,16 27989,31 60,48 98 25 100
344 4349,76 17818,98 181,83 1,28 1,45 0,16 27989,31 60,48 98 20 100
343 4349,76 17818,98 181,83 1,28 1,45 0,16 27989,31 60,48 98 15 100
327 4349,76 17818,98 181,83 1,28 1,45 0,16 27989,31 60,48 98 30 95

Fig. 10. Test1, Optimization pass 346

Fig. 10 Prueba 1, Optimización, paso 346

5.1.3. Prueba №2: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false.

Configuraciones del Probador para la prueba №2 (fíjese: el parámetro "Optimization" es igual a "Custom max"):

Fig. 11. Tester, Settings tab

Fig. 11. Probador, pestaña Parámetros

Parámetros del Probador para la Prueba №2 (fíjese: el parámetro "Volume normalization" en la columna "Value" es igual a "false"):

Fig. 12. Tester, Inputs tab

Fig. 12. Probador, pestaña Parámetros

Aquí tenemos los resultados de la Prueba №2, ordenamiento de la columna "Result" en orden descendiente, cinco mejores resultados:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
270 40085,45 11072,30 93,04 1,12 0,90 0,11 40085,45 41,18 119 30 80
269 40085,45 11072,30 93,04 1,12 0,90 0,11 40085,45 41,18 119 25 80
268 40085,45 11072,30 93,04 1,12 0,90 0,11 40085,45 41,18 119 20 80
267 40085,45 11072,30 93,04 1,12 0,90 0,11 40085,45 41,18 119 15 80
251 40085,45 11072,30 93,04 1,12 0,90 0,11 40085,45 41,18 119 30 75


Fig. 13. EURUSDH4, Test2 Optimization pass 270

Fig. 13 EURUSDH4, Тест2 Optimización, paso 270

La optimización según el parámetro de usuario "Custom max" ha seleccionado los resultados con la menor rentabilidad, pero por otro lado, con la menor reducción de la equidad (columna "Equity DD %"). Además, en la Prueba 2 tenemos la reducción del balance más pequeña, lo que se observa incluso visualmente si comparamos la imagen 12. con la imagen 13.

5.1.4. Prueba №3: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es igual a true:

Ajustes del Probador para la prueba №3 (los ajustes son iguales como para la Prueba №2):

Fig. 14. Tester, Settings tab

Fig. 14 Probador, pestaña Parámetros

Parámetros del Probador para la Prueba №3 (fíjese: el parámetro "Volume normalization" en la columna "Value" es igual a "true"):

Fig. 15. Tester, Inputs tab

Fig. 15 Probador, pestaña Parámetros

En la nube, la prueba duró 2 minuto y 27 segundos, y fue realizada en MQL5 Cloud Europe 1. El coste de la prueba llegó a $0,08.

Aquí tenemos los resultados de la Prueba №3, ordenamiento de la columna "Result" en orden descendiente, cinco mejores resultados:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
346 92,11 17818,98 181,83 1,28 1,45 0,16 92,11253 60,48 98 30 100
345 92,11 17818,98 181,83 1,28 1,45 0,16 92,11253 60,48 98 25 100
344 92,11 17818,98 181,83 1,28 1,45 0,16 92,11253 60,48 98 20 100
343 92,11 17818,98 181,83 1,28 1,45 0,16 92,11253 60,48 98 15 100
327 92,11 17818,98 181,83 1,28 1,45 0,16 92,11253 60,48 98 30 95

El parámetro de los volúmenes negociados igual a "true" determinó las mismas mejores variantes en la Prueba 3 que en la Prueba 1. Es un buen índice del trabajo del método de la optimización del gráfico del balance por el método de la regresión lineal.

Conclusión: la optimización del gráfico del balance por el método de la regresión lineal ha permitido seleccionar los resultados no peores, e incluso comparables con el método de la optimización "Balance + max Sharp Ratio".

5.2. Moving Average balance regression.mq5, EURUSD, H4, sin la simulación forward

Han sido elegidos los siguientes parámetros para la optimización:

Fig. 16. Tester, Inputs tab

Fig. 16. Probador, pestaña Parámetros

Voy a realizar tres pruebas para el Asesor Experto Moving Average balance regression:

  • Prueba № 1: optimización del parámetro estándar "Balance + max Sharp Ratio" 
  • Prueba №2: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false
  • Prueba №3: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es true

Configuraciones del Probador (la divisa, método de generación de ticks, intervalo del historial son los mismos que en la imagen 5).

5.2.1. La prueba № 1 (optimización del parámetro estándar "Balance + max Sharp Ratio") fue realizada en la nube. En la nube, la prueba duró 1 minuto y 22 segundos, y fue realizada en MQL5 Cloud Europe 1. El coste de la prueba llegó a $0,03.

Aquí tenemos los resultados de la Prueba 1, ordenamiento de la columna "Result" en orden descendiente, cinco mejores resultados:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
19 3500,83 1209,31 28,79 2,89 2,74 0,31 280,3791 4,29 42 9 13
18 3500,83 1209,31 28,79 2,89 2,74 0,31 280,3791 4,29 42 8 13
17 3500,83 1209,31 28,79 2,89 2,74 0,31 280,3791 4,29 42 7 13
21 3438,91 1202,00 28,62 2,76 2,52 0,31 287,1098 4,59 42 11 13
20 3438,91 1202,00 28,62 2,76 2,52 0,31 287,1098 4,59 42 10 13

Vamos a comprobar el mejor repaso №19:

Fig. 17. EURUSDH4, Test1 Optimization pass 19

Fig. 17. EURUSDH4, Prueba 1, optimización, paso 19

5.2.2. La Prueba №2 (optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false) fue realizada en la nube. En la nube, la prueba duró 0 minutos 00 segundos porque los resultados fueron cogidos de la cache, aunque los resultados fueron alternados. La prueba fue realizada en MQL5 Cloud Europe 2. El coste de la prueba llegó a $0,00.

Aquí tenemos los resultados de la Prueba №2, ordenamiento de la columna "Result" en orden descendiente, cinco mejores resultados:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
141 102076,24 1029,99 25,75 2,16 2,29 0,22 102076,2 3,93 40 14 22
140 102076,24 1029,99 25,75 2,16 2,29 0,22 102076,2 3,93 40 13 22
139 102076,24 1029,99 25,75 2,16 2,29 0,22 102076,2 3,93 40 12 22
142 101254,84 1037,87 25,95 2,15 2,31 0,22 101254,8 3,93 40 15 22
138 90936,41 960,67 24,02 2,09 2,08 0,21 90936,41 4,31 40 11 22

En la parte de arriba de la tabla, tenemos el repaso 141 (tiene el valor máximo en la columna "Result"):

Fig. 18. EURUSDH4, Test2 Optimization pass 141

Fig. 18. EURUSDH4, Prueba 2, optimización, paso 141

En la prueba №2, la optimización del gráfico del balance mostró el mejor resultado que la optimización por el parámetro "Balane + max Sharp Ratio".

5.2.3. La Prueba №3 (optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es true) fue realizada en la nube. En la nube, la prueba duró 1 minuto y 13 segundos. La prueba fue realizada en MQL5 Cloud Europe 2. El coste de la prueba llegó a $0,05.

Aquí tenemos los resultados de la Prueba №3, ordenamiento de la columna "Result" en orden descendiente, cinco mejores resultados:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
141 13869,05 1029,99 25,75 2,16 2,29 0,22 13869,05 3,93 40 14 22
140 13869,05 1029,99 25,75 2,16 2,29 0,22 13869,05 3,93 40 13 22
139 13869,05 1029,99 25,75 2,16 2,29 0,22 13869,05 3,93 40 12 22
142 13235,93 1037,87 25,95 2,15 2,31 0,22 13235,93 3,93 40 15 22
138 12542,95 960,67 24,02 2,09 2,08 0,21 12542,95 4,31 40 11 22

La prueba №3 seleccionó las mismas mejores variantes que la prueba №2. Y el parámetro de la optimización de los volúmenes negociados igual a "true" no introdujo ningunas correcciones.

Conclusión: laoptimización por el parámetro de usuario "Custom max" en ambas pruebas (Prueba №2 y Prueba №3) pudo seleccionar los mejores resultados que en la prueba №1. En la prueba №3,  el parámetro de la optimización de los volúmenes negociados igual a "true" no introdujo ningunas correcciones.

5.3. MACD Sample balance regression.mq5, EURUSD, H4, sin la prueba forward

Han sido elegidos los siguientes parámetros para la optimización:

Fig. 19. Tester, Inputs tab

Fig. 19 Probador, pestaña Parámetros

Voy a realizar tres pruebas para el Asesor Experto  MACD Sample balance regression :

  • Prueba № 1: optimización del parámetro estándar "Balance + max Sharp Ratio"
  • Prueba №2: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false
  • Prueba №3: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es true

Configuraciones del Probador (la divisa, método de generación de ticks, intervalo del historial son los mismos que en la imagen 5).

5.3.1. La prueba № 1 (optimización del parámetro estándar "Balance + max Sharp Ratio") fue realizada en la nube. En la nube, la prueba duró 3 minuto y 55 segundos (tanto tiempo porque la tarea no fue realizada en algunos agentes lentos y por tanto 10 tareas fueron repartidos entre otros agentes), y fue realizada en MQL5 Cloud Europe 1. El coste de la prueba llegó a $0,04.

Aquí tenemos los resultados de la Prueba №1:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
163 767049,82 363,32 24,22
3,87 74,02 24573559 0,91 15 25 50
136 767049,82 363,32 24,22
3,87 74,02 24573559 0,91 15 25 45
109 767049,82 363,32 24,22
3,87 74,02 24573559 0,91 15 25 40
82 767049,82 363,32 24,22
3,87 74,02 24573559 0,91 15 25 35
55 767049,82 363,32 24,22
3,87 74,02 24573559 0,91 15 25 30

En este timeframe había muy pocas transacciones (de 13 a 16). Espero que en un timeframe más pequeño (M15) habrá más transacciones, pero estas pruebas serán realizadas más abajo, en otro apartado. Por ahora el mejor resultado es №163:

Fig. 20. EURUSDH4, Test1 Optimization pass 163

Fig. 20 EURUSDH4, Prueba 1, Optimización, paso 163

5.3.2. La Prueba №2 (optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false) fue realizada en la nube. En la nube, la prueba duró 0 minutos 00 segundos porque los resultados fueron cogidos de la cache, aunque los resultados fueron alternados. La prueba fue realizada en MQL5 Cloud Europe 2. El coste de la prueba llegó a $0,00.

Aquí tenemos los resultados de la Prueba №2:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
163 24573558,59 363,32 24,22
3,87 74,02 24573559 0,91 15 25 50
136 24573558,59 363,32 24,22
3,87 74,02 24573559 0,91 15 25 45
109 24573558,59 363,32 24,22
3,87 74,02 24573559 0,91 15 25 40
82 24573558,59 363,32 24,22
3,87 74,02 24573559 0,91 15 25 35
55 24573558,59 363,32 24,22
3,87 74,02 24573559 0,91 15 25 30

La prueba №2 seleccionó los mismos mejores resultados (hay que comparar todas las columnas, a excepción de "Result") que la prueba №1. 

5.3.3. La Prueba №3 (optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es true) fue realizada en la nube. En la nube, la prueba duró 1 minuto y 5 segundos. La prueba fue realizada en MQL5 Cloud Europe 2. El coste de la prueba llegó a $0,05.

Aquí tenemos los resultados de la Prueba №3:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
163 16382372,39 363,32 24,22
3,87 74,02 16382372 0,91 15 25 50
136 16382372,39 363,32 24,22
3,87 74,02 16382372 0,91 15 25 45
109 16382372,39 363,32 24,22
3,87 74,02 16382372 0,91 15 25 40
82 16382372,39 363,32 24,22
3,87 74,02 16382372 0,91 15 25 35
55 16382372,39 363,32 24,22
3,87 74,02 16382372 0,91 15 25 30
La prueba №3 seleccionó los mismos mejores resultados (hay que comparar todas las columnas, a excepción de "Result") que la prueba №1 y №2.

La optimización del gráfico del balance por el método de la regresión lineal se ha activado en el nivel del método "Balance + max Sharp Ratio".


6. Optimización en EURUSD, M15, sin la prueba forward

Pues, tenemos los mismos tres EAs "EA test balance regression.mq5", "Moving Average balance regression.mq5" y "MACD Sample balance regression.mq5". La diferencia de las pruebas anteriores es la siguiente: ahora probamos en el timeframe M15 y con la simulación forward activada.

6.1. Asesor Experto "EA test balance regression.mq5", prueba forward, realizaré tres pruebas:

  • Prueba № 1: optimización del parámetro estándar "Balance + max Sharp Ratio"
  • Prueba №2: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false
  • Prueba №3: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es true

6.1.1. Prueba № 1: optimización del parámetro estándar "Balance + max Sharp Ratio". Ajustes del Probador:

Fig. 21. Tester, Settings tab

Fig. 21 Probador, pestaña Parámetros

Los parámetros del Probador son los mismos que se muestran en la imagen 7.

En la nube, la prueba duró 2 minuto y 14 segundos, y fue realizada en MQL5 Cloud Europe 2. El coste de la prueba llegó a $0,08.

Resultados de la optimización:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
352 23196,38 85836,92 721,32 1,47 2,03 0,24 2722,602 48,82 119 60 100
351 23196,38 85836,92 721,32 1,47 2,03 0,24 2722,602 48,82 119 55 100
333 23196,38 85836,92 721,32 1,47 2,03 0,24 2722,602 48,82 119 60 95
332 23196,38 85836,92 721,32 1,47 2,03 0,24 2722,602 48,82 119 55 95
314 23196,38 85836,92 721,32 1,47 2,03 0,24 2722,602 48,82 119 60 90

Fig. 22. EURUSDM15, Test1 Optimization pass 352

Fig. 22. EURUSDM15, Prueba 1, optimización, paso 352

Resultados de la prueba forward:

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
284 216,48 11708,46 18,91 1,89 1,02 0,02 0,02 7172,395 9,33 10 100 80
283 216,48 11708,46 18,91 1,89 1,02 0,02 0,02 7172,395 9,33 10 95 80
282 216,48 11708,46 18,91 1,89 1,02 0,02 0,02 7172,395 9,33 10 90 80
281 216,48 11708,46 18,91 1,89 1,02 0,02 0,02 7172,395 9,33 10 85 80
265 216,48 11708,46 18,91 1,89 1,02 0,02 0,02 7172,395 9,33 10 100 75

Aquí, los mejores resultados fueron los que tenían 10 transacciones en el intervalo forward. Claro que es poco, pero la prueba es necesaria:

Fig. 23. EURUSDM15, Test1 Forward pass 284

Fig. 23 EURUSDM15, Prueba 1, Forward, paso 284

6.1.2. Prueba №2: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false.

Los mejores resultados (no forward):

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
284 180332,68 10820,37 309,15 4,67 6,80 0,56 180332,7 7,98 35 100 80
283 180332,68 10820,37 309,15 4,67 6,80 0,56 180332,7 7,98 35 95 80
282 180332,68 10820,37 309,15 4,67 6,80 0,56 180332,7 7,98 35 90 80
281 180332,68 10820,37 309,15 4,67 6,80 0,56 180332,7 7,98 35 85 80
265 180332,68 10820,37 309,15 4,67 6,80 0,56 180332,7 7,98 35 100 75

Fig. 24. EURUSDM15, Test2 Optimization pass 284

Fig. 24. EURUSDM15, Prueba 2, optimización, paso 284

Resultados de la prueba forward:

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
284 -14294,76 180332,68 18,91 1,89 1,02 0,02 0,02 -14294,8 9,33 10 100 80
283 -14294,76 180332,68 18,91 1,89 1,02 0,02 0,02 -14294,8 9,33 10 95 80
282 -14294,76 180332,68 18,91 1,89 1,02 0,02 0,02 -14294,8 9,33 10 90 80
281 -14294,76 180332,68 18,91 1,89 1,02 0,02 0,02 -14294,8 9,33 10 85 80
265 -14294,76 180332,68 18,91 1,89 1,02 0,02 0,02 -14294,8 9,33 10 100 75

En la prueba №2, la simulación forward mostró los mismos resultados que en la prueba №1.

En la prueba №2, la optimización del gráfico del balance por el método de la regresión lineal permitió encontrar los resultados no peores que en la prueba №1 (método "Balance + max Sharp Ratio").

6.1.3. Prueba №3: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es true En la nube, la prueba duró 3 minuto y 29 segundos, y fue realizada en MQL5 Cloud Europe 1. El coste de la prueba llegó a $0,07.

Los mejores resultados (no forward):

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
208 1660,90 10008,05 285,94 4,50 6,55 0,56 1660,901 7,98 35 100 60
207 1660,90 10008,05 285,94 4,50 6,55 0,56 1660,901 7,98 35 95 60
206 1660,90 10008,05 285,94 4,50 6,55 0,56 1660,901 7,98 35 90 60
205 1660,90 10008,05 285,94 4,50 6,55 0,56 1660,901 7,98 35 85 60
189 1660,90 10008,05 285,94 4,50 6,55 0,56 1660,901 7,98 35 100 55


Fig. 25. EURUSDM15, Test3 Optimization pass 208

Fig. 25 EURUSDM15, Prueba 3, Optimización, paso 208

En la prueba №3, la activación de la opción «Normalización de los volúmenes negociados» no introdujo correcciones importantes en los resultados. Además, en el intervalo optimizado fue encontrado uno de los mejores resultados.

Los mejores resultados de la prueba forward:

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades Signal_ThresholdOpen Signal_ThresholdClose
266 -103,43 -25,56 -7464,56 -24,64 0,66 -0,99 -0,11 -103,428 75,43 303 10 80
247 -103,43 -25,56 -7464,56 -24,64 0,66 -0,99 -0,11 -103,428 75,43 303 10 75
228 -103,43 -25,56 -7464,56 -24,64 0,66 -0,99 -0,11 -103,428 75,43 303 10 70
209 -103,43 -25,56 -7464,56 -24,64 0,66 -0,99 -0,11 -103,428 75,43 303 10 65
156 -120,35 -29,28 -8013,01 -22,76 0,63 -1,00 -0,13 -120,35 80,44 352 30 50

La simulación forward en la prueba №3 (el parámetro de la optimización de los volúmenes negociados es "true") mostró SÓLO LOS RESULTADOS NEGATIVOS (ver la columna "Forward Result"). Es un resultado muy bueno de la estrategia de la optimización del gráfico del balance por el método de la regresión lineal, porque para la simulación forward fueron seleccionados los resultados más precisos y reales.

La optimización del gráfico del balance por el método de la regresión lineal (el parámetro de los volúmenes negociados es "false") permite buscar los resultados equiparables con el método "Balance max + Sharp Ratio". Cuando el parámetro de la optimización de los volúmenes negociados era "true", los resultados de la simulación forward permitieron mostrar la imagen real de la simulación en este timeframe.

6.2. Asesor Experto "MACD Sample balance regression.mq5", simulación forward

6.2.1. La prueba № 1 (optimización del parámetro estándar "Balance + max Sharp Ratio") fue realizada en la nube. En la nube, la prueba duró 1 minuto y 3 segundos, y fue realizada en MQL5 Cloud Europe 1. El coste de la prueba llegó a $0,06.

Resultados de la optimización:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
171 2094,29 479,93 8,57 1,81 2,03 0,20 -1,69249 2,30 56 65 50
144 2094,29 479,93 8,57 1,81 2,03 0,20 -1,69249 2,30 56 65 45
182 2078,33 489,23 8,74 1,82 2,07 0,20 -9,9625 2,29 56 120 50
155 2077,49 489,03 8,73 1,82 2,07 0,20 -9,90369 2,29 56 120 45
181 2066,17 484,13 8,65 1,81 2,05 0,20 -8,1109 2,29 56 115 50


Fig. 26. EURUSDM15, Test1 Optimization pass 171

Fig. 26 EURUSDM15, Prueba 1, Optimización, paso 171

Resultados de la prueba forward:

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
78 1182,13 1659,86 83,87 5,24 1,43 0,42 0,12 -44,8452 1,95 16 140 30
77 1134,97 1659,86 78,87 4,93 1,41 0,40 0,11 -53,5369 1,95 16 135 30
105 1107,99 1639,60 78,17 4,89 1,40 0,39 0,11 -26,6428 1,96 16 140 35
76 1085,51 1659,86 73,87 4,62 1,38 0,37 0,11 -62,5775 1,95 16 130 30
171 1060,24 2094,29 62,97 3,94 1,32 0,36 0,11 -347,982 1,70 16 65 50


Fig. 27. EURUSDM15, Test1 Forward pass 78

Fig. 27 EURUSDM15, Prueba 1, Forward, paso 78

6.2.2. Prueba №2: optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false.

Resultados de la optimización:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
168 84498,76 442,03 7,89 1,74 2,08 0,19 84498,76 2,07 56 50 50
141 84498,76 442,03 7,89 1,74 2,08 0,19 84498,76 2,07 56 50 45
114 84498,76 442,03 7,89 1,74 2,08 0,19 84498,76 2,07 56 50 40
167 83473,95 442,03 7,89 1,74 2,08 0,19 83473,95 2,06 56 45 50
140 83473,95 442,03 7,89 1,74 2,08 0,19 83473,95 2,06 56 45 45


Fig. 28. EURUSDM15, Test2 Optimization pass 168

Fig. 28 EURUSDM15, Prueba 2, optimización, paso 168

Resultados de la prueba forward:

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
78 1182,13 1659,86 83,87 5,24 1,43 0,42 0,12 6462,158 1,95 16 140 30
77 1134,97 1659,86 78,87 4,93 1,41 0,40 0,11 5018,77 1,95 16 135 30
105 1107,99 1639,60 78,17 4,89 1,40 0,39 0,11 5617,275 1,96 16 140 35
76 1085,51 1659,86 73,87 4,62 1,38 0,37 0,11 3525,665 1,95 16 130 30
171 1060,24 2094,29 62,97 3,94 1,32 0,36 0,11 -5131,93 1,70 16 65 50

Fig. 29. EURUSDM15, Test2 Forward pass 78

Fig. 29 EURUSDM15, Prueba 2, Forward, paso 78

En la prueba №2, la optimización del gráfico del balance por el método de la regresión mostró los resultados equiparables con el método "Balance + max Sharp Ratio".

6.2.3. La Prueba №3 (optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es true) fue realizada en la nube. En la nube, la prueba duró 1 minuto y 44 segundos. La prueba fue realizada en MQL5 Cloud Europe 1. El coste de la prueba llegó a $0,08.

Resultados de la optimización:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
168 15089,06 442,03 7,89 1,74 2,08 0,19 15089,06 2,07 56 50 50
141 15089,06 442,03 7,89 1,74 2,08 0,19 15089,06 2,07 56 50 45
114 15089,06 442,03 7,89 1,74 2,08 0,19 15089,06 2,07 56 50 40
167 14906,06 442,03 7,89 1,74 2,08 0,19 14906,06 2,06 56 45 50
140 14906,06 442,03 7,89 1,74 2,08 0,19 14906,06 2,06 56 45 45

Resultados de la prueba forward:

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades InpTakeProfit InpTrailingStop
78 4038,85 13138,16 83,87 5,24 1,43 0,42 0,12 4038,849 1,95 16 140 30
105 3510,80 13026,26 78,17 4,89 1,40 0,39 0,11 3510,797 1,96 16 140 35
77 3136,73 13138,16 78,87 4,93 1,41 0,40 0,11 3136,731 1,95 16 135 30
132 3074,09 13598,05 73,17 4,57 1,38 0,37 0,10 3074,089 1,96 16 140 40
159 2658,84 13777,31 68,47 4,28 1,35 0,35 0,10 2658,844 1,96 16 140 45
En la prueba 3, los resultados de la optimización forward coincidieron por completo con los resultados de la prueba №2, es decir, en la prueba №3, el parámetro de la optimización de los volúmenes negociados igual a "true" no introdujo ningunas correcciones. Eso se debe a que el Asesor Experto "MACD Sample balance regression.mq5" tradea con el lote constante.

El método de la optimización del gráfico del balance por el método de la regresión lineal resultó ser equiparables con el método estándar "Balance max + Sharp Ratio".

6.3. Asesor Experto "Moving Average balance regression.mq5", simulación forward

6.3.1. Prueba № 1: optimización del parámetro estándar "Balance + max Sharp Ratio". El Probador, pestaña Parámetros son iguales a la imagen 15. El Probador, pestaña Parámetros son iguales a la imagen 23.

En la nube, la prueba duró 1 minuto y 28 segundos, y fue realizada en MQL5 Cloud Europe 1. El coste de la prueba llegó a $0,05.

Resultados de la optimización:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
53 -1,29 -16,76 -0,03 0,99 -0,03 0,00 11966,34 5,92 525 4 16
52 -1,29 -16,76 -0,03 0,99 -0,03 0,00 11966,34 5,92 525 3 16
165 -6,17 -24,02 -0,05 0,99 -0,03 0,00 -37045,4 6,66 465 12 24
166 -26,36 -49,14 -0,11 0,99 -0,07 0,00 -38052,8 6,86 465 13 24
163 -39,47 -61,88 -0,13 0,98 -0,09 0,00 -39156,1 6,62 465 10 24


Fig. 30. EURUSDM15, Test1 Optimization pass 53

Fig. 30 EURUSDM15, Prueba 1, optimización, paso 53

Resultados de la prueba forward:

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
48 409,74 -460,18 185,78 1,06 1,16 0,80 0,04 42602,76 2,26 175 12 15
49 364,79 -461,14 165,23 0,94 1,14 0,67 0,04 38508,36 2,41 175 13 15
50 362,45 -460,40 164,15 0,94 1,14 0,66 0,04 38292,53 2,42 175 14 15
51 353,14 -467,05 159,83 0,91 1,13 0,65 0,03 37460,15 2,42 175 15 15
47 350,60 -629,53 144,32 0,82 1,13 0,65 0,03 32767,39 2,17 175 11 15


Fig. 31. EURUSDM15, Test1 Forward pass 48

Fig. 31 EURUSDM15, Prueba 1, Forward, paso 48

6.3.2. Prueba №2 : optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es false

Resultados de la optimización: 

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
53 11966,34 -16,76 -0,03 0,99 -0,03 0,00 11966,34 5,92 525 4 16
52 11966,34 -16,76 -0,03 0,99 -0,03 0,00 11966,34 5,92 525 3 16
54 2465,75 -103,27 -0,20 0,96 -0,14 -0,01 2465,748 7,19 525 5 16
57 813,83 -91,78 -0,17 0,97 -0,13 -0,01 813,831 6,75 525 8 16
56 813,83 -91,78 -0,17 0,97 -0,13 -0,01 813,831 6,75 525 7 16

Resultados de la prueba forward:

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
48 42602,76 -73708,28 185,78 1,06 1,16 0,80 0,04 42602,76 2,26 175 12 15
49 38508,36 -74600,92 165,23 0,94 1,14 0,67 0,04 38508,36 2,41 175 13 15
50 38292,53 -74386,41 164,15 0,94 1,14 0,66 0,04 38292,53 2,42 175 14 15
51 37460,15 -75315,40 159,83 0,91 1,13 0,65 0,03 37460,15 2,42 175 15 15
47 32767,39 -107616,36 144,32 0,82 1,13 0,65 0,03 32767,39 2,17 175 11 15
En la prueba №2, la optimización del gráfico del balance por el método de la regresión lineal encontró los mismos resultados que la prueba №1.

6.3.3. La Prueba №3 (optimización del parámetro de usuario "Custom max", el parámetro de la optimización de los volúmenes negociados es true) fue realizada en la nube. En la nube, la prueba duró 0 minuto y 42 segundos. La prueba fue realizada en MQL5 Cloud Europe 1. El coste de la prueba llegó a $0,04. 

Resultados de la optimización:

Pass Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
53 243,32 -16,76 -0,03 0,99 -0,03 0,00 243,3172 5,92 525 4 16
52 243,32 -16,76 -0,03 0,99 -0,03 0,00 243,3172 5,92 525 3 16
54 45,69 -103,27 -0,20 0,96 -0,14 -0,01 45,68738 7,19 525 5 16
57 13,40 -91,78 -0,17 0,97 -0,13 -0,01 13,40301 6,75 525 8 16
56 13,40 -91,78 -0,17 0,97 -0,13 -0,01 13,40301 6,75 525 7 16

Resultados de la prueba forward: 

Pass Forward Result Back Result Profit Expected Payoff Profit Factor Recovery Factor Sharpe Ratio Custom Equity DD % Trades DecreaseFactor MovingPeriod
48 1772,90 -997,81 185,78 1,06 1,16 0,80 0,04 1772,899 2,26 175 12 15
49 1591,91 -994,94 165,23 0,94 1,14 0,67 0,04 1591,912 2,41 175 13 15
50 1577,12 -987,34 164,15 0,94 1,14 0,66 0,04 1577,123 2,42 175 14 15
51 1537,14 -972,44 159,83 0,91 1,13 0,65 0,03 1537,142 2,42 175 15 15
47 1473,35 -1540,90 144,32 0,82 1,13 0,65 0,03 1473,354 2,17 175 11 15

En la prueba №3, la optimización del gráfico del balance por el método de la regresión lineal repitió completamente los resultados de la prueba №1. Es decir, la activación de la opción de la optimización de los volúmenes negociados "true" no influyó de ninguna manera en el resultado, aunque el EA "Moving Average balance regression.mq5" usaba el cálculo dinámico del lote en el trading.

El método de la optimización del gráfico del balance por el método de la regresión lineal resultó ser equiparables con el método estándar "Balance max + Sharp Ratio".


7. Conclusión

Los resultados de la optimización del gráfico del balance por el método de la regresión lineal fueron en el nivel del método de la optimización "Balance + max Sharp Ratio". Los EAs que tradean con el lote dinámico mostraron unos resultados interesantes: en algunas ocasiones, la configuración de la «normalización de los volúmenes negociados» en combinación con la simulación forward permite observar una imagen más real.

Deduzco que el método analizado tiene derecho a existir, e incluso se puede mejorarlo: por ejemplo, se puede empezar a tomar en cuenta la duración de las transacciones rentables y de pérdidas, y luego hacer experimentos con los resultados obtenidos.



Traducción del ruso hecha por MetaQuotes Software Corp.
Artículo original: https://www.mql5.com/ru/articles/3642

Archivos adjuntos |
MQL5.zip (11.35 KB)
Neuroredes profundas (Parte III). Selección de ejemplos y reducción de dimensiones Neuroredes profundas (Parte III). Selección de ejemplos y reducción de dimensiones

Este artículo continúa la serie de publicaciones sobre las neuroredes profundas. Vamos a analizar la selección de ejemplos (eliminación de ruidos), la reducción de los datos de entrada y la división del conjunto en train/val/test durante la preparación de los datos.

Búsqueda automática de divergencia y convergencia Búsqueda automática de divergencia y convergencia

En este artículo, se analizan diferentes tipos de divergencia: regular, oculta, ampliada, triple, cuádruple, convergencia, divergencia de las clases A, B y C. Se crea un indicador universal para buscar y visualizarlas en el gráfico.

Lógica difusa en las estrategias comerciales Lógica difusa en las estrategias comerciales

En este artículo, se analiza el ejemplo del uso de la lógica difusa (fuzzy logic) para la construcción de un sistema comercial simple con la aplicación de la librería Fuzzy. Han sido propuestas las opciones de la mejora del sistema mediante la combinación de la lógica difusa, algoritmos genéticos y redes neuronales.

Asesor Experto Multiplataforma: Stops Personalizados, Ausencia de Pérdidas y Trailing Asesor Experto Multiplataforma: Stops Personalizados, Ausencia de Pérdidas y Trailing

En el artículo se discute la colocación de niveles stop personalizados en el asesor multiplataforma. Asimiso, se describe un método estrechamente relacionado con ellos, que ayuda a definir los cambios de los niveles stop a lo largo del tiempo.