Discussão do artigo "Arbitragem no Forex: Um bot market maker simples de sintéticos para começar"

 

Novo artigo Arbitragem no Forex: Um bot market maker simples de sintéticos para começar foi publicado:

Hoje vamos analisar meu primeiro robô na área de arbitragem, que é um provedor de liquidez (se é que podemos chamá-lo assim) em ativos sintéticos. Atualmente, esse bot funciona com sucesso como um módulo dentro de um grande sistema baseado em aprendizado de máquina, mas eu resgatei o antigo robô de arbitragem no Forex da nuvem, então vamos olhar para ele e pensar no que podemos fazer com ele hoje.

Minha mente foi revolucionada em 2017, quando, após uma série de perdas dolorosas, comecei a estudar como os grandes players realmente operam. Não os que falam de seus "lucros milionários" no YouTube, mas os verdadeiros: bancos, hedge funds e empresas de prop trading.

E foi isso que descobri: eles não usam estratégias cheias de indicadores complexos. Eles aplicam princípios matemáticos, gestão de risco, arbitragem, market making e outras abordagens baseadas em uma compreensão fundamental dos mecanismos de mercado. Foi então que tomei a decisão: é preciso operar como um grande player, ou simplesmente não operar.

Os três anos seguintes foram dedicados ao estudo dos métodos institucionais de trading. Mergulhei no mundo das correlações intermercado, da arbitragem estatística e do trading algorítmico. Experimentei com Python e MQL, criando protótipos de sistemas que imitavam as abordagens dos grandes participantes do mercado, mas adaptados à realidade do trader de varejo, com suas limitações de capital e tecnologia.

Em meio a um dos períodos mais turbulentos da história dos mercados financeiros, em janeiro de 2020, nasceu o Tris_Optimized — minha resposta à pergunta: "Como um trader de varejo pode aplicar estratégias institucionais?"

Esse EA (Expert Advisor) não tenta prever os movimentos do mercado, não se baseia em indicadores de análise técnica e não depende da "intuição" do trader. Em vez disso, ele calcula matematicamente potenciais desequilíbrios entre três pares de moedas correlacionados e posiciona uma grade de ordens pronta para capturar esses desequilíbrios assim que eles surgirem.

Após cinco anos de operação contínua em condições reais de mercado, o Tris_Optimized provou sua viabilidade. Ele sobreviveu à pandemia, aos picos inflacionários, às mudanças nas taxas de juros e às crises geopolíticas, e continua gerando lucro de maneira estável (nos raros períodos em que realmente opero, e não passo noites inteiras entre ideias de código e o próprio código). Ele não é um sistema milagroso que promete ganhos absurdos, mas uma ferramenta de trabalho confiável baseada em princípios fundamentais do trading institucional.


Autor: Yevgeniy Koshtenko

 

Abordagem interessante. Iniciado como está, sem otimização. Ela mantém o equilíbrio, há um aumento em pequenas etapas.

Se quiser, você pode mover o fechamento da grade para o final do dia, antes da formação do swap. No momento, a grade é fechada no início da negociação. Ou não usar o fechamento diário de forma alguma.

Definitivamente, há espaço para desenvolvimento e aplicação em soluções complexas.

Vamos em frente!

 

O artigo apareceu na tradução em inglês, e eu me perguntei o que havia perdido no original russo em março.

Acabou sendo um lixo fabuloso. ;-)

 
Evgen Khenkin #:
Iniciado como está, sem otimização. Mantém o equilíbrio, há um pequeno aumento.
Qual foi a velocidade de queda?)
 


"Ao adicionar exposição após a entrada inicial, você sempre dimensiona todo o triângulo de três pares simetricamente ou adiciona posições apenas no par específico que mostra o maior desequilíbrio?"


 
Ainda estou ouvindo
 
Ali Munene #:
Ainda estou ouvindo.
Um aplauso!
 

Isso poderia funcionar em uma conta real ou é um dos bots que só funcionam em contas de demonstração?

 

Aqui está o código corrigido se você tiver erros de preenchimento

Arquivos anexados:
 
Stanislav Korotky #:
Acabou sendo uma bobagem de conto de fadas

Stanislav, eu lhe pergunto sem brincadeiras e provocações: onde está essa bobagem de conto de fadas? Sinceramente, eu gostaria de me aprofundar no assunto e entender completamente o que há de errado nesse artigo!

Com todo o respeito, Vladimir.

 
MrBrooklin #:

Stanislav, estou perguntando, sem brincadeiras e provocações: onde está essa fabulosa bobagem? Sinceramente, gostaria de me aprofundar no assunto e entender completamente o que há de errado neste artigo!

Vamos começar com o fato de que o MT5 oferece suporte a contas com compensação e contabilidade de hedge em igualdade de direitos. O sistema proposto é estritamente para hedging, mas não há nenhuma menção a isso. Na compensação, as posições contrárias de ordens contrárias começam rapidamente a se transformar em perdas.

Em segundo lugar, a ideia de capturar uma diferença bem-sucedida de curto prazo de cotações em cruzamentos não é nova (você pode começar, por exemplo, com os trabalhos de hrenfx ou getch - eles, embora para MT4, mas a essência não muda e dão uma boa ideia da imagem do mercado em dinâmica). Não faz sentido fazer isso com a ajuda de ordens pendentes abertas sem o controle on-line do spread sintético momentâneo. Essas ordens começam imediatamente com um sinal de menos no valor da soma dos spreads em todos os pares, e o autor deste artigo sugere que se mantenham as posições na esperança de que algum dia se espere da ineficiência do corretor de cotações ainda mais do que esse spread. A grade de ordens não muda a situação, mas apenas permite que você fique de fora das perdas por mais tempo, fechando apenas o lucro e acumulando o floating minus.

Em terceiro lugar, o artigo omite completamente a questão da margem e, mesmo se imaginarmos um depósito enorme, qual seria a porcentagem de lucro se, digamos, conseguíssemos esperar que a grade fechasse no positivo?

E agora a realização de fato, com muitos erros. Por exemplo,

// Ajuste para pares com JPY e outras moedas exóticas
string quoteCurrency = StringSubstr(symbol, 3, 3);
if(quoteCurrency == "JPY" || quoteCurrency == "XAU" || quoteCurrency == "XAG")
   pointCost *= 100.0;

Isso é uma besteira. O MT5 retorna o valor correto do pip, independentemente da moeda. A única nuance é que, para forex, o valor do pip é retornado na moeda da conta, mas para instrumentos de câmbio - na moeda de cotação e, portanto, é necessário recálculo manual para a moeda da conta. Mas isso não é importante para este artigo.

Próximo.

   // Fator de ajuste com base no balanço patrimonial atual
   double equityRatio = accountBalance / BaseEquity;

Se quisermos alocar apenas uma parte do dinheiro para o Expert Advisor e não para toda a conta, essa relação deverá ser escrita na direção oposta. Acontece que, se a conta for de 10.000 e tivermos alocado 1.000 para a base, o Expert Advisor será aberto com lotes 10 vezes maiores do que a conta permitiria para uma carga completa.

Alterei dessa forma para meus testes (caso contrário, o erro de falta de margem aparece rapidamente):

   // Fator de ajuste com base no balanço patrimonial atual
   double equityRatio = BaseEquity ? BaseEquity / accountBalance : 1.0;

Deixei essa parte como está, mas há muitos mistérios aqui:

   // Cálculo do lote ideal ajustado ao risco
   double riskAmount = accountBalance * (RiskPercentage / 100.0);
   double calculatedLot = (riskAmount / 100.0) * equityRatio / (pointCost * basePrice);

RiskPercentage é exatamente uma porcentagem, portanto, RiskPercentage/100 fornece uma fração do dinheiro em espécie na variável riskAmount.

Mas o que é esse 100 mágico pelo qual a quantia de dinheiro é dividida? É uma alavancagem programada?

E por que estamos dividindo o dinheiro pelo custo por ponto * preço? O risco geralmente é considerado como a distância do stop loss, mas como temos uma grade, seria lógico considerar a distância da grade como uma medida de risco, mas esse não é o caso aqui. E 100 não é igual à etapa da grade por padrão, e a etapa da grade deve ser personalizável. No Forex, a fórmula para calcular a margem (se for isso) é diferente e, em princípio, é melhor solicitá-la por meio da API do MT5, em vez de tentar calculá-la por conta própria usando fórmulas do teto.

Além disso, tive que fazer essa edição no cálculo da comissão - era (deu 0):

            double commission = PositionGetDouble(POSITION_COMMISSION);

Became (o histórico é filtrado pela posição no início do ciclo):

            double commission = 0; // PositionGetDouble(POSITION_COMMISSION);
            for(int j = 0; j < HistoryDealsTotal(); j++)
            {
               commission += // múltiplo por 2 porque as taxas de saída ainda não foram cobradas e podem ser iguais às de entrada
                 2 * (HistoryDealGetDouble(HistoryDealGetTicket(j), DEAL_COMMISSION)
                 + HistoryDealGetDouble(HistoryDealGetTicket(j), DEAL_FEE));
            }

Sem detalhes, gostaria de observar que, para trabalhar com diferentes corretoras, tive de adicionar entradas Prefix/Suffix para símbolos e adicioná-las a expressões em todos os lugares.

Após edições e experimentos, obtivemos uma drenagem estável e esperada.

Trade-Arbitrage
Trade-Arbitrage
  • 2009.11.27
  • www.mql5.com
Несливающая система2 - использование неэффективности рынка (котирования) для 100%-го извлечения прибыли - арбитраж.