English Русский 中文 Español Deutsch 日本語
Uma abordagem científica para o desenvolvimento de algoritmos de negociação

Uma abordagem científica para o desenvolvimento de algoritmos de negociação

MetaTrader 5Negociação | 8 janeiro 2021, 08:31
1 281 0
Maxim Romanov
Maxim Romanov

Introdução

A negociação no mercado financeiro sem um sistema de negociação adequado tem todas as chances de arruinar o saldo inicial do trader. Não importa qual mercado o trader esteja operando - o resultado à longo prazo seria o mesmo de um trader inexperiente. Um sistema de negociação ou um algoritmo é necessário para gerar lucros.

Existem muitos sistemas e algoritmos de negociação diferentes, incluindo uma categoria separada de algoritmos matematicamente lucrativos, como estratégias de arbitragem, HFT, estratégias com opções e negociação de símbolos no SPOT contra derivativos. No entanto, todos os algoritmos conhecidos têm suas desvantagens. Eles têm baixa lucratividade ou exigem alta competição por liquidez e velocidade de execução de suas ordens. É por isso que os traders tentam desenvolver seus próprios algoritmos com base em uma lógica única.

Como regra, a maioria dos algoritmos de negociação utiliza a análise de preços de ativos em um esforço para prever os preços futuros com alguma probabilidade. Outros algoritmos usam não apenas a análise de preços, mas também dados externos, além de levar em consideração os fundamentos e o histórico das notícias, incluindo a análise de rumores.

O problema é que muito poucas pessoas entendem exatamente como procurar padrões, quais são eficientes e quais não são, e por quê. Por que, ao anexar no gráfico os indicadores padrão ou customizados, eles não são capazes de gerar um algoritmo lucrativo? Eles tentam otimizar os parâmetros da estratégia no otimizador com esperança de gerar lucro, mas na verdade eles simplesmente ajustam os parâmetros de estratégia a uma pequena seção do histórico e, então, sofrem perdas em um período futuro. O otimizador é uma ferramenta necessária e útil, mas ele deve ser usado para encontrar os parâmetros ideais para um algoritmo lucrativo e não para tentar tornar um sistema perdedor em um lucrativo ao ajustar os seus parâmetros junto aos dados do histórico.

Ao contrário de outras áreas, a negociação é uma área pouco desenvolvida devido à sua alta competitividade. Ideias lucrativas e disruptivas geralmente são mantidas em segredo e não são discutidas online. Embora as ideias não lucrativas ou que não geram lucro se espalhem muito rapidamente. Isso ocorre porque se uma pessoa ou grupo de pessoas desenvolve algo que realmente vale a pena, eles não precisam compartilhar seus desenvolvimentos com os outros - eles lucram com o seu conhecimento. Se eles revelarem o básico de seu sistema, isso criará concorrentes que também tentarão agarrar a liquidez, que está longe de ser infinita. Portanto, todo mundo que trata de negociação algorítmica deve coletar qualquer informação do zero e obter sua própria experiência. Isto pode levar anos para entender as regras básicas.

Por causa de todos esses fatores, existem mais superstições na negociação do que regras de trabalho. Quando se trata da abordagem científica, ela é o mesmo em todas as esferas, permitindo que você progrida mais rápido no desenvolvimento de seus algoritmos lucrativos. Portanto, vamos considerar como aderir a uma abordagem científica e evitar superstições durante o desenvolvimento de um algoritmo de negociação. Nós consideraremos algumas ideias neste artigo usando um sistema de negociação simples como exemplo.

Busca por padrões de preços

O desenvolvimento de um algoritmo de negociação deve começar com a busca de um padrão de preços que forneça uma expectativa matemática positiva de lucro durante a negociação. O padrão pode resultar de uma hipótese de precificação desenvolvida anteriormente ou pode ser encontrado por acaso. Ambas as opções acontecem com frequência na ciência: algumas invenções são feitas por acaso, enquanto outras são produto de pesquisas de longo prazo. O artigo anterior "Discretização da série de preços, componente aleatória e ruído" considerou o uso do gráfico de blocos e descreveu os motivos de seu uso. Portanto, eu usarei o gráfico de blocos em vez do gráfico de velas.

No meu artigo anterior intitulado "O que é uma tendência e qual estrutura o mercado se baseia: Tendência ou lateral?", eu desenvolvi uma definição para o conceito de tendência e fiz um estudo para saber se a estrutura do mercado é baseada em tendência ou lateral. Recomendo a leitura deste artigo para que você possa entender as próximas ideias.

A análise mostrou que a maioria dos mercados possui uma estrutura de tendência, o que significa que a probabilidade de uma continuação da tendência é maior do que a probabilidade de uma reversão. Isso decorre do fato de que a densidade de distribuição dos incrementos em N passos para as séries de preços é mais ampla e inferior do que para um processo com probabilidade de 50% de reversão em cada passo. Um exemplo é exibido na figura 1.

amd distrib

Figura 1.

Nesta figura, o tracejado em vermelho exibe a distribuição de referência da densidade de probabilidade de incrementos para um processo de 40 passos, em que a probabilidade de uma reversão a cada passo a seguir é igual a 50%. 5000 amostras foram usadas aqui. O histograma branco mostra os valores medidos para 40 passos das ações da AMD (novamente, para 5000 amostras). O número de passos verticais e o número de passos pelo preço em 40 passos foi calculado para 5000 medições; o resultado foi exibido como um histograma.

Em outras palavras, 5000 segmentos de 40 passos foram usados para calcular quantos passos cada um dos segmentos passou verticalmente, o resultado foi exibido como um histograma. Se nós tomarmos um exemplo das ações da AMD (40 passos), o preço ultrapassou 0 passos verticais 390 vezes; para a referência, o preço deve passar de 626.85 vezes.

Este gráfico mostra que o preço do mercado passou de zero passos verticais em 40 passos com muito menos frequência do que um processo no qual a probabilidade de reversão em cada passo seguinte é de 50%. Portanto, o gráfico analisado tem uma probabilidade de continuação da tendência acima de 50% e, portanto, é provável que a ação continue a tendência. Em outras palavras, após passar de 10 pontos, o preço tem mais probabilidade de se mover outros 10 pontos na mesma direção do que de reverter. 

passos verticais
Figura 2.

A Figura 2 mostra um exemplo de como o número de passos verticais foi contado. Aqui, nós calculamos quantos blocos o preço passou verticalmente para esses 40 blocos (etapas). Na figura acima, o preço ultrapassou 7 passos verticais em 40 passos. Em seguida, nós analisamos outras 4999 amostras de 40 passos cada e medimos seu movimento vertical. Os resultados medidos são exibidos como um histograma no qual o eixo X mostra uma amplitude e o eixo Y mostra o número de ocorrências que essa amplitude é atingida.

Análise do padrão encontrado

Depois que um padrão é encontrado, ele precisa ser analisado. Obtemos outros símbolos de negociação e escalas de tamanho de bloco para entender se o padrão encontrado só é típico para este instrumento de negociação específico com um arquivo específico, ou se ele se aplica a todos os instrumentos de negociação em qualquer escala. Neste exemplo, eu analisei 30 pares de moedas, muitas ações negociadas nos mercados russo e americano, uma dúzia das principais criptomoedas e commodities. Todas as escalas, com o tamanho do bloco de um ponto a milhares de pontos, foram usadas para cada símbolo. De acordo com a conclusão da análise, todos os instrumentos de negociação tendem a ter uma estrutura baseada em tendências em qualquer escala, mas a natureza da tendência enfraquece conforme a escala aumenta.

Os seguintes padrões foram detectados: os mercados tendem a apresentar tendências em qualquer escala, mas a força da tendência é enfraquecida conforme as escalas forem mais altas. Isso significa que depois de passar N pontos verticalmente, há uma probabilidade de mais de 50% de que o preço se mova na mesma distância e direção. A vantagem desse padrão é que ele permite o uso de uma estratégia de tendência simples para negociação, onde você pode abrir uma posição de compra após cada passo de alta e abrir uma posição de venda após cada passo de baixa. 

Depois disso, a abordagem aplicada é analisada. Talvez este não seja o padrão que nós encontramos, mas um erro no método de análise da estrutura do mercado. Nesse caso, os mercados não estão em tendência e nós não podemos gerar lucro com a suposição acima. Nós precisamos começar pelo básico e entender como o bloco no qual encontramos as tendências é construído. Você pode usar o indicador de bloco apresentado no artigo anterior intitulado "O que é uma tendência e qual estrutura o mercado se baseia: Tendência ou Lateral?". Nesse caso, a série de preços é quantizada ("fatiada") em blocos de N pontos cada. Um novo bloco de N pontos é formado toda vez que o preço ultrapassa N pontos do ponto de referência anterior. Se o tamanho do bloco for de 10 pontos, o preço se move 10 pontos e forma outro bloco com preços de abertura e fechamento. Em seguida, esperamos até que o preço se mova mais 10 pontos em uma direção e feche outro bloco, e assim por diante. Isso parece fácil à primeira vista, mas os blocos são construídos usando os preços de fechamento das velas de 1 minuto - isso será importante mais tarde.

delta

Figura 3.

Uma análise posterior revela 2 problemas:

  1. Delta entre o fechamento da vela e o fechamento do bloco. A Figura 3 mostra uma situação em que o preço de fechamento de um bloco em queda é maior do que o preço de fechamento de uma vela em queda. O delta entre o fechamento do bloco e o fechamento da vela pode estragar todo o lucro que planejamos gerar ao explorar o ideal de uma tendência. A razão está ligada à nossa intenção de usar um algoritmo simples: abrir posições de compra após cada bloco crescente e de venda após cada bloco decrescente. Como os blocos são formados no fechamento da vela, o sinal de um bloco formado só será gerado após o fechamento da vela. Devido a isso, a posição será aberta a um preço pior. Esse delta pode devorar todos os lucros e o retorno esperado será zero.
  2. Comissões e spread. Talvez a tendência do mercado seja apenas suficiente para compensar o spread e as comissões. Neste caso, se abrirmos/fecharmos posições à mercado, as perdas provenientes da abertura a um preço pior e as comissões serão maiores do que todos os lucros que podem ser gerados usando este padrão. Bem, nós podemos usar as ordens limitadas nos mercados de bolsa para eliminar os spreads, mas nós ainda temos que pagar a comissão. Além disso, as ordens limitadas não eliminam os spreads no mercado de forex.

Assim, foram determinados dois problemas que podem impedir que você gere lucro a partir do padrão detectado. O que será apresentado a seguir poderá ajudar a compreender a influência dos problemas no lucro resultante:

  • Medir a probabilidade de continuação da tendência para um instrumento específico em uma grande amostra - isso permite obter o valor de probabilidade exato para calcular o retorno esperado.
  • Coletar estatísticas de pontos para o delta entre o fechamento do bloco e o preço de abertura da posição esperada e encontrar o valor médio.
  • Encontrar o spread médio ao trabalhar com ordens à mercado ou ao negociar símbolos forex e adicionar comissões.
  • Subtrair todos os custos indiretos calculados na moeda de depósito do retorno esperado resultante e obtenha uma previsão para o retorno esperado real do sistema.
  • Se o retorno esperado resultante permanecer acima de zero, nós podemos prosseguir para a próxima etapa.

Seria correto executar todas as etapas acima, mas uma solução mais interessante é escrever um robô de negociação simples e verificar isso na prática. Pelo menos, seria mais interessante visualizar os resultados da operação de um algoritmo pronto neste artigo. Pode haver outros recursos específicos que nós deixamos passar. Agora, suponha que nós calculamos tudo, recebemos um resultado positivo e desejamos criar um algoritmo de negociação com base neste padrão. Portanto, vamos para a próxima etapa.

Desenvolvimento de uma hipótese que explique a presença desse padrão

É perigoso usar o padrão encontrado sem ter uma hipótese que explique sua natureza. Nós ainda não sabemos por que o padrão existe e se ele é estável. Nós não sabemos quando ele desaparecerá e quando aparecerá novamente. Ao investir dinheiro real nas negociações, é necessário ser capaz de monitorar a presença de um padrão e entender quando o depósito teve um rebaixamento prolongado do seu máximo, se este se recuperará em breve, e se caso o padrão desapareça está na hora de parar o robô. É exatamente o momento que distingue um robô lucrativo de um deficitário. Por isso, é necessário desenvolver uma hipótese que explique a presença desse padrão. Esta hipótese pode ser posteriormente transformada em uma teoria e usada para ajustar os modos de operação do algoritmo.

O padrão existe em todos os instrumentos analisados e em todas as escalas, mas a tendência diminui em escalas maiores. Provavelmente, os dois fatores mencionados acima (delta e comissão) realmente afetam esse padrão. Portanto, vamos apresentar duas teses:

  • Quanto maior for o tamanho do bloco, menor será o delta relativo durante o fechamento do bloco e os erros ao abrir/fechar uma posição. Isso ocorre porque todos os blocos são baseados em preços de fechamento da vela de 1 minuto e seu tamanho é bastante estável em um determinado intervalo. Consequentemente, quanto maior o tamanho do bloco e menor for o delta, menor será a tendência que o instrumento tende a ter. Assim, o erro no método de determinação da tendência é reduzido.
  • Quanto maior o tamanho do bloco, menor a influência do spread e das comissões nas características do mercado, porque o spread e o tamanho da comissão tornam-se pequenos em relação ao tamanho do movimento. Como o mercado é bastante eficiente, ele pode reagir a esse fato diminuindo proporcionalmente a tendência. 

Uma pequena observação aqui: mesmo se eliminarmos os erros do delta em pequena escala, os mercados estão de fato em tendência, mas sua tendência é apenas o suficiente para compensar o spread e as comissões. Os desenvolvedores de algoritmos de escalpelamento frequentemente cometem erros porque não sabem desse fato. O que eles pensam: "Preciso encontrar uma corretora com comissões menores e meu robô de escalpelamento começará a gerar lucro. Ele vai mostrar ótimos resultados se eu conseguir reduzir o spread e as comissões.” Ele não vai, porque a tendência do mercado em menor escala só pode cobrir o spread e a comissão. Se o spread e as comissões fossem menores, então outros participantes do mercado já teriam usado esse padrão e destruído esta oportunidade. Isso não se refere a todos os scalpers - eu quero dizer apenas robôs de negociação simples que não usam "front running", análise de volume da profundidade do mercado e outras técnicas de trabalho.

Suponha que além do mercado analisado, todos os outros mercados sejam baseados em tendência. Mas por que todos os mercados são baseados em tendências?

Vamos começar com uma pergunta simples: de onde vem o lucro nas negociações do mercado financeiro? Uma vez que os participantes negociam entre si (mesmo se você negociar forex OTC), você ganha o dinheiro de alguém e perde a mesma quantia mais a comissão da corretora. Os participantes do mercado compram e vendem ativos uns dos outros, e todos procuram se beneficiar disso. Isso significa que tanto o comprador quanto o vendedor tentam obter o máximo benefício de um negócio. Ao mesmo tempo, o comprador pensa que comprar é lucrativo e o vendedor pensa que vender é lucrativo. Um deles está claramente errado? Ambos podem ter lucro como resultado, quando o comprador vende o ativo a um terceiro, mas mais cedo ou mais tarde haverá uma contraparte que perderá dinheiro. Como resultado, a negociação é baseada na ideia de que uma das contrapartes cometerá um erro ao determinar o lucro.

Se você não entende os preços nos mercados de bolsa, recomendo que leia primeiro o artigo intitulado "Princípios da Precificação da Bolsa Tomando como Exemplo o Mercado de Derivativos da Bolsa de Moscou". Se você souber o básico, será mais fácil entender a ideia. Na verdade, não importa qual mercado você negocia, bolsa, cripto ou forex. Os fundamentos da precificação são os mesmos em todos os lugares. No entanto, as condições de negociação e as possibilidades de análise podem ser diferentes.

Para simplificar, vamos considerar as opções do limite para o formato da série de preços. Dois cenários opostos são possíveis para o gráfico de preços: uma tendência linear infinita e uma senoide. Uma senoide seria conveniente, pois todos saberiam quando comprar e vender um ativo. Um gráfico ascendente linear também seria conveniente: obviamente, você precisa comprar constantemente para gerar lucros. Mas essas formas de gráfico são impossíveis, porque não haverá compradores nas altas e não haverá vendedores nas baixas. A Figura 1 mostra um exemplo hipotético de uma situação em que o gráfico de preços é sinusoidal e uma Profundidade do Mercado apropriada.

sinus
Figura 4.

Portanto, se o gráfico de preços for sinusoidal, não haverá pessoas dispostas a vender o ativo na mínima da profundidade do mercado, porque todos sabem que o preço não cairá. Pelo contrário, todos vão querer comprar esse ativo pelo preço mínimo. Como não haverá pessoas dispostas a vender o ativo, nenhum negócio será realizado, e o preço não poderá mover-se nessa trajetória. O mercado começará a buscar um preço de equilíbrio, que seja adequado para os compradores comprarem e para os vendedores venderem.

Uma situação semelhante ocorrerá para o gráfico ascendente linear. Como todos sabem que o preço do ativo está crescendo o tempo todo, ninguém o venderá e, se ninguém vender o ativo, ninguém poderá comprar. Isso significa que esse gráfico de preços também é impossível. Portanto, os compradores devem comprar e os vendedores devem vender para que exista um gráfico de preços. Deve haver alguém que cometa um erro ao determinar o benefício. No entanto, como cada participante busca maximizar o lucro e não quer cometer erros, o gráfico deve ser mais complexo do que uma senoide e mais complexo do que um gráfico ascendente linear.

O gráfico de preços em um mercado eficiente deve estar em algum lugar no meio, entre os gráficos linear e senoidal. Sua estrutura deve ser complexa o suficiente para que o lucro do comprador e do vendedor não seja óbvio. Os gráficos sinusoidal e linear são caracterizados por baixa entropia. A entropia deve ser maior para permitir a realização dos negócios. Quanto mais participantes no mercado e quanto mais "espertos" eles forem, mais forte será o gráfico de preços que tenderá à entropia máxima.

Se você considerar a entropia de Shannon, ela assume seu valor máximo em uma distribuição uniforme. O processo de mercado não é uniforme, mas é mais como uma normal. No entanto, uma distribuição normal pode ser obtida a partir de uma distribuição uniforme e vice-versa. Além disso, nós usamos os blocos com um tamanho de passo fixo. Em outras palavras, a entropia máxima é a característica de um processo que não possui regularidades, no qual a probabilidade da mudança de direção a cada movimento seguinte é de 50%. Mas nossa análise mostra que a probabilidade da mudança de direção para o gráfico do mercado é diferente de 50%, o que significa que há memória e a entropia não é máxima.

O mercado se esforçará para obter a entropia máxima, mas esse estado só será alcançado quando houver um número infinito de participantes (liquidez muito alta) ou quando os participantes forem infinitamente "inteligentes". "Inteligente" aqui se refere à capacidade de determinar padrões complexos. Os participantes "mais inteligentes" podem identificar padrões mais complexos e menos óbvios. Um participante infinitamente "inteligente" pode identificar e explorar absolutamente todos os padrões. A condição (número infinito de participantes ou participantes infinitamente inteligentes) é usada porque um número infinito de participantes terá capacidade computacional infinita, e eles serão capazes de identificar todos os padrões usando força bruta, mesmo que não sejam muito "inteligentes". 

Essa hipótese explica por que os gráficos de preços de instrumentos financeiros estão se tornando mais complexos. No início do século 20, podia-se lucrar simplesmente usando uma MA. Agora, conforme o algoritmo de negociação se desenvolve, os participantes se tornam "mais inteligentes", os padrões se tornam mais complexos, a entropia aumenta e fica mais difícil de ganhar dinheiro no mercado. O que significa "tornar-se mais inteligente"? Eles têm maior poder de computação, tomada de decisão mais rápida, a capacidade de determinar seus benefícios com mais rapidez e precisão e a capacidade de encontrar padrões mais complexos.

Mas nós encontramos um padrão bastante simples. Isso pode ser explicado por um fluxo constante de capital no mercado. Os participantes do mercado não obtêm todos os lucros e um componente de tendência aparece. A entrada de capital está ligada à criação de dinheiro. Cada país emite constantemente sua própria moeda, mantendo um certo nível de inflação. Essa emissão de dinheiro provavelmente cria o componente de tendência.

As seguintes conclusões podem ser feitas a partir da hipótese que explica o padrão: 

  • A emissão contínua de dinheiro faz com que o mercado se torne uma tendência. Nesse caso, ativos em constante desenvolvimento com alta atratividade de investimento devem ter uma estrutura de tendência mais forte do que ativos sem desenvolvimento e os mercados com atratividade fraca de investimento.
  • A força da tendência do símbolo diminuirá com o tempo, porque o número de participantes aumenta, os participantes se tornam "mais inteligentes" e o ativo não pode se desenvolver indefinidamente. A taxa de desenvolvimento e a atratividade dos ativos diminuem com o tempo, embora cada ativo seja diferente.
  • Os pares de moedas desenvolvidos (como o EURUSD) devem ter força de tendência menor do que as ações emergentes, porque os pares de moedas populares atraem mais participantes que fazem mais negócios, o que aumenta a entropia. Além disso, as moedas são negociadas por bancos que precisam realizar operações cambiais e têm grandes recursos para criar algoritmos de negociação "inteligentes" a fim de gerar lucro adicional. Além disso, os pares de moedas como o EURUSD têm liquidez muito alta, e alta liquidez leva a uma tendência mais fraca.

Testando hipóteses

Na seção anterior, "Desenvolvimento de uma hipótese que explique a presença desse padrão", apenas apresentamos uma hipótese em um esforço para explicar a existência de um padrão. A hipótese não está 100% correta e pode conter imprecisões, pois é apenas uma etapa do processo de desenvolvimento de um algoritmo. Este é um exemplo de como você pode desenvolver um raciocínio lógico enquanto explica um padrão. Essa abordagem é usada para evitar superstições de mercado, tanto quanto possível. Por exemplo, se nós tivéssemos um padrão como: "Se o RSI (Estocástico / MACD / ondas de Elliott / sua variante) entrar na zona de sobrecompra e formar um padrão, então venda", então você deve se perguntar: "Por que isso deveria funcionar?" e "Quais são as razões fundamentais para que isso funcione?"

Nós testaremos a hipótese de modo grosseiro, sem entrar em detalhes, enquanto nós precisamos entender se as conclusões se correlacionam com os dados reais. Nós podemos comparar o grau de tendência de diferentes instrumentos. De acordo com o pressuposto, os instrumentos de negociação que se desenvolvem ativamente e são atraentes para o investimento devem ter uma tendência mais forte do que os desenvolvidos ou menos atraentes para o investimento. De acordo com a segunda suposição, quanto mais participantes negociarem um ativo, maior será a liquidez e menor será a sua tendência. Vamos fazer uma verificação simples dessa suposição.

No final do artigo "O que é uma tendência e qual estrutura o mercado se baseia: Tendência ou Lateral?", comparamos o grau de tendência de vários ativos, incluindo EURUSD, AMD, AAPL e outros. Vamos realizar uma comparação semelhante usando os 4 símbolos como exemplo:

  • O par de moedas EURUSD é um ativo que atrai o maior número de participantes e, portanto, apresenta baixa atratividade de investimentos e alta liquidez. As moedas têm uma atratividade de investimento baixa porque há inflação: o dinheiro sempre se deprecia e investir em uma moeda não é lucrativo no longo prazo.
  • As ações da Apple (AAPL) são o instrumento de investimento mais atraente e em desenvolvimento, negociado por um grande número de pessoas físicas. A ação tem alta liquidez, mas é significativamente menor do que o EURUSD.
  • As ações do Sberbank (SBER) têm liquidez significativamente mais baixa, menor atratividade de investimento em escala global do que a da Appl, e o número de participantes é correspondentemente menor.
  • Ações da AMEZ. Eles têm atratividade de investimento muito baixa e liquidez muito baixa.

EURUSD

Figura 5a.

AAPL

Figura 5b.

SBER

Figura 5c.

AMEZ

Figura 5d.

Como pode ser visto nas Figuras 5, o EURUSD tem um baixo grau de tendência = 1.068, as ações da Appl têm tendência alta = 1.3, Sberbank tem tendência de 1.168, ou seja, menor que a de Appl, mas maior que a do EURUSD. As ações da AMEZ têm uma estrutura lateralizada e seu grau de tendência é inferior a 1.

A seguinte conclusão pode ser feita: a suposição de que a alta atratividade do investimento aumenta o grau de tendência, e a alta liquidez e um grande número de participantes reduzem o grau de negociações não contradiz os dados experimentais, o que significa que a hipótese pode ser usada no futuro.

Desenvolvendo um algoritmo de negociação

Vamos desenvolver um algoritmo de negociação para o padrão encontrado. O padrão é simples, portanto, o algoritmo de negociação também será simples. A negociação será baseada em blocos, o que significa que os gráficos de velas M1 devem ser convertidos em blocos de N pontos cada. O algoritmo de construção de blocos será integrado ao robô de negociação. O algoritmo de negociação seguirá diretamente da fórmula para determinar o retorno esperado:

m=(P(tp)*tp)-(P(sl)*sl)


onde:

  • m  retorno esperado,
  • P(tp)  a probabilidade de uma negociação lucrativa, 
  • P(sl)  a probabilidade de uma negociação perdedora,
  • tp  tamanho médio das negociações lucrativa,
  • sl — tamanho médio das negociações perdedoras.

Ele funcionará da seguinte forma:

  1. Abrimos uma posição após o fechamento de outro bloco de baixa ou de alta;
    • se o bloco estava caindo, abra uma posição de Venda;
    • se o bloco estava subindo, abra uma posição de Compra;
    • Após abrir uma posição, aguardamos um sinal de fechamento.
  2. Fechamos a posição quando um bloco na direção oposta se formar. Se uma posição de Compra for aberta, aguardamos a formação de um bloco em queda e fechamos a posição. Depois que uma posição é fechada em um bloco em queda, uma posição de Venda pode ser aberta. Assim, haverá apenas uma posição no mercado.
  3. A Figura 3 mostra o caso em que uma vela e um bloco fecham com preços diferentes e um delta é formado. Isso está conectado ao recurso específico do algoritmo de formação de bloco. Portanto, nós precisamos do controle de preços para evitar a abertura a um preço desfavorável. Vamos adicionar outra condição: se o delta entre o preço de fechamento da vela e o preço de fechamento do bloco for maior que um certo valor, uma posição não deve ser aberta - esperamos o preço retornar ao preço de fechamento do bloco e então abrimos uma posição.
  4. Adicionamos a colocação do Take Profit e Stop Loss. Eles são necessários para que o tamanho da vela seja significativamente maior do que o tamanho do bloco. Assim, as posições lucrativas/perdedoras serão fechadas não apenas quando o bloco for fechado, mas também em grandes picos;
    • O preço do SL é calculado da seguinte forma: o tamanho do bloco (BS) é multiplicado por um coeficiente das configurações (ksl); para as posições de Venda: adicionamos o resultado Sl=Bclose(op)+BS*ksl ao preço de fechamento do bloco no qual o sinal de abertura da posição foi gerado (Bclose(op)). Para posições de Compra: subtraímos Sl=Bclose(op)-BS*ksl do preço de fechamento do bloco;
    • O preço do TP é calculado da seguinte forma: o tamanho do bloco (BS) é multiplicado por um coeficiente das configurações (ktp); para as posições de Venda: subtraímos o resultado TP=Bclose(0)-BS*ktp do preço de fechamento do último bloco (Bclose(0)). Para as posições de Compra: adicionamos Tp=Bclose(0)+BS*ktp para o preço de fechamento do último bloco. Em contraste com o Stop Loss, aqui nós usamos o preço de fechamento de cada novo bloco e recalculamos o Take Profit após o fechamento de cada novo bloco. Isso ajudará a obter o lucro adicional quando aparecerem velas significativamente maiores do que o tamanho do bloco.
  5. Função de gerenciamento do lote. Além das funções de gerenciamento do lote padrão, vamos adicionar uma função que mudará o tamanho do lote de acordo com o tamanho do bloco atual. Isso permitirá preservar o nível de risco estável e o lucro quando o tamanho do bloco aumentar. Vamos introduzir o conceito de tamanho mínimo do bloco (BS mínima), em relação ao qual o tamanho do lote será ajustado. O lote de abertura da posição é o lote das configurações divididas pela proporção do tamanho do bloco atual pelo tamanho mínimo das configurações: lot = lot(set)/(BS/BS mínimo).
  6. Determinando o tamanho do bloco. Esta função é muito importante para o funcionamento estável do algoritmo. Existem várias opções possíveis:
    • tamanho do bloco fixo especificado nas configurações do formato de preço, por exemplo 0.02;
    • tamanho do bloco automático, que será vinculado ao tamanho das velas do período de trabalho atual. O tamanho da vela pode ser obtido no indicador ATR. Em seguida, multiplicamos o valor do ATR atual pelo coeficiente para obter o tamanho do bloco. Por exemplo, nós queremos negociar os blocos de tamanho 5*ATR. Portanto, com o aumento da volatilidade, o tamanho do bloco aumentará e o sistema se adaptará aos parâmetros do mercado em mudança. Você pode usar o ATR a partir do período de trabalho atual ou de um período gráfico superior, caso queira experimentar.
  7. Permissão para abrir posições de Compra/Venda. Vamos adicionar uma função que permite abrir posições de Compra e Venda separadamente. Isso permitirá uma análise separada dos sinais de Compra e Venda.

O robô resultante está anexado abaixo. Este robô tem um pouco mais de funcionalidade, mas não vamos considerá-lo neste artigo. 

Testando o algoritmo de negociação

O funcionamento do algoritmo será testado nos ativos que nós analisamos o seu comportamento. Anteriormente, nós previmos em quais ativos o algoritmo deveria hipoteticamente ser lucrativo. Agora, vamos verificar como o algoritmo funciona nesses ativos a fim de verificar a exatidão da hipótese.

Vamos testar usando o EURUSD. O símbolo tem uma tendência fraca e, talvez, isso não seja suficiente para cobrir as comissões e o delta. A operação final do algoritmo é mostrada nas Figuras 6a e 6b.

EURUSD Trade

Figura 6a.

EURUSD Trade2

Figura 6b.

Os testes foram realizados no período de 01/01/2018 a 28/07/2020, no período M1, utilizando o modo tick real. Os parâmetros não foram otimizados porque eu quero mostrar que não pode haver necessidade de otimizar um algoritmo totalmente preparado para cada par de moedas. Nós mudaremos o tamanho do bloco, o tamanho mínimo do bloco e o lote, em um esforço para a obtenção do lucro que exceda significativamente o valor da comissão.



Figura 7.

Para o EURUSD, como esperado, o spread e o delta levaram todo o lucro que deveríamos ter obtido da tendência do ativo. Como resultado, o retorno esperado é de -$1.67 por negociação. O lote foi alterado dinamicamente, dependendo do tamanho do bloco, com um lote médio igual a 0.078. Vamos tentar entender de onde vem a perda. O robô registra as informações sobre o spread. O spread médio durante a abertura e fechamento da posição é de 0.00008. Nós pagamos $159.76 de swap e abrimos 614 posições. Portanto, o swap médio por posição foi de 159.76/614=$0.2602.

Se o spread médio for 0.00008 e o lote médio for 0.078, 1 pip de EURUSD com um lote de 0.078 é igual a $0.078 e, portanto, o spread custa 0,078*8=$0.624. No total, a comissão é igual a $0.624+$0.2602=$1.104. Se nós estivéssemos perdendo uma comissão em cada negócio, o retorno esperado seria de -$1.104, mas é de $1.67, o que é $0.566 a mais. O tamanho mínimo do bloco é definido como 0.002 nas configurações, portanto, fazendo $15.6 para um lote médio de 0.078. Vamos estimar aproximadamente a mudança do saldo negativo se o gráfico de saldo fosse um passeio aleatório e o tamanho do bloco fosse sempre mínimo. Ele é calculado como 15.6*(614^0.5)=$386.55. Agora, somamos a comissão média por negociação multiplicada pelo número de negociações. 1.104*614+386.55=$1064.406.

O valor é igual a $1064.406, o que significa o rebaixamento médio do gráfico de saldo se a probabilidade de abertura da posição na direção certa for 50% e uma comissão for paga para cada posição aberta. Na verdade, nós obtemos um prejuízo de $1027.45, que está próximo desse valor. Nós podemos concluir que nós tivemos uma perda, porque o retorno esperado do nosso algoritmo é zero para o EURUSD. 

Vamos ver os resultados das ações da AAPL com mais tendência. O resultado é mostrado na Figura 8 abaixo.



A figura 8

O resultado é estavelmente positivo, com o retorno esperado igual a 19.33. Este foi um teste com um lote dinâmico (definido de acordo com o tamanho do bloco), e o tamanho do bloco foi alteador dinamicamente com a volatilidade. Vamos ver o que acontece se nós não mudarmos o lote dinamicamente. O tamanho médio do lote na Figura 8 era igual a 39. Vamos usar o lote fixo de 39 e verificar o resultado na figura 9.



Figura 9.

O resultado não mudou muito, com exceção da última negociação que foi lucrativa e alguns rebaixamentos de saldo maiores. O tamanho do bloco em ações APPL aumenta com o tempo, e um bloco maior com um lote fixo pode mostrar lucro maior, mas a probabilidade de rebaixamento pode aumentar proporcionalmente.

A seguir, vamos ver o que acontece se apenas as posições de Venda forem permitidas. Os resultados são mostrados na Figura 10.



Figura 10.

O modo Sell-only mostra uma pequena perda, mas a Figura 5b mostra a assimetria da distribuição em relação a zero, portanto, esse resultado era esperado. A seguir, vamos verificar o modo Buy-only. O resultado é mostrado na figura 11.



Figura 11.

Como você pode ver na Figura 11, o modo Buy-only mostra resultados positivos, mas não tão bons quanto o modo de Compra e Venda. Como a ação tem seções de tendência ascendente e descendente alternadas, o uso das posições de Compra e Venda torna o gráfico do saldo mais uniforme.

Vamos verificar como o algoritmo funciona em outras ações da empresa com um desenvolvimento mais ativo. Vamos começar com a AMD. Os testes serão realizados no período de 01/06/2018 a 28/07/2020, pois a corretora fornece o histórico de 1 minuto a partir desta data. Este teste é realizado usando lote dinâmico com posições de Compra e Venda. Os resultados são exibidos na Figura 12.



Figura 12.

Com as ações da AMD, o algoritmo mostra um resultado positivo estável, que corresponde às suposições feitas com base na distribuição mostrada na Figura 1. Agora, vamos verificar outra empresa com um desenvolvimento ativo, a Tesla. O algoritmo é mostrado na Figura 13.



Figura 13.

O algoritmo mostra resultados estáveis com as ações da TESLA, pois esta empresa, como as anteriores, possui alta atratividade de investimentos e grande potencial de crescimento.

Para efeito de comparação, vamos testar o algoritmo com as ações da Sberbank, que é uma das principais empresas russas. A simulação foi realizada no mesmo período de teste. As comissões são iguais às oferecidas pela corretora Otkrytie = 0.057% por volume. O teste foi realizado sem alavancagem, usando o modo de tick real. O resultado do teste é mostrado na Figura 14.



Figura 14.

Embora o Sberbank não seja tão atraente quanto os ativos acima, as ações ainda apresentam tendências usando um algoritmo tão simples, devido à baixa liquidez.

Todas as configurações e relatórios de teste estão anexados abaixo, para que você possa analisá-los detalhadamente.

Conclusão

As seguintes conclusões podem ser feitas analisando o comportamento do algoritmo de negociação criado:

  • O padrão encontrado nos permitiu criar um algoritmo capaz de gerar lucro sem a necessidade de otimizar os parâmetros para cada instrumento de negociação. Os parâmetros são alterados manualmente, mas nós sabemos de antemão porque nós definimos este ou aquele parâmetro.
  • Conhecendo o mecanismo de alteração dos parâmetros, nós podemos fazer um algoritmo totalmente automatizado.
  • Nós compreendemos claramente qual padrão nós usamos para gerar lucro e, assim, nós podemos aprender a prever o fortalecimento ou enfraquecimento do padrão no futuro.
  • A presença de um padrão em um determinado instrumento pode ser prevista usando uma hipótese.
  • A hipótese do surgimento da tendência de mercado deve ser desenvolvida e transformada em uma teoria completa que descreva as leis de precificação. Ao desenvolver a teoria, nós podemos melhorar a estabilidade, confiabilidade e versatilidade do algoritmo.
  • À medida que um instrumento de negociação específico se desenvolve, o padrão se torna menos vívido. Nesse caso, uma boa solução é mudar para os novos instrumentos de desenvolvimento ativo.
  • O método de negociação pode ser lucrativo, mas requer melhorias. É necessário reduzir ao mínimo o delta entre o fechamento do bloco e o preço de abertura da posição - esse delta ocorre devido às especificações da formação do bloco. Uma das soluções é mudar para a análise do gráfico de ticks, em vez do gráfico de minutos.
  • Conhecendo o nível de tendência médio de um instrumento, é possível coletar estatísticas sobre a mudança do grau da tendência ao longo do tempo e aproximar isso usando equações não lineares. Além disso, conhecendo as leis de mudança da tendência, é possível desenvolver um mecanismo para controlar o desvio da tendência média, a fim de aumentar a lucratividade do sistema.
  • Este algoritmo em sua forma atual é muito simples; ele foi usado apenas para testar a ideia, mas a ideia mostrou sua viabilidade e potencial. Portanto, o algoritmo pode ser modificado significativamente e usado em mercados reais.
  • É mais fácil ele gerar lucro no mercado de ações do que em forex. Um dos motivos é que os ativos do mercado de ações estão em maior tendência. Mas também existem instrumentos lateralizados, como o exemplo acima com ação da AMEZ. O algoritmo pode ser modificado para a negociação em tais instrumentos, para fazê-lo funcionar não esperando a continuação da tendência, mas uma reversão. Mas este é um tópico para um estudo separado, porque os ativos com baixa atratividade de investimento podem ter problemas de liquidez.
  • O algoritmo executa negócios à mercado; a lógica pode ser alterada para negociar ordens limitadas em um esforço para aumentar a lucratividade. Isso complicará a lógica, mas pode aumentar a lucratividade. De qualquer forma, são necessários mais pesquisa e desenvolvimento.
  • O artigo mostrou um método prático de aplicação do conceito de tendência, que foi descrito em meu artigo anterior, intitulado O que é uma tendência e qual estrutura o mercado se baseia: Tendência ou Lateral? e a aplicação prática da mudança do gráfico de velas para os gráficos de blocos descritos no artigo 

    Discretização da série de preços, componente aleatória e ruído.

O autor da ideia e do desenvolvimento é Maxim Romanov, o código do Expert Advisor foi escrito por Sergey Chalyshev de acordo com os termos de referência fornecidos anteriormente.


Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/8231

Arquivos anexados |
report.zip (706.34 KB)
Set.zip (6.23 KB)
robot.zip (13.03 KB)
Abordagem de força bruta para encontrar padrões Abordagem de força bruta para encontrar padrões
Neste artigo, procuraremos padrões no mercado, criaremos Expert Advisors com base neles e verificaremos quanto tempo esses padrões permanecem funcionais.
Negociação Forex e sua matemática básica Negociação Forex e sua matemática básica
O objetivo do artigo consiste em descrever as principais características da negociação forex da forma mais simples e rápida possível, compartilhando verdades simples com iniciantes. Aqui tentaremos responder às perguntas mais interessantes no ambiente de negociação, bem como escrever um indicador simples.
Otimização Walk Forward contínua (Parte 8): Melhorias e correções do programa Otimização Walk Forward contínua (Parte 8): Melhorias e correções do programa
O programa foi modificado com base nos comentários e solicitações dos usuários e leitores desta série de artigos. Este artigo contém uma nova versão do otimizador automático. Esta versão implementa os recursos solicitados e fornece outras melhorias, que eu descobri ao trabalhar com o programa.
Otimização paralela pelo método de enxame de partículas (Particle Swarm Optimization) Otimização paralela pelo método de enxame de partículas (Particle Swarm Optimization)
Este artigo descreve uma forma de otimização rápida por meio do método de enxame de partículas e apresenta uma implementação em MQL pronta para ser utilizada tanto no modo thread único dentro do EA quanto no modo multi-thread paralelo com complemento que executado nos agentes locais do testador.