Pruebas de robustez en asesores expertos
Introducción
En el desarrollo de una estrategia hay muchos detalles complejos a tener en cuenta, muchos de los cuales no se destacan para los traders principiantes. Como resultado, muchos comerciantes, incluido yo mismo, hemos tenido que aprender estas lecciones a las duras penas. Este artículo se basa en mis observaciones de errores comunes que la mayoría de los traders principiantes encuentran al desarrollar estrategias en MQL5. Ofrecerá una variedad de consejos, trucos y ejemplos para ayudar a identificar la descalificación de un EA y probar la solidez de nuestros propios EA de una manera fácil de implementar. El objetivo es educar a los lectores, ayudándolos a evitar futuras estafas al comprar EA, así como a prevenir errores en el desarrollo de su propia estrategia.
Señales de alerta en el mercado de los asesores técnicos
Una mirada rápida al mercado MQL5 revela que está dominado por vendedores que promocionan sistemas de comercio de IA utilizando modelos de lenguaje grandes y populares como ChatGPT o Gemini AI. Creo firmemente que ninguna de estas afirmaciones es genuina por una sencilla razón: es imposible utilizar LLM comerciales para realizar pruebas retrospectivas sin introducir un sesgo de anticipación. Además, la integración de LLM populares con MQL5 utiliza la función de solicitud web. Por lo tanto, si un vendedor no especifica que el EA requiere Internet o indicaciones, es poco probable que sea legítimo. Un enfoque más sólido para incorporar LLMs en el trading implicaría realizar pruebas en vivo o desarrollar modelos primitivos como BERT. Un artículo reciente ejemplifica este enfoque.
Sin embargo, hay algo que aclarar aquí. La IA no sólo significa grandes modelos de lenguaje, aunque la mayoría de la gente asume que es así. La mayoría de las técnicas avanzadas de aprendizaje automático, incluido el aprendizaje no supervisado, el aprendizaje supervisado y el aprendizaje de refuerzo, pueden clasificarse como que utilizan IA para sus EA. Por lo tanto, no se trata de marketing falso si un vendedor afirma vender un EA de IA cuando en realidad utiliza algunos modelos de redes neuronales. Lamentablemente, la mayoría de los EA de IA ni siquiera utilizan modelos de redes neuronales básicos, a pesar de afirmar que lo hacen. Una forma de verificar esto es verificar si proporcionan un archivo ONNX adicional. Si el producto consta únicamente de un archivo ejecutable, deben tener codificados todos los parámetros del modelo en el EA, lo que generalmente da como resultado un tamaño de archivo de más de un megabyte.
Algunas otras señales de alerta en el mercado de EA incluyen:
- Stop loss muy grandes en comparación con take profit. A menudo, utilizan indicadores para filtrar las operaciones perdedoras en las pruebas retrospectivas, lo que hace que las pérdidas sean poco frecuentes y crea la ilusión de una alta tasa de ganancias. En realidad, una sola pérdida puede arruinar numerosas operaciones rentables.
- Los vendedores solo invierten una pequeña cantidad en su señal, como $10-$100, mientras que venden el EA por $1,000 o más. Esto sugiere que anticipan que la cuenta eventualmente explotará y están tratando de sacar provecho de los altos porcentajes de ganancias de una cuenta pequeña.
- La cuenta es nueva, con solo unas pocas operaciones, lo que genera una tasa de ganancia del 100% en la señal.
- Uso de sistemas Martingala, de cobertura, de promedio de costo en dólares o de cuadrícula. Estas estrategias aumentan el riesgo al multiplicar las posiciones después de una pérdida o agregar más operaciones en la misma dirección durante una caída. Estos enfoques clásicos se remontan al siglo XX y es poco probable que sean estrategias del "santo grial oculto" porque sus rendimientos esperados son menores o iguales a cero.
He aquí una breve prueba matemática:

Si sus estrategias principales no tienen una ventaja clara aún (p significativamente mayor que 0,5), la expectativa de retorno es menor o igual a cero, lo que significa que estará perdiendo a largo plazo y la pérdida simplemente aún no se ha materializado. Incluso si se construye un sistema martingala o de cuadrícula sobre una entrada rentable, en última instancia todavía está arriesgando todo el saldo de su cartera en cada operación, no una fracción como la mayoría de los enfoques de gestión de riesgos. Si no está seguro de poder seguir depositando más dinero cuando la cuenta sufre una gran reducción, le aconsejo que no los utilice.
Una cosa a aclarar es que esta sección tiene como objetivo crear conciencia sobre las técnicas de marketing falsas comunes que prevalecen en el mercado MQL5 actual, y no es una protesta contra la venta o compra de EA en MQL5. De hecho, animo a más personas a vender EA en MQL5, basándose en un marketing confiable y en EA realmente sólidos, para ayudar a que sea un entorno más creíble.
Sobreajuste
El sobreajuste es un problema común en los modelos comerciales, donde una estrategia puede funcionar bien con datos históricos pero no puede generalizarse a datos nuevos e invisibles. En este experimento, usaremos un código de Python para demostrar cómo puede ocurrir un sobreajuste debido a la selección de parámetros en un modelo comercial. En concreto, generaremos escenarios comerciales aleatorios con múltiples características, visualizaremos el impacto del filtrado selectivo y observaremos cómo varía el rendimiento cuando los parámetros están demasiado optimizados para un subconjunto específico de los datos.
Comenzamos simulando un conjunto de datos de 1000 muestras comerciales aleatorias, donde cada muestra corresponde a una decisión comercial con tres características:
- Característica 1: Esto podría representar varias condiciones de mercado, como 'a', 'b' o 'c'.
- Característica 2: Representa otro factor como 'd', 'e' o 'f', como la volatilidad o el sentimiento de los activos.
- Característica 3: Esto podría representar otros indicadores comerciales, con valores como 'g', 'h' o 'i'.
import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt # Step 1: Generate random samples np.random.seed(42) # For reproducibility # Possible feature values feature_1_values = ['a', 'b', 'c'] feature_2_values = ['d', 'e', 'f'] feature_3_values = ['g', 'h', 'i'] # Generate random data n_samples = 1000 feature_1 = np.random.choice(feature_1_values, n_samples) feature_2 = np.random.choice(feature_2_values, n_samples) feature_3 = np.random.choice(feature_3_values, n_samples) outcome = np.random.choice([0, 1], n_samples) # Random binary outcome # Create a DataFrame df = pd.DataFrame({ 'feature_1': feature_1, 'feature_2': feature_2, 'feature_3': feature_3, 'outcome': outcome })
Cada una de estas muestras tendrá un resultado asociado (una victoria o una derrota), asignado aleatoriamente como 0 o 1. Estos resultados representan el resultado de un comercio hipotético basado en las características dadas, lo que denota diferentes valores de parámetros.
En el trading en el mundo real, seleccionar los parámetros correctos (como indicadores de mercado, ventanas de tiempo de trading o umbrales para señales de compra/venta) es crucial para el rendimiento del modelo. Sin embargo, el sobreajuste ocurre cuando el modelo está excesivamente ajustado para ajustarse a patrones específicos en datos históricos que no se generalizan bien a datos nuevos.
Para demostrar esto, primero solo consideramos muestras donde la característica 1 = 'b', la característica 2 = 'd' y la característica 3 = 'g'.
def plot_filtered_distribution(df, feature_filters): # Filter the DataFrame based on the specified feature values filtered_df = df for feature, value in feature_filters.items(): filtered_df = filtered_df[filtered_df[feature] == value] # Check if filtered dataframe is empty if filtered_df.empty: print("No data available for the selected feature combination.") return # Plot the distribution of outcomes based on the filtered data sns.countplot(x='outcome', data=filtered_df, palette='Set2') plt.title(f'Distribution of Outcomes (filtered by {", ".join([f"{key}={value}" for key, value in feature_filters.items()])})') plt.show() # Example usage: Visualize the distribution of outcomes when filtering by feature_1 = 'a', feature_2 = 'd', feature_3 = 'g' plot_filtered_distribution(df, {'feature_1': 'b', 'feature_2': 'd', 'feature_3': 'g'})

Luego graficamos la distribución de resultados considerando muestras donde la característica 1 = 'c', la característica 2 = 'f' y la característica 3 = 'h'.

Podemos ver claramente que con solo cambiar tres parámetros en estos datos generados aleatoriamente, podemos seleccionar un conjunto que está dominado principalmente por derrotas o por victorias. Esto demuestra el poder del sobreajuste. Al centrarnos en un subconjunto específico de características, forzamos al modelo a ajustarse a una porción estrecha de los datos, lo que puede llevar a conclusiones engañosas. Cuanto más selectivamente filtremos los datos en función de las características, más probable será que observemos un rendimiento artificialmente alto (en términos de resultados), lo que es un sello distintivo del sobreajuste. Cualquier estrategia arbitraria, con suficientes parámetros para sobreajustarse, inevitablemente podrá producir resultados rentables.
Esta es una advertencia importante para los traders que confían en estrategias finamente ajustadas basadas en conjuntos de parámetros específicos, ya que es posible que no se generalicen bien a las condiciones futuras del mercado. La conclusión clave es que la robustez del modelo (donde el rendimiento es consistente en una amplia gama de datos) es mucho más valiosa que la optimización para rangos estrechos de parámetros.
Optimización en el terminal MetaTrader 5
Cuando intentamos seleccionar los valores óptimos para el rendimiento de un EA específico durante un período determinado, estamos realizando una optimización. Como se demostró en la sección anterior, es fácil sobreajustar una muestra pequeña de datos aleatorios realizando pequeños ajustes en algunos parámetros. Esto plantea la pregunta: ¿cómo podemos evitar este error en la optimización y hacer que los resultados de nuestras pruebas retrospectivas sean más creíbles? En esta sección se explorarán varias formas de minimizar el riesgo de sobreajuste y garantizar resultados más sólidos al realizar la optimización en la terminal MetaTrader 5.
1. Más muestras durante un período más largo
De acuerdo con la ley de los grandes números, suponiendo que los rendimientos de su estrategia siguen alguna forma de distribución, el rendimiento medio de sus muestras se aproximará a la media de esa distribución a medida que aumenta el número de muestras. Para las estrategias que no son de tan alta frecuencia como el day trading o el scalping, se recomienda probarlas con datos que abarquen al menos 10 años e incluyan miles de operaciones. Si su estrategia es sensible a los cambios en el régimen macroeconómico, es aceptable realizar pruebas sólo en los años recientes. Sin embargo, en última instancia, se necesitan suficientes muestras para validar la estrategia, ya que no existe una regla universal sobre cuántas muestras son suficientes. El objetivo es demostrar que existe un patrón histórico repetitivo que puede explotarse en los mercados financieros.
Si su EA opera en un marco temporal más alto, puede probarlo en múltiples activos para recopilar más muestras, transformándolo potencialmente en una estrategia de múltiples activos. Este enfoque reduce significativamente la probabilidad de sobreajuste, ya que el desempeño de la estrategia se probará en una gama más amplia de condiciones de mercado y comportamientos de activos. Al diversificar los activos evaluados, aumenta la solidez de su estrategia y mejora su capacidad para adaptarse a diferentes entornos de mercado.
2. Menos parámetros ajustables
Como se muestra en el experimento anterior, cuantos más parámetros tenga, más formas tendrá el proceso de optimización para filtrar grupos de muestras ganadoras. Un parámetro que se genera aleatoriamente al principio se puede filtrar fácilmente en un grupo de resultados exitosos, pero esto no prueba necesariamente la validez de todo el conjunto de muestras. David Aronson, en Evidence-Based Technical Analysis, investigaron el uso de técnicas de minería de datos y concluyeron que es poco probable que exista una estrategia de parámetro único ajustable, aunque sería menos propensa al sobreajuste. El enfoque recomendado es mantener el número de parámetros ajustables a menos de cinco. Los parámetros que no afectan los resultados, como los números mágicos, no deben considerarse ajustables. Parámetros como el período retrospectivo de los indicadores se pueden fijar en valores ampliamente aceptados y, en tales casos, no se los debería contar como parámetros ajustables durante la optimización.
3. Tenga en cuenta las comisiones, los diferenciales y los swaps en sus pruebas retrospectivas y su optimización
Al utilizar el probador de estrategias, asegúrese de hacer clic en el símbolo de dinero y verificar si las comisiones, los diferenciales y los swaps están configurados para reflejar las condiciones de su entorno comercial en vivo.


Muchos traders creen erróneamente que si su estrategia les genera pérdidas constantes, significa que están haciendo lo opuesto de lo que haría una estrategia ganadora. Pueden pensar que con simplemente cambiar la dirección de sus operaciones, ganarán consistentemente. Sin embargo, esto está muy lejos de la verdad. El trading es un juego de suma negativa para los traders minoristas. Es más probable que un trader que pierde constantemente tenga una estrategia que ya no tiene ventaja y sus resultados siguen una distribución aleatoria de ganancias y pérdidas. En tales casos, las pérdidas a menudo se deben a los diferenciales, comisiones y tarifas de swap que se pagan en cada operación.
Es mucho menos probable que puedas desarrollar una estrategia que produzca consistentemente las señales opuestas de una estrategia rentable, en comparación con crear una estrategia rentable tú mismo. En el último caso, estás trabajando activamente para que la estrategia gane, mientras que en el primero, no.
Es por esto que no recomiendo que los traders principiantes prueben estrategias de scalping: la desventaja estadística relativa es simplemente demasiado grande. Consideremos un ejemplo: si está negociando EUR/USD, las condiciones típicas para un bróker de libro b son ninguna comisión pero un spread de 1 pip, y para un bróker de libro a ECN, las condiciones son una comisión de $7 por lote con un spread de 0,1 pip. Si intentas hacer scalping con una toma de ganancias de solo 10 pips, en cualquier caso, estás pagando efectivamente alrededor de un 10 % de comisión en cada operación, ya sea que ganes o pierdas. Esto es particularmente problemático para los traders de alta frecuencia, ya que esos costos erosionarán gradualmente las ganancias con el tiempo.
Ahora, supongamos que tienes una estrategia sólida con una tasa de éxito del 55% y una relación riesgo-recompensa de 1:1. Sin tener en cuenta los diferenciales ni las comisiones, su curva de capital luciría bastante bien incluso para un estándar profesional:

Pero si se tiene en cuenta ese costo del 10% de las comisiones, los diferenciales y los swaps debido a su intento de scalping en pequeñas operaciones, lo que aumenta efectivamente el costo relativo de cada operación, su curva de capital se volvería apenas rentable, como se muestra a continuación:

Código de simulación en Python:
import numpy as np import matplotlib.pyplot as plt import pandas as pd # Parameters n_trades = 1000 # Number of trades win_rate = 0.55 # 55% win rate commission_rate = 0.1 # 10% commission per trade initial_balance = 10000 # Starting balance trade_amount = 100 # Amount per trade # Simulate the trades np.random.seed(42) # For reproducibility # Generate random outcomes (1 for win, 0 for loss) outcomes = np.random.choice([1, 0], size=n_trades, p=[win_rate, 1 - win_rate]) # Initialize balance and equity curve balance = initial_balance equity_curve = [balance] # Simulate each trade for outcome in outcomes: # Calculate the result of the trade if outcome == 1: # Win: add profit (trade_amount) and subtract commission balance += trade_amount - (trade_amount * commission_rate) else: # Loss: subtract loss (trade_amount) and subtract commission balance -= trade_amount + (trade_amount * commission_rate) # Append the updated balance to the equity curve equity_curve.append(balance) # Plot the equity curve plt.figure(figsize=(7, 4)) plt.plot(equity_curve) plt.title('Equity Curve with 10% Commission on Each Trade') plt.xlabel('Number of Trades') plt.ylabel('Balance') plt.grid(True) plt.show()
4. Tome pasos más grandes en el proceso de optimización y tenga en cuenta la sensibilidad de los parámetros
En la terminal de optimización de MetaTrader 5, puede ajustar el tamaño del paso para cada prueba de parámetro. Se recomienda utilizar pasos más grandes que el valor habitual del parámetro. Centrarse en valores muy específicos puede conducir fácilmente a un sobreajuste y a una mayor sensibilidad a los cambios de régimen. Por ejemplo, el año pasado, una estrategia de reversión a la media podría haber funcionado mejor con un período de retrospección del RSI de 11, pero este año podría ser 13. Si nos centramos en valores pequeños e incrementales, podemos perder los patrones de rendimiento más amplios en relación con los parámetros y perder tiempo en una optimización ineficiente.

Personalmente, prefiero utilizar el factor de beneficio como métrica para indicar el rendimiento, ya que es una relación en lugar de un número absoluto como el rendimiento total.
Factor de beneficio = Beneficio bruto / Pérdida bruta.
La sensibilidad de los parámetros también es crucial. Queremos asegurarnos de que nuestros ensayos cubran una amplia gama de valores posibles para cada parámetro. Idealmente, el área alrededor del mejor valor debería mostrar una distribución cóncava, donde el rendimiento disminuye gradualmente a un ritmo constante a medida que el valor del parámetro se desvía de la configuración óptima. Esto garantiza que la estrategia mantenga su ventaja a pesar de las variaciones en los valores de los parámetros y que los mejores parámetros de rendimiento representen la configuración óptima para la estrategia.

Pruebas fuera de muestra
Ya sea que esté optimizando parámetros o probando el EA en diferentes marcos temporales y símbolos, es mejor excluir los datos recientes de sus pruebas. Estos puntos de datos deben estar fuera de su dominio de conocimiento antes de realizar cualquier cambio en su EA original. Este enfoque se conoce como prueba dentro de la muestra/fuera de la muestra.
El objetivo de este método de prueba es evitar el sesgo de anticipación, donde los cambios en su EA se basan en características conocidas del comportamiento reciente del mercado. También ayuda a reducir el riesgo de sobreajuste durante la optimización.
Para implementar esto, primero decida el tamaño total de la muestra que planea probar. Según la cantidad de pruebas de muestra, puede elegir una relación dentro de la muestra y fuera de la muestra, como 7:3, 8:2 o 9:1. Luego, realiza todas las observaciones, suposiciones y cambios en los valores de los parámetros y las reglas de señal utilizando los datos de la muestra. Luego, aplique el EA final para realizar pruebas retrospectivas en los datos fuera de la muestra para verificar si sus suposiciones se mantienen consistentemente. Si un EA que fue optimizado para producir resultados excelentes en la prueba en la muestra se vuelve apenas rentable o incluso pierde en la prueba fuera de la muestra, esto podría sugerir una erosión del borde debido a cambios de régimen recientes o un sobreajuste durante la optimización en la muestra.
Al evaluar si la consistencia de un EA se mantiene a través de pruebas dentro y fuera de la muestra, hay varias métricas clave a tener en cuenta.
En primer lugar, debe crear una versión de su EA sin el efecto de apalancamiento compuesto, ya que esto podría distorsionar los resultados y otorgarle una importancia indebida a la cola del conjunto de muestra.
Estas son las principales métricas a tener en cuenta:
-
Factor de beneficio:El factor de beneficio debe ser mayor que 1, con un rango razonable entre 1,2 y 1,5. Un factor de beneficio inferior a 1,2 puede indicar que la estrategia no es lo suficientemente rentable, mientras que un valor superior a 1,5 podría sugerir que el tamaño de la muestra es demasiado pequeño o que no se tuvieron en cuenta los costes de negociación. Si bien esto no significa necesariamente que su estrategia sea fraudulenta, debe tener cuidado si los resultados parecen poco realistas.
-
Máxima reducción de capital:Concéntrese en la caída máxima del capital en lugar de en la caída absoluta, ya que refleja el riesgo potencial y no el riesgo que ya se ha producido. La reducción máxima del capital debe ser al menos un 10 % inferior a su tolerancia máxima personal de reducción. Si es demasiado bajo, puede considerar aumentar el riesgo de su EA y, si es demasiado alto, es posible que deba reevaluar el perfil de riesgo de su estrategia.
-
Correlación LRLa correlación de regresión lineal (LR) mide la consistencia de su curva de capital. Una correlación mayor a 0,9 indica que los rendimientos fueron relativamente consistentes durante todo el período de prueba. Esto ayuda a garantizar que la estrategia no tenga grandes fluctuaciones y que el rendimiento sea constante.
-
Tasa de ganancias y volumen de operaciones para posiciones largas y cortas:Si su EA negocia posiciones largas y cortas, asegúrese de que sus tasas de ganancia y volúmenes de negociación sean razonablemente similares. Una discrepancia significativa entre ambos podría indicar un desequilibrio en la estrategia que tal vez sea necesario abordar.
Si bien otras métricas también son importantes, estos tres son los factores principales a tener en cuenta al evaluar la confiabilidad de su EA durante las pruebas dentro y fuera de la muestra.

Algunos traders tradicionales prefieren el análisis de avance, donde la prueba dentro de la muestra/fuera de la muestra se realiza pieza por pieza, "avanzando" hasta el momento actual. Sin embargo, creo que esto a menudo es innecesario, especialmente si ya nos hemos asegurado de que nuestros parámetros sean pocos en número y no estén sobreajustados a valores demasiado específicos. En tales casos, es muy probable que estos valores de parámetros óptimos se mantengan constantes a lo largo del tiempo. Además, ya hemos enfatizado que la clave de la ventaja de una estrategia reside en sus reglas de señal, no en los valores de sus parámetros. Por lo tanto, una única prueba dentro y fuera de la muestra suele ser suficiente para validar los resultados.
Dicho esto, para las estrategias basadas en aprendizaje automático, la situación es diferente. La ventaja de estas estrategias a menudo proviene de los parámetros del modelo de aprendizaje automático subyacente, que pueden variar significativamente dependiendo del período de tiempo de los datos de entrenamiento. En este caso, el análisis de avance se vuelve necesario para tener en cuenta cómo el rendimiento del modelo podría cambiar con diferentes conjuntos de datos a lo largo del tiempo. He proporcionado una explicación detallada de cómo implementar el análisis de avance en este artículo. En última instancia, la conclusión clave es que el EA debe seguir siendo algo rentable en los últimos tiempos para confirmar su viabilidad continua.
Pruebas de valores atípicos
Las pruebas de valores atípicos garantizan que sus ganancias no estén impulsadas por unas pocas operaciones atípicas que representan la mayor parte de las ganancias, sino que surjan de ganancias y pérdidas consistentes y equilibradas. Esto es importante porque si las ganancias se deben principalmente a unos pocos valores atípicos, se socava el valor de tener más muestras para aproximarse al rendimiento medio. Para comprobarlo, simplemente examine su curva de capital de backtesting y asegúrese de que su movimiento ascendente no sea causado por unos pocos picos grandes sino más bien por un crecimiento constante y sostenido. Además, puedes confirmarlo comparando la ganancia más grande con la ganancia promedio en el informe de backtest.
También queremos asegurarnos de que las ganancias no se concentren principalmente en un corto período de tiempo, ya que esto podría indicar un sesgo de régimen temporal. Para comprobarlo, examinamos la distribución de los rendimientos mensuales para garantizar la consistencia. Primero, obtenga el informe de backtest haciendo clic derecho en el informe y guardándolo.

Luego, abra el archivo y anote el número de fila "Deals" (en este ejemplo, es 9342).

import pandas as pd import matplotlib.pyplot as plt # Replace 'your_file.xlsx' with the path to your file input_file = 'your_backtest.xlsx' # Load the Excel file and skip the first {skiprows} rows, skiprows = the row of "DEAL" data = pd.read_excel(input_file, skiprows=9342) # Select the 'profit' column (assumed to be 'Unnamed: 10') and filter rows as per your instructions profit_data = data[['Time','Symbol','Profit','Balance']][1:-1] profit_data = profit_data[profit_data.index % 2 == 0] # Filter for rows with odd indices profit_data = profit_data.reset_index(drop=True) # Reset index # Convert to float, then apply the condition to set values to 1 if > 0, otherwise to 0 profit_data[['Profit','Balance']] = profit_data[['Profit','Balance']].apply(pd.to_numeric, errors='coerce').fillna(0) # Convert to float, replacing NaN with 0 # Load the data data = profit_data # Calculate percentage gain compared to the previous balance data['percentage_gain'] = data['Profit'] / data['Balance'].shift(1) * 100 # Drop the first row because it doesn't have a previous balance to compare data = data.dropna() # Ensure 'time' is in datetime format data['Time'] = pd.to_datetime(data['Time']) # Extract the year and month from the 'time' column data['year'] = data['Time'].dt.year data['month'] = data['Time'].dt.month_name() # Ensure months are ordered correctly (January to December) month_order = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] data['month'] = pd.Categorical(data['month'], categories=month_order, ordered=True) # Calculate the total return for each year-month combination monthly_return = data.groupby(['year', 'month'])['percentage_gain'].sum().unstack(fill_value=0) # Function to apply color formatting based on return value def colorize(val): color = 'green' if val > 0 else 'red' return f'background-color: {color}' # Display the table with color coding styled_table = monthly_return.style.applymap(colorize, subset=pd.IndexSlice[:, :]) # Show the table styled_table

Los meses de caída son casi inevitables en las pruebas retrospectivas de largo plazo, pero aquí debemos centrarnos en el porcentaje de retorno y confirmar que ninguna de las caídas sea significativamente mayor que el retorno medio de todo el conjunto de muestra.
Por último, si su EA negocia múltiples activos, debemos asegurarnos de que ningún activo sea responsable de la mayoría de las ganancias, mientras que otros contribuyan poco. Para ello, podemos ampliar nuestro código Python original agregando líneas para generar un gráfico circular que muestre la distribución del rendimiento entre diferentes activos.
import seaborn as sns # Group by symbol and calculate the total profit/loss for each symbol symbol_return = data.groupby('Symbol')['percentage_gain'].sum() # Plot the pie chart plt.figure(figsize=(7, 3)) plt.pie(symbol_return, labels=symbol_return.index, autopct='%1.1f%%', startangle=90, colors=sns.color_palette("Set2", len(symbol_return))) # Title and display plt.title('Total Return by Symbol') plt.show()

Simplemente necesitamos asegurarnos de que ningún activo domine el gráfico circular.
Sugerencias avanzadas
Aquí enumero cuatro pruebas de robustez más avanzadas que pueden requerir más experiencia y tiempo.
1. Prueba de trading en vivo:
Implemente la estrategia en un entorno comercial real o en papel con tamaños de posición pequeños y monitoree su desempeño a lo largo del tiempo en condiciones reales del mercado. Las pruebas de trading en vivo prueban la capacidad de la estrategia para manejar dinámicas reales del mercado, incluidos deslizamientos, diferenciales y demoras en la ejecución.
Ayuda a evaluar si la estrategia puede funcionar como se espera en condiciones comerciales reales y bajo presión emocional, más allá de las pruebas retrospectivas o las simulaciones.
2. Simulación de Monte Carlo:
Ejecute una simulación de Monte Carlo barajando aleatoriamente el orden de los resultados comerciales (ganancias y pérdidas) y generando una gran cantidad de posibles curvas de equidad. Esto también puede incluir ajustes aleatorios en parámetros como puntos de entrada o stop loss.
Las simulaciones de Monte Carlo ayudan a evaluar la solidez de una estrategia ante condiciones aleatorias del mercado, ofreciendo información sobre los peores escenarios potenciales y garantizando que la estrategia no esté sobreoptimizada en función de datos pasados.
3. Análisis de riesgo de ruina y reducción de pérdidas:
Analice el drawdown máximo de la estrategia, que es la mayor pérdida de pico a valle en el patrimonio, y calcule el riesgo de ruina, o la probabilidad de que el saldo de la cuenta se reduzca a cero dado el perfil de riesgo/recompensa actual.
Estas métricas proporcionan una comprensión más profunda del perfil de riesgo de la estrategia, ayudando a evaluar si la reducción máxima es aceptable y la probabilidad de agotar la cuenta en condiciones de mercado específicas. Este análisis es crucial para la supervivencia a largo plazo.
4. Simulación de deslizamiento y ejecución:
Simular deslizamientos y retrasos en la ejecución en el mundo real introduciendo variaciones aleatorias entre los puntos de entrada/salida esperados y la ejecución real del mercado. Puede modelar el deslizamiento en función de factores como la volatilidad del mercado, el tamaño de las operaciones y la liquidez. El probador de estrategias de MetaTrader 5 tiene una prueba de estrés que podría ser útil en este caso.
La ejecución es un factor clave que afecta la rentabilidad en el mundo real. Esta prueba ayuda a evaluar qué tan sensible es la estrategia al deslizamiento y si aún puede seguir siendo rentable en condiciones de ejecución menos que ideales. El deslizamiento sería crucial sobre todo en estrategias que solo operan en períodos de alta volatilidad, como las estrategias basadas en eventos noticiosos. Aparte de eso, propongo que la mayoría de los traders minoristas no necesitan centrarse en esto porque el deslizamiento se produce en ambos sentidos. En la mayoría de los casos, el deslizamiento positivo y negativo se cancelan entre sí, lo que hace que el impacto sea relativamente pequeño en comparación con otros costos comerciales.
Conclusión
En este artículo, demostré cómo probar rigurosamente la solidez de su asesor experto, o de cualquier asesor experto que le hayan vendido. En primer lugar, concienticé sobre las posibles tácticas de marketing que los vendedores pueden usar para manipular datos de manera fraudulenta en el mercado MQL5 y expliqué por qué estas tácticas son ineficaces. A continuación, introduje el concepto de sobreajuste a través de un experimento en Python. Luego describí las consideraciones clave al realizar pruebas retrospectivas y optimización en MetaTrader 5, explicando la motivación detrás de cada consejo. A continuación, hablé sobre las pruebas fuera de muestra y proporcioné detalles sobre cómo evaluar varias métricas de informes. También cubrí tres tipos de pruebas de valores atípicos (valores atípicos comerciales, de tiempo y de símbolos) y proporcioné instrucciones claras sobre cómo probar cada uno de ellos. Finalmente, concluí el artículo con sugerencias adicionales para pruebas de robustez más avanzadas.
Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/16957
Advertencia: todos los derechos de estos materiales pertenecen a MetaQuotes Ltd. Queda totalmente prohibido el copiado total o parcial.
Este artículo ha sido escrito por un usuario del sitio web y refleja su punto de vista personal. MetaQuotes Ltd. no se responsabiliza de la exactitud de la información ofrecida, ni de las posibles consecuencias del uso de las soluciones, estrategias o recomendaciones descritas.
Introducción a MQL5 (Parte 12): Guía para principiantes sobre cómo crear indicadores personalizados
Dominando los registros (Parte 5): Optimizar el controlador con caché y rotación
Desarrollo de un kit de herramientas para el análisis de la acción del precio (Parte 12): Flujo externo (III) TrendMap
Creación de un Panel de administración de operaciones en MQL5 (Parte IX): Organización del código (I)
- 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
Una discrepancia significativa entre los dos podría indicar un desequilibrio en la estrategia que puede necesitar ser abordado.
¿Es esto cierto para una dirección de tendencia sesgada ( la tendencia de compra domina un período más largo que la tendencia de venta. ¿Debería el EA tener tasas de ganancias y volúmenes de operaciones similares?
Gracias por los comentarios.
Depende de cuánto beta está involucrado en la estrategia. Si una estrategia de un solo activo opera en un marco de tiempo más alto y un período de tenencia más alto, es probable que el resultado de la estrategia tenga algún sesgo siguiendo la tendencia macro. Es por eso que aconsejo a la gente a negociar estrategias que negocian gran cantidad (volumen) por el comercio de mayor frecuencia o la diversificación de una estrategia en múltiples activos no correlacionados. Si el mérito de una estrategia no implica suposiciones del sesgo de la tendencia, teniendo reglas simétricas tanto para la compra como para la venta, entonces se debería esperar que tenga una cantidad de operaciones y una tasa de ganancias similares en un tamaño de muestra grande.
Por supuesto, las estrategias pueden tener supuestos de sesgo de la tendencia, como algunas estrategias de sólo largo plazo para índices. Para este tipo de estrategia, los operadores sólo deben operar en un lado porque sus suposiciones ya eran que la otra dirección no funcionaría tan bien como esta dirección. Sólo asegúrese de no utilizar demasiados supuestos de sesgo y debería estar bien.
Gracias Zhuo por tomarse el tiempo con esto, me abrió los ojos a la utilización de Python para analizar los resultados, principal reto para mí es que era el ea o la tendencia responsable de los resultados :) Probablemente debería incluir una métrica de probabilidad.
Considere la posibilidad de hacer una comprobación mensual de la correlación de retorno entre el mercado negociado y el resultado de su backtest. Si la correlación es alta como por encima de 0,2, entonces puede sugerir que la tendencia del mercado es responsable de una gran parte de su resultado backtest, que no es deseable.
¿Existe una versión en chino?
Si la tiene, envíe también una versión en chino.
Si no, ¿necesita una traducción al chino del grupo de documentación de MQL5?
¿Existe una versión china?
Si la tiene, envíe también una versión en chino.
Si no, ¿necesita una traducción al chino del grupo de documentación de MQL5?
Hola, todas las traducciones las hace MQL5 automáticamente. La versión china suele salir unos meses después del envío, aunque la fecha exacta de publicación no está clara.