Optimizamos la estrategia usando el gráfico del balance y comparamos los resultados con el criterio "Balance + max Sharpe Ratio"
Contenido
- 1. Introducción
- 2. ¿Cómo calcular la línea de tendencia para el gráfico del balance?
- 2.1. Algoritmo del cálculo del criterio de optimización
- 2.2. Introducimos la primera variable TrendProfit
- 2.3. Variable ProfitStability
- 3. Trabajamos con la librería ALGLIB
- 4. Conexión de la clase CBalanceRegression
- 4.1. Asesor Experto generado por el Asistente MQL5
- 4.2. Asesores Expertos a base de MACD Sample y Moving Average estándar
- 5. Optimización en EURUSD, H4, sin la prueba forward
- 5.1. EA test balance regression.mq5, EURUSD, H4, sin la prueba forward
- 5.1.1 Prueba #1
- 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
- 5.1.3. Prueba #2
- 5.1.4. Prueba #3
- 5.2. Moving Average balance regression.mq5, EURUSD, H4, sin la simulación forward
- 5.3. MACD Sample balance regression.mq5, EURUSD, H4, sin la simulación forward
- 6. Optimización en EURUSD, M15, sin la simulación forward
- 6.1. Asesor Experto "EA test balance regression.mq5", prueba forward
- 6.2. Asesor Experto "MACD Sample balance regression.mq5", sin la simulación forward
- 6.3. Asesor Experto "Moving Average balance regression.mq5", sin la simulación forward
- 7. Conclusión
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. 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. 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
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. 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 TrendProfit y LR Standard error:
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. 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.
- Establecemos el balance inicial (llamamos al método SetStartBalance).
- Establecemos la fecha inicial para solicitar el historial de trading (llamamos al método SetFromDate).
- 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.
- 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.mq5 | Moving 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. 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. 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:
- 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;
- 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. 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 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. 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. 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, Тест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 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 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. 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, 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, 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 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, 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 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 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, 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, 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, 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, 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, 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, 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, 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, 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 |
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, 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, 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 |
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 Ltd.
Artículo original: https://www.mql5.com/ru/articles/3642
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso