English Русский Deutsch 日本語
preview
EA de grid-hedge modificado em MQL5 (Parte III): Otimização de uma estratégia de cobertura simples (I)

EA de grid-hedge modificado em MQL5 (Parte III): Otimização de uma estratégia de cobertura simples (I)

MetaTrader 5Sistemas de negociação | 2 agosto 2024, 15:48
32 0
Kailash Bai Mina
Kailash Bai Mina

Introdução

Bem-vindo à terceira parte da série de artigos sobre EAs de cobertura. Começaremos com uma breve revisão do progresso de nosso programa até o momento. Até agora, desenvolvemos dois componentes principais: o Simple Hedge EA e o Simple Grid EA. Neste artigo, focaremos na melhoria contínua do Simple Hedge EA. Nosso objetivo é aprimorar seu desempenho através da combinação de análise matemática e método de força bruta (brute-force) para encontrar a maneira mais eficaz de implementar essa estratégia de negociação.

O foco inicial será na otimização matemática da estratégia Simple Hedge. Devido à complexidade e profundidade da análise necessária, não é prático descrever tanto a otimização matemática quanto a posterior otimização baseada em código em um único artigo. Portanto, dedicaremos este artigo aos aspectos matemáticos, para garantir uma investigação completa da teoria e dos cálculos por trás do processo de otimização. Nos artigos seguintes desta série, discutiremos o aspecto de otimização de código, aplicando métodos práticos de programação às bases teóricas estabelecidas aqui.

Neste artigo, discutiremos o seguinte:

  1. Aprofundando na otimização: uma discussão mais detalhada
  2. Otimização matemática
  3. Considerações finais


Aprofundando na otimização: uma discussão mais detalhada

O que vem à mente quando mencionamos a palavra "otimização"? É um termo tão amplo quanto complicado. Então, o que exatamente é otimização?

Vamos destrinchar. Essencialmente, a otimização refere-se à ação, processo ou metodologia de aperfeiçoar algo — seja um design, sistema ou decisão — ao mais alto nível de perfeição, funcionalidade ou eficácia. Mas, sejamos realistas: alcançar a perfeição absoluta é mais uma busca idealista. O objetivo real? Ultrapassar os limites do possível com os recursos que temos e buscar o melhor resultado possível.

O campo da otimização é vasto, e temos muitos métodos à nossa disposição. No contexto de nossa discussão, focaremos na "estratégia clássica de cobertura". Entre os muitos métodos de otimização, os pilares de nossa investigação serão duas abordagens:

  1. Otimização matemática — esta abordagem utiliza todo o poder da matemática. Imagine que você pode criar funções de lucro, funções de rebaixamento e muito mais, e então usar essas construções para ajustar precisamente a estratégia com base em dados confiáveis e quantificáveis. Este método não só aumenta a precisão dos esforços de otimização, mas também proporciona um caminho matemático claro para melhorar a eficácia da estratégia.

  2. Abordagem "força bruta" — o método brute force é simples, mas de alcance impressionante. Esse método envolve testar todas as combinações de entradas possíveis para encontrar a melhor configuração possível. Qual é o objetivo final dessa abordagem? Maximizar os lucros ou minimizar os rebaixamentos, dependendo das prioridades da estratégia. Mas é importante notar a complexidade óbvia — o grande número de combinações de dados de entrada. Essa complexidade faz com que testar todos os cenários possíveis do histórico seja uma tarefa inimaginável, especialmente com recursos e tempo limitados.

Podemos nos beneficiar da combinação dessas duas abordagens. Ao aplicar a otimização matemática primeiro, podemos reduzir significativamente o número de passagens do processo de força bruta. Essa manobra estratégica, que nos permite focar nas configurações mais promissoras, torna o processo de força bruta muito mais controlável e eficiente.

Em essência, o caminho da otimização envolve um equilíbrio entre a precisão teórica e a viabilidade prática. Ao começar com a otimização matemática, poderemos filtrar muitas opções. Em seguida, o uso da força bruta nos permitirá testar e refinar completamente as opções restantes. Juntos, esses métodos formam uma dupla poderosa para otimizar com eficácia nossa estratégia clássica de hedge.


Otimização matemática

Ao iniciar a otimização matemática, o primeiro passo é criar uma estrutura clara e eficaz. Isso significa definir as variáveis que influenciam o resultado — neste caso, o lucro. Vamos analisar os componentes que desempenham um papel importante na formação da função de lucro:

  1. Initial Position (IP) — posição inicial, uma variável binária: 1 significa compra, 0 significa venda. A escolha inicial estabelece a base para a direção da estratégia de negociação.
  2. Initial Lot Size (IL) — lote inicial, o tamanho do primeiro pedido no ciclo de negociação, estabelecendo a base para a escalabilidade das operações.
  3. Buy Take Profit (BTP) — take profit para pedidos de compra, um limite pré-definido para fechar posições e realizar lucros.
  4. Sell Take Profit (STP) — take profit semelhante para operações de venda, um limite pré-definido para fechar posições de venda e realizar lucros.
  5. Buy-Sell Distance (D) — parâmetro espacial que define o intervalo entre os níveis de pedidos de compra e venda, influenciando os pontos de entrada das negociações.
  6. Lot Size Multiplier (M) — multiplicador de lote que aumenta o tamanho do lote para pedidos subsequentes, introduzindo um ajuste dinâmico dependendo do progresso do ciclo de negociação.
  7. Number of Orders (N) — número total de pedidos no ciclo, refletindo a amplitude da estratégia de negociação.

Para maior clareza, esses parâmetros são apresentados de forma simplificada, mas algumas dessas variáveis serão indicadas por índices nas equações.

Tomando esses parâmetros como base, agora podemos formular a função de lucro. A essência dessa função é representar matematicamente como a alteração dessas variáveis afeta nosso lucro (ou perda). A função de lucro é a pedra angular do nosso processo de otimização, permitindo analisar quantitativamente os resultados de várias estratégias de negociação em diferentes cenários.

Vamos registrar os parâmetros da nossa função de lucro:

Assim, a função de lucro final será assim:

À primeira vista, a função de lucro pode parecer complexa devido às suas expressões matemáticas e símbolos. No entanto, não se assuste. Cada componente da equação desempenha um papel específico, que nos permite entender como o lucro é gerado dentro do nosso sistema de negociação.

Também é necessário compreender a dinâmica do cálculo do lucro. O ponto central aqui é a diferença entre a função de lucro principal, denotada por p(x), e seu componente g(x), onde x representa o número total de ordens ou posições. Essa diferença é fundamental, pois nos permite entender como o lucro é gerado quando o ciclo de negociação se completa em x posições. Vamos analisar esse conceito para compreendê-lo completamente.

Suponhamos que decidimos fechar o ciclo de negociação com uma única ordem. Nesse caso, temos o seguinte cenário:


Aqui, g(x) assume um valor baseado na interação entre o número de ordens (N) e a posição inicial (IP). Por exemplo, se definirmos o tamanho inicial do lote (IL) como 0,01 e (para simplificação) N como 1, e a posição inicial (IP) como compra (IP = 1), então g(x) assume o valor do Take Profit de Compra (BTP). Como resultado, nossa função de lucro p(x) torna-se 100 multiplicado por 0,01 multiplicado por BTP = BTP, o que simbolicamente indica que nosso lucro é igual a BTP. Observe que calculamos o lucro em pontos, não em moeda. Esta abordagem é escolhida intencionalmente para generalizar o cálculo do lucro para diferentes moedas, garantir aplicabilidade independente do tipo de conta (micro ou padrão) e simplificar o cálculo geral. Aqui, multiplicamos o tamanho do lote por 100 para converter o tamanho do lote em um valor de ponto exato, permitindo calcular o lucro com precisão.

Agora, vejamos o caso em que N aumenta para 2, ou seja, introduzimos um novo nível de complexidade:

 

Essa pequena alteração complica o cálculo do lucro e exige uma análise mais profunda das causas subjacentes, que são melhor ilustradas por exemplos. Um componente crítico aqui é a introdução da função "floor", uma operação matemática que se assemelha ao que conhecemos como a função do maior inteiro (GIF). A função Floor serve a um propósito específico: dado qualquer valor numérico, ela trunca a parte decimal até o maior número inteiro anterior. Para valores positivos, essa operação é simples: Floor(1,54) = 1, Floor(4,52) = 4, e assim por diante. Esse mecanismo é uma parte integrante da função de lucro. Ele garante que apenas valores inteiros sejam considerados nos cálculos. Essa simplificação permite focar em valores positivos e evitar a necessidade de considerar valores negativos nesse contexto.

O segmento inicial da fórmula começa com o cálculo do nível mínimo como -100 vezes o valor do nível de impacto Impact Level (IL), o que ilustra o caso quando IL é 0,01. Como resultado, temos o cálculo de -100 multiplicado por 0,01, que é igual a -1. Ao integrar com a distância Distance (D), a equação representa uma perda de D pontos para cada negociação que não gera lucro. O próximo passo é adicionar o limite inferior, multiplicado por 100 vezes IL, multiplicado pelo multiplicador (M), à função g(x), que representa o valor do take-profit (TP) para a ordem de compra ou venda. O produto de IL e M determina o tamanho do lote para a ordem subsequente (segunda), e multiplicar esse produto por 100 facilita o cálculo preciso dos pontos.

Surge uma pergunta importante sobre a necessidade de usar a função Floor em nossa equação. Para esclarecer, vamos considerar um exemplo em que IL é 0,01 e M é 2, resultando em IL multiplicado por 100, multiplicado por M, que é igual a 2. Nesse caso, aplicar a função Floor a 2 resulta em 2, o que aparentemente torna essa função redundante. No entanto, a utilidade da função floor torna-se evidente em outro cenário: se IL permanecer em 0,01 e M for definido como 1,5, o produto 100 vezes IL por M será igual a 1,5. O tamanho do lote resultante de 0,015 não é permitido, pois os corretores exigem que os tamanhos dos lotes sejam múltiplos de 0,01. De acordo com a estratégia, o tamanho da ordem será fixado em 0,01, e os tamanhos dos lotes subsequentes aumentarão de forma controlada para garantir que funcionem dentro dos requisitos do corretor. Por exemplo, o próximo tamanho do lote, calculado como 0,01×1,5×1,5, é igual a 0,0225, que de fato é arredondado para 0,02 para fins práticos. Portanto, a função de limite inferior floor é usada para ajustar a equação de acordo com a realidade operacional, para obter tamanhos de lotes viáveis: 0,01 e depois 0,02. Assim, a modelagem é garantida para atender às restrições práticas de negociação. Fica claro que precisamos usar a função Floor ao calcular os lotes. Finalmente, o valor ajustado é multiplicado por g(x), que corresponde a TP de compra ou TP de venda, introduzindo parâmetros adicionais da estratégia de negociação na fórmula da equação. Espero que isso seja uma justificativa suficiente para cada componente da equação, descrevendo as considerações estratégicas para sua construção.

Agora, suponhamos que N seja igual a 3, então obteremos o lucro:


Quando N é igual a 3, a fórmula ilustra uma situação em que o lucro é obtido sob certas condições, resultando em uma abordagem estruturada para calcular os resultados com base no número de ordens, designado como N. O primeiro segmento representa a perda na primeira ordem. O segundo segmento adapta a abordagem, substituindo g(x) por D, que também reflete as perdas na segunda ordem. A diferença no terceiro segmento está relacionada à introdução de M^2, que indica um aumento exponencial do multiplicador, considerando o contexto.

Como uma extensão da estrutura para diferentes valores de N, é apresentada uma equação generalizada que reflete abrangentemente a dinâmica dessa estratégia de negociação. Essa equação, adaptável a diferentes casos de N, serve como um modelo base para entender o progresso e os resultados potenciais à medida que o número de ordens aumenta.

A definição de g(x), que alterna entre o Take Profit de Compra (BTP) e o Take Profit de Venda (STP), depende da Posição Inicial (IP) e da paridade de N. Este processo de decisão binária é refletido na estrutura condicional, onde o resultado é influenciado tanto pela IP quanto pela característica numérica de N, ou seja, se é par ou ímpar. Este mecanismo garante a atribuição lógica dos valores de g(x) de acordo com a posição de mercado e a sequência de ordens.


O uso da ferramenta gráfica Desmos facilita a compreensão desta equação, permitindo ajustar os parâmetros em tempo real, graças ao feedback imediato das alterações. A capacidade dessa ferramenta de exibir resultados inteiros é especialmente valiosa no contexto prático, onde o número de ordens é, por natureza, uma variável discreta.


Uma demonstração no Desmos com parâmetros predefinidos mostra o comportamento do modelo em condições padrão. Nela, é possível observar uma expectativa de lucro estável de 15 pontos para até 10 ordens.

Nota: para simplificação, ignoramos os spreads por enquanto.

Observando os resultados, pode surgir o desejo de investir nesta estratégia. No entanto, quero adverti-lo contra decisões precipitadas. Ainda existem muitos problemas a serem resolvidos antes de prosseguir. Para uma compreensão mais completa da situação, seria útil adicionar uma coluna extra à nossa tabela. Mas antes disso, vamos formular e registrar a equação que servirá como base para esta nova coluna. Esta etapa preparatória é muito importante para a análise dos dados e permite uma melhor compreensão de como ocorre o próprio processo de tomada de decisão.


A equação ilustra o máximo rebaixamento possível. Se o ciclo termina na 10ª ordem, o rebaixamento máximo será uma soma muito próxima à perda, caso a 10ª ordem seja uma perda. Isso é mostrado na equação, quando n varia de 0 a x-1, enquanto anteriormente n variava no intervalo de 0 a x-2 para perdas antes do lucro.

A equação apresentada define o máximo rebaixamento potencial, mostrando assim os riscos nesta estratégia. Por exemplo, suponha que o ciclo termine na 10ª ordem. Nesse contexto, o rebaixamento máximo pode ser visto como a soma que se aproxima da perda potencial, caso a 10ª ordem resulte em prejuízo. O cálculo do rebaixamento está incluído na equação com a variável n variando de 0 a x-1. Esta seção especifica o intervalo usado para calcular o rebaixamento. Esta é uma mudança em relação ao método anterior de cálculo das perdas, que incluía a variação de n no intervalo de 0 a x-2, seguida pelo lucro. Tal ajuste de parâmetros fornece uma representação mais precisa do perfil de risco da estratégia, pois consideramos as perdas máximas possíveis antes que o lucro potencial seja realizado.

Para determinar o máximo rebaixamento possível usando os parâmetros de entrada padrão, observamos como os valores da nova variável são ajustados com as mudanças de x. Este passo permite compreender o impacto direto da variação de x no rebaixamento potencial, compreendendo o risco associado a diferentes cenários dentro da nossa estratégia.

Considerando que estamos concluindo o ciclo com lucro na 10ª ordem, esperamos um rebaixamento máximo de 15.345 dólares. Esse valor é bastante significativo, especialmente em comparação com a recompensa relativamente modesta de 15 dólares. Levando essa dinâmica em conta, vamos aumentar os parâmetros BTP e STP de 15 pontos para 50 pontos.

Agora, vejamos o resultado:

Aqui, vemos uma diferença significativa em relação ao cenário anterior, onde as perdas aumentavam em progressão geométrica. Agora, estamos em uma posição em que alcançamos lucros consecutivos e temos uma relação risco-recompensa bastante favorável. Diante de tais resultados promissores, surge a pergunta: por que se limitar a uma meta de 50 pontos? Vamos considerar a possibilidade de expandir nossa meta para 100 pontos.

Note que os valores de c(x) permanecem inalterados, enquanto p(x) aumenta para todos os valores de x. Esta desigualdade pode nos fazer refletir, considerando a vantagem significativa dos lucros potenciais sobre as perdas. No entanto, há uma armadilha oculta. Para entender isso, imagine que BTP e STP estejam definidos, digamos, em 10.000 pontos. Nessas circunstâncias, levaria uma eternidade para que o preço atingisse essas metas. Isso nos leva a uma conclusão importante: quanto maior o BTP e o STP, menor a chance de completar o ciclo, ou seja, atingir BTP ou STP. Isso introduz um elemento oculto, que chamaremos de p — a probabilidade de que o ciclo seja concluído em um determinado x. Aumentar BTP e STP injustificadamente reduz p, e quanto menor p, menos provável será a conclusão do ciclo. Portanto, independentemente do lucro potencial, se p for mínimo, o lucro esperado pode nunca se materializar. Como lidamos principalmente com EURUSD, onde oscilações de 100 pontos já são significativas, usaremos um nível preliminar de 50 pontos tanto para BTP quanto para STP. Este nível é baseado na intuição e pode ser ajustado conforme necessário para equilibrar efetivamente risco e recompensa.

Considerar p e calcular o lucro esperado é uma tarefa complexa. Embora a otimização matemática forneça uma abordagem estruturada, ela, por si só, não pode determinar a probabilidade de conclusão do ciclo (p). É necessário analisar gráficos para um entendimento mais detalhado. Outras complexidades surgem porque p é, por natureza, instável e se comporta como uma variável aleatória. É importante entender que p representa um vetor de valores de probabilidade, onde cada elemento indica a probabilidade de fechar o ciclo após um certo número de ordens totais. Por exemplo, o primeiro elemento do vetor representa a probabilidade de concluir o ciclo com apenas uma ordem, e essa lógica se aplica aos outros elementos para diferentes quantidades de ordens. Um estudo abrangente deste conceito, especialmente sua aplicação e implicações, será crucial ao avançarmos para a otimização baseada em código no próximo artigo desta série.

Em nossa análise, ignoramos um fator importante: o spread. O spread desempenha um papel crucial em nossa estratégia (como em todas), influenciando tanto os lucros quanto as perdas. Para levar isso em conta, ajustamos nossos cálculos subtraindo certos valores de p(x) e c(x). Assim, incorporamos o spread em nossa análise.


É importante notar que nossa correção considera todas as negociações de zero a x-1 — o spread afeta cada negociação, independentemente de ser lucrativa ou não. Para simplificar, estamos considerando o spread (denominado S) como um valor constante no momento. Esta decisão foi tomada para evitar complicar a análise matemática com uma variável adicional. Embora essa simplificação reduza o realismo do modelo, permite focar nos aspectos principais da estratégia sem se perder em complexidades excessivas.


Após introduzir s(x) nos cálculos, é necessário quantificar o impacto real do spread em nosso lucro. O efeito é bastante significativo: as perdas associadas ao spread aumentam à medida que x cresce, potencialmente alcançando 32.000 pontos, ou cerca de 3.200 dólares. Esta correção não só reduz nosso lucro potencial em s(x), mas também aumenta nossas perdas potenciais na mesma medida, alterando significativamente a relação risco-recompensa. Esta mudança destaca a importância de considerar o spread no planejamento estratégico e a necessidade de gerenciar cuidadosamente esse fator ao otimizar a estratégia.

Passando para a última tarefa, quando falamos sobre reduzir as opções para a aplicação da busca exaustiva, estamos nos referindo ao processo de excluir seletivamente certas combinações de parâmetros que provavelmente não resultarão em resultados úteis para nossa estratégia. Este passo é crucial para otimizar nossa abordagem, especialmente ao preparar para a otimização no código, pois permite focar os recursos computacionais na exploração das configurações mais promissoras.

Como exemplo, vamos considerar um cenário onde definimos os parâmetros BTP (trigger point de compra), STP (trigger point de venda) e D (distância) em 15, e M (multiplicador) em 1,5.

Ao analisar essas configurações, rapidamente se percebe que tais parâmetros produzem resultados insatisfatórios. Portanto, é evidente que incluir esses valores na estratégia ou continuar a otimização com eles seria inútil.

Diante disso, surge a pergunta: como identificar e eliminar antecipadamente tais combinações de parâmetros ineficazes? Embora a descoberta inicial desses parâmetros tenha sido aleatória, identificar e eliminar sistematicamente todas as entradas de parâmetros não otimizadas é bastante desafiador. Isso requer uma abordagem metódica, possivelmente uma análise preliminar para avaliar a viabilidade do uso de diferentes conjuntos de parâmetros antes de iniciar a otimização completa por força bruta. Assim, podemos simplificar o processo de otimização e garantir que todos os esforços sejam direcionados apenas às combinações de parâmetros que possam melhorar a eficiência de nossa estratégia de negociação.

Resolver o problema de identificar e eliminar sistematicamente combinações de parâmetros abaixo do ideal em nosso processo de otimização é uma tarefa complexa que abordaremos em partes posteriores desta série. Essa abordagem garantirá uma investigação direcionada e eficiente das estratégias mais promissoras, aumentando assim a eficácia geral de nossa metodologia de negociação. Por enquanto, vamos parar por aqui. Continuaremos na próxima parte.


Considerações finais

Nesta terceira parte da nossa série, avançamos para uma investigação mais aprofundada da otimização da estratégia Simple Hedge. Demos atenção especial à análise matemática e obtivemos uma compreensão básica da abordagem de "força bruta" que utilizaremos na próxima parte.

Olhando para frente, nas próximas partes desta série, passaremos das pesquisas teóricas para a otimização prática baseada em código. Aplicaremos os princípios e ideias estudados a cenários reais de negociação. Esta transição promete tornar a estratégia mais clara, oferecendo melhorias tangíveis e estratégias acionáveis para traders que buscam maximizar os lucros enquanto gerenciam os riscos de forma eficaz.

Agradeço muito todos os comentários e feedbacks que vocês deixaram nos artigos anteriores desta série. Continuem compartilhando seus pensamentos e sugestões. Juntos, não apenas otimizaremos uma estratégia de negociação, mas também pavimentaremos o caminho para soluções de negociação mais eficazes, capazes de suportar a volatilidade e a incerteza do mercado.

Bom código! Boas negociações!


Traduzido do Inglês pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/en/articles/13972

Caminhe em novos trilhos: Personalize indicadores no MQL5 Caminhe em novos trilhos: Personalize indicadores no MQL5
Vou agora listar todas as possibilidades novas e recursos do novo terminal e linguagem. Elas são várias, e algumas novidades valem a discussão em um artigo separado. Além disso, não há códigos aqui escritos com programação orientada ao objeto, é um tópico muito importante para ser simplesmente mencionado em um contexto como vantagens adicionais para os desenvolvedores. Neste artigo vamos considerar os indicadores, sua estrutura, desenho, tipos e seus detalhes de programação em comparação com o MQL4. Espero que este artigo seja útil tanto para desenvolvedores iniciantes quanto para experientes, talvez alguns deles encontrem algo novo.
Redes neurais de maneira fácil (Parte 79): consultas agregadas de características (FAQ) Redes neurais de maneira fácil (Parte 79): consultas agregadas de características (FAQ)
No artigo anterior, nos familiarizamos com um dos métodos de detecção de objetos em imagens. No entanto, o processamento de imagens estáticas é um pouco diferente do trabalho com séries temporais dinâmicas, como aquelas relacionadas à dinâmica dos preços que estamos analisando. Neste artigo, quero apresentar a você o método de detecção de objetos em vídeo, que é mais relevante para a nossa tarefa atual.
Está chegando o novo MetaTrader 5 e MQL5 Está chegando o novo MetaTrader 5 e MQL5
Esta é apenas uma breve resenha do MetaTrader 5. Eu não posso descrever todos os novos recursos do sistema por um período tão curto de tempo - os testes começaram em 09.09.2009. Esta é uma data simbólica, e tenho certeza que será um número de sorte. Alguns dias passaram-se desde que eu obtive a versão beta do terminal MetaTrader 5 e MQL5. Eu ainda não consegui testar todos os seus recursos, mas já estou impressionado.
Desenvolvendo um sistema de Replay (Parte 59): Um novo futuro Desenvolvendo um sistema de Replay (Parte 59): Um novo futuro
O correto entendimento das coisas, nos permite fazer mais e com menos esforço. Neste artigo irei explicar por que temos que temporizar a colocação do template, antes do serviço realmente começar a mexer no gráfico. Além disto, que tal melhorar o indicador de mouse, para podermos fazer mais coisas com ele.