Assista a como baixar robôs de negociação gratuitos
Encontre-nos em Facebook!
Participe de nossa página de fãs
Script interessante?
Coloque um link para ele, e permita que outras pessoas também o avaliem
Você gostou do script?
Avalie seu funcionamento no terminal MetaTrader 5
Experts

Gold Dust - expert para MetaTrader 5

Publicado por:
Vladimir Karputov
Visualizações:
4104
Avaliação:
(32)
Publicado:
2019.01.21 08:56
Precisa de um robô ou indicador baseado nesse código? Solicite-o no Freelance Ir para Freelance

Idéia de Yury Reshetov

Autor do código mq5 - barabashkakvn

Gold Dust


Um pouco de teoria

Muitos sistemas de negociação automatizados tendem a otimizar demais e ajustar os resultados, ou seja, eles são muito bem otimizados em eterminado período dos dados históricos, mas se você lançar esse sistema otimizado para negociar em uma conta real ou de demonstração, ele pode dar prejuízo, porque os sinais de negociação são aleatórios. Isto está relacionado com o carácter não estacionário dos instrumentos financeiros, ou seja, as suas características estatísticas são instáveis.

Para determinar a possibilidade de ajuste excessivo, você pode usar o chamado teste clássico, que é descrito no livro de Robert Pardo. [1]. A idéia do método clássico é a seguinte: selecionar um sistema de negociação com dois intervalos históricos sem interseção. O sistema de negociação é otimizado em um dos intervalos e um teste direto com parâmetros otimizados no primeiro intervalo é realizado no segundo. Se o teste no segundo intervalo histórico (a frente) não for bem-sucedido, o sistema de negociação é considerado sujeito a otimização excessiva e não é apropriado para transações automatizadas. Se o teste a frente der um resultado positivo, será realizada uma análise adicional para verificar o comportamento do sistema de negociação no intervalo testado - essa análise permite identificar as características do sistema.

Mas um sistema que poderia passar por todos os testes descritos no livro de Robert Pardo [1] praticamente não existe. Em virtude disto, o autor não dá nenhum exemplo específico. Otimização dentro de um intervalo e testes futuros em um diferente, assim como uma análise mais profunda do teste a frente não fornece nenhuma garantia:

  1. Um teste a frente malsucedido no segundo intervalo pode descartar um sistema de negociação robusto. Na verdade, os algoritmos de otimização geralmente são colocados em loop nas extremidades locais e os parâmetros do sistema de negociação são excessivamente ajustados para esses valores.
  2. A análise dos resultados dos testes a frente é praticamente inútil, pois se você tomar outro intervalo independente, no qual nem a otimização e nem o teste foi realizado ainda, realizando análises adicionais nesse intervalo, os novos resultados da análise não coincidirão com os anteriores. A razão é a mesma, o caráter não estacionário dos instrumentos financeiros. Além disso, um teste avançado em intervalo independente pode não ser bem-sucedido em outros. Então, não há nada para analisar nesses casos.

Como o método clássico de checar os sistemas de negociação tem muitas desvantagens, eu desenvolvi e testei outro, que eu acho ser mais confiável: o Gold dust (pó de ouro).

A diferença entre os métodos novos e o clássico é que a otimização do sistema de negociação é realizada em mais do que um intervalo, em dois ou mais. Como resultado, obtemos diferentes conjuntos de parâmetros do sistema de negociação para cada intervalo. Alguns deles serão os mesmos, outros serão diferentes. Provavelmente, alguns desses conjuntos de parâmetros são super otimizados e outros não. Isso pode ser encontrado usando testes a frente. 

O teste a frente difere do clássico, pois é realizado usando dois ou mais conjuntos de parâmetros otimizados, não apenas um. A ideia é a seguinte: se um sistema de negociação com todos os conjuntos de parâmetros fornece um sinal para comprar ou vender, é realizada a negociação apropriada. Se os sinais são diferentes, ou seja, há inconsistência nos sinais de negociação produzidos pelo sistema com diferentes conjuntos de parâmetros, o sistema de negociação não faz nada até o próximo sinal de negociação.

O que acontecerá?

Aqui precisamos decidir sobre a robustez do sistema de negociação. Os sistemas de negociação podem ser potencialmente robustos, isto é, com uma probabilidade maior do que zero de passarem no teste a frente do método clássico; e não robusto, ou seja, com uma probabilidade muito alta de sobreajustes.

  • Se o sistema de negociação não for robusto, então, ao ajustá-lo em dois ou mais intervalos históricos, ele poderá se tornar robusto se os sinais de negociação super-ajustados forem consistentes. Ou seja, se filtrarmos os sinais por consistência, eles poderão ser usados para negociação automatizada.
  • Se um sistema de negociação for mais ou menos robusto, um teste direto bem-sucedido no modo de consistência do sinal de negociação (ajustado e não ajustado), em um ou mais conjuntos de parâmetros, pode ser uma prova na obtenção do resultado da otimização em diferentes intervalos de dados históricos como sendo sem sobreajuste e pode ser usado para negociação automatizada.

Aqui não estamos considerando sistemas de negociação não robustos, porque mesmo que seus sinais sejam filtrados com base na consistência, os resultados em intervalos não otimizados não são estáveis o suficiente para serem negociados. Tais sistemas de negociação são mais adequados para experimentação.

Vamos prosseguir para um sistema de negociação robusto, que está disponível no arquivo anexo. O sistema de negociação é baseado na previsão futura da direção do preço, implementado pela seleção de coeficientes de peso em uma rede neural elementar de camada única (um "perceptron" baseado em dados históricos), usando o algoritmo genético padrão do Testador de Estratégia MetaTrader. 


Métodos de otimização, teste e detecção de robustez dos parâmetros do sistema de negociação

Usaremos dados históricos do EURUSD dos últimos 9 meses ou mais, no timeframe H1. Vamos dividir o período inteiro em três intervalos independentes, três meses cada. O primeiro intervalo será usado no teste final e os outros dois serão usados para otimização no histórico. Eu combinei dois "perceptrons" no sistema de negociação, então não há necessidade de lançar o sistema separadamente a cada vez.

A função de alternador Supervisor() no código EA ativa três modos de operação EA, dependendo do parâmetro de entrada "pass":

  1. Otimização e teste do primeiro "perceptron";
  2. Otimização e teste do segundo "perceptron";
  3. Filtrando os valores contraditórios dos dois "perceptrons" no modo de teste, sem otimização.

Os seguintes coeficientes ponderados dos "perceptrons" são otimizados: x11, x12… x42, bem como os parâmetros "MA: averaging period" "Stop Loss". O parâmetro de entrada do "Stop Loss" é constante para todos os intervalos, sendo este nível para todas as posições abertas. O outro parâmetro de entrada, "MA: averaging period" indica o período de tempo da latência para a diferença nos preços de abertura; também é constante. 

A entrada no mercado é realizada no início da nova formação de barras, ou seja, a abertura dos preços das barras com base nos sinais do "perceptron", dependendo do valor do parâmetro "pass". A saída é realizada apenas pelo Stop Loss. A otimização é realizada usando um algoritmo genético, que procura os valores extremos (ou seja, o saldo máximo no nosso caso). 

Para evitar a influência da chamada de margem no algoritmo, o valor inicial deve ser muito grande, por exemplo, $ 1.000.000.

Na primeira fase.

Precisamos determinar os valores de entrada das variáveis "MA: averaging period" e "Stop Loss". Para isso, selecionamos os últimos dois intervalos do histórico, ou seja, de 6 meses atrás até hoje. Definimos todos os parâmetros de ponderação do "perceptron" a partir de: Início = 0 a Stop = 100, com um passo de 10. Valor do "MA: averaging period" a partir de :Início = 3 até o Stop = 100, com um passo de 10; o valor do "Stop Loss" a partir de: Início = 10 até o Stop = 75, com um passo de 10. Valor do "pass" = 1. Selecionamos os parâmetros de otimização: x11, x21, x31, x41"MA: averaging period" e "Stop Loss". Todas as outras caixas de seleção devem estar desabilitadas. Começamos a otimização. Depois disso, definimos os valores dos parâmetros de entrada de acordo com o melhor passo.

A segunda fase. Otimizando os primeiros pesos do "perceptron" no segundo intervalo dos dados históricos. Defina a data e a hora de otimização de 6 meses até 3 meses atrás. Remover as caixas de seleção dos parâmetros "MA: averaging period" e "Stop Loss". Começamos a otimização. Depois disso, definimos os valores dos parâmetros de entrada de acordo com o melhor passo. O valor "pass" ainda é 1. 

A terceira fase. Otimizando os pesos do segundo "perceptron" no terceiro intervalo dos dados históricos. Definimos a data e a hora da otimização de 3 meses atrás até hoje. Removemos a seleção dos parâmetros x11, x21, x31, x41 e selecionamos x12, x22, x32 e x42. Outros parâmetros devem ser desativados. Definimos "pass"=2. Começamos a otimização. Depois disso, definimos os valores dos parâmetros de entrada de acordo com o melhor passo.

A quarta fase. O sistema de negociação já foi otimizado para os dados históricos nos últimos seis meses. Salvamos os valores dos parâmetros de entrada no arquivo de configuração. Configuramos a variável de entrada "pass" para 3. Agora precisamos verificar a robustez do nosso sistema, ou seja, a probabilidade dos parâmetros de entrada não estarem "sobreajustados" e que eles possam possivelmente mostrar lucro em períodos de tempo não otimizados. Então, agora, nós definimos datas de 9 a 6 meses atrás (nenhuma otimização realizada neste intervalo) e realizamos testes.
Se no modo 3 o resultado do teste for negativo (perdendo), então provavelmente encontramos coeficientes "sobreajustados" de ambos os "perceptrons". Neste caso, precisamos realizar a otimização novamente, para obter outros valores dos parâmetros "sl" e "p" na primeira fase - a possível razão para a perda pode estar nesses parâmetros. Outro motivo para a falha pode ser um pequeno número de transações durante as fases de otimização, primeira e segunda (não deve haver menos de 100 transações) - nesse caso, o intervalo máximo de Stop para o parâmetro "sl" deve ser diminuído.

Se a quarta fase for bem-sucedida, então podemos supor que o primeiro ou o segundo "perceptron", ou até mesmo ambos, podem gerar lucros fora dos intervalos de otimização e, portanto, podem ser usados na negociação. Agora precisamos escolher o "perceptron". Para fazer isso, definimos as datas de 9 meses atrás para o dia atual e executamos os testes do Expert Advisor nos modos "pass" 1 e 2.

O modo com os melhores resultados provavelmente é o menos ajustado, considerado adequado para negociação. Mude o EA para este modo, salve as configurações do EA em um arquivo. Depois disso, execute o EA em um gráfico, defina o período de tempo para H1 e carregue as configurações do arquivo salvo anteriormente.

É claro que, para garantir que esse método de detecção de robustez do sistema de negociação seja realmente efetivo, todos os intervalos de dados históricos devem ser aprofundados no histórico para obter mais um intervalo adicional e testar nossos parâmetros definidos nesse intervalo.

O método acima para determinar a robustez do sistema de negociação não é simples. Mas é muito mais simples e, na maioria dos casos, mais confiável em comparação com o método clássico descrito no livro de Robert Pardo [1], uma vez que elimina a análise quase inútil do sistema de negociação e faz uso intensivo do recurso do teste a frente.

Lista de Referências

1. Robert Pardo. Projeto, Teste e Otimização do Sistema de Negociação. - Minax, 2002. - 224 páginas. ISBN 5-902270-01-4

Traduzido do russo pela MetaQuotes Ltd.
Publicação original: https://www.mql5.com/ru/code/23220

Float_Pivot_Smoothed_Digit Float_Pivot_Smoothed_Digit

O indicador Float_Pivot_Digit com a suavização das timeseries de entrada que são utilizadas nos cálculos. Os parâmetros de suavização das timeseries são determinados pelas variáveis de entrada do indicador

Float_Pivot_Digit Float_Pivot_Digit

Uma alternativa para as Bandas de Bollinger® com o preenchimento colorido dentro do canal, desenhado como uma nuvem, com a exibição dos últimos valores através de etiquetas de preço e a possibilidade de arredondamento dos níveis do canal até um número configurado de dígitos

Gap DM Gap DM

O Expert Advisor espera por um gap na abertura da barra.

XFisher_org_v1_Vol_Supr_Zer XFisher_org_v1_Vol_Supr_Zer

O indicador XFisher_org_v1_Vol_Supr com sinais adicionais exibidos como pontos redondos, indicam o rompimento da linha zero pela linha do indicador