Testes de Robustez em Expert Advisors
Introdução
No desenvolvimento de estratégias, há muitos detalhes complexos a serem considerados, muitos dos quais não são destacados para traders iniciantes. Como resultado, muitos traders, eu incluído, tiveram de aprender essas lições da maneira mais difícil. Este artigo é baseado em minhas observações sobre armadilhas comuns que a maioria dos traders iniciantes encontra ao desenvolver estratégias em MQL5. Ele oferecerá uma variedade de dicas, truques e exemplos para ajudar a identificar a desqualificação de um EA e testar a robustez dos nossos próprios EAs de uma forma fácil de implementar. O objetivo é educar os leitores, ajudando-os a evitar futuros golpes ao comprar EAs, bem como a prevenir erros no desenvolvimento de suas próprias estratégias.
Sinais de Alerta no Mercado de EAs
Uma rápida olhada no mercado MQL5 revela que ele é dominado por vendedores promovendo sistemas de trading com IA usando modelos populares de linguagem de grande porte, como ChatGPT ou Gemini AI. Acredito firmemente que nenhuma dessas alegações é genuína por um motivo simples: é impossível usar LLMs comerciais para backtesting sem introduzir viés de antecipação (look-ahead bias). Além disso, a integração de LLMs populares com MQL5 utiliza a função de requisição web. Portanto, se um vendedor não especifica que o EA requer internet ou prompting, é improvável que seja legítimo. Uma abordagem mais robusta para incorporar LLMs no trading envolveria testes ao vivo ou a construção sobre modelos primitivos como o BERT. Um artigo recente exemplifica essa abordagem.
No entanto, há algo que precisa ser esclarecido aqui. IA não significa apenas modelos de linguagem de grande porte, embora a maioria das pessoas assuma que seja. A maioria das técnicas avançadas de machine learning, incluindo aprendizado não supervisionado, aprendizado supervisionado e aprendizado por reforço, pode ser classificada como uso de IA em seus EAs. Portanto, não é marketing falso se um vendedor afirma vender um EA de IA quando está utilizando algum modelo de rede neural. Infelizmente, a maioria dos EAs de IA nem sequer utiliza modelos básicos de redes neurais, apesar de afirmar fazê-lo. Uma forma de verificar isso é checando se eles fornecem um arquivo ONNX adicional. Se o produto consiste apenas em um arquivo executável, eles devem ter codificado todos os parâmetros do modelo diretamente no EA, o que geralmente resulta em um tamanho de arquivo superior a um megabyte.
Alguns outros sinais de alerta no mercado de EAs incluem:
- Stop losses muito grandes em comparação com os take profits. Frequentemente, eles usam indicadores para filtrar operações perdedoras no backtest, tornando as perdas raras e criando a ilusão de uma alta taxa de acerto. Na realidade, uma única perda pode eliminar inúmeras operações lucrativas.
- Os vendedores investem apenas uma pequena quantia em seu sinal, como US$10–US$100, enquanto vendem o EA por US$1.000 ou mais. Isso sugere que eles antecipam que a conta acabará quebrando e estão tentando capitalizar sobre os altos ganhos percentuais de uma conta pequena.
- A conta é nova, com apenas algumas operações, criando uma taxa de vitória de 100% no sinal.
- Uso de Martingale, hedge, dollar-cost averaging ou sistemas de grid. Essas estratégias aumentam o risco ao multiplicar posições após uma perda ou ao adicionar mais operações na mesma direção durante um drawdown. Essas abordagens clássicas datam do século XX e dificilmente são as “estratégias sagradas ocultas”, pois seus retornos esperados são menores ou iguais a zero.
Aqui está uma breve prova matemática:

Se as estratégias base não tiverem uma vantagem clara (p significativamente maior que 0,5), a expectativa de retorno é menor ou igual a zero, o que significa que você estará perdendo no longo prazo e que a perda apenas ainda não foi realizada. Mesmo que um sistema de martingale ou grid seja construído sobre uma entrada lucrativa, no final você ainda estará arriscando todo o saldo do seu portfólio a cada operação, e não uma fração, como na maioria das abordagens de gestão de risco. Se você não tem certeza de que será capaz de continuar depositando mais dinheiro quando a conta estiver em um drawdown enorme, então eu aconselho que não os utilize.
Uma coisa a esclarecer é que esta seção tem como objetivo conscientizar sobre técnicas comuns de marketing enganoso predominantes no mercado MQL5 atual, e não é um protesto contra a venda ou compra de EAs no MQL5. Na verdade, incentivo mais pessoas a venderem EAs no MQL5, com base em marketing confiável e EAs genuinamente robustos, para ajudar a torná-lo um ambiente mais confiável.
Overfitting
Overfitting é um problema comum em modelos de trading, em que uma estratégia pode ter um bom desempenho em dados históricos, mas falhar ao generalizar para dados novos e não vistos. Neste experimento, utilizaremos um código em python para demonstrar como o overfitting pode ocorrer devido à seleção de parâmetros em um modelo de trading. Especificamente, geraremos cenários de trading aleatórios com múltiplas features, visualizaremos o impacto da filtragem seletiva e observaremos como o desempenho varia quando os parâmetros são excessivamente otimizados para um subconjunto específico dos dados.
Começamos simulando um conjunto de dados com 1000 amostras aleatórias de trading, onde cada amostra corresponde a uma decisão de trading com três features:
- Feature 1: Isso pode representar várias condições de mercado, como ‘a’, ‘b’ ou ‘c’.
- Feature 2: Representa outro fator como ‘d’, ‘e’ ou ‘f’, como volatilidade do ativo ou sentimento.
- Feature 3: Isso pode representar outros indicadores de trading, com valores como ‘g’, ‘h’ ou ‘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 uma dessas amostras terá um resultado associado (uma vitória ou uma perda), atribuído aleatoriamente como 0 ou 1. Esses resultados representam o resultado de uma operação hipotética com base nas features fornecidas, que denotam diferentes valores de parâmetros.
No trading do mundo real, selecionar os parâmetros corretos (como indicadores de mercado, janelas de tempo de negociação ou limites para sinais de compra/venda) é crucial para o desempenho do modelo. No entanto, o overfitting ocorre quando o modelo é excessivamente ajustado para se adequar a padrões específicos nos dados históricos que não se generalizam bem para novos dados.
Para demonstrar isso, primeiro consideramos apenas amostras em que Feature 1 = ‘b’, Feature 2 = ‘d’ e Feature 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'})

Em seguida, plotamos a distribuição dos resultados considerando amostras em que Feature 1 = ‘c’, Feature 2 = ‘f’ e Feature 3 = ‘h’.

Podemos ver claramente que, apenas ao alterar três parâmetros nesses dados gerados aleatoriamente, somos capazes de selecionar um conjunto que é majoritariamente dominado por perdas ou por vitórias. Isso demonstra o poder do overfitting. Ao focar em um subconjunto específico de features, forçamos o modelo a se ajustar a uma fatia estreita dos dados, o que pode levar a conclusões enganosas. Quanto mais seletivamente filtramos os dados com base nas features, maior a probabilidade de observarmos um desempenho artificialmente alto (em termos de resultados), o que é uma característica do overfitting. Qualquer estratégia arbitrária, com parâmetros suficientes para overfitting, inevitavelmente será capaz de gerar resultados lucrativos.
Este é um alerta crítico para traders que dependem de estratégias finamente ajustadas com base em conjuntos específicos de parâmetros, pois elas podem não se generalizar bem para condições futuras de mercado. A principal conclusão é que a robustez do modelo — onde o desempenho é consistente em uma ampla gama de dados — é muito mais valiosa do que otimizar para faixas estreitas de parâmetros.
Otimização no Terminal MetaTrader 5
Quando tentamos selecionar os valores ideais para o desempenho de um EA em um determinado período, estamos realizando uma otimização. Como demonstrado na seção anterior, é fácil aplicar overfitting em uma pequena amostra de dados aleatórios fazendo pequenos ajustes em alguns parâmetros. Isso levanta a questão: como podemos evitar esse erro na otimização e tornar os resultados do backtest mais confiáveis? Esta seção explorará várias maneiras de minimizar o risco de overfitting e garantir resultados mais robustos ao realizar otimizações no terminal MetaTrader 5.
1. Mais Amostras ao Longo de um Período Maior
De acordo com a lei dos grandes números, assumindo que os retornos da sua estratégia sigam algum tipo de distribuição, o retorno médio das suas amostras se aproximará da média dessa distribuição à medida que o número de amostras aumenta. Para estratégias que não são tão frequentes quanto day trading ou scalping, recomenda-se testá-las com dados abrangendo pelo menos 10 anos e incluindo milhares de operações. Se a sua estratégia for sensível a mudanças de regime macroeconômico, testar apenas anos recentes é aceitável. No entanto, em última análise, você precisa de amostras suficientes para validar a estratégia, pois não existe uma regra universal sobre quantas amostras são suficientes. O objetivo é demonstrar que existe um padrão histórico e recorrente que pode ser explorado nos mercados financeiros.
Se o seu EA opera em um timeframe mais alto, você pode testá-lo em múltiplos ativos para coletar mais amostras, potencialmente transformando-o em uma estratégia multiativo. Essa abordagem reduz significativamente a probabilidade de overfitting, pois o desempenho da estratégia será testado em uma gama mais ampla de condições de mercado e comportamentos de ativos. Ao diversificar os ativos testados, você aumenta a robustez da sua estratégia e aprimora sua capacidade de adaptação a diferentes ambientes de mercado.
2. Menos Parâmetros Ajustáveis
Como mostrado no experimento anterior, quanto mais parâmetros você tiver, mais maneiras o processo de otimização terá para filtrar grupos de amostras vencedoras. Um parâmetro que é gerado aleatoriamente no início pode facilmente ser filtrado para um grupo de resultados bem-sucedidos, mas isso não prova necessariamente a validade de todo o conjunto de amostras. David Aronson, em Evidence-Based Technical Analysis, investigou o uso de técnicas de data mining e concluiu que é improvável a existência de uma estratégia com um único parâmetro ajustável, embora ela seja menos propensa ao overfitting. A abordagem recomendada é manter o número de parâmetros ajustáveis abaixo de cinco. Parâmetros que não afetam os resultados, como magic numbers, não devem ser considerados ajustáveis. Parâmetros como o período de look-back dos indicadores podem ser fixados em valores amplamente aceitos e, nesses casos, não devem ser contabilizados como parâmetros ajustáveis durante a otimização.
3. Considerar Comissões, Spreads e Swaps no Seu Backtest e na Otimização
Ao utilizar o testador de estratégias, certifique-se de clicar no símbolo de dinheiro e verificar se comissões, spreads e swaps estão configurados para refletir as condições do seu ambiente de trading ao vivo.


Muitos traders acreditam erroneamente que, se sua estratégia está consistentemente perdendo, isso significa que eles estão fazendo exatamente o oposto do que uma estratégia vencedora faria. Eles podem pensar que, simplesmente invertendo a direção das operações, irão ganhar de forma consistente. No entanto, isso está longe da verdade. O trading é um jogo de soma negativa para traders de varejo. Um trader que perde consistentemente é mais propenso a ter uma estratégia que já não possui vantagem, e seus resultados seguem uma distribuição aleatória de ganhos e perdas. Nesses casos, as perdas geralmente se devem aos spreads, comissões e taxas de swap pagos a cada operação.
É muito menos provável que você consiga desenvolver uma estratégia que produza consistentemente os sinais opostos de uma estratégia lucrativa, em comparação com criar você mesmo uma estratégia lucrativa. Neste último caso, você está trabalhando ativamente para fazer a estratégia vencer, enquanto no primeiro, não.
É por isso que não recomendo que traders iniciantes tentem estratégias de scalping — a desvantagem estatística relativa é simplesmente grande demais. Vamos considerar um exemplo: se você estiver negociando EUR/USD, as condições típicas para um broker b-book são ausência de comissão, mas spread de 1 pip, e para um broker ECN a-book, as condições são uma comissão de US$7 por lote com spread de 0,1 pip. Se você estiver tentando fazer scalping com um take-profit de apenas 10 pips, em ambos os casos você estará, efetivamente, pagando cerca de 10% de comissão em cada operação, ganhando ou perdendo. Isso é particularmente problemático para traders de alta frequência, pois esses custos corroerão gradualmente os lucros ao longo do tempo.
Agora, suponha que você tenha uma estratégia robusta com uma taxa de acerto de 55% e uma relação risco-retorno de 1:1. Sem considerar spreads ou comissões, sua curva de capital pareceria bastante positiva, mesmo sob padrões profissionais:

Mas, ao considerar esse custo de 10% proveniente de comissões, spreads e swaps devido à tentativa de fazer scalping em operações pequenas, aumentando efetivamente o custo relativo de cada operação, sua curva de capital se tornaria quase não lucrativa, como mostrado abaixo:

Código de simulação em 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. Dê Passos Maiores no Processo de Otimização e Observe a Sensibilidade dos Parâmetros
No terminal de otimização do MetaTrader 5, você pode ajustar o tamanho do passo para cada teste de parâmetro. Recomenda-se utilizar passos maiores em relação ao valor usual do parâmetro. Focar em valores muito específicos pode facilmente levar ao overfitting e à sensibilidade a mudanças de regime. Por exemplo, no ano passado, uma estratégia de reversão à média pode ter funcionado melhor com um período de RSI de 11, mas neste ano pode ser 13. Se focarmos em valores pequenos e incrementais, podemos perder padrões de desempenho mais amplos em relação aos parâmetros e desperdiçar tempo em otimizações ineficientes.

Pessoalmente, prefiro usar o profit factor como métrica para indicar desempenho, pois é uma razão, e não um número absoluto como o retorno total.
Profit factor = Lucro Bruto / Prejuízo Bruto.
A sensibilidade dos parâmetros também é crucial. Queremos garantir que nossos testes cubram uma ampla gama de valores possíveis para cada parâmetro. Idealmente, a área ao redor do melhor valor deve apresentar uma distribuição côncava, onde o desempenho diminui gradualmente a uma taxa constante à medida que o valor do parâmetro se afasta da configuração ideal. Isso garante que a estratégia mantenha sua vantagem apesar das variações nos valores dos parâmetros e que os parâmetros de melhor desempenho representem a configuração ideal da estratégia.

Teste Fora da Amostra
Esteja você otimizando parâmetros ou testando o EA em diferentes timeframes e símbolos, é melhor excluir dados recentes dos seus testes. Esses pontos de dados devem estar fora do seu domínio de conhecimento antes de realizar quaisquer alterações no EA original. Essa abordagem é conhecida como teste in-sample/out-of-sample.
O objetivo desse método de teste é evitar o viés de antecipação (look-ahead bias), no qual mudanças no EA são baseadas em características conhecidas do comportamento recente do mercado. Ele também ajuda a reduzir o risco de overfitting durante a otimização.
Para implementar isso, primeiro decida o tamanho total da amostra que você pretende testar. Com base no número de testes de amostra, você pode escolher uma proporção entre in-sample e out-of-sample, como 7:3, 8:2 ou 9:1. Em seguida, faça todas as observações, suposições e alterações nos valores dos parâmetros e nas regras de sinal utilizando os dados in-sample. Depois disso, aplique o EA final para realizar o backtest nos dados out-of-sample para verificar se suas suposições se mantêm de forma consistente. Se um EA que foi otimizado para gerar excelentes resultados no teste in-sample se tornar pouco lucrativo ou até mesmo apresentar perdas no teste out-of-sample, isso pode sugerir erosão da vantagem devido a mudanças recentes de regime ou overfitting durante a otimização in-sample.
Ao avaliar se a consistência de um EA se mantém entre os testes in-sample e out-of-sample, há várias métricas-chave a serem consideradas.
Primeiramente, você deve criar uma versão do seu EA sem o efeito de capitalização da alavancagem, pois isso pode distorcer os resultados e dar importância excessiva à cauda do conjunto de amostras.
Aqui estão as principais métricas a serem observadas:
-
Profit Factor: O profit factor deve ser maior que 1, com uma faixa razoável entre 1,2 e 1,5. Um profit factor inferior a 1,2 pode indicar que a estratégia não é suficientemente lucrativa, enquanto um valor superior a 1,5 pode sugerir que o tamanho da amostra é muito pequeno ou que os custos de negociação não foram considerados. Embora isso não signifique necessariamente que sua estratégia seja fraudulenta, é preciso cautela se os resultados parecerem irreais.
-
Maximum Equity Drawdown: Foque no drawdown máximo de equity em vez do drawdown absoluto, pois ele reflete o risco potencial e não o risco que já ocorreu. O drawdown máximo de equity deve ser pelo menos 10% inferior à sua tolerância pessoal máxima de drawdown. Se estiver muito baixo, você pode considerar aumentar o risco do seu EA; se estiver muito alto, pode ser necessário reavaliar o perfil de risco da sua estratégia.
-
LR Correlation: A correlação de regressão linear (LR) mede a consistência da sua curva de capital. Uma correlação superior a 0,9 indica que os retornos foram relativamente consistentes ao longo do período de teste. Isso ajuda a garantir que a estratégia não apresente grandes flutuações e que o desempenho seja estável.
-
Win Rate and Trade Volume for Long and Short Positions: Se o seu EA opera posições compradas e vendidas, certifique-se de que as taxas de acerto e os volumes de operações sejam razoavelmente semelhantes. Uma discrepância significativa entre os dois pode indicar um desequilíbrio na estratégia que pode precisar ser corrigido.
Embora outras métricas também sejam importantes, esses três são os principais fatores a serem considerados ao avaliar a confiabilidade do seu EA durante os testes in-sample e out-of-sample.

Alguns traders tradicionais preferem a análise walk-forward, na qual o teste in-sample/out-of-sample é realizado por partes, “avançando” gradualmente até o tempo atual. No entanto, acredito que isso muitas vezes é desnecessário, especialmente se já garantimos que nossos parâmetros são poucos em número e não estão superajustados a valores excessivamente específicos. Nesses casos, é muito provável que esses valores ideais de parâmetros permaneçam consistentes ao longo do tempo. Além disso, já enfatizamos que a chave da vantagem de uma estratégia está em suas regras de sinal, e não em seus valores de parâmetros. Portanto, um único teste in-sample/out-of-sample geralmente é suficiente para validar os resultados.
Dito isso, para estratégias baseadas em machine learning, a situação é diferente. A vantagem nessas estratégias geralmente vem dos parâmetros do modelo de machine learning subjacente, que podem variar significativamente dependendo do período dos dados de treinamento. Nesse caso, a análise walk-forward torna-se necessária para levar em conta como o desempenho do modelo pode mudar com diferentes conjuntos de dados ao longo do tempo. Forneci uma explicação detalhada de como implementar a análise walk-forward em este artigo. Em última análise, a principal conclusão é que o EA deve permanecer minimamente lucrativo em períodos recentes para confirmar sua viabilidade contínua.
Teste de Outliers
O teste de outliers garante que seus lucros não sejam impulsionados por algumas poucas operações atípicas que respondem pela maior parte dos ganhos, mas sim por ganhos e perdas consistentes e equilibrados. O teste de outliers garante que seus lucros não sejam impulsionados por algumas poucas operações atípicas que respondem pela maior parte dos ganhos, mas sim por ganhos e perdas consistentes e equilibrados. Para verificar isso, basta examinar a curva de capital do backtest e garantir que seu movimento ascendente não seja causado por alguns grandes picos, mas por um crescimento constante e consistente. Além disso, você pode confirmar isso comparando o maior ganho com o ganho médio no relatório de backtest.
Também queremos garantir que os lucros não estejam concentrados principalmente em um curto período de tempo, pois isso pode indicar viés temporário de regime. Para verificar isso, examinamos a distribuição dos retornos mensais para garantir consistência. Primeiro, obtenha o relatório de backtest clicando com o botão direito no relatório e salvando-o.

Em seguida, abra o arquivo e anote o número da linha da linha “Deals” (neste exemplo, é 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

Meses de drawdown são quase inevitáveis em backtests de longo prazo, mas aqui precisamos focar na porcentagem de retorno e confirmar que nenhum dos drawdowns é significativamente maior do que o retorno médio de todo o conjunto de amostras.
Por fim, se o seu EA negocia múltiplos ativos, devemos garantir que nenhum único ativo seja responsável pela maior parte dos lucros, enquanto outros contribuem pouco. Para isso, podemos estender nosso código Python original adicionando linhas para gerar um gráfico de pizza mostrando a distribuição dos retornos entre diferentes ativos.
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()

Precisamos apenas garantir que nenhum ativo único domine o gráfico de pizza.
Sugestões Avançadas
Aqui listo mais quatro testes avançados de robustez que podem exigir mais conhecimento técnico e tempo.
1. Teste de Trading ao Vivo:
Implemente a estratégia em um ambiente de trading real ou simulado, com tamanhos de posição pequenos, e monitore seu desempenho ao longo do tempo em condições reais de mercado. O trading ao vivo testa a capacidade da estratégia de lidar com a dinâmica real do mercado, incluindo slippage, spreads e atrasos de execução.
Ele ajuda a avaliar se a estratégia consegue performar conforme o esperado sob condições reais de negociação e pressão emocional, além de backtests ou simulações.
2. Simulação de Monte Carlo:
Execute uma simulação de Monte Carlo embaralhando aleatoriamente a ordem dos resultados das operações (ganhos e perdas) e gerando um grande número de possíveis curvas de capital. Isso também pode incluir ajustes aleatórios em parâmetros como pontos de entrada ou stop losses.
As simulações de Monte Carlo ajudam a avaliar o quão robusta é uma estratégia frente a condições aleatórias de mercado, oferecendo uma visão sobre possíveis cenários de pior caso e garantindo que a estratégia não esteja excessivamente otimizada para dados passados.
3. Análise de Drawdown e Risco de Ruína:
Analise o drawdown máximo da estratégia, que é a maior perda de pico a vale no equity, e calcule o risco de ruína, ou a probabilidade de o saldo da conta ser reduzido a zero dado o perfil atual de risco/retorno.
Essas métricas fornecem uma compreensão mais profunda do perfil de risco da estratégia, ajudando a avaliar se o drawdown máximo é aceitável e a probabilidade de esgotar a conta sob condições específicas de mercado. Essa análise é crucial para a sobrevivência no longo prazo.
4. Simulação de Slippage e Execução:
Simule slippage e atrasos de execução do mundo real introduzindo variações aleatórias entre os pontos esperados de entrada/saída e a execução real de mercado. Você pode modelar o slippage com base em fatores como volatilidade do mercado, tamanho da operação e liquidez. O testador de estratégias do MetaTrader 5 possui teste de estresse, o que pode ser útil nesse caso.
A execução é um fator-chave que afeta a lucratividade no mundo real. Este teste ajuda a avaliar o quão sensível a estratégia é ao slippage e se ela consegue permanecer lucrativa sob condições de execução menos ideais. O slippage é mais crítico principalmente em estratégias que operam apenas em períodos de alta volatilidade, como estratégias de eventos de notícias. Fora isso, proponho que a maioria dos traders de varejo não precisa focar muito nisso, porque o slippage ocorre nos dois sentidos. Na maioria dos casos, o slippage positivo e o negativo se anulam, tornando o impacto relativamente pequeno em comparação com outros custos de negociação.
Conclusão
Neste artigo, demonstrei como testar rigorosamente a robustez do seu expert advisor, ou de quaisquer expert advisors vendidos a você. Primeiro, chamei a atenção para possíveis táticas de marketing que vendedores podem usar para manipular dados de forma fraudulenta no marketplace MQL5 e expliquei por que essas táticas são ineficazes. Em seguida, introduzi o conceito de overfitting por meio de um experimento em Python. Depois, descrevi considerações-chave ao realizar backtests e otimizações no MetaTrader 5, explicando a motivação por trás de cada dica. Na sequência, discuti o teste fora da amostra (out-of-sample), fornecendo detalhes sobre como avaliar diversas métricas dos relatórios. Também abordei três tipos de testes de outliers — outliers de operações, de tempo e de símbolos — fornecendo instruções claras sobre como testar cada um deles. Por fim, concluí o artigo com sugestões adicionais para testes de robustez mais avançados.
Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/16957
Aviso: Todos os direitos sobre esses materiais pertencem à MetaQuotes Ltd. É proibida a reimpressão total ou parcial.
Esse artigo foi escrito por um usuário do site e reflete seu ponto de vista pessoal. A MetaQuotes Ltd. não se responsabiliza pela precisão das informações apresentadas nem pelas possíveis consequências decorrentes do uso das soluções, estratégias ou recomendações descritas.
Introdução ao MQL5 (Parte 12): Um Guia para Iniciantes sobre a Criação de Indicadores Personalizados
Rede neural na prática: Quando usar um neurônio artificial e entender sua função em MQL5
Do básico ao intermediário: Sub Janelas (II)
Do básico ao intermediário: Sub Janelas (I)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Uma discrepância significativa entre os dois pode sinalizar um desequilíbrio na estratégia que talvez precise ser resolvido.
Isso é verdadeiro para uma direção de tendência tendenciosa (a tendência de compra domina um período mais longo do que a tendência de venda)? O EA ainda deve ter taxas de ganho e volumes de negociação semelhantes?
Obrigado pelos comentários.
Depende de quanto beta está envolvido na estratégia. Se uma estratégia de um único ativo for negociada em um período de tempo maior e em um período de retenção maior, é provável que o resultado da estratégia tenha algum viés seguindo a tendência macro. É por isso que aconselhei as pessoas a negociarem estratégias que negociam grandes quantidades (volume) por meio de negociações de maior frequência ou diversificando uma estratégia em vários ativos não correlacionados. Se o mérito de uma estratégia não envolver suposições de viés de tendência, tendo regras simétricas tanto para compra quanto para venda, deve-se esperar que ela tenha um volume de negociação e uma taxa de ganho semelhantes em uma amostra grande.
É claro que as estratégias podem ter suposições de viés sobre a tendência, como algumas estratégias long-only para índices. Nesse tipo de estratégia, os traders devem operar somente em um lado, pois suas suposições já eram de que a outra direção não funcionaria tão bem quanto essa direção. Apenas certifique-se de não usar muitas suposições de tendência e tudo correrá bem.
Obrigado, Zhuo, por dedicar seu tempo a isso. Abriu meus olhos para o uso do Python para analisar os resultados. O principal desafio para mim é saber se foi a equipe ou a tendência a responsável pelos resultados :) Provavelmente deveria incluir uma métrica de probabilidade
Considere fazer uma verificação mensal da correlação de retorno entre o mercado negociado e o resultado do backtest. Se a correlação for alta, como acima de 0,2, isso pode sugerir que a tendência do mercado é responsável por uma grande parte do resultado de seu backtest, o que não é desejado.
Existe uma versão em chinês?
Se você tiver uma, envie uma versão em chinês também.
Caso contrário, você precisa de uma tradução em chinês do grupo de documentação da MQL5?
Existe uma versão em chinês?
Se você tiver uma, envie uma versão em chinês também.
Caso contrário, você precisa de uma tradução em chinês do grupo de documentação da MQL5?
Olá, todas as minhas traduções são feitas automaticamente pela MQL5. A versão em chinês geralmente é lançada alguns meses após o envio, embora a data exata de publicação não seja clara.