Friday 21 July 2017

Rede Neural De Forex


MetaTrader 4 - Exemplos Usando Redes Neurais no MetaTrader Introdução Muitos de vocês provavelmente consideraram a possibilidade de usar redes neurais em sua EA. Este assunto foi muito quente especialmente após 2007 Automated Trading Championship e a vitória espetacular de Melhor com seu sistema baseado em redes neurais. Muitos fóruns na Internet foram inundados com tópicos relacionados a redes neurais e negociação Forex. Infelizmente, escrever a implementação nativa do MQL4 do NN não é fácil. Isso requer algumas habilidades de programação e o resultado não seria muito eficiente, especialmente se você quiser testar seu resultado final no testador em grande número de dados. Neste artigo, mostro-lhe como você pode usar a Biblioteca de Rede Neural Artificial Rápida (FPL) livremente disponível (em LGPL), em seu código MQL4, evitando certos obstáculos e limitações. Além disso, suponho que o leitor esteja familiarizado com as Redes Neurais Artificiais (ann) e a terminologia relacionada a este assunto, portanto, eu me concentrei em aspectos práticos de usar a implementação particular de ann na linguagem MQL4. Recursos de FANN Para entender completamente as possibilidades de implementação de FANN, é necessário familiarizar-se com sua documentação e as funções mais utilizadas. O uso típico do FANN é criar uma rede feedforward simples, treiná-la com alguns dados e executar. A rede criada e treinada pode então ser salva no arquivo e restaurada mais tarde para uso posterior. Para criar um ann, é necessário usar a função fanncreatestandard (). Vejamos a sua sintaxe: onde numllers representa o número total de camadas, incluindo a entrada e a camada de saída. O nnum e os seguintes argumentos representam o número de neurônios em cada camada começando com a camada de entrada e terminando com a camada de saída. Para criar uma rede com uma camada oculta com 5 neurônios, 10 entradas e 1 saída, um teria que chamá-lo da seguinte maneira: Uma vez que o ann é criado, a próxima operação seria treiná-lo com alguns dados de entrada e saída. O método de treinamento mais simples é o treinamento incremental que pode ser alcançado pela seguinte função: Esta função leva o ponteiro para struct fann retornado anteriormente pelo fanncreatestandard () e vetor de dados de entrada e vetor de dados de saída. Os vetores de entrada e saída são de matriz de tipo de tipo de fanntype. Esse tipo é, na verdade, um tipo duplo ou flutuante, dependendo da forma como o FANN é compilado. Nesta implementação, os vetores de entrada e saída serão matrizes de duplo. Uma vez que o ann é treinado, o próximo recurso desejado seria executar essa rede. A função que implementa é definida da seguinte forma: Esta função leva o ponteiro para a estrutura fann que representa a rede criada anteriormente e um vetor de entrada do tipo definido (matriz dupla). O valor retornado é uma matriz de vetor de saída. Esse fato é importante, pois, para uma rede de utput, sempre obtemos uma matriz de elementos com o valor de saída em vez do próprio valor de saída. Infelizmente, a maioria das funções da FANN usa um ponteiro para uma estrutura fann que representa o ann que não pode ser processado diretamente pelo MQL4, que não suporta estruturas como tipos de dados. Para evitar essa limitação, devemos envolver isso de alguma forma e ocultar do MQL4. O método mais fácil é criar uma matriz de ponteiros struct fann segurando os valores apropriados e referir-se a eles com um índice representado por uma variável int. Desta forma, podemos substituir o tipo de variável não suportado com o suportado e criar uma biblioteca de wrapper que pode ser facilmente integrada com o código MQL4. Enrolando o FANN em torno do meu melhor conhecimento, o MQL4 não suporta funções com lista de argumentos variáveis, então precisamos lidar com isso também. Por outro lado, se a função C (do comprimento dos argumentos variáveis) é chamada com muitos argumentos, nada de errado acontece, então podemos assumir um número máximo fixo de argumentos na função MQL4 passada para a biblioteca C. A função de invólucro resultante seria a seguinte: mudamos o fann líder com f2M (que significa FANN TO MQL), o número de argumentos estático usado (4 camadas) e o valor de retorno agora é um índice para a matriz interna de anns que contém a estrutura Dados fornecidos pela FANN para operar. Desta forma, podemos chamar facilmente essa função do código MQL. O mesmo vale para: Por último, mas não menos importante, é o fato de que você deve destruir o seu ann criado pela chamada para: Para liberar guias de ano, você deve destruir redes em ordem inversa do que foram criadas criadas. Alternativamente, você poderia usar: No entanto, tenho certeza de que alguns de vocês talvez preferem salvar sua rede treinada para uso posterior: Claro que a rede salva pode ser carregada (ou recriada) com: Uma vez que conhecemos as funções básicas, podemos tentar Use isso em nossa EA, mas primeiro precisamos instalar o pacote Fann2MQL. Instalando o Fann2MQL Para facilitar o uso deste pacote criei o instalador msi que contém todo o código-fonte mais as bibliotecas pré-compiladas e o arquivo de cabeçalho Fann2MQL. mqh que declara todas as funções do Fann2MQL. O procedimento de instalação é bastante direto. Primeiro, você está informado de que Fann2MQL está sob licença GPL: Instalação do Fann2MQL, passo 1. Em seguida, escolha a pasta para instalar o pacote. Você pode usar o Program FilesFann2MQL padrão ou instalar diretamente no seu diretório Meta Traderexperts. O mais tarde colocará todos os arquivos diretamente em seus locais, caso contrário você terá que copiá-los manualmente. Instalação do Fann2MQL, etapa 2 O instalador coloca os arquivos nas seguintes pastas: se você optar por instalar na pasta Fann2MQL dedicada, copie o conteúdo de suas subpastas de inclusão e bibliotecas no diretório apropriado do Meta Trader. O instalador também instala a biblioteca FANN na pasta de bibliotecas do sistema (Windowssystem32 na maioria dos casos). A pasta src contém todo o código-fonte do Fann2MQL. Você pode ler o código-fonte que é uma documentação final, se você precisar de mais informações sobre os internos. Você também pode melhorar o código e adicionar recursos adicionais, se desejar. Eu encorajo você a me enviar seus patches se você implementar algo interessante. Usando redes neurais no seu EA Depois que o Fann2MQL estiver instalado, você pode começar a escrever seu próprio EA ou indicador. Possui muito uso possível de NN. Você pode usá-los para prever futuros movimentos de preços, mas a qualidade de tais previsões e a possibilidade de tirar proveito real é duvidoso. Você pode tentar escrever sua própria estratégia usando técnicas de Reforço de Aprendizagem, diga um Q-Learning ou algo parecido. Você pode tentar usar o NN como um filtro de sinal para sua EA heurística ou combinar todas essas técnicas além do que você deseja. Você é limitado apenas por sua imaginação. Aqui vou mostrar um exemplo de usar o NN como um filtro simples para os sinais gerados pelo MACD. Não considere isso como uma EA valiosa, mas como um exemplo de aplicação do Fann2MQL. Durante a explicação da maneira como o exemplo EA: NeuroMACD. mq4 funciona, Ill mostra como o Fann2MQL pode ser efetivamente usado no MQL. A primeira coisa para cada EA é a declaração de variáveis ​​globais, define e inclui a seção. Aqui está o início do NeuroMACD contendo essas coisas: o comando include diz para carregar o arquivo de cabeçalho Fann2MQL. mqh contendo a declaração de todas as funções do Fann2MQL. Depois disso, todas as funções do pacote Fann2MQL estão disponíveis para uso no script. A constante ANNPATH define o caminho para armazenar e carregar arquivos com redes FANN treinadas. Você precisa criar essa pasta, ou seja, C: ANN. A constante NAME contém o nome deste EA, que é usado mais tarde para carregar e salvar arquivos de rede. Os parâmetros de entrada são bastante óbvios e aqueles que não serão explicados mais tarde, bem como variáveis ​​globais. O ponto de entrada de cada EA é a função init (): Primeiro, verifica se a EA é aplicada no período de período de tempo correto. A variável AnnInputs contém o número de entradas de rede neural. Além disso, use 3 conjuntos de argumentos diferentes que queremos que ele seja divisível por 3. AnnPath é calculado para refletir o EA NAME e o MagicNumber. Que é calculado a partir do SlowMA. Os argumentos de entrada FastMA e SignalMA que posteriormente são usados ​​para a sinalização do indicador MACD. Uma vez que conhece o AnnPath, a EA tenta carregar redes neurais usando a função annload () que descrevo abaixo. A metade das redes carregadas destina-se à filtragem de posição longa e a outra metade é para calções. A variável AnnsLoaded é usada para indicar o fato de que todas as redes foram inicializadas corretamente. Como você provavelmente notou este exemplo, a EA está tentando carregar várias redes. Eu duvido que seja realmente necessário neste aplicativo, mas eu queria mostrar-lhe o potencial total do Fann2MQL, que está lidando com múltiplas redes ao mesmo tempo e pode processá-las em paralelo, aproveitando múltiplos núcleos ou CPUs. Para tornar possível Fann2MQL está aproveitando a tecnologia Intel Threading Building Blocks. A função f2Mparallelinit () é usada para inicializar essa interface. Aqui está a maneira como eu costumava inicializar redes: como você pode ver se o f2Mcreatefromfile () falhar, que é indicado pelo valor de retorno negativo, a rede é criada com a função f2Mcreatestandard () com argumentos que indicam que a rede criada deve ter 4 camadas (Incluindo entrada e saída), entradas AnnInput, neurônios AnnInput na primeira camada escondida, neurônios AnnInput21 na 2ª camada oculta e 1 neurônio na camada de saída. F2Msetactfunctionhidden () é usado para configurar a função de ativação das camadas ocultas para SIGMOIDSYMMETRICSTEPWISE (consulte a documentação do Fann de fannactivationfuncenum) e o mesmo se aplica à camada de saída. Depois, há a chamada para f2mrandomizeweights () que é usado para inicializar os pesos de conexão do neurônio dentro da rede. Aqui usei o intervalo de lt-0.4 0.4gt, mas você pode usar qualquer outro dependendo da sua aplicação. Neste ponto, você provavelmente notou a função debug () que usei algumas vezes. É um dos métodos mais simples para alterar o nível detalhado de sua EA. Juntamente com ele e o parâmetro de entrada DebugLevel, você pode ajustar a forma como seu código está produzindo a saída de depuração. Se o primeiro argumento da função debug (), o nível de depuração é superior ao DebugLevel, a função não produz qualquer saída. Se for inferior a igual a cadeia de texto é impressa. Se o nível de depuração for 0, a string ERROR: é anexada ao início. Desta forma, você pode dividir o debug produzido pelo seu código em vários níveis. Os mais importantes são provavelmente erros, então eles são atribuídos ao nível 0. Eles serão impressos, a menos que você baixe seu DebugLevel para abaixo de 0 (o que não é recomendado). No nível 1, serão impressas algumas informações importantes, como a confirmação do carregamento ou criação de rede bem sucedida. No nível 2 ou superior, a importância da informação impressa está diminuindo gradualmente. Antes da explicação detalhada da função start (), que é bastante longa, preciso mostrar-lhe mais algumas funções destinadas a preparar a entrada de rede e executar as redes reais: a função annprepareinput () é usada para preparar o nome de entrada para as redes (Assim o nome). O objetivo disso é bastante direto, mas esse é o ponto em que devo lembrar que os dados de entrada devem ser devidamente normalizados. Não há uma normalização sofisticada neste caso, eu simplesmente usei o MACD principal e os valores de sinal que nunca excedem o alcance desejado nos dados contabilizados. No exemplo real, você provavelmente deve prestar mais atenção a esta questão. Como você provavelmente pode suspeitar de escolher os argumentos de entrada apropriados para entrada de rede, codificá-lo, decompor e normalizar é um dos fatores mais importantes no processamento da rede neural. Como mencionei antes, o Fann2MQL possui a capacidade de estender a funcionalidade normal do MetaTrader, que é o processamento paralelo de várias redes neurais. O argumento global Parallel controla esse comportamento. A função runanns () executa todas as redes inicializadas e obtém as saídas delas e armazena na matriz AnnOutput. A função annsrunparallel é responsável por lidar com o trabalho da maneira multithread. Ele chama o f2mrunparallel () que leva como primeiro argumento o número de redes a processar, o segundo argumento é uma matriz contendo alças para todas as redes que você deseja executar, fornecendo o vetor de entrada como um terceiro argumento. Todas as redes devem ser executadas nos mesmos dados de entrada. Obter o resultado da rede é feito por várias chamadas para f2mgetoutput (). Agora, vejamos a função start (): descreverei-a brevemente, pois é bem comentado. O comercializado () verifica se é permitido o comércio. Basicamente, ele verifica a variável AnnsLoaded indicando que todos os anns foram inicializados corretamente e, em seguida, verifica o equilíbrio da conta mínima do período do período de tempo apropriado e, ao mesmo tempo, permite trocar somente no primeiro tic de uma nova barra. As duas funções seguintes que são usadas para preparar a entrada de rede e executar o processamento da rede foram descritas apenas algumas linhas acima. Em seguida, calculamos e colocamos em variáveis ​​para posterior processamento dos valores de MACD do sinal e da linha principal para a última barra de acumulação e a anterior. A barra atual é omitida, pois não é acumulada ainda e provavelmente será redrapped. O SellSignal e o BuySignal são calculados de acordo com o sinal MACD e crossover da linha principal. Ambos os sinais são usados ​​para um processamento de posição longo e curto, que são simétricos, então eu descrevo apenas o caso para longos. A variável LongTicket mantém o número do ticket da posição atualmente aberta. Se for igual a -1 nenhuma posição é aberta, então, se o BuySignal estiver configurado, isso pode indicar boa oportunidade para abrir a posição longa. Se a variável NeuroFilter não estiver configurada, a posição longa é aberta e esse é o caso sem a rede neural de filtragem de sinais - a ordem é enviada para comprar. Neste ponto, a variável LongInput deve lembrar o InputVector preparado por annprepareinput () para uso posterior. Se a variável LongTicekt conter o número do ticket válido, o EA verifica se esta é ainda aberta ou foi fechada pelo StopLoss ou TakeProfit. Se a ordem não for fechada, nada acontece, no entanto, se a ordem for fechada, o vetor de saída de trem, que tem apenas um otput, é calculado para manter o valor de -1 se a ordem foi fechada com perda ou 1 se a ordem foi fechada com lucro . Esse valor é passado para a função anntrain () e todas as redes responsáveis ​​pela manipulação da posição longa são treinadas com ela. Como o vetor de entrada, a variável LongInput é usada, que mantém o InputVector no momento da abertura da posição. Desta forma, a rede ensina qual sinal traz lucros e qual não é. Depois de ter uma rede treinada, mudar o NeuroFilter para true transforma a filtragem de rede. O annwiselong () está usando a rede neural calculada como uma média de valores retornados por todas as redes destinadas a lidar com a posição longa. O parâmetro Delta é usado como um valor limiar que indica que o sinal filtrado é válido ou não. Como muitos outros valores obtidos através do processo de otimização. Agora, uma vez que sabemos como funciona, eu mostro como ele pode ser usado. O par de teste é, naturalmente, EURUSD. Eu usei os dados da Alpari. Convertido no prazo M5. Utilizei o período de 2007.12.31 a 2009.01.01 para a optimização da formação e 2009.01.01-2009.03.22 para fins de teste. Na primeira execução, tentei obter os valores mais rentáveis ​​para o argumento StopLoss, TakeProfit, SlowMA, FastMA e SignalMA, que eu codifiquei no arquivo NeuroMACD. mq4. O NeuroFIlter foi desligado, bem como SaveAnn. AnnsNumber foi definido como 0 para evitar o processamento neural. Usei o algoritmo genético para o processo de otimização. Uma vez que os valores foram obtidos, o relatório resultante teve o seguinte aspecto: Relatório sobre os dados de treinamento após a otimização básica dos parâmetros. Como você pode ver, executei esta EA na mini conta com o tamanho do Lote de 0,01 e o saldo inicial de 200. No entanto, você pode ajustar esses parâmetros de acordo com as configurações ou preferências da sua conta. Neste ponto, temos bastante lucrativo e perdemos negociações para que possamos ativar o SaveAnn e configurar o AnnsNumber para 30. Uma vez feito, então eu executei o testador mais uma vez. O resultado foi exatamente o mesmo com a exceção do fato de que o processo foi muito mais lento (como resultado do processamento neural) e a pasta C: ANN foi preenchida com as redes treinadas como mostrado na imagem abaixo. Certifique-se de que a pasta C: ANN existia antes dessa execução A pasta C: ANN. Uma vez que temos redes treinadas, é hora de testar como ela se comporta. Primeiro, experimente os dados de treinamento. Mude o NeuroFilter para true e SaveAnn para false e inicie o testador. O resultado obtido é mostrado abaixo. Observe que ele pode variar ligeiramente para você, pois há alguma aleatoriedade dentro de redes em pesos de conexão de neurônio fornecidos no processo de inicialização de rede (neste exemplo eu usei uma chamada explícita para f2Mrandomizeweights () dentro de annload ()). Resultado obtido em dados de treinamento com filtragem neural de sinal ativada. O lucro líquido é pouco maior (20,03 versus 16,92), mas o fator de lucro é muito maior (1,25 versus 1,1). O número de negócios é muito menor (83 vs 1188) eo número médio de perdas consecutivas é reduzido de 7 para 2. No entanto, isso só mostra que a filtragem de sinal neural está funcionando, mas não diz nada sobre como ele opera em dados que não foram usados ​​para Durante o treino. O resultado que obtive do período de teste (2009.01.01 - 2009.30.28) é mostrado abaixo: Resultado obtido a partir de dados de teste com filtragem neural ativada. O número de transações realizadas é bastante baixo e é difícil dizer a qualidade desta estratégia, mas eu não vou mostrar-lhe como escrever a melhor EA rentável, mas para explicar como você poderia usar redes neurais no seu código MQL4. O efeito real do uso de redes neurais neste caso só pode ser visto quando comparados os resultados da EA em dados de teste com NeuroFilter ativados e desativados. Abaixo está o resultado obtido a partir do período de dados de teste sem filtragem de sinal neural: Resultados a partir de dados de teste sem filtragem neural. A diferença é bastante óbvia. Como você pode ver, o filtro de sinal neural transformou a EA perdedora em uma conclusão rentável. Espero que você tenha aprendido com este artigo como usar redes neurais no MetaTrader. Com a ajuda do pacote simples, gratuito e de código aberto Fann2MQL, você pode adicionar facilmente a camada de rede neural a praticamente qualquer Consultor Especialista ou começar a escrever sua própria, que seja total ou parcialmente baseada em redes neurais. O recurso multithreading exclusivo pode acelerar seu processamento muitas vezes, dependendo do número de núcleos da CPU, especialmente ao otimizar determinados parâmetros. Em um caso, reduziu a otimização do meu processamento de EA baseada em reforço baseado em aproximadamente 4 dias para apenas 28 horas em uma CPU Intel de 4 núcleos. Durante a redação deste artigo, decidi colocar o Fann2MQL em seu próprio site: fann2mql. wordpress. Você pode encontrar a versão mais recente do Fann2MQL e, possivelmente, todas as versões futuras, bem como a documentação de todas as funções. Eu prometo manter este software sob a licença GPL para todos os lançamentos, então, se você me enviar comentários, solicitações de recursos ou patches que eu encontrei interessantes, certifique-se de encontrar os próximos lançamentos. Observe que este artigo mostra apenas o uso muito básico do Fann2MQL. Como este pacote não é muito mais do que o FANN, você pode usar todas as ferramentas projetadas para gerenciar redes FANN, como: E há muito mais sobre a FANN na página inicial da Biblioteca de Redes Neurais Artificiais Rápidas: leenissen. dkfann Post Scriptum Depois de escrever este artigo, encontrei Um erro insignificante no NeuroMACD. mq4. A função OrderClose () para posição curta foi alimentada com um número de ticket de posição longo. Isso resultou em uma estratégia distorcida que era mais provável para manter shorts e longs longos: na versão correta do script eu corrigi esse erro e removi a estratégia OrderClose (). Isso não alterou a imagem geral da influência da filtragem neural na EA, mas a forma da curva de equilíbrio era bastante diferente. Você pode encontrar ambas as versões desta EA anexadas a este artigo. Entrevista com Leonid Velichkovsky: O maior mito sobre Redes Neurais é uma super-lucratividade O herói da nossa entrevista Leonid Velichkovski (LeoV) já participou do Campeonato de Negociação Automatizado. Em 2008, sua rede neural de múltiplas moedas era como um flash brilhante no céu, ganhando 110 mil em um certo momento, mas acabou sendo vítima de sua própria gestão agressiva do dinheiro. Dois anos atrás, em sua entrevista, Leonid compartilhou sua própria experiência comercial e nos contou sobre as características de seu consultor especialista. Na véspera do ATC 2010, Leonid fala sobre os mitos e equívocos mais comuns associados às redes neurais. - Leonid, você é um representante raro da comunidade de comerciantes, que usam redes neurais para negociação. Estes são desenvolvimentos bastante complicados, mas o exército de seus fãs continua crescendo. O que atrai você em redes neurais - há seis anos, no início, as redes neurais me atraíam com a novidade, o caráter misterioso incomum e a lucratividade aparentemente alta. Ao longo dos anos, muitos mitos desapareceram, mas as redes neurais ainda me atraem com a capacidade de se adaptar a qualquer curva e encontrar padrões onde nada e ninguém mais pode encontrá-los. - Você poderia contar mais sobre os mitos associados às redes neurais? Você conheceu alguma desilusão neste campo? O maior mito associado às redes neurais é a sua super-lucratividade. Mas isso se aplica não apenas às redes neurais, mas ao Forex como um todo. No começo parece que é fácil ganhar - comprar e vender, não há nada complicado nele. Mais tarde, no entanto, alguns fatores aparecem, dos quais você nem sabia - só então você começa a compreendê-los e a entender. Nas redes neurais, decepcionante é o que atrai você - a sua capacidade de treinar e se adaptar a qualquer mercado com os dados disponíveis. A sua grande vantagem é uma desvantagem significativa quando aplicada aos mercados financeiros. Esta é uma metamorfose incrível - Como você entendeu que as redes neurais não trazem super lucros. Havia alguma experiência pessoal - Não há super-lucratividade no Forex também, não só nas redes neurais. Estritamente falando, as redes neurais são os mesmos sistemas de negociação (a seguir "TS"). Eles usam apenas um neurônio em vez de indicadores comuns. E então, a faceta mais importante é a gestão do dinheiro, ou seja, a ganância dos comerciantes. Quando você começa a negociar, você não tem o conceito de gerenciamento de dinheiro como tal. Mas então, você percebe a necessidade dessa ferramenta. O trabalho sobre Forex e, geralmente, nos mercados financeiros, está sempre relacionado a riscos. Você deve estar ciente de que o risco de 100 e 100,000 são duas coisas diferentes. Quando eu negociava em um depósito inicial de 100, 500 e até mil dólares, havia certo risco, e toda a abordagem de negociação era específica. E quando comecei a negociar montantes maiores, a atitude em relação ao comércio tornou-se algo bastante diferente - o nível de risco aumentou e eu rapidamente entendi que eu poderia perder tudo. Uma certa responsabilidade veio com isso. Por exemplo, ao negociar no depósito de 100, o lucro de 100 por ano dificilmente pode ser satisfatório, penso eu. Mas a negociação no depósito de 100.000 um lucro de 100 por ano não é ruim. Assim, há um tipo de conflito psicológico - os comerciantes que trocam pequenos depósitos, procuram ganhar o mais rápido possível. Isso empurra os comerciantes para ir além de todos os riscos possíveis. O resultado é a perda natural de depósito Portanto, eu acredito, a negociação em pequenos depósitos está condenada ao fracasso devido ao desejo natural de um comerciante de ganhar o mais rápido e o mais possível. E 100, por exemplo, não é uma quantidade suficientemente grande para mantê-lo afastado de riscos. - Nos últimos seis anos, você trabalhou com redes neurais na negociação. Como você cria essas misteriosas redes neurais O que você usa - Eu não sou um programador, eu sou um comerciante. Programar redes neurais e usá-las nos mercados financeiros são coisas completamente diferentes. Os programadores me ajudam a desenvolver Expert Advisors - Roman Kramar (bstone), Yuri Zaitsev (YuraZ), Victor Nikolaev (Vinin) e Dmitriy Fedoseev (Integer). Todos eles são profissionais em seu campo, eu não preciso explicar muito - eles sabem tudo perfeitamente bem. E sou muito grato a todos por seu trabalho e profissionalismo. Além disso, eu colaborei e continue trabalhando com Steve Ward (Ward Systems Group) e Sergei Dolenko (Neuroproject) que me deram informações inestimáveis ​​sobre a aplicação de redes neurais nos mercados financeiros. Além disso, trabalhei em estreita colaboração com Dennis Meyers (Meyers Analytics), Philippe Lonjoux (Noxa Analytics, Inc.) e Mark Simpson (Bowfort Technologies Inc.), com quem testei novos sistemas e indicadores. Gostaria de notar que a aplicação de redes neurais nos mercados financeiros tem muitos recursos e conceitos e técnicas inovadoras, e difere muito do seu uso em outras áreas. Eu uso MetaTrader 4, é claro, agora eu tento fazer amizade com MetaTrader 5. Outra ferramenta indispensável para o trabalho é o NeuroShell, sem o qual eu não posso fazer. Uso o MTFeed como uma ponte entre o MetaTrader 4 e o NeuroShell. - Existem muitos métodos de treinamento de redes neurais. Leonid, como você os treina. E, finalmente, a questão que tormenta muitos iniciantes no comércio de redes neurais: como evitar o chamado excesso de treinamento - é uma questão complicada, à qual eu (e não só eu) não tenho resposta e O que é impossível sistematizar claramente. No entanto, vou tentar abordar os principais problemas de treinamento e formas de evitar o excesso de treinamento. Devido à sua forte não-linearidade e à capacidade de se adaptar a qualquer dado, uma rede neural é muito bem ajustada, treinada e, como conseqüência, superada. Uma rede neural com apenas alguns neurônios em sua camada interna facilmente se lembra da história de alguns milhares de barras. Deve-se notar que o treinamento excessivo é inerente às redes neurais somente quando aplicado aos mercados financeiros. O que isso significa, todos sabemos que o mercado muda ao longo do tempo - o que aconteceu no passado desaparecerá no futuro. Bem, ele existirá, mas um pouco diferente, não haverá 100% de correspondências. Padrões, leis, áreas de mercado - tudo isso será diferente em diferentes partes do mercado. Conseqüentemente, se uma rede neural aprende muito as lições (exemplos) do passado ao ser treinada em dados de histórico, no final pode simplesmente deixar de notar ou identificar novos padrões e áreas de mercado no futuro. Porque todos eles sofreram algumas mudanças. Ou seja, a rede neural adaptou-se muito bem às condições do mercado, que existiram no passado, mas não conseguiu reconhecer os novos padrões nas condições de mercado alteradas. Existe alguma maneira de evitar o excesso de treinamento Existem muitas maneiras, mas as principais são duas delas: a parada precoce do treinamento e o aumento do intervalo de treinamento. No entanto, ambos os métodos têm suas graves desvantagens. No início da parada, há perguntas difíceis, para as quais não há resposta: Em que ponto devo parar de treinar Qual critério deve ser usado para isso. Existem muitas respostas para esta questão - use erros, nível de lucro, redução e outros métodos matemáticos critério. Mas eles não dão uma garantia de cem por cento de paradas oportunas. Portanto, esta parada oportuna de treinamento depende apenas das habilidades dos comerciantes. Há um equívoco de que quanto melhor fosse no passado, melhor será no futuro. Ou quanto menor for o erro no intervalo de treinamento, melhor a rede funcionará no futuro. No entanto, isso não é verdade: o mercado está mudando e, sendo muito bem treinado em dados históricos, uma rede neural pode deixar de ver o futuro. Eu sei, por minha própria experiência, que a proporção de erros por parte do treinamento e lucros no OOS (Out Of Sample - fora do intervalo de otimização) ou em uma conta real é a seguinte: o erro diminui gradualmente com o aumento do tempo de treinamento, Mas o lucro primeiro aumenta e depois cai, formando um máximo em um certo momento no tempo. Este é o máximo que precisamos pegar. Além disso, à medida que o tempo de treinamento aumenta, o erro também diminuirá gradualmente, e o lucro na OOS pode produzir vários mais máximos, mas geralmente são menos do que o primeiro. Embora encontrei uma situação em que o segundo e até o terceiro máximo eram superiores ao primeiro. Mas acredita-se que o primeiro máximo é melhor que o resto em termos de rentabilidade e eficiência. Na verdade, nossa tarefa é capturar esse primeiro máximo. E depende das habilidades e da experiência do comerciante - não conheço nenhum outro critério mais preciso. Embora, é claro, possamos e devemos guiar-nos pela porcentagem de rentabilidade, erro, redução, razão Sharpe e muitos outros parâmetros. Mas, em última análise, depende apenas do comerciante quais os critérios a serem usados. E depende de como ele entende seu TS e sabe como ele se comporta. Enquanto no intervalo de treinamento, coisas completamente diferentes acontecem. O erro eo lucro se comportam exatamente o oposto - o erro diminui gradualmente, e o lucro aumenta suavemente. Se o lucro aumentar durante a otimização, isso significa que o Consultor Especializado é simplesmente ajustado à curva do mercado, transformando o preço em uma curva suave. Essa curva deve crescer e é chamada de equidade. Na verdade, essa otimização também é para reduzir o erro. E obtemos o seguinte: o maior lucro na seção de treinamento ou otimização é, mais provável que você tenha sobre-treinamento ou sobre otimização (montagem) e, como conseqüência - perdas no futuro. A segunda maneira de evitar o excesso de treinamento é aumentar o intervalo de treinamento, ou seja, aumentar a quantidade de dados, no qual a rede é treinada. Mas este método também tem suas armadilhas. Aumentar a quantidade de dados nos mercados financeiros leva ao fato de que a rede simplesmente pode deixar de ver ou reconhecer esses padrões e áreas de mercado, que existem na seção de treinamento dada. A seção é muito grande para isso. Isso ocorre porque o mercado muda com o tempo. E um padrão específico parece muito diferente neste grande intervalo, e a rede não pode definir que este é o mesmo padrão, que só mudou ao longo do tempo. Em seguida, surge uma questão natural: qual parte do mercado deve ser dada a uma rede de treinamento. Aqui está a resposta: a parte em que a rede reconhece com sucesso os padrões e as áreas de mercado necessárias para um TS e o comerciante. Isso depende de habilidades de comerciantes - da maneira como ele vê o mercado e quão bem ele pode escolher a parte certa para treinar. Na minha experiência, isso é de 500 a 2000 barras, dependendo do prazo e do estado do mercado. Existem algumas maneiras mais de evitar o excesso de treinamento, mas não são tão importantes. Você vê, muito depende de quão háfico e experiente é um comerciante. Então, penso que essa profissão requer não só o conhecimento matemático, mas também a criatividade. Também é claro que todos os recursos e as nuances do uso de redes neurais, bem como as TSs usuais, decorrem do fato de que o mercado muda ao longo do tempo e o passado nunca se repete exatamente no futuro. Esta característica existe apenas nos mercados financeiros. Há um mito popular que você precisa dar muitos dados a uma rede neural e deixá-lo treinar - ele aprenderá de forma independente o que ele precisa. Para o uso normal das redes neurais, isso pode ser verdade, mas os mercados financeiros têm suas próprias peculiaridades, que descrevi acima, então não é tão fácil neste caso. Na minha opinião, estas duas formas de evitar o excesso de treinamento também se aplicam à otimização de especialistas comuns, sem redes neurais. O excesso de otimização ou ajuste, é específico apenas para os mercados financeiros. E as maneiras de evitá-lo são as mesmas. A essência da sobre-otimização também reside no fato de que a natureza dos mercados financeiros muda no tempo. Estritamente falando, o mercado não é estacionário. - Quais são os erros comuns que um comerciante pode enfrentar ao começar a trabalhar com redes neurais. O engano popular dos comerciantes que começam a usar redes neurais e usa dados não normalizados na entrada, tentando obter o preço da próxima barra, é Hoje será Ser como ontem e amanhã será como hoje (se considerarmos barras diárias). Este é um over-training comum de uma rede. Enquanto os dados no Forex não diferem muito uns dos outros (100 pontos fazem apenas 0,7 do preço), o erro de treinamento também será pequeno e a rede encontrará rapidamente este mínimo local de treinamento. - Alguns comerciantes neurais utilizam pré-processamento de dados de entrada. Você usa algo assim nas suas redes neurais? De modo geral, eu nunca uso séries de tempo puro para as entradas de redes neurais. As séries temporais são sempre transformadas por algum indicador, que normaliza os dados em uma determinada linha. Por exemplo, de -100 a 100 ou de -1 a 1. Não é necessária mais normalização, porque se os valores dos indicadores forem maiores que 1, eles sempre podem ser divididos por um número apropriado, para atingir um valor que não exceda 1. I Tente fazer a menor alteração de dados de entrada possível, uma vez que qualquer transformação traz distorção não linear linear adicional no sinal de entrada. Isso, portanto, conduz o treinamento incorreto de uma rede neural, uma vez que a distorção pode ser interpretada incorretamente pela rede. Além disso, com fortes transformações e conseqüentemente grandes distorções não-lineares, a rede pode ser treinada não em um sinal de entrada real, mas em distorções não-lineares, o que pode levar a operação incorreta e perda de depósito. Aqui estão alguns exemplos de distorções não-lineares que são visíveis a olho nu. Tome, por exemplo, os estocásticos habituais. Parece que um indicador tão simples não traria distorções. Mas, em alguns momentos, faz fortes distorções não-lineares, o que pode induzir em erro a rede neural no processo de treinamento e continuar trabalhando em uma conta real. Essas áreas são marcadas com um oval branco no gráfico. No primeiro caso, o preço aumenta e o indicador estocástico permanece praticamente em seus valores máximos. No segundo caso, o preço é quase num mesmo nível e o indicador estocástico diminui bruscamente de seus valores máximos para valores mínimos. No primeiro caso, o indicador estocástico não trará informações à rede, enquanto no último caso simplesmente o confundirá. Em ambos os casos, o comportamento do indicador estocástico terá um impacto negativo tanto no treinamento quanto no trabalho da rede neural em uma conta real. E isso pode levar a perdas financeiras. Deve-se notar que esses dois exemplos são distorções bastante visíveis que você pode ver facilmente. E há muito mais distorções que não podemos ver e analisar acredite. E todas essas distorções (grandes e pequenas) são combinadas entre si. Portanto, seja extremamente cuidadoso ao fazer com o pré-processamento de dados de entrada. Claro, há indicadores que fazem distorções muito mais fortes. Há também aqueles que fazem menos fortes. No entanto, o fato permanece - a distorção é feita por qualquer indicador. Embora, você pode selecionar parâmetros específicos para qualquer indicador (mesmo estocástico), de modo que ele traga distorções mínimas no sinal original com condições de mercado específicas. Naturalmente, a natureza do mercado pode mudar, e você terá que mudar os parâmetros do indicador para reduzir a distorção introduzida. E nesta situação, uma seleção adequada de parâmetros de indicadores e seu ajuste atempado (tanto de forma automática quanto manual) também são totalmente dependentes de habilidades e experiência de comerciantes. - Como você avalia os resultados de uma rede neural após o treinamento ou TS após otimização. Quais são os critérios para usá-los em uma conta real. Atualmente, quase nunca considero os resultados de um TS, que foram obtidos no treinamento ( Otimização). Eu analiso resultados em OOS ou real, porque acredito que no período de treinamento (otimização), os resultados de um TS não podem dizer nada. Isso pode ser adequado ou excesso de treinamento e é quase impossível definir se é adequado ou não. Você só pode defini-lo testando-o no OOS ou melhor em uma conta real. Às vezes, eu simplesmente comparo os resultados da conta real (OOS) e do treinamento (otimização). Portanto, os números mostram patrimônio em uma conta real com a alavancagem comercial de 1: 1 (o uso do depósito é 1 com a alavancagem de 1: 100 dada pelo centro de negociação). Se aumentarmos a alavancagem, a faixa de capital também aumentará. Na verdade, analiso os resultados de um TS apenas com a alavancagem de 1: 1, ou seja, com um gerenciamento de dinheiro com deficiência. Uma vez que o gerenciamento de dinheiro pode dar uma idéia errada sobre a redução real do TS e, consequentemente, uma chamada de margem inesperada e outros problemas. Nas figuras, você pode ver o patrimônio com a alavancagem de 1: 1. A propósito, é o mesmo sistema comercial que participou do ATC 2008, embora com parâmetros ligeiramente modificados. Recentemente, notei o seguinte: se o fator de lucro for extremamente grande no intervalo de treinamento (otimização) com a alavancagem de 1: 1, podemos dizer com certeza que está sobre-treinamento (sobre otimização). E no futuro, nos dados desconhecidos, o sistema de negociação com esses parâmetros funcionará mal (ou seja, perderá o depósito). Pode-se notar que nos números, o patrimônio sobe suavemente em vez de forte. Você poderia concluir que a rentabilidade de um sistema comercial como esse não é bastante pequena. Embora, se você aumentar a alavancagem comercial ou usar uma gestão de dinheiro mais agressiva, os lucros podem aumentar o volume de negócios. Tudo depende da redução, que aparece com a alavancagem de 1: 1, e a redução permitida por um comerciante. - Quase dois anos se passaram desde o ATC 2008. Que lições você aprendeu com os resultados desse Campeonato Por que o seu Expert Advisor não ganhou o concurso O Campeonato é uma competição. Quem não arrisca não petisca. Eu ousei e eu excedi todos os riscos possíveis devido à minha gestão de dinheiro. Consegui ganhar 110.000 e depois caiu para 14.749 por causa dessa gestão de dinheiro muito agressiva. Durante 3 meses, o lucro foi de quase 50, o que foi muito bom. Mas a redução foi de 92, o que é inaceitável na vida real. Então, tendo executado a EA com gerenciamento de dinheiro razoável no mesmo período, obtive quase o mesmo resultado de 14.000, mas com uma redução de cerca de 25 - este é um bom resultado para a vida real. A conclusão é que você não deve perseguir os lucros em excesso, caso contrário você pode perder. Mas o Campeonato faz suas próprias regras e, claro, você precisa correr riscos para vencer. - Alguma coisa mudou fundamentalmente em seus desenvolvimentos durante este período. Talvez, você tenha encontrado algum know-how e aplicado na prática, não, de fato, tudo é o mesmo. Nada de novo aconteceu. Além disso, o mesmo Expert Advisor com os mesmos parâmetros ainda pode funcionar, embora eu encontrei outros parâmetros mais lucrativos. A essência do mercado não muda - apenas seu personagem está mudando, o que um comerciante experiente deve acompanhar, ajustando seus TS oportunamente para as condições de mercado novas e alteradas. - O consultor especialista de Alexander Topchylo, vencedor do ATC 2007, consistiu em três subsistemas independentes. No entanto, o autor progrediria nessa direção e criaria um comitê de redes neurais. Você usa tais comitês em seus desenvolvimentos - Não, eu me recusei a usar comitês porque eles são difíceis de implementar e manter. Ao longo dos anos, eu usei TSs simples, porque um TS muito complexo, assim como aquele com comitês, não pode garantir um lucro mais estável e maior em comparação com um simples. - O autor do único consultor especialista em multidões entre os vencedores do ATC, Nikolay Kositsin acredita que as regras do próximo Campeonato são favoráveis ​​às AEs multicorrentes e deixam pouca chance de robôs de moeda única. Você usa multi-moeda em seus consultores de especialistas? Que pares fazem seus EAs? Claro. Eu os uso. Isso permite operações de hedge e obtenção de uma equidade mais suave. Além disso, se você usa múltiplas moedas para análise, isso ajuda a criar sistemas comerciais mais estáveis ​​e confiáveis. No Campeonato, pretendo negociar EURUSD, USDJPY e AUDUSD - depende de como a situação do mercado se aproxima do Campeonato. - Leonid, obrigado pela entrevista. Boa sorte no campeonato Como escrever um consultor especialista e não violar as regras do campeonato Neste artigo, vamos mostrar como escrever um consultor especializado e evitar erros que podem impedir que você participe no próximo Campeonato Automatizado de Negociação 2010 O gerenciamento de riscos é Um componente essencial de qualquer sistema de comércio. Sem isso, é praticamente impossível imaginar uma negociação rentável. Neste artigo, os desenvolvedores experientes de sistemas de negociação automatizados compartilham suas dicas sobre gerenciamento de riscos com os participantes do Campeonato. MetaNeural Expert Advisor - Comité de Rede Neural EA Eu fiz algumas programação para uma empresa comercial por um tempo atrás e recentemente eles desenvolveram uma versão de produção de Seu sistema de negociação para a Metatrader. Isso funciona surpreendentemente bem e, neste mundo esquisito de golpistas, eu só queria colocar isso lá como algo que eu sei funciona. Redes Neurais - é um novo campo para comerciantes de varejo no nível de dinheiro pequeno, porque é preciso tanto dinheiro e tempo para desenvolver sistemas de negociação rentáveis ​​de rede neural, mas acredito que é aí que a indústria está indo. Qualquer um que preste atenção ao campeonato de negociação automatizado pode lembrar-se do melhor há alguns anos atrás, explodiu todos os outros e da água e colocou redes neurais no mapa - o problema é que, ninguém sabia como fazê-los, ele requer significativo Habilidades de programação como eu conheço em primeira mão e, francamente, a maioria dos sistemas de negociação automatizados do metatrader são fraudes mal escritas. Você lembrará que o desenvolvedor da Better EA mencionou o uso de um comitê de redes neurais trabalhando em conjunto para processar os padrões complexos no mercado e produzir negócios incrivelmente precisos, o EA Metaneural é construído com o mesmo conceito, a única diferença é que você pode realmente comprá-lo e Tente por você mesmo. É chamado de EA Metaneural feito pela Metaneural Engineering, verifique se você está interessado na próxima evolução do comércio varejista e talvez na negociação automatizada em geral. Seu produto final usa muitos dos mesmos conceitos básicos apresentados neste artigo mql5 se você estiver interessado no desenvolvimento da rede neural: mql5enarticles236 Os membros devem ter pelo menos 0 comprovantes para publicação neste tópico. 0 comerciantes que visualizam agora Forex Factoryreg é uma marca registrada.

No comments:

Post a Comment