Arranquemos o lucro até o último pip
Introdução
Este artigo é sobre uma das possíveis abordagens da negociação algorítmica. MetaQuotes não tem relação direta com as plataformas de negociação e se destina a grandes massas de leitores. Se um termo não estiver claro, use a pesquisa. Aqui é resolvida a tarefa de obter um sistema de negociação lucrativo (ou robô).
Onde cavar?
Esse tipo de tarefa é definido por cada trader. Isso foi feito milhões de vezes. Pode-se escolher um caminho já percorrido e imediatamente mudar para outro artigo. Mas é lógico encontrar um tesouro onde ele existe e, além disso, ele não é procurado pela multidão.
Terra
A maior parte da conversa sobre a criação de sistemas de negociação está associada ao uso de barras históricas de preços e vários indicadores. Este é um campo bem desgastado que não tocaremos. As barras são uma entidade completamente artificial, por isso, vamos dar algo mais próximo a protoinformações - ticks. Esse tipo de abordagem nos dará alguma vantagem informacional sobre a multidão.
Pá
A tarefa de obter lucro é bastante difícil, é por isso que existe a opinião de que ela precisa ser resolvida por métodos intelectuais complexos: aprendizado de máquina, modelos matemáticos econométricos, etc. Eles têm uma desvantagem significativa: tardam muito tempo em serem criados e testados, devido à complexidade computacional. Portanto, vamos pelo caminho oposto: idéias muito simples e rápidas. Isso possibilitará a busca de padrões de mercado não num só lugar, mas, sim, muito extensivamente.
Sim, esse método parece estúpido. Mas há tanta informação que não é razonável procurar um tesouro em apenas um lugar pequeno e com um pequeno pincel de arqueólogo. Portanto, é necessária uma boa ferramenta para pesquisa. Ela deve ser capaz de trabalhar com bilhões de ticks, ser rápida, visualizar o encontrado convenientemente. Adicionalmente, é melhor que suas instruções sejam curtas e claras.
Pá mecânica para escavações arqueológicas
Se você possui algum conhecimento matemático e tem projetos próprios que atendem a esses requisitos, então, ótimo. Se não, pegue o testador da plataforma MetaTrader 5.
Nesse trequinho é incorporada uma grandiosa quantidade de ticks de diferentes corretoras, adicionalmente, sabe como trabalhar com ticks de terceiros, armazena os resultados dos cálculos em seu banco de dados e exibe vários parâmetros razoavelmente bem. Também tem seu próprio otimizador multitarefa baseado em pesquisa detalhada simples e genética segundo critérios do usuário.
Algoritmo de negociação
Precisamos de uma ideia simples e rápida na forma de um algoritmo de negociação. Isso pode se tratar de qualquer coisa. O principal é que seja rápido. Para isso, é bom evitar os ciclos dentro do algoritmo. Após recebermos um novo tick, fazemos algo muito rapidamente e saímos.
Uma das variantes de tal algoritmo formou a base deste texto. Pode parecer que esse é o destaque do artigo, que deve ser divulgado para ser útil. Mas não é assim. O artigo mostra algo um pouco diferente. Assim, o algoritmo usado está oculto.
MQL5
O algoritmo de negociação é criado na forma de um EA em MQL5. Nós abandonamos barras e indicadores. Por isso, existem apenas ticks e trabalho com ordens (e seu histórico). É aconselhável escrever esse tipo de EAs em MQL4, e depois converter como uma linha em MQL5 através da biblioteca de negociação MT4Orders.
#include <MT4Orders.mqh> // https://www.mql5.com/pt/code/16006
Isso faz com que o código seja multiplataforma (ele funcionará em MetaTrader 4/5) e abra a porta para o uso de algumas bibliotecas úteis. O algoritmo de negociação precisa ser escrito rapidamente. Para o testador, ele deve ter um mínimo de verificações.
Fonte
Onde você obtém informações sobre preços para sua pesquisa? Existem muitas fontes de ticks. E é lógico primeiro decidir entre elas.
Talvez seja mais provável encontrar uma pepita de ouro na rocha onde a concentração de ouro é maior. Portanto, tomamos a fonte de ticks em que há mais lucro potencial. O método para determinar esse critério comparativo foi descrito neste comentário. Com base neste método foi selecionado este arquivo de dados de ticks de muitos gigabytes. Bilhões de ticks.
Ticks personalizados
Usar ticks no testador do MetaTrader 5 é possível através de símbolos personalizados. Isso tudo é um tanto pesado para uma rápida compreensão, por isso, apenas usamos o script ThirdPartyTicks já preparado. Ele cria esses símbolos com base nos dados do arquivo de cotações selecionado.
Aditivo para combustível
É necessário saber trabalhar com bilhões de ticks em tempo razoável. Grosso modo, temos que gerar, de alguma forma, muitos trilhões de ticks na entrada do algoritmo de negociação ao procurar padrões. É muito demorado, por isso é necessário um mecanismo de aceleração.
Acontece que nem todos os ticks são necessários. Como conhecemos nosso algoritmo de negociação, isto é, entendemos quais ticks não causam mudanças de negociação, podemos decidir sobre ticks desnecessários e removê-los do histórico. Esse tipo de filtragem é bastante eficaz:
Total Ticks (EURAUD.rann) = 61354152 (2134296 ticks/sec.), Reserve = 80023750 Recording... After Filter (MinPips = 5) Ticks = 7820486 (12.75%)
Ao gravar no log, pode-se ver que foi possível reduzir o número de ticks.
O testador do MetaTrader 5 é muito meticuloso (pode ser útil), gerando muitos cálculos computacionais que são supérfluos (e algumas vezes errôneos) no estudo proposto. Para evitar isso, é necessário entender suas sutilezas, o que, claro, não faremos aqui. Num dos tópicos do fórum, há uma discussão sobre este assunto.
Para não ser enganados, escrevamos o que é necessário para um algoritmo de negociação em MQL5:
- Abertura/fechamento de posições de negociação somente através de ordens limitadas.
- Lógica de compensação. Assim, deve ser aberta uma conta de compensação no MetaTrader 5.
- Negociando 1 lote — Lucro em pips.
- Inicialização num servidor em que não há comissões para símbolos personalizados no Testador.
- Tornar bolsista o símbolo personalizado.
Um resultado de inicialização deve ser algo assim:
A imagem na coluna selecionada mostra que há uma virada de posições através de ordens limitadas. Além disso, são executados exatamente ao preço indicado. É muito importante uma execução clara aos preços indicados.
Finta
O comportamento do mercado depende da hora do dia. Portanto, implementamos a biblioteca BestInterval, escrevendo apenas duas linhas no código fonte do EA:
#define BESTINTERVAL_ONTESTER // critério de otimização - lucro do melhor intervalo. #include <fxsaber\BestInterval\BestInterval.mqh> // cálculo do melhore intervalo de negociação
Isso fornece parâmetros de entrada adicionais no EA.
Vamos otimizar de acordo com um critério do BestInterval igual ao maior lucro que o EA mostra quando negocia apenas a uma determinada hora do dia.
Pá mecânica
Assim, o algoritmo de negociação está preparado. Também estão prontos os ticks personalizados filtrados. Resta atiçar uns contra os outros através do testador MetaTrader 5 . Aqui vem para o resgate a solução MultiTester. Ele pegará automaticamente cada símbolo personalizado e otimizará o EA.
Intervalo de otimização
É inútil otimizar com base em todo o histórico, porque não haverá maneira de entender se foi encontrado um padrão ou se é apenas um reajuste. Como tudo é feito com base num debulhador numérico, contamos com um grande número de transações.
Quanto mais transações, mais fácil é falar sobre o alcance de alguns indicadores estatísticos. Quanto menor o tempo de vida da transação média, menores os riscos. Em geral, muitas transações são boas. Embora não seja justificado corretamente.
Como é desejável que haja uma alta frequência de transações, pode-se selecionar um intervalo pequeno. Seja como for, nele é acumulada uma quantidade razoável de transações.
Isso é um pouco menos do que nos últimos quatro meses.
Comecemos!
Artefatos
Para 81 símbolos (todos os dados da fonte do arquivo) todos os cálculos foram feitos em 10 horas, algumas das quais foram gastas no sono do autor. Portanto, é conveniente iniciar à noite. Como o testador do MetaTrader 5 é multinúcleo, essas 10 horas são de aquecimento adicional do local.
Nós entramos no banco de dados do testador do MetaTrader 5 e vemos caches de otimização.
Ao abrir qualquer registro deste banco de dados, obtemos os resultados de otimização correspondentes do símbolo selecionado.
Todas as variantes (81) foram enumeradas manualmente. Esse processo pode ser automatizado, mas não existe implementado no momento, portanto, foi gasta uma hora. Vou me debruçar sobre apenas um símbolo, como no exemplo. A mesma coisa foi feita para todos os símbolos.
Vemos o resultado da otimização do símbolo classificado pelo critério do BestInterval. O bom dos símbolos personalizados é que não há limite no saldo negativo. Ou seja, o tamanho do saldo não afeta a negociação. E você não pode se preocupar com isso.
É desejável que exista um grande número de transações, por isso, selecionamos uma das entradas na coluna vermelha e executamos um único teste. Sua gráfico de negociação fica assim
Isso é negociação de vinte e quatro horas. No final do log da execução única, vemos esta entrada
BestInterval Action(true - single pass & MT4-style & Virtual is required) = false Profit = -2392.00 = -2392.00 + 0.00 (0.00%) - Amount of Delete Intervals = 0 (2019.04.01 - 2019.07.20) 00:00:00 - 23:59:59 : Profit = -2392.00 (100.00%), Total = 2612 (70.64%), PF = 0.94, Mean = -0.92, DD = 3840.00, RF = -0.62 SUMMARY: 00:00:00 - 23:59:59 : Profit = -2392.00 (100.00%), Total = 2612 (70.64%), PF = 0.94, Mean = -0.92, DD = 3840.00, RF = -0.62 Profit = 4035.00 = -2392.00 + 6427.00 (-268.69%) - Amount of Delete Intervals = 1 (2019.04.01 - 2019.07.20), 20:00 - 08:00, CountHours = 11 00:00:00 - 07:58:54 : Profit = 1074.00 (26.62%), Total = 349 (76.22%), PF = 1.21, Mean = 3.08, DD = 709.00, RF = 1.51 19:41:38 - 23:59:59 : Profit = 2961.00 (73.38%), Total = 348 (76.44%), PF = 1.94, Mean = 8.51, DD = 358.00, RF = 8.27 SUMMARY: 00:00:00 - 23:59:59 : Profit = 4035.00 (100.00%), Total = 697 (76.33%), PF = 1.49, Mean = 5.79, DD = 484.00, RF = 8.34 BestInterval is saved in "TesterEA"-file in common(MT5)/base(MT4) folder. final balance - InitBalance (10000.00) + Profit (-2392.00) without BestInterval. OnTester - Profit (4035.00) with BestInterval. final balance 7608.00 USD OnTester result 4035
Ela mostra que se houvesse um lucro de 4035 pips, seria possível negociar segundo a estratégia de negociação das 8 da noite às 8 da manhã. Para ver esta negociação, vamos para os parâmetros de entrada e indicamos precisamos ativar o BestInterval
E devemos sacar o testador do MetaTrader 5 do modo Otimização. Aqui, no testador do MetaTrader 5, isso é inconveniente, infelizmente.
Iniciamos e observamos o resultado da implementação do BestInterval
Nos logs da execução única, certificamo-nos de que tudo está processado claramente
BestInterval Action(true - single pass & MT4-style & Virtual is required) = true Calculation time activated intervals is 2019.07.23 16:27:25 - TesterEA (common folder) 00:13:14 ago. Amount of Delete Intervals = 1 (2019.04.01 - 2019.07.20), 20:00 - 08:00, CountHours = 11 00:00:00 - 07:58:54 : Profit = 1074.00 (26.62%), Total = 349 (76.22%), PF = 1.21, Mean = 3.08, DD = 709.00, RF = 1.51 19:41:38 - 23:59:59 : Profit = 2961.00 (73.38%), Total = 348 (76.44%), PF = 1.94, Mean = 8.51, DD = 358.00, RF = 8.27 SUMMARY: 00:00:00 - 23:59:59 : Profit = 4035.00 (100.00%), Total = 697 (76.33%), PF = 1.49, Mean = 5.79 final balance - InitBalance (10000.00) + Profit (4035.00) with BestInterval. OnTester - Virtual InitBalance (10000.00) + Profit (-2403.00) without BestInterval. Profit is calculated with TickValue=1 and w/o Commission+Swap. final balance 14035.00 USD OnTester result 7597
Parece que fica quase lindo. Há muitas transações, o gráfico é bastante tranquilo. Eu não quero ficar chateado, mas é definitivamente necessário iniciar com base em todo o histórico (e quebrar-se).
Todo o tempo nós vamos ter um gráfico nojento dizendo que temos um ajuste matemático dos parâmetros para ter um bom resultado num intervalo otimizado. Mas isso não funciona em outros trechos, ou seja, se iniciarmos isso durante a negociação, haverá perdas.
'Forward'
O testador do MetaTrader 5 permite fazer testes para frente. Minha opinião é que esse teste é autoengano. Por essa razão, devemos ter apenas alguns bons resultados e iniciar com base em todo o histórico. Nenhum deles teve sucesso. O teste 'forward' também rola muitas outras variantes, o que já é um tipo de ajuste.
Ouro
Apesar de tudo, o tempo todo haverá um gráfico nojento ou há esperança? Sim, com o aumento em todo o histórico nossa
variante deu esse resultado.
Vermelho mostra o intervalo otimizado. Vê-se claramente que, no período muitas vezes maior do que o intervalo otimizado, há boa estabilidade.
Gravura de jóias
Na verdade, agora está claro com qual símbolo continuar trabalhando — o EURCHF. Relatório da execução mostrada acima:
Destacada a expectativa em pips. Este é o parâmetro mais importante! Acontece que a comissão em EURCHF é de ~ 4,40 pips. Isso significa que, nesse caso, será necessário doar dois três lucros para a plataforma de negociação. Isso é demais.
Por isso, removemos o BestInterval, introduzindo nos parâmetros de entrada a possibilidade de regular o tempo de negociação. Começamos a otimizar desde o final do maior drawdown. Ele é marcado em verde no gráfico acima. Se existirem muitos parâmetros, faremos genética várias vezes.
De modo que, ao procurar padrões durante a otimização, não há distorções fortes, removemos a aumento não sistêmico.
Para fazer isso, no código fonte apenas escrevemos isso
const bool TradeTime = (TimeCurrent() < D'2018.02.10') || (TimeCurrent() >= D'2018.02.12');
Como resultado, foi alcançado um amento da expectativa em duas vezes para símbolos não filtrados.
Martin/Grade
Claro, eu tentei usar vários truques na forma de grades de ordens, etc. No começo, fiquei feliz com o fato de que a expectativa estivesse crescendo muito. Mas ele não consegui explicar o motivo. No final, descobri que o testador do MetaTrader 5 calcula incorretamente nas contas de compensação. Mais precisamente, ele não coloca neste conceito o que você espera. Por essa razão, escrevi o que era necessário
// Cálculo da espectativa. Na cobertura irá coincidir com o clássico. double OnTester() { double Res = 0; if (HistorySelect(0, INT_MAX)) for (int i = HistoryDealsTotal() - 1; i >= 0; i--) Res += HistoryDealGetDouble(HistoryDealGetTicket(i), DEAL_VOLUME); Res /= 2; if (Res) Res = TesterStatistics(STAT_PROFIT) / Res; return(Res); }
O resultado confirmou totalmente a teoria de que a grade não pode melhorar uma estratégia de negociação bem otimizada. Esta é uma conclusão curta, mas muito ampla.
Monetização
É necessário decidir onde negociar o encontrado. Revemos as condições de negociação das corretoras (incluindo o histórico de preços) e ficamos especialmente interessados na implementação de ordens limitadas. Algumas corretoras executam ordens limitadas nos mercados, permitindo um slippage negativo. E algumas proíbem a execução parcial de ordens limitadas. Nós nos mantemos longe delas, porque já estamos lutando por cada pip (veja o título do artigo). Uma atitude desleixada em relação às condições de negociação é inaceitável.
Observe que você não precisa procurar apenas entre corretoras MetaTrader 4/5. Precisa procurar em todos os lugares. Plataforma de negociação é secundária. Sim, talvez não seja correto falar sobre o recurso MetaTrader 4/5, mas é assim. Com a estratégia de negociação primária, vamos ser objetivos.
Bem, muitas transações, porque a negociação é assim.
Foi possível encontrar um mercado adequado. As ordens limitadas iniciais chegarão rapidamente ao provedor de liquidez, o que aumentará a probabilidade de execução. Além disso, um slipage positivo pode ser o bônus. Para nós, na expectativa todo pip é importante. Isso permitirá recuperar parte do custo da comissão.
Negociação real
Esta honra foi reservada para a plataformaMetaTrader 4. Assim, a plataforma cruzada acabou sendo muito útil novamente.
Para alcançar a máxima coincidência do real com os resultados do testador, foi necessário organizar o esquema de trabalho a seguir.
- Ao iniciar o EA, o histórico de ticks é selecionado pelo estado atual usando a biblioteca HistoryTicks.
- Neste histórico de ticks, o EA é executado automaticamente num ambiente virtual por meio da integração da biblioteca Virtual.
- No navegador, vemos todo o histórico da negociação até o momento presente com as configurações do EA que eu defini. Isso permite minimizar imediatamente a probabilidade de erro ao definir os parâmetros de entrada. Se você ver uma perda, significa que algum erro foi cometido.
- A cada tick, o EA continua a negociar no ambiente virtual. Se você desligar o EA, depois da inicialização, ele negociará como se não tivesse sido desligado.
- Constantemente, ambiente real não ideal é sincronizado com o ambiente virtual, onde a execução é perfeita.
Todos esses truques foram necessários por causa da luta pelo tamanho da espectativa. Mas esse esquema poderia ser aplicado a quase qualquer estratégia de negociação. Claro, é possível não se preocupar. No entanto, tive a oportunidade de observar como isso às vezes se transforma em negociação real. Por essa razão, o esquema não é desenvolvido a partir do zero.
Diversificação
Selecionar apenas uma variante de parâmetros de entrada seria muito presunçoso. Não se sabe qual variante de otimização é boa no futuro e qual não é.
Portanto, foram escolhidas apressadamente oito variantes, o saldo da conta foi dividido igualmente entre elas e foram inciadas simultaneamente (oito gráficos, cada um com um EA com seu próprio MagicNumber). Externamente, parece uma grade. Mas, ele não tem a ver com estratégias de negociação de grade. Trata-se de oito estratégias de negociação independentes.
Divisão do bolo
Suponhamos que iniciemos. E então o que fazer? Existem vários caminhos. De controle remoto (gerenciamento de confiança) e PAMMs até serviços de cópia de Sinais.
Como estamos falando de lucro, faz sentido apostar em Sinais apenas para fins de RP. Os assinante não poderão ganhar, porque receberão derrapagem negativa ao copiar. O que implicaria uma redução em suas expectativas para valores negativos, ou seja, com esse tipo de negociação é altamente provável a perda de assinantes.
A iluminação do método de negociação tem a chance de reprojetar a estratégia de negociação ou os princípios básicos. Essa é outra variante para se beneficiar do sistema de código aberto.
E, finalmente, pode-se simplesmente contemplar como mais uma vez a supostamente boa estratégia de negociação não teve sucesso. É inevitável.
Memórias
No caminho do pesquisador no campo dos algoritmos existem várias histórias, solavancos, etc. Eu me lembro de muitos casos. Recentemente foi falado de passagem sobre o EURDKK, e isto vai bem com este caso.
Esta é a imagem do resultado da estratégia de negociação otimizada no intervalo vermelho realçado. Eu definitivamente não consigo reproduzir como era então. Mas lembro que a imagem à esquerda do intervalo de otimização era muito melhor - uma linha reta. Quase um Graal que foi colocado numa conta real e ganhou exatamente o mesmo que no testador. Quando começou uma perda sistemática depois do ano novo, bastava inteligência ou experiência para desativar a negociação. A perda foi de cerca de 10% do lucro já ganho. Não é claro o que causou a fenda.
Nesta história, é importante que até o Graal causa perdas. Mas esta não é a principal razão pela qual me lembrei da história.
O principal era o símbolo NOKSEK! Muitos dos leitores já examinaram esse símbolo ou pelo menos o notaram? Por quê?
Fim do artigo
Há alguma luta filosófica no artigo: o debulhador numérico contra a abordagem intelectual clássica. Decida por si mesmo o que escolher.
Alguns truques e raciocínios podem ser úteis.
O artigo mostrou o quão verdadeira pode ser a afirmação: se você tiver uma estratégia de negociação lucrativa, é muito provável você nunca tenha conhecimento disso. Provavelmente, deitamos boas estratégias de negociação no caixote do lixo mais de uma vez. Aqui é mostrado que a verificação da estratégia de negociação não consiste apenas em iniciá-la num ou dois símbolos.
Também é visível a importância de limitar a negociação considerando a hora do dia. E não é desejável que seja algo como o método de Monte Carlo. Afinal, pode matar a conclusão sobre a rentabilidade da estratégia de negociação.
Sistemas universais são improváveis e não são necessários para extrair lucro. A luta por cada pip tem um lugar para existir,
e claro testador do MetaTrader 5 também. Principalmente ele é ótimo! Algumas coisas desapontam, mas sem ele seria impossível fazer exatamente esse estudo e explicá-lo mais ou menos facilmente. Obrigado aos desenvolvedores! E estamos aguardando melhorias.
O que não foi incluído
Estou cansado de escrever, por isso, nem tudo ficou:
- Outros símbolos.
- Habilidade do MetaTrader 5 de calcular o slippage.
- Exibição de modo patente de como a comissão é retirada devido ao deslizamento positivo das ordens limitadas.
- Exibição de que o take-profit no MetaTrader 5 na sua forma atual não é adequado para ser usado.
- Como os swaps afetam o resultado?
- Ambos os meses de maio (2018 e 2019), a estratégia de negociação no EURCHF causa quase as mesmas perdas. Ou seja, o padrão é ativado e desativado no calendário.
- Como criar critérios para avaliar a validade da estratégia de negociação através do otimizador automático.
- Criação de símbolos mistos.
- Importância da iteração completa antes de aplicar genética.
- Se o símbolo estiver invertido, isso não deve afetar os padrões e, portanto, a estratégia de negociação.
- A importância de interpretar o que o testador mostra.
- Spread ou extremos locais.
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/7113
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Fórum sobre negociação, sistemas automatizados de negociação e estratégias de negociação de testes
Discussão do artigo "Raspe o lucro até o último pip"
fxsaber , 2019/08/24 23:38
Exatamente um mês se passou desde a publicação do artigo. Resultado intermediário.
Forum on trading, automated trading systems and testing trading strategies
Discussion of article "Extract profit down to the last pip"
fxsaber, 2019.10.01 10:34
September 2019: +51%.
Forum on trading, automated trading systems and testing trading strategies
Discussion of article "Extract profit down to the last pip"
fxsaber, 2020.03.21 14:25
Meanwhile, the long-running account monitored for the article made its way to Top10 on some monitoring services. We do not raise the risk, we stumble, we learn.