Algoritmo auto-adaptável (Parte IV): funcionalidade e testes adicionais

28 abril 2021, 08:33
Maxim Romanov
0
692

Introdução

Antes de começar, recomendo que você leia o artigo desta série "Algoritmo auto-adaptável (Parte III): evitando a otimização". Agora é necessário, sem ler esse artigo não ficará claro do que estaremos falando.


Trabalhando dentro das séries principais

A negociação é realizada através de uma série de posições. O capital alocado para abrir uma posição para um instrumento de negociação é dividido em várias partes para tornar o ponto de entrada indistinto. O algoritmo prevê a probabilidade de reversão numa determinada área, mas não pode determinar exatamente quando o preço irá reverter, portanto, para compensar os erros que ocorrem na abertura de uma posição, o volume é acumulado por uma série de posições conforme necessário.

No artigo anterior, mostrei como o algoritmo gera um sinal para abrir posições e analisa várias escalas ao mesmo tempo para determinar a escala de tendência máxima. O algoritmo básico de trabalho também foi descrito. Mas o gráfico da série de preços não consiste numa escala. A tendência pode estar presente em várias escalas simultaneamente, enquanto pode existir um lateralização em alguma de elas. Essa particularidade deve ser usada para obter lucro.

Aqui é necessário esclarecer que por seção de tendência eu entendo um trecho onde a probabilidade de continuação da tendência é superior a 50%, e quanto à lateralização, é o contrário, a probabilidade de reversão da tendência é superior a 50%. Em outras palavras, se o bloco anterior era altista, então na seção de tendência o novo bloco também crescerá com uma probabilidade maior que 50%. No movimento lateral, ao contrário, depois de um bloco ascendente, é mais provável que apareça um bloco descendente. Descrevi essa definição em detalhes no artigo "O que são tendências e qual é a estrutura dos mercados: tendência ou lateral"

trend-flat

Fig. 1. Tendência e lateralização em diferentes escalas simultaneamente 

A Figura 1 mostra que há uma tendência de baixa pronunciada em 32 blocos de 0,00061. Mas em 32 blocos de escala 0,00131, a tendência está quase ausente. Na maioria dos casos, existem simultaneamente escalas onde a tendência está agora e escalas onde a lateralização está agora.

O algoritmo sempre inicia a análise nos blocos menores, mas no processo, o tamanho dos blocos pode aumentar significativamente. Pode aumentar a tal ponto que dentro do bloco de maior escala caberão suficientes blocos de tamanho inicial para que seja possível gerar um sinal no início de uma nova série. Um exemplo é mostrado na Figura 2.

inside from block

Fig. 2. Movimentos dentro de um bloco de grande escala

Na Figura 2, peguei um dos blocos e mostrei o que estava acontecendo dentro dele. Em blocos de grande escala, vemos um bloco ascendente, mas se observarmos o que acontece lá dentro, poderemos ver como se desenvolveram os eventos. Se o algoritmo mudou para uma escala grande, então os processos que ocorrem dentro dos blocos desta escala ajudarão a obter lucro adicional, que será usado no futuro para aumentar a estabilidade do algoritmo.

O trabalho é realizado por séries de posições logicamente conectadas. Mas se a escala dos blocos aumentar muito e a série iniciada não tiver terminado, é necessário iniciar uma nova série de posições, independente da anterior, mas também logicamente vinculada a ela. 

Precisamos de critérios para iniciar uma nova série com uma antiga inacabada. Se apenas iniciarmos uma nova série quando o tamanho do bloco da série principal ficar maior do que o valor limite, você obterá um resultado ruim. Nesse caso, o algoritmo não será adaptativo, pois a etapa de início de nova série será definida manualmente. Esta abordagem causará que o algoritmo iniciará periodicamente novas séries numa área grande de tendência, aumentando a carga no depósito.

long trend

Fig. 3. Oscilações de menor escala numa área grande de tendência

A Figura 3 mostra um exemplo de tendência de baixa de longo prazo para GBPUSD em 2008. A reversão dessa tendência até o fechamento de uma série de posições demorou 275 dias. Existem também tendências de longo prazo. Seria errado se o algoritmo não negociasse todo esse tempo, mas esperasse que o preço retrocedesse para completar a série de posições anteriormente iniciada. A elipse vermelha mostra a área onde não podemos iniciar uma nova série, e o círculo azul mostra onde séries adicionais trarão lucro.

É necessário introduzir o conceito de timeframe base. Por timeframe, quero dizer o tamanho dos blocos. Os dados iniciais para análise são retirados do timeframe estático M1. O timeframe base é o período gráfico que o algoritmo usa atualmente para abrir posições. O algoritmo começa a analisar o estado do mercado desde o primeiro timeframe e o aumenta para o necessário, dependendo do tamanho do movimento da tendência. Se o tamanho do bloco do primeiro timeframe for 10 pontos, o tamanho do bloco do segundo timeframe será 10*KTF. Aqui, KTF é o fator de multiplicação do tamanho do bloco para obter blocos do próximo timeframe. Se KTF=1,1, e o tamanho do bloco do primeiro timeframe=10, então os tamanhos dos blocos serão os seguintes:

TF1=10 pontos, TF2=10*1.1=11 pontos, TF3=11*1.1=12.1 pontos e por aí fora.

A principal tarefa é evitar o início de uma nova série durante um longo movimento sem recuo. Se pegarmos o exemplo da Figura 3 e, em seguida, iniciar a segunda série no meio da tendência, o algoritmo fará a varredura de todas as escalas e irá imediatamente para a escala máxima ou próxima a ela. Nesse caso, o tamanho do bloco do timeframe base da segunda série se tornará aproximadamente igual ao tamanho do bloco do timeframe da primeira série, e isso não faz sentido.

Para que o sinal do início da segunda série faça sentido, é necessário que o tamanho do bloco do timeframe base não apenas se torne maior do que o limite, mas também que se deve formar um movimento lateral de amplitude suficiente no timeframe base da segunda série. Foi desenvolvido um mecanismo que é mostrado na Figura 4.

confirmed series

Fig. 4. Mecanismo de confirmação do início da segunda série

O mecanismo foi implementado da seguinte maneira. O início da segunda série se torna possível após o timeframe base da primeira série ter se tornado maior do que o limite. Após esse evento, no primeiro timeframe da segunda série, a busca pela preponderância de blocos descendentes ou ascendentes começa a dar sinais para o início da segunda série. Isso é feito da mesma forma que na primeira série. Depois de encontrado o sinal para o início da segunda série (encontrada uma área de tendência de magnitude suficiente), é necessário confirmar a possibilidade de iniciar a segunda série. Para fazer isso, é necessário encontrar uma área de lateralização no timeframe base da segunda série. Isso é necessário para garantir que a área de tendência encontrada seja parte de uma área de lateralização e não da tendência grande usada para o trabalho da primeira série.

Se, para iniciar uma série e buscar um movimento de tendência, são analisados 10 blocos (como no exemplo da Figura 4), surge a pergunta: quantos blocos devem ser levados para encontrar uma área de lateralização? Se agora definirmos esse número de forma rígida, o algoritmo não será adaptativo, o que significa que esse número de blocos deve, de alguma forma, depender do que está acontecendo no mercado.

Para determinar o número de blocos de confirmação de série, precisamos definir o intervalo em que a seção de lateralização será pesquisada. O intervalo será dado por dois valores:

  • Bmin  — número mínimo de blocos na faixa de confirmação da segunda série;
  • Bmax  — número máximo de blocos no intervalo de confirmação da segunda série;
  • NPb(s2)  — número de blocos predominantes da segunda série;
  • %PV  — porcentagem a partir das configurações para determinar o estado de lateralização.

O valor mínimo de Bmin é definido simplesmente: Bmin=NPb(s2)/(%PV/100).

Para determinar o limite superior do intervalo Bmax, é necessário calcular quantos blocos do timeframe base da segunda série cabem nos últimos 2 blocos formados do timeframe base da primeira série e adicionar a este valor os blocos do timeframe base da segunda série, para o qual ainda não se formou um bloco grande. É assim que o limite superior do intervalo Bmax é calculado. 

Vejamos o exemplo na Figura 4. Imaginemos que %PV=50, número de blocos predominantes NPb(S2)=9. Então Bmin=9/(50/100)=18. O número mínimo de blocos em que numa lateralização pode ser encontrado é 18. Para encontrar Bmax, contamos quantos blocos pequenos existem nos dois últimos grandes, na Figura 4 são 14 blocos. Depois, contamos quantos blocos pequenos são construídos à direita do fechamento do último grande, isto é 5 blocos. A seguir, encontramos a soma 14+5=19. Obtemos o intervalo Bmin=18, Bmax=19. 

Além disso, na faixa de 18 a 19 blocos do timeframe base da segunda série, procuramos uma lateralização. Para uma lateral, consideraremos aquela em que o número de blocos em queda é igual ao número de blocos em crescimento. O critério de área lateral pode ser ajustado nas configurações, porque 50% é um intervalo muito estreito. Podemos definir para 50-55% e considerar que se os blocos predominantes forem de 50% a 55%, então se trata de uma área lateral.

No processo de cálculos, Bmax pode ser bastante grande e Bmin, um valor flutuante. Por isso, é incorreto determinar a área lateral usando uma porcentagem fixa para um número de blocos diferente. Seria mais correto definir o valor no formato da probabilidade de cair na faixa e, em seguida, recalculá-lo como uma porcentagem. Para isso, foi desenvolvida a Tabela 1, mostrada a seguir.

series confirmation table

Tabela 1. Tabela para cálculo da porcentagem do número de blocos para confirmação da série.

Assumamos que o critério para uma área lateral seja 56,25% de blocos unidirecionais para uma amostra de 16 blocos. Esse percentual corresponde a 80,36% de todos os eventos que se enquadram na faixa de 2 a 16 blocos verticais. Ou seja, em 80,36% dos casos ao longo de 16 blocos, o processo passará de 2 a 16 blocos verticalmente. Dada a tabela, é possível recalcular o percentual de confirmação da série para cada número único de blocos, levando em consideração que o percentual de confirmação deve ser tal que 80,36% de todos os eventos estejam dentro da faixa de amplitude.

Utilizando a tabela, para cada número de blocos da faixa Bmin-Bmax, é calculada a porcentagem de confirmação da série.

Este mecanismo permite iniciar novas séries de posições quando a antiga ainda não era fechada e reduzia significativamente o número de situações em que o tamanho do bloco da segunda série se tornava igual ao tamanho do bloco da primeira série, enquanto a segunda série não fazia sentido.

Quando a segunda série é iniciada, ela funciona de forma totalmente semelhante à primeira, ou seja, o algoritmo contém todos os mecanismos para rastrear tendências e ajustar a escala de negociação atual. 

Assim que a segunda série começa, o algoritmo começa a rastrear o tamanho do bloco de seu timeframe base e, quando se torna maior do que o limite, a terceira série começa de acordo com as condições descritas acima. Dessa forma, quantas séries adicionais podem ser criadas, conforme necessário.

Como isso funciona

Como exemplo, vejamos a seção do gráfico mostrado na Figura 5. Esta é a mesma área mostrada na Figura 3. Para o algoritmo, essa área é complicada, com uma longa espera por uma reversão para fechar as posições.

opening positions

Fig. 5. Exemplo de criação de várias séries simultaneamente

A Figura 5 mostra como o algoritmo se comporta durante uma tendência prolongada. Após o início da série principal com posições Buy, o tamanho do bloco do timeframe base se tornou muito grande, e isso permitiu que o algoritmo criasse a segunda e a terceira séries sem esperar que o timeframe principal fechasse. Essa abordagem permite usar os movimentos de preços numa escala menor e obter lucro adicional suavizando as flutuações do depósito.

Consideremos 2 parcelas com o mesmo preço e estimemos a redução do patrimônio nesses dois pontos no tempo. O primeiro ponto será 13/11/2008 com um preço de 1,45554, as posições Buy da primeira série estão abertas e o preço vai contra as posições abertas, os fundos são $ 8265,16. Depois, o preço continua caindo e em 04/10/2009 volta ao nível 1.45554. Mas agora os fundos aumentaram em $ 1.677,57, ou seja, $ 9.942,48. Se o preço se mover contra a nossa posição, não teremos um rebaixamento tão grande quanto poderíamos sem usar o mecanismo de série adicional.

Usando flutuações no preço de um ativo que ocorrem numa escala menor, podemos reduzir significativamente os riscos que surgem ao negociar em grande escala. Ao mesmo tempo, a escala automática permite sempre operar na escala atual, e o mecanismo para confirmar uma série adicional é uma função de adaptação às condições atuais.


Compensação por perder posições e erros de tomada de decisão

Os métodos de detecção de tendência e ajuste de escala automático funcionam bem, mas não são perfeitos. No processo, o algoritmo às vezes abre posições fora do tempo. As posições podem ser abertas no início de uma tendência estendida e uma perda pode ocorrer no ponto de fechamento calculado de uma série de posições. Você não pode mover o ponto de fechamento da posição, pois ele é calculado com base nas características da série de preços. Meu artigo desta série "Algoritmo auto-adaptável (Parte III): evitando a otimização" fala sobre como calcular a reversão e porquê são selecionados esses níveis de reversão. Mas podemos calcular posições abertas erroneamente e corrigi-las.

Correção de posições erradas usando o lucro de séries adicionais

Um dos objetivos para os quais o algoritmo de série adicional foi desenvolvido é a correção de posições erradas. No artigo anterior, mostrei que a amplitude média do movimento do preço aumenta de forma não linear dependendo do número de estapas dadas e, consequentemente, a perda média numa posição aberta erroneamente aumenta de forma não linear a partir do número de estapas dadas.

average loss

Fig. 6. Regra do aumento da perda com o número de etapas

A Figura 6 mostra um padrão aproximado segundo a qual a perda média para uma posição aberta aumenta. Para cada instrumento, os parâmetros serão ligeiramente diferentes, mas é importante que a forma da curva seja preservada aproximadamente, e esse parâmetro possa ser medido. Esta regra permite prever a perda média de uma posição aberta incorretamente e mostra a possível eficiência de usar o lucro de séries adicionais para fechar posições abertas incorretamente.

Parte do lucro recebido com o trabalho das séries adicionais será usado para fechar as posições abertas indevidamente. Para mim, nas configurações, tornei possível configurar este parâmetro. Parte do lucro obtido terá que ser gasto na manutenção a nível de estabilidade do algoritmo. Quanto melhor o algoritmo funcionar, menos lucro terá de ser gasto na manutenção dessa estabilidade. Agora, uso 80% dos lucros da série adicional para compensar as posições perdedoras.

Um método simples foi desenvolvido para identificar posições erradas. Se a série obtém uma perda no ponto de fechamento calculado, então definitivamente contém posições erradas. De todas as posições nesta série, a menos lucrativa é encontrada e o valor atual de perda para essa posição é estimado. Se esta posição pertencer à primeira série, 80% do lucro recebido da segunda série deverá cobrir a perda atual nesta posição. Se essa condição for atendida, a posição é fechada. 

Conforme você trabalha, uma reserva de fundos é acumulada que será usada para compensar posições não lucrativas. Quando necessário, esses fundos são usados para compensar a perda numa posição aberta e a perda no fechamento da posição é deduzida dessa reserva. O algoritmo continua a acumular reservas para a próxima compensação. Isso continua até que todas as posições erradas sejam fechadas ou a série principal termine. Após o final da série principal, todos os fundos não utilizados da reserva são zerados.

As posições abertas erroneamente da primeira série permanecem no mercado até que o lucro da segunda série permita que sejam fechadas com um lucro condicional igual a zero. Funciona de forma semelhante para o resto da série. O lucro da terceira série é usado para compensar as posições erradas da segunda série e assim por diante. 

A Figura 5 mostra que algumas posições Buy da primeira série foram fechadas com perda, sem esperar pelo ponto de fechamento total da série, este foi o algoritmo de compensação de perda.

Assim, as flutuações usadas para lucro na segunda série são sempre menores que a amplitude da tendência da primeira série. A amplitude da tendência na terceira série é ainda menor.Séries adicionais não levam a um aumento significativo no rebaixamento do patrimônio líquido, mas trazem lucro adicional, que é usado para manter a estabilidade. O número de séries adicionais abertas simultaneamente depende exclusivamente do estado atual do mercado e não é configurável pelo operador, esta é outra função adaptativa. O algoritmo em si tem uma estrutura fractal; ele se copia em diferentes escalas. Ao mesmo tempo, ele ajusta seu trabalho para cada escala individualmente.

Correção do ponto de fechamento da série com base nas flutuações de escalas menores

Como escrevi anteriormente, o ponto de fechamento da série (recuo da tendência principal) depende da velocidade com que esse recuo ocorre. A velocidade é medida pelo número de etapas necessárias para que o preço seja revertido. Quanto maior o número de etapas, menor será a quantidade de retração do movimento da tendência. Essa característica está associada às razões fundamentais para o surgimento de tendências. As tendências criam volumes de transações que excedem a liquidez atual. Ou seja, abertura ou fechamento de posições com grandes quantias. Depois que a posição condicional que criou o movimento de tendência foi aberta, ela precisa ser fechada, e isso requer liquidez. Se for fechada instantaneamente, a reversão será 100% da tendência anterior, ou seja, aparecerá exatamente o mesmo movimento da tendência na direção oposta. Porém, quanto mais lento for o fechamento da posição, menor será a reversão. Nesse caso, não importa se um participante de negociação causa um movimento ou vários, o mecanismo é o mesmo.

O algoritmo ajusta o ponto de fechamento com base no número de blocos no intervalo do timeframe base. Mas em grande escala, isso não é suficiente, dentro de blocos de grande escala há flutuações de preços e eles também devem ser levados em conta para corrigir o ponto de fechamento, pois os blocos são apenas uma representação condicional dos movimentos de preços, criados por conveniência.

Podemos levar em conta todas as oscilações, e assim seria o mais correto possível, mas por simplicidade (o algoritmo já é complexo) fiz de forma diferente. Para corrigir o ponto de fechamento, será utilizado o lucro das séries adicionais do instrumento. Isso é 80% do lucro recebido pelo fechamento de séries adicionais. Calcula-se quanto lucro a série receberá na moeda de depósito se todas as posições forem fechadas no ponto de fechamento calculado. O lucro atual para esta série é usado e o lucro disponível no momento do trabalho de séries adicionais é adicionado a ele. Se o valor resultante for maior ou igual ao lucro estimado no ponto de fechamento, a série principal termina. A reversão é considerada encerrada e a sequência encerrada.

Close point

Fig. 7. Correção do ponto de fechamento com base no lucro de séries adicionais

A Figura 7 mostra um exemplo de correção do ponto de fechamento com base no lucro das séries adicionais. As posições abertas devem ser fechadas no ponto superior em 1,69846 com um lucro de $ 915,66. Quando o preço atingiu o nível de 1,60887, o nível de lucro atual era de $ 109,35, mas devido às grandes flutuações, as séries adicionais ganharam $ 1009, e 80% desse lucro é usado para o fechamento antecipado da série, ou seja, $ 807.2 está disponível. A desigualdade 109.35+807.2=916.55>915.66 é verificada e a série termina antes do previsto.

Esse mecanismo é necessário para determinar com mais precisão o ponto de fechamento e, com menos frequência, criar situações em que a reversão já foi concluída e a série ainda não foi encerrada.

Correção de posições erradas usando lucros de negociação de outros ativos

O algoritmo descrito acima funciona e ajuda a reduzir a volatilidade dos fundos, mas o sistema foi desenvolvido para funcionar simultaneamente com 28 instrumentos de negociação. Certos instrumentos de negociação podem estar num estado de tendência excessiva para cima ou para baixo por um longo tempo. Portanto, para reduzir ainda mais a volatilidade do gráfico de rendimento, precisamos usar o lucro obtido com o fechamento de cada primeira série em outros instrumentos. 

Esta abordagem funcionará se a tendência em alguns instrumentos de negociação for acompanhada por uma lateralização em outros. Na Figura 6, mostrei uma regra de exemplo segundo a qual a amplitude média de oscilação num instrumento aumenta com o número de etapas. Conhecendo essa regra, podemos dizer que em 28 instrumentos de negociação tudo acontecerá da mesma forma. Ou seja, a distância média percorrida pelo preço verticalmente será aproximadamente proporcional ao tamanho da etapa multiplicado pelo número de etapas à potência de 0,5 (haverá uma potência para diferentes instrumentos e mercados). Para maior clareza, é melhor pegar 28 instrumentos de negociação e calcular quantos eles percorrerão em média ao longo de n etapas, ou melhor ainda, exibi-los no gráfico.

Como exibir 28 instrumentos de negociação independentes num gráfico? Cada um deles tem sua própria volatilidade e uma gama diferente de flutuações, todos sabem que o comportamento de cada instrumento de negociação não é semelhante ao de outro. Eles não são semelhantes apenas na forma como os vemos no gráfico. Se recalcularmos o tamanho dos candles não em pontos, mas, sim, numa única moeda (por exemplo, em dólares), e assumirmos que fazemos transações por um valor fixo em dólares, então a escala e a volatilidade de cada instrumento se tornará aproximadamente o mesmo. Num sistema de negociação, o fator decisivo será quantos dólares o preço se move verticalmente ao longo de n etapas ao negociar um valor fixo.

Precisamos ir do gráfico em pontos para o gráfico de lucro. É importante notar que estamos falando de um valor fixo para negociação, não de um lote fixo, são coisas completamente diferentes. Assumamos que a negociação seja realizada em pares de moedas no valor de $ 1000 para cada instrumento. Em seguida, haverá 4 tipos de fórmulas no total, dependendo do formato do par de moedas. Vou recalcular o tamanho dos candles de pontos para dólares usando as seguintes fórmulas:

  • formula EURUSD;
  • formula USDCAD;

  • formula eurgbp;

  • formula cadchf.

Em fórmulas: 

  • EURUSD, USDCAD, EURGBP, CADCHF  — tamanho do candle em dólares para o par de moedas correspondente ao negociar a $ 1000;
  • EURUSD(-1), USDCAD(-1), EURGBP(-1), CADCHF(-1)  — preço de fechamento do candle anterior;
  • EURUSD(0), USDCAD(0), EURGBP(0), CADCHF(0)  — preço de fechamento do último candle formado;
  • 1000 — valor do trade em dólares.

Consideremos a primeira fórmula para EURUSD e todos os pares de moedas em que um trade é feito com o valor na segunda maior moeda. Os trades serão feitos no valor de $ 1000, então a lógica para determinar o tamanho do candle será a seguinte: $ 1000 para venda -->> EUR é comprado à taxa do candle anterior (candle -1) -->> no valor de $ 1000, uma transação reversa com EUR é feita à taxa do último candle fechado (candle 0) -->> do número de EUR comprados por 1000 $ à taxa do candle (-1), o número de EUR vendidos por 1000 $ à taxa do candle zero é subtraído -->> o lucro/perda resultante em EUR é convertido em dólares à taxa EURUSD atual --->> lucro/prejuízo recebido em dólares. Este é o tamanho do candle em dólares. 

Além disso, para construir um gráfico com tamanhos de candles em dólares, precisamos adicionar o tamanho de cada candle consecutivo ao tamanho da anterior.

Para USDCAD e todos os pares de moedas em que o dólar está em primeiro lugar, o cálculo é mais fácil, a transação já é em dólares. Para os pares de moedas, o propósito do cálculo é semelhante ao da fórmula para EURUSD, exceto que no par EURGBP, 1000 $ deve ser convertido em GBP, então uma operação de negociação deve ser realizada e, em seguida, o lucro resultante em EUR deve ser convertido de volta em dólares. Para CADCHF, o propósito é semelhante às opções anteriores, mas com a condição de que precisamos recalcular num par com o dólar em primeiro lugar, e a fórmula seja modificada da maneira adequada.

Em qualquer caso, o objetivo da operação é calcular quantos dólares podemos ganhar/perder trocando $ 1000 por um candle de uma dada amplitude para cada par de moedas. 

Nesse algoritmo, 80% de todo o lucro recebido no fechamento de cada primeira série de qualquer instrumento de negociação será usado para compensar as posições abertas erroneamente do instrumento para o qual tal compensação é necessária. Assim, todo o algoritmo trabalhará no fechamento oportuno de "posições excedentes" não apenas para seu próprio instrumento de negociação, mas também para qualquer outro instrumento de negociação. O objetivo é fechar posições erradas o mais rápido possível para que seções de tendência prolongadas não levem ao rebaixamento significativo de patrimônio líquido. Isso deve reduzir a volatilidade do gráfico de rendimento.

28 currency pairs

Fig. 8. Caminho percorrido ao longo de 10 000 etapas para 28 pares de moedas

A Figura 8 mostra os gráficos de lucro para 28 pares de moedas simultaneamente, calculados usando as fórmulas mostradas acima. Os gráficos são construídos para 10 000 candles no timeframe H4. Para a análise, foram retirados dados de 2004 a meados de 2010. Vou anexar o arquivo excel ao artigo, você pode substituir seus dados e ver as fórmulas com que os gráficos são construídos.

A Figura 8 mostra que, durante uma tendência, alguns pares de moedas ficam estáveis em relação a outros. Isso confirma a ideia de que é possível reduzir a volatilidade do gráfico de rendimento compensando as posições abertas erroneamente com o lucro recebido da negociação de todos os instrumentos ao mesmo tempo. Sempre haverá um instrumento de negociação para o qual o algoritmo lucrará no momento atual.

Esse comportamento é típico não só do mercado Forex, mas também do mercado de ações com algumas ressalvas. O mercado de moedas é frequentemente simétrico para situações de alta e baixa, enquanto o mercado de ações é assimétrico. O quadro do mercado acionário será aproximadamente o mesmo do mercado de moedas, com uma correção para o fato de que haverá um viés de alta e uma grande correlação entre os ativos. Mas se pegarmos instrumentos de negociação de bolsas de diferentes países, a correlação pode ser reduzida significativamente até uma negativa de ativos entre si.

Além disso, medi o tamanho médio do candle em dólares de todos os instrumentos de negociação, era $ 2,26. Sabendo o número de etapas e o tamanho médio da etapa, podemos estimar quanto teoricamente, em média, todas as ferramentas irão na vertical. Para isso, US$2,26*10.000^0,5=US$226. Na realidade, todos os instrumentos de negociação passaram em média, ao longo de 10.000 etapas, $ 216,41, que está próximo do valor teórico.

Nesse algoritmo, 80% de todo o lucro recebido no fechamento de cada primeira série de qualquer instrumento de negociação será usado para compensar as posições abertas erroneamente do instrumento para o qual tal compensação é necessária. Assim, todo o algoritmo trabalhará com base no fechamento oportuno de "posições excedentes" não apenas para seu próprio instrumento de negociação, mas também para qualquer outro. O objetivo é fechar posições erradas o mais rápido possível para que seções de tendência prolongadas não levem ao rebaixamento significativo de patrimônio líquido. Isso deve reduzir a volatilidade do gráfico de rendimento.

A Figura 9 mostra um exemplo de como isso funciona e como a ideia está fazendo seu trabalho. Para o teste, foram selecionados instrumentos de negociação não correlacionados e o teste foi realizado para 2020 no timeframe M1. É importante ressaltar que as configurações não foram otimizadas e são iguais para todos os instrumentos, o próprio algoritmo faz ajustes em tempo real.

GBPUSD+AUDNZD

EURCAD+CHFJPY

GBPUSD+AUDNZD+EURCAD+CHFJPY

Fig. 9. Exemplo da operação da função de compensação multi-instrumento

Primeiramente, o teste foi realizado para pares de moedas individuais a fim de avaliar o gráfico de rendimento de cada um e, em seguida, ele foi feito simultaneamente em quatro pares de moedas com modos de compensação habilitados.

Pode-se ver que o rebaixamento máximo do patrimônio líquido foi no par de moedas GBPUSD e totalizou $ 4311. O rendimento máximo também é mostrado em GBPUSD $ 1555. Além disso, uma perda de $ 109 foi obtida no AUDNZD porque o teste foi interrompido. Se o teste continuasse, a negociação teria sido lucrativa.

Usando o algoritmo de compensação de múltiplos instrumentos, foi possível reduzir o rebaixamento de capital durante o teste em quatro pares de moedas simultaneamente, de $ 4.311 para $ 3.517, ou seja, em 18%. A lucratividade total foi $ 2015,21. Além disso, o número total de transações concluídas durante a negociação separada acabou sendo 1446, e durante a negociação conjunta caiu para 1409, o que sugere que os próprios algoritmos de compensação praticamente não afetam o curso da negociação, mas melhoram a estabilidade.

Assim, quanto mais instrumentos de negociação forem usados, pode ser obtido um o gráfico de lucratividade mais suave, até um linear, se operarmos simultaneamente 1000 instrumentos de diferentes bolsas do mundo e de diferentes mercados. Podemos negociar simultaneamente nos mercados de ações e moedas, e até mesmo no mercado de criptomoedas, equilibrando de acordo com os volumes de transações para cada instrumento de negociação.


Testes

O algoritmo deve funcionar em qualquer instrumento de negociação, por isso, primeiro vou mostrar como funciona em ações AAPL (Appl). No momento, o robô não é capaz de coletar as características estatísticas do instrumento, esta função está em desenvolvimento, portanto, irei definir 2 parâmetros manualmente. Eles serão o percentual de abertura da série e o percentual de fechamento da série. Já os valores desses parâmetros foram obtidos não pelo método de otimização e ajuste, mas por meio de um indicador que será integrado ao robô. No futuro, o robô ajustará esses valores sozinho.

AAPL Buy 

AAPL Buy tester report

Fig. 10. AAPL apenas posições longas

Para a ação AAPL, os testes serão feitos separadamente: para posições de compra e para posições de venda, pois as características estatísticas do instrumento não são simétricas para o caso de crescimento e queda. Para posições Buy, os parâmetros são mais agressivos, para posições Sell são mais conservadores. Mas apenas 2 parâmetros mudam.

A Figura 10 mostra o resultado do backtest para o período de 24 de junho de 2012 a 28 de dezembro de 2020, ou seja, de 7,5 anos. O teste foi realizado no timeframe M1. Pode-se ver que o gráfico de lucratividade é plano, o rebaixamento máximo no patrimônio líquido foi de $ 858 e $ 1.704 foram ganhos. No total, foram abertas 176 posições e o fator de lucro foi de 18,13, o que é um indicador muito bom.

Muitos dirão que, para capitalizar sobre uma ação AAPL crescente abrindo apenas posições de compra, não será necessário um algoritmo complexo. Eles estarão certos. Vamos verificar como o algoritmo se comportará se apenas as posições Sell forem permitidas. Colocar posições curtas em Appl é suicídio, mas o algoritmo adaptativo permite que ele sobreviva.

AAPL sell

AAPL sell report

Figura 11. AAPL apenas posições curtas

A Figura 11 mostra como o algoritmo funcionou para a AAPL de24.06.2012 a 28.12.2020, timeframe M1. Os resultados já não são tão bons quanto as posições Buy, mas ele consegue ganhar dinheiro. Aqui, o rebaixamento máximo no patrimônio líquido foi $ 10533, e o rendimento foi $ 2234, e o fator de lucro já é muito menor e é igual a 1,4. Além disso, foram abertas 944 posições. Se ele pudesse negociar posições de compra e venda ao mesmo tempo, o resultado seria melhor, porque os algoritmos para compensar posições erradas funcionariam, reduzindo a volatilidade do gráfico de rendimento. E a situação ficará ainda melhor negociando simultaneamente em 28 instrumentos de negociação. Mas o fato de ter passado 7,5 anos em modo quase automático, sem ajustar os parâmetros ao histórico, é um resultado muito bom.

Agora é importante que ele foi capaz de se adaptar às condições difíceis. Eu peguei a ação AAPL para teste por um motivo, é obviamente um instrumento de negociação complexo para negociar posições curtas. Vamos ver o gráfico deste instrumento durante os testes.

AAPL chart

Fig. 12. Gráfico da ação AAPL de 24.06.2012 a 28.12.2020

A Figura 12 mostra o quão forte foi o crescimento da ação AAPL; nos últimos 7,5 anos, o ativo cresceu 6,3 vezes. Ganhar dinheiro num modo totalmente automático sem otimização em tal gráfico não é uma tarefa simples.

Como o algoritmo foi criado para funcionar em 28 instrumentos de negociação simultaneamente, testes adicionais serão realizados em 28 instrumentos de negociação. Primeiro, vamos olhar os resultados para o mercado FOREX. O teste usou os pares de moedas: GBPUSD, EURUSD, NZDUSD, AUDUSD, USDCAD, USDCHF, USDJPY, EURGBP, EURAUD, EURNZD, EURCAD, EURCHF, EURJPY, GBPAUD, GBPNZD, GBPCAD, GBPCHF, GBPJPY, AUDNZCH, AUDCAD, AUDCAD, NZDCAD, AUDCAD, NZDCHF, NZDJPY, CADCHF, CADJPY, CHFJPY. Para todos os pares de moedas, foram definidas absolutamente as mesmas configurações, o próprio algoritmo se adaptou em tempo real a todas as mudanças no mercado. 

O teste foi realizado no período de 01/01/2008 a 13/01/2021 (13 anos), utilizando o timeframe M1. O robô consome muitos recursos e o teste de 1 ano leva cerca de 12 dias, portanto, para paralelizar os testes, todo o intervalo de teste é dividido em seções de 1 - 2,5 anos.

2008-2009

2009-2010

2010-2011

24.06.2010 -24.06.2012

24.06.2012 - 24.06.2014

24.06.2014-24.06.216

24.06.2016 - 24.06.2018

24.06.2018-13.01.2021

Fig. 13. Testes de 28 pares de moedas de 01/01/2008 a 13/01/2021

A Figura 13 mostra testes para 28 pares de moedas simultaneamente. Pode-se observar que a negociação em quase todos os intervalos de teste terminou com um sinal de mais, exceto para o trecho de 24 de junho de 2012 a 24 de junho de 2014. Aqui, o teste terminou com uma pequena perda igual a $ 123. Isso ocorre porque o teste foi interrompido. Se o teste continuasse continuamente por 13 anos, o robô sairia do rebaixamento. Ao longo do tempo, foram abertas 14.415 posições, este valor estatisticamente significativo sugere que os resultados não foram obtidos ao acaso. O rebaixamento do patrimônio líquido tem valor de acordo com a realidade, mas em versões futuras do algoritmo é necessário melhorar os indicadores de rentabilidade e estabilidade. 

O robô é universal, vamos ver como funciona nas ações de empresas russas negociadas na MOEX. As configurações são as mesmas para moedas e também para todos os instrumentos, mas apenas posições longas são permitidas. A versão atual do robô ainda não é capaz de ajustar os parâmetros separadamente para posições curtas e longas, mas a funcionalidade está em desenvolvimento. O teste foi realizado de 01/02/2013 a 20/09/2018 (5 anos 7 meses), uma alavancagem de 1:5 foi definida no testador. Como portfólio foram selecionados os instrumentos mais líquidos: GAZP, CHMF, ALRS, HYDR, LKOH, MAGN, MGNT, MTSS, NLMK, NVTK, ROSN, RTKM, SBER, SNGS, SNGSP, TATN, VTBR, SBERP, TATNP, AFLT, FEES, GMKN, RSTI, SIBN, UPRO, MSNG, MTLR, PLZL.

moex

Fig. 14. Teste em 28 ações de empresas russas 01/02/2013 a 20/09/2018

A Figura 14 mostra os resultados do teste para 28 ações de empresas russas. Pode-se ver que o algoritmo ganha de forma bastante consistente e uniforme. A rentabilidade acabou, como no caso anterior, baixa, mas é importante que ele não perca dinheiro, mas ganhe dinheiro. Ao todo, foram abertas 5.485 posições, o que significa que o resultado não foi obtido por acaso. 

De onde vem o lucro?

Não basta fazer um algoritmo ou modelo que funcione, é preciso também entender por que funciona e de onde vem o lucro. Nesse caso, o lucro é obtido de uma fonte não óbvia, ou seja, do aumento da entropia. Estamos falando de entropia, determinada pelo princípio de Boltzmann, caracterizada pelo número de estados possíveis do sistema e pela probabilidade de um determinado estado.

Seria mais correto dizer que a entropia no mercado é mais ou menos constante, e quanto maior a liquidez de um instrumento, maior a entropia do gráfico de preços desse instrumento. Com o aumento do número de operações de negociação realizadas num instrumento de negociação, o número de estados possíveis também aumenta, o sistema se esforça para ocupar o estado mais provável. O efeito do aumento da entropia surge quando ela própria é aproximadamente constante, mas o número de estados possíveis do sistema aumenta.

Entropia máxima no mercado de moedas, mínima em ativos de baixa liquidez. A entropia de cada instrumento de negociação específico tende a se tornar máxima, mas o influxo de fundos impede que isso aconteça. A entrada de fundos ocorre por dois motivos: pela atratividade de investimento do ativo e pela emissão de dinheiro. Para cada instrumento de negociação, a entropia acabará crescendo.


Conclusões

A lucratividade acabou sendo baixa, mas os artigos mostram um modelo que permite negociar com lucro de modo totalmente automático com base em instrumentos de negociação completamente diferentes, e não apenas diferentes, mas também operados em mercados fundamentalmente diferentes. São mostrados os testes para 57 instrumentos de negociação, e como as configurações para cada um deles são as mesmas, podemos dizer que isso é equivalente a 520 anos de testes para um instrumento de negociação.

  • Foi obtido um algoritmo básico que pode funcionar de forma estável, ele precisa ser melhorado, aprimorando cada mecanismo descrito a fim de aumentar significativamente a lucratividade e reduzir o rebaixamento. 
  • No artigo anterior, eu escrevi sobre dois métodos de rastreamento da tendência atual, eles são descritos no parágrafo "atraso na abertura da posição". Os testes para 28 instrumentos de negociação foram realizados usando o método de "atraso ao longo da seção de tendência". Esta não é a melhor prática, o "atraso com base nas características estatísticas do instrumento" funciona melhor, mas no momento o algoritmo ainda não foi finalizado e usei o que já está funcionando corretamente. Em versões futuras do algoritmo, esta função será significativamente melhorada.
  • É necessária uma análise de dados adicional para pré-selecionar o tamanho mínimo do bloco a fim de reduzir o número de posições abertas erroneamente.
  • O algoritmo não leva em consideração diferentes valores de ativos e, consequentemente, diferentes preços para um bloco construído neste ativo. Isso reduz significativamente a lucratividade dos instrumentos bolsistas. É necessário adicionar balanceamento do tamanho do lote do portfólio, dependendo do valor do bloco para cada ativo específico.
  • Para um melhor trabalho, precisamos fazer um gerenciamento separado de algoritmos de tomada de decisão para posições curtas e longas, adicionar análises de características estatísticas e assimetrias de cada instrumento de negociação específico.
  • 80% de todo o lucro vai para a manutenção da estabilidade do algoritmo, é necessário melhorar tanto o mecanismo de compensação de posições não lucrativas quanto os mecanismos de tomada de decisão, isso aumentará significativamente a lucratividade.
  • O algoritmo não sabe como coletar as características estatísticas de cada instrumento de negociação e atualmente funciona às cegas usando apenas mecanismos de adaptação. Nas próximas versões, os parâmetros serão ajustados com base nas características estatísticas do instrumento de negociação de forma totalmente automática, o que irá melhorar os indicadores de rentabilidade. 
  • Agora, as diferenças entre os gráficos de preços de pares de moedas e de ações não são usados; o modelo precisa ser refinado, adicionando o conhecimento já existente.

    Artigos anteriores sobre este tópico

    Traduzido do russo pela MetaQuotes Software Corp.
    Artigo original: https://www.mql5.com/ru/articles/8859

    Arquivos anexados |
    chart_in_dollars.zip (16374.28 KB)
    Trabalhando com preços na biblioteca DoEasy (Parte 64): livro de ofertas, classes do objeto-instantâneo e objeto-série de instantâneos do livro de ofertas Trabalhando com preços na biblioteca DoEasy (Parte 64): livro de ofertas, classes do objeto-instantâneo e objeto-série de instantâneos do livro de ofertas
    Neste artigo, criaremos duas classes (a do objeto-instantânea do livro de ofertas e a do objeto-série dos instantâneos do livro de ofertas) e testaremos a criação de uma série de dados do livro de ofertas.
    Trabalhando preços na biblioteca DoEasy (Parte 63): livro de ofertas, classe de ordem abstrata do livro de ofertas Trabalhando preços na biblioteca DoEasy (Parte 63): livro de ofertas, classe de ordem abstrata do livro de ofertas
    Neste artigo, começaremos a desenvolver funcionalidades para trabalhar com o livro de ofertas. Criaremos uma classe de objeto para uma ordem abstrata do livro de ofertas e dos seus herdeiros.
    Redes Neurais de Maneira Fácil (Parte 11): Uma visão sobre a GPT Redes Neurais de Maneira Fácil (Parte 11): Uma visão sobre a GPT
    Talvez um dos modelos mais avançados entre as redes neurais de linguagem atualmente existentes seja a GPT-3, cuja variante máxima contém 175 bilhões de parâmetros. Claro, nós não vamos criar tal monstro em nossos PCs domésticos. No entanto, nós podemos ver quais soluções arquitetônicas podem ser usadas em nosso trabalho e como nós podemos nos beneficiar delas.
    Aplicação prática de redes neurais no trading (Parte 2). Visão computacional Aplicação prática de redes neurais no trading (Parte 2). Visão computacional
    O uso da visão computacional permite treinar redes neurais, usando uma representação visual do gráfico de preços e indicadores. Este método nos permite operar mais livremente com todo o conjunto de indicadores técnicos, uma vez que não requer feed digital para a rede neural.