Sunday, 22 April 2018

Rede neural forex


Entrevista com Leonid Velichkovsky: "O Maior Mito sobre Redes Neurais é Super-Rentabilidade"


- 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?


- Seis anos atrás, no início, as redes neurais me atraíam com a novidade, o caráter misterioso incomum e a lucratividade aparentemente elevada. 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 de 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ê - sua capacidade de treinar e se adaptar a qualquer mercado com qualquer dado disponível. 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? Existe 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 (doravante - 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" do comerciante.


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 US $ 100 e US $ 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 à negociação tornou-se algo bastante diferente - o nível de risco aumentou e eu rapidamente entendi que poderia perder tudo. Uma certa responsabilidade veio com isso.


Por exemplo, ao negociar no depósito de US $ 100, o lucro de 100% ao ano dificilmente pode ser satisfatório, penso eu. Mas a negociação no depósito de US $ 100.000 com um lucro de 100% ao 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 e o mais 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, acredito, o comércio de pequenos depósitos está condenado ao fracasso devido ao desejo natural de um comerciante de ganhar o mais rápido e o mais possível. E US $ 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?


- Não sou programador, sou comerciante. Programar redes neurais e utilizá-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 possui 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 o MetaTrader 5. Outra ferramenta indispensável para o trabalho é a NeuroShell, sem a qual 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 "treinamento excessivo"?


- É uma questão complicada, à qual eu (e não só eu) não tenho resposta e 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 adaptação 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 "excesso de treinamento" é inerente às redes neurais somente quando aplicado aos mercados financeiros. O que isto 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á correspondências de 100 por cento. Padrões, leis, áreas de mercado - tudo isso será diferente em diferentes partes do mercado.


Consequentemente, se uma rede neural aprende as lições (exemplos) do passado muito bem 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.


Existem maneiras de evitar o excesso de treinamento? Há 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? Que critérios devem ser usados ​​para isso? Existem muitas respostas para esta questão - use erros, nível de lucro, redução e outros critérios matemáticos. 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 do comerciante.


Existe 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 do que o resto em termos de rentabilidade e eficiência. Na verdade, nossa tarefa é pegar esse primeiro máximo. E depende de habilidades e 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 instância, depende unicamente do comerciante quais critérios usar. 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, em que 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 esse é o mesmo padrão, que só mudou ao longo do tempo.


Então 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 padrões e áreas de mercado necessárias para um TS e o comerciante. Isso depende das habilidades de um comerciante - da maneira como ele vê o mercado e quão bem ele pode escolher a parte certa para o treinamento. 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ábil e experiente é um comerciante. Então eu acho que essa profissão exige não só o conhecimento matemático, mas também a criatividade. Também é claro que todos os recursos e 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 Expert Advisors 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 está parado".


- Quais são os erros comuns que um comerciante pode enfrentar ao começar a trabalhar com redes neurais?


A ilusão popular de comerciantes que começam a usar redes neurais e usam dados não normalizados na entrada, tentando obter o preço do próximo bar, é "Hoje será como ontem e amanhã será como hoje" (se considerarmos diariamente bares). Este é um over-training comum de uma rede. Enquanto os dados no Forex não diferem muito um do outro (100 pontos fazem apenas 0,7% do preço), então o erro de treinamento também será pequeno e a rede encontrará rapidamente este mínimo local de treinamento.


- Alguns comerciantes "neurais" usam pré-processamento de dados de entrada. Você usa algo assim nas suas redes neurais?


- De um modo geral, nunca use 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á nenhuma informação à 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 na o 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 em mim. 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 das habilidades e experiência de um comerciante.


- Como você avalia os resultados de uma rede neural após o treinamento ou TS após a 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 intervalo de 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 é apropriado 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 é de 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 uma gestão de dinheiro "desativada". Uma vez que o gerenciamento de dinheiro pode dar uma idéia errada sobre a retirada 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 é 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 sem problemas, 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 a diversidade. Tudo depende da retirada, que aparece com a alavanca 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 conseguiu o concurso?


O Campeonato é uma competição. Quem não arrisca não petisca. Eu duvidei; e eu excedi todos os riscos possíveis devido à minha gestão de dinheiro. Consegui ganhar 110 mil e, em seguida, caiu para 14,749 devido a essa gestão de dinheiro muito agressiva. Durante 3 meses, o lucro foi de quase 50%, o que foi bastante 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 US $ 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 o excesso de lucros, 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 esse período? Talvez você tenha encontrado algum know-how e aplicado na prática?


Não, na verdade, tudo permanece 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 o seu personagem está mudando, o que um comerciante experiente deve acompanhar, ajustando seus TS oportunamente às condições de mercado novas e alteradas.


- O consultor especialista de Alexander Topchylo, vencedor do ATC 2007, consistiu em três subsistemas independentes. Contudo, o autor progrediu nesse sentido e criou um comitê de redes neurais. Você usa esses comitês em seus desenvolvimentos?


- Não, eu me recusei a usar comitês devido a serem 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 especializado em diversas correntes entre os vencedores do ATC, Nikolay Kositsin acredita que as regras do próximo Campeonato são favoráveis ​​às EAs de múltiplas corridas e deixam pouca chance de robôs de moeda única. Você usa multidões em seus Expert Advisors? Em que pares seus EAs trocam?


- É claro que 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 EUR / USD, USD / JPY e AUD / USD - depende de como a situação do mercado se aproxima do Campeonato.


- Leonid, obrigado pela entrevista. Boa sorte no Campeonato!


Neste artigo, vamos mostrar como escrever um consultor especializado e evitar erros que possam impedir que você participe no próximo Campeonato Automatizado de Negociação 2018.


Gerenciamento de riscos em negociação automatizada.


A gestão de riscos é um componente essencial de qualquer sistema de negociação. Sem isso, é praticamente impossível imaginar o comércio lucrativo. Neste artigo, desenvolvedores experientes de sistemas de negociação automatizados compartilham suas dicas sobre gerenciamento de riscos com os participantes do Campeonato.


Metatrader Expert Advisors baseado em FOREX Neural.


A rede neural de forex é um algoritmo, que imita a atividade nervosa dos seres vivos (com alguma parte da imprecisão). Usando a rede neural de forex, podemos identificar e usar uma grande quantidade de interconexões em dados geralmente ocultos de nossos olhos por causa da complexidade e não-linearidade dos dados. É corroborado pelo fato de que as redes neurais de forex são usadas em muitas esferas da nossa vida, incluindo a negociação. No entanto, você precisa decidir por si mesmo se eles são úteis para você ou não.


Nenhuma rede de forex neural (mesmo a melhor) pode prever o preço futuro por meio de pressionar apenas um botão. No entanto, você pode usar a rede neural forex para fazer previsões com certa probabilidade e, portanto, irá ajudá-lo a tomar melhores decisões comerciais. As capacidades limitadas das redes de forex neurais não impedem que elas sejam ferramentas efetivas de análise de mercado, especialmente, quando há muitas conexões não-lineares e de ruído. A rede neural de forex não vai resolver todos os seus problemas, mas como as redes neurais de forex são poderosos métodos tecnológicos de análise técnica, eles podem ser uma ferramenta inestimável em seu arsenal comercial. Eles também possuem uma qualidade única para rastrear conexões pouco identificáveis ​​em dados acessíveis; outros métodos não permitem que você faça isso. A capacidade de criar padrões com base em dados de análise torna o método da rede de forex neural absolutamente único entre outros métodos e ferramentas.


Você pode efetivamente usar a rede neural forex para:


- Classificação das fases do mercado.


- Previsão temporária da formação máxima e mínima para diferentes prazos.


- Previsão da probabilidade de flutuação dos movimentos após as tendências e as seguintes correções.


- Acompanhamento de interconexões entre mercados.


Veja as estatísticas da Verified Live Trading -


Download instantâneo.


Tudo o que você precisa nos enviar seu número de conta mt4 para ativação.


Você receberá uma notificação por correio sobre a ativação da licença.


Estamos à sua disposição 24 horas por dia, cinco dias por semana.


Você pode entrar em contato conosco sempre que quiser,


independentemente do tipo de pergunta ou problema que você deseja aumentar.


APOIO - ANTES E APÓS A VENDA:


Nossa equipe de suporte técnico trabalhará com você para alcançar o mais alto nível de desempenho do nosso produto que você decide comprar.


Não hesite em contactar-nos a qualquer momento com as suas perguntas, estamos aqui para fornecer aconselhamento especializado. Além disso, sinta-se à vontade para contatar-nos sobre sua experiência usando nosso produto.


CONTACTE-NOS: fx. neuralnetworks@gmail.


Perguntas frequentes.


U. S. Isenção de responsabilidade do governo - A negociação de câmbio na margem possui um alto nível de risco e pode não ser adequada para todos os investidores. O alto grau de alavancagem pode funcionar contra você, bem como para você. Antes de decidir investir em divisas, você deve considerar cuidadosamente seus objetivos de investimento, nível de experiência e apetite de risco. Existe a possibilidade de que você possa sustentar uma perda de algum ou todo seu investimento inicial e, portanto, você não deve investir dinheiro que não pode perder. Você deve estar ciente de todos os riscos associados à negociação cambial e procurar o aconselhamento de um consultor financeiro independente se tiver dúvidas.


A compra, venda ou conselho sobre uma moeda só pode ser realizado por um corretor / revendedor licenciado. Nem nós, nem nossos afiliados ou associados envolvidos na produção e manutenção desses produtos ou neste site, é um corretor / Revendedor ou Conselheiro de Investimento registrado em qualquer jurisdição estadual ou federal. Todos os compradores de produtos referenciados neste site são encorajados a consultar um representante licenciado de sua escolha em relação a qualquer estratégia comercial ou comercial. Nenhuma representação está sendo feita que qualquer conta será ou provavelmente alcançará lucros ou perdas similares às discutidas neste site. O desempenho passado de qualquer sistema ou metodologia comercial não é necessariamente indicativo de resultados futuros.


Compreenda claramente isso: as informações contidas neste produto não são um convite para trocar investimentos específicos. Negociar exige arriscar dinheiro em busca de ganhos futuros. Essa é a sua decisão. Não arrisque nenhum dinheiro que você não pode perder. Este documento não leva em consideração suas próprias circunstâncias financeiras e pessoais individuais. Destina-se apenas para fins educacionais e NÃO como conselho de investimento individual. Não agir sobre isso sem o conselho do seu profissional de investimento, que verificará o que é adequado para suas necessidades particulares e amp; circunstâncias. A falta de busca de conselhos profissionais detalhados personalizados antes de atuar pode levar você a agir de forma contrária aos seus próprios interesses e amp; poderia levar a perdas de capital.


Redes neurais para negociação algorítmica. Previsão de séries temporais simples.


ACTUALIZAÇÃO IMPORTANTE:


Esta é a primeira parte dos meus experimentos em aplicação de aprendizado profundo para financiar, em particular para negociação algorítmica.


Eu quero implementar o sistema de negociação a partir do zero com base apenas em abordagens de aprendizado profundo, então, para qualquer problema que temos aqui (previsão de preços, estratégia de negociação, gerenciamento de riscos), usaremos diferentes variações de redes neuronais artificiais (RNAs) e veremos o quanto elas podem lide com isso.


Agora eu planejo trabalhar nas próximas seções:


Previsão de séries temporais com dados brutos Previsão de séries temporais com recursos personalizados Otimização de hiperparâmetros Implementação de estratégia de negociação, backtesting e gerenciamento de riscos Estratégias de negociação mais sofisticadas, reforço de aprendizagem Indo ao vivo, corretores API, ganhando (l̶o̶s̶i̶n̶g̶) dinheiro.


Eu recomendo que você verifique o código e o IPython Notebook neste repositório.


Nesta primeira parte, quero mostrar como MLPs, CNNs e RNNs podem ser usados ​​para a previsão de séries temporais financeiras. Nesta parte, não vamos usar nenhuma engenharia de recursos. Vamos considerar o conjunto de dados históricos dos movimentos dos preços do índice S & P 500. Temos informações de 1950 a 2018 sobre preços abertos, fechados, altos e baixos para todos os dias do ano e volume de negócios. Primeiro, tentaremos apenas prever fechar o preço no final do próximo dia, em segundo lugar, tentaremos prever o retorno (preço fechado - preço aberto). Baixe o conjunto de dados do Yahoo Finance ou deste repositório.


Definição do problema.


Consideraremos o nosso problema como 1) problema de regressão (tentando prever exatamente fechar o preço ou retornar no dia seguinte) 2) problema de classificação binária (o preço aumentará [1; 0] ou abaixo [0; 1]).


Para treinar NNs, usaremos framework Keras.


Primeiro vamos preparar nossos dados para treinamento. Queremos prever o valor de t + 1 com base em informações de N dias anteriores. Por exemplo, tendo preços próximos dos últimos 30 dias no mercado, queremos prever, que preço será amanhã, no 31º dia.


Utilizamos as primeiras 90% das séries temporais como conjunto de treinamento (considere-a como dados históricos) e 10% como conjunto de testes para avaliação do modelo.


Aqui é exemplo de carregamento, dividindo em amostras de treinamento e pré-processamento de dados de entrada brutos:


Problema de regressão. MLP.


Será apenas um perceptron de 2 camadas escondidas. O número de neurônios escondidos é escolhido de forma empírica, vamos trabalhar na otimização de hiperparâmetros nas próximas seções. Entre duas camadas ocultas, adicionamos uma camada de Saída para evitar a sobreposição.


O importante é Dense (1), Activation ('linear') e 'mse' na seção de compilação. Queremos um produto que possa estar em qualquer intervalo (prevemos valor real) e nossa função de perda é definida como erro quadrático médio.


Vamos ver o que acontece se apenas passarmos pedaços de preços próximos de 20 dias e prever o preço no 21º dia. Final MSE = 46.3635263557, mas não é uma informação muito representativa. Abaixo está um gráfico de previsões para os primeiros 150 pontos do conjunto de dados de teste. A linha preta é dados reais, um azul - previsto. Podemos ver claramente que nosso algoritmo não é nem mesmo de perto, mas pode aprender a tendência.


Vamos dimensionar nossos dados usando o método de sklearn pré-processamento. Escala () para ter nossa série zero de tempo e variância unitária e treinar o mesmo MLP. Agora temos MSE = 0.0040424330518 (mas está em dados dimensionados). No gráfico abaixo, você pode ver as séries temporais reais escaladas (preto) e a nossa previsão (azul) para ela:


Para usar este modelo no mundo real, devemos retornar às séries temporais não escaladas. Podemos fazê-lo, multiplicando ou preditivo por desvio padrão de séries temporais que usamos para fazer predição (20 etapas de tempo não escalonadas) e adicione seu valor médio:


MSE neste caso é igual a 937.963649937. Aqui está o enredo de previsões restauradas (vermelho) e dados reais (verde):


Não está mal, não é? Mas vamos tentar algoritmos mais sofisticados para esse problema!


Problema de regressão. CNN.


Eu não vou mergulhar na teoria das redes neurais convolutivas, você pode verificar esses recursos incríveis:


Vamos definir a rede neural convolucional de 2 camadas (combinação de camadas de convolução e max-pooling) com uma camada totalmente conectada e a mesma saída que anteriormente:


Vamos verificar resultados. MSEs para dados escalados e restaurados são: 0.227074542433; 935.520550172. As parcelas estão abaixo:


Mesmo olhando para MSE em dados escalados, esta rede aprendeu muito pior. Provavelmente, uma arquitetura mais profunda precisa de mais dados para o treinamento, ou simplesmente é superada devido ao número muito alto de filtros ou camadas. Vamos considerar esta questão mais tarde.


Problema de regressão. RNN.


Como arquitetura recorrente, eu quero usar duas camadas LSTM empilhadas (leia mais sobre LSTM aqui).


As parcelas das previsões estão abaixo, MSEs = 0.0246238639582; 939.948636707.


A previsão da RNN se parece mais com o modelo médio móvel, não pode aprender e prever todas as flutuações.


Então, é um resultado pouco esperável, mas podemos ver que os MLPs funcionam melhor para esta previsão de séries temporais. Vamos verificar o que acontecerá se nós passarmos de regressão para problema de classificação. Agora, usaremos os preços não fechados, mas o retorno diário (fechar preço-preço aberto) e queremos prever se o preço fechado é maior ou menor do que o preço aberto com base nos últimos 20 dias de devolução.


Problema de classificação. MLP.


O código é alterado um pouco - alteramos nossa última camada Densa para ter saída [0; 1] ou [1; 0] e adicione a saída softmax para esperar resultados probabilísticos.


Para carregar saídas binárias, mude a linha seguinte do código:


Também mudamos a função de perda para cross-entopy binário e adicionamos métricas de precisão.


Oh, não é melhor do que adivinhar aleatoriamente (50% de precisão), vamos tentar algo melhor. Confira os resultados abaixo.


Problema de classificação. CNN.


Problema de classificação. RNN.


Conclusões.


Podemos ver que o tratamento da previsão de séries temporárias financeiras como problema de regressão é uma abordagem melhor, pode aprender a tendência e os preços próximos do real.


O que foi surpreendente para mim, que MLPs estão tratando dados de seqüência melhor como CNNs ou RNNs que deveriam funcionar melhor com séries temporais. Explico isso com conjunto de dados bastante pequeno (


Selos de tempo de 16k) e escolha de hiperparâmetros fofos.


Você pode reproduzir resultados e melhorar usando o código do repositório.


Eu acho que podemos obter melhores resultados em regressão e classificação usando diferentes recursos (não apenas séries temporais escalonadas) como alguns indicadores técnicos, volume de vendas. Também podemos tentar dados mais freqüentes, digamos carrapatos minuto a minuto para ter mais dados de treinamento. Todas essas coisas que eu vou fazer depois, então fique atento :)


Ao bater palmas mais ou menos, você pode nos indicar quais são as histórias que realmente se destacam.


Alex Honchar.


máquinas de ensino e raphamento.


Mundo de aprendizagem de máquinas.


O melhor sobre Aprendizado de Máquinas, Visão de Computador, Aprendizagem Profunda, Processamento de linguagem natural e outros.


Forex.


89 & # 32; пользователей находятся здесь.


МОДЕРАТОРЫ.


Wrayjustin Trading Pennies for Dollars FXMarketMaker Professional Trader Hot_Biscuits_ Modelos e Garrafas spicy_pasta RichJG Financial Astrologer El_Huachinango MOD finance_student Prop Trader о команде модераторов & raquo;


Bem-vindo ao Reddit,


a primeira página da internet.


e inscreva-se em uma das milhares de comunidades.


Это архивированный пост. Você está interessado em иолосовать или комментировать.


Quer adicionar à discussão?


помощь правила сайта центр поддержки вики реддикет mod guidelines связаться с нами.


приложенияи инструменты Reddit para iPhone Reddit para o site móvel Android кнопки.


Использование данного сайта означает, что вы принимаете & # 32; пользовательского соглашения & # 32; и & # 32; Политика конфиденциальности. &cópia de; 2018 reddit инкорпорейтед. Все права защищены.


REDDIT e o logotipo ALIEN são marcas registradas da reddit inc.


& pi; Renderizado pelo PID 16976 em & # 32; app-430 & # 32; em 2018-01-18 09: 23: 21.621983 + 00: 00 executando f3462a7 código do país: UA.


SnowCron.


FREE E. Mail Classes.


Neste artigo: um exemplo de uso do nosso software Neural Networks para criar um sistema completo de negociação de rede neural.


Este exemplo usa a linguagem de script incorporada do Cortex, então leia o guia de linguagem de script primeiro.


Usando Redes Neurais para criar Estratégia de Negociação FOREX.


Neste tutorial on-line gratuito, você encontrará o "ciclo completo" do uso de redes neurais (Cortex Neural Networks Software) para negociação Forex (ou negociação no mercado de ações, a idéia é a mesma).


Você aprenderá como escolher entradas para as redes neurais artificiais e como decidir o que usar como saída.


Você encontrará um exemplo de um script pronto para usar que permite a realização de otimização de redes neurais tanto da estrutura da Rede Neural (número de neurônios) quanto do sistema de negociação forex (stop loss etc.)


Finalmente (a parte que não está presente na maioria dos tutoriais), você aprenderá o que fazer a seguir. Afinal, o Cortex Neural Networks Software não pode fazer negócios em tempo real, você precisa usar algo como Trade Station, MetaQuotes ou MetaTrader. Como transportar o sistema de negociação FOREX do Cortex para sua plataforma de negociação favorita? Você precisa lidar com DLLs, controles ActiveX e programação de baixo nível? A resposta é não.


O software Cortex Neural Networks vem com o recurso fácil de usar que permite que você porta facilmente a rede Neural resultante (treinada) para a linguagem de script da sua plataforma de negociação. Sem DLLs, DDE, ActiveX ou quaisquer outras soluções de baixo nível - tudo é simples e simples.


Nota importante: este NÃO é um tutorial "como negociar". Em vez disso, ele diz como usar o software Cortex Neural Networks, mas você ainda precisa inventar seu próprio sistema comercial. Aquele que usamos aqui é apenas um ponto de partida, e não deve ser usado como uma estratégia de negociação forex "tal como está". A idéia deste texto é ensinar você a criar sistemas de negociação baseados em NN e a portá-los para a plataforma de negociação de sua escolha. O exemplo é, no entanto, ovesimplificado, e só pode ser usado como ilustração dos princípios de negociação. Da mesma forma, o sistema de negociação MACD, que pode ser encontrado em muitos tutoriais, já não está funcionando bem (à medida que os mercados mudaram), mas ainda é um bom exemplo de usar indicadores para negociação mecânica.


Em duas palavras: faça sua própria análise.


Outra nota importante: o tutorial usa exemplos, muitos deles. Para tornar sua vida mais fácil, incluí todos eles, não apenas fragmentos. No entanto, torna o texto muito mais longo. Além disso, eu estou indo do primeiro, desajeitado, sistema de negociação forex, para mais avançado, explicando sempre o que foi melhorado e por quê. Seja paciente ou salte diretamente para a seção que você precisa.


Nota importante final: o código não é algo esculpido em pedra, ele pode mudar enquanto este texto foi escrito. As versões finais dos arquivos de script estão incluídas no arquivo Cortex.


Armadilhas de sinais FOREX BUY / SELL: O que há de errado com exemplos "simples"?


No guia do usuário do Cortex Neural Networks Software, usamos um exemplo simples de uma Rede Neural Física, prevendo o preço do estoque GENZ. Para descobrir o que é errado com esta abordagem, vamos fazer o mesmo exemplo "simples", usando MSFT. TXT, em vez do GENZ. TXT (use 800 registros no conjunto de aprendizado, como MSFT. TXT é um pouco mais curto, então GENZ. TXT).


Simplesmente não funcionaria! Por quê?


O motivo se tornará evidente, se você se perguntar: "Qual é a razão pela qual a previsão da rede neural de valores futuros pode ser feita primeiro?"


A resposta é: é aprender a fazer o que é chamado de reconhecimento de padrões de redes neurais, reconhecer padrões e, se houver uma lógica oculta nesses padrões, então mesmo um novo padrão (com a mesma lógica) será reconhecido.


Isso é um truque - "com a mesma lógica". Não há nem um, mas três problemas aqui.


Em primeiro lugar, se você olhar para o preço das ações da Microsoft, você notará que estava indo na parte "de aprendizado" de nossos dados e de lado - na parte de "teste". Portanto, é possível que a lógica tenha mudado.


Em segundo lugar, e ainda mais importante - QUAL É O TESTE PADRÃO? Você vê, se ensinamos a rede neural no intervalo de 10 a 100, e depois apresentamos algo na faixa de 1 a 3 - eles são padrões diferentes! 10, 20, 30 e 1, 2, 3 parecem semelhantes ao humano porque - PORQUE - temos essa capacidade de dividir por dez, quando apresentado com números que terminam com zero. É o que é chamado de pré-processamento dos dados e, por padrão, o NN não pode fazê-lo.


Podemos ensiná-lo? Claro. O que é EXACTAMENTE nós precisamos ensiná-lo?


Este é o terceiro e o mais importante. Não precisamos da previsão de preços! Nós não ligamos! O que precisamos é FOREX comprar sinais de venda.


Agora, espere um minuto! Nós precisamos de um) para ter nossa contribuição (aprendendo e testando) no mesmo intervalo e precisamos b) poder tomar decisões comerciais com base nela? Não é o que chamamos de indicador? Bingo?


Então, é o que vamos fazer - vamos construir um indicador, alimentá-lo ao NN como uma entrada, e tentaremos obter uma previsão do valor do indicador, e não o preço do estoque sem valor!


Em nosso primeiro exemplo, vamos carregar cotações de estoque do disco, abrir o arquivo de Rede Neural e iniciar a aprendizagem - tudo em um modo automatizado.


Crie um novo arquivo de script (ou abra o que veio com o arquivo Cortex Neural Networks Software) e ligue para stock_nn. tsc.


Antes de mais, precisamos baixar os valores de preço do arquivo MSFT. TXT. Nós vamos usar o indicador CLV (veja abaixo), mas para calcular, precisamos de valores ajustados por divisão para Alto e Baixo, não apenas para fechar. Aqui é como obtê-los.


stocks_nn. tsc, parte 1.


A primeira linha atribui o caminho para a variável strStockPath, é claro, você terá que editá-la, se seu arquivo de dados estiver localizado no diretório diferente.


Na segunda linha, especificamos que esse caminho não é relativo (o "relativo" à localização do arquivo Cortex. exe).


O TABLE_LOADER recebe o caminho, a seqüência vazia para a "linha de início", 1 - para ignorar a primeira linha (nomes das colunas), parte da linha do rodapé do arquivo (a última linha no MSFT. TXT não contém dados), é também instruído a carregar a coluna número 0 (e chamar arrDate), 2 (arrHigh), 3 (arrOow), 4 (arrC) e 6 (arrClose).


Para obter uma descrição completa do TABLE_LOADER, consulte o guia de referência SLANG.


Então, calculamos dividir, dividindo o Fechar ajustado por fechar, e use esse valor para ajustar baixo e alto.


O arquivo MSFT. TXT contém os dados mais recentes PRIMEIRAMENTE, enquanto nós os quermos ÚLTIMOS.


Em seguida, precisamos criar um indicador. Digamos que será um indicador de Close Location Value, embora na "vida real" eu provavelmente use mais de um indicador como entrada NN.


O indicador de Valor de localização está calculado como.


CLV = ((Close - Low) - (High - Close)) / (High - Low), onde Close, Low e High são para o intervalo, não necessariamente para uma única barra. Note-se que queremos no intervalo de 0 a 1, para facilitar a normalização no alcance do NN's (o que é, mais uma vez, 0-1).


stocks_nn. tsc, parte 3.


Em seguida, precisamos criar um arquivo de atraso. Vamos usar atrasos iguais a 1, 2. 9 (Para obter detalhes sobre as funções do arquivo, consulte o guia de referência SLANG). Observe que a caixa de diálogo NN do Cortex pode produzir atrasos simples automaticamente (você pode usar um botão "Gerar atraso"). Mas, mais tarde, neste texto, vamos trabalhar com atrasos complexos (o que significa que não são 1, 2, 3. mas 1, 3, 64), então precisamos criar o código que pode lidar com essa tarefa em de forma mais flexível.


stocks_nn. tsc, parte 4.


Tendo o arquivo de atraso, estamos prontos para criar nossa primeira rede neural. Esta função requer muitos parâmetros, então fique atento. No entanto, o código é realmente simples.


A propósito, a maior parte deste código pode ser removido, se você acha que pode lidar com números, em vez de nomes significativos em seu código, no entanto, essa seria uma prática de codificação muito ruim.


stocks_nn. tsc, parte 5.


Agora, depois de ter uma rede neural e o arquivo atrasado com dados, precisamos ensinar a rede. O arquivo de atraso (msft_ind. lgg) possui 1074 registros, por isso é razoável usar 800 como um conjunto de aprendizado, e os restantes 274 como um conjunto de testes.


Você pode, claro, abrir um arquivo de rede e clicar no botão "Executar" na guia "Aprender". Mas, como esta é uma introdução à programação avançada do software Cortex Neural Networks, vamos usar SLANG built_in linguagem de script.


O código a seguir exibe a caixa de diálogo modal com as configurações do ann NN. Observe que, se você quiser ter um privilégio de clicar no botão "Executar", você precisa alterar o.


stocks_nn. tsc, parte 6.


O bStartLearning pode ser 0, caso em que a caixa de diálogo aguardará sua entrada, ou 1, então a aprendizagem começará de forma automática.


O bResumeScript, se for igual a 1, retomará o script, se você fechar a caixa de diálogo clicando no botão OK.


O bReset é usado para redefinir a rede antes que a aprendizagem comece.


Execute o script e aguarde até que o contador de épocas ultrapasse 1000, então clique em "Parar". Vá para a guia "Aplicar" e clique em "Aplicar". Isso executará todo o conjunto de dados (aprendendo e testando) através do NN e crie o arquivo. APL, contendo tanto a entrada-saída original quanto a previsão gerada pelo NN, desta forma você pode facilmente traçá-los e compilar uns contra os outros .


Vá para a guia "Saída", selecione o arquivo msft_ind. apl, clique em "Procurar arquivo", "Selecionar campos", depois selecione "Não" na caixa de listagem esquerda e (pressionando a tecla CTRL enquanto seleciona com o mouse ) Clv e NN: Clv na caixa de listagem direita. Clique em "Gráfico" para ver como é boa a nossa previsão. Bem. É mais ou menos bom, do que podemos dizer olhando para ele. Ainda assim, nada extraordinário.


Este foi apenas um exemplo do que você pode fazer com o script SLANG e como automatizar as tarefas de rotina do Cortex. No entanto, até agora, não fizemos nada que você não pudesse fazer "à mão". Bem. quase nada, porque se você quiser criar um arquivo de atraso personalizado, com, digamos, Clv-100, Clv-50, Clv-25. colunas, então você terá que usar SLANG (ou Excel.), porque você não pode fazer no Cortex sem scripts.


FOREX Trading Strategy: o que otimizar?


Aqui está o nosso próximo problema. Precisamos de uma boa previsão, ou precisamos do que podemos usar para negociar com lucro? A questão parece estranha, mas apenas pense nisso por um momento. Digamos que temos uma ótima previsão de 1 hora. 95% de precisão. Ainda assim, até que ponto o preço pode ir em uma hora? Não muito longe, tenho medo. Compará-lo com a situação, quando você tiver uma predição bastante imprecisa de 10 horas. Será melhor?


Para responder a esta pergunta, precisamos realmente negociar, uma comparação simples dos erros médios produzidos pelos dois NNs não ajudará.


A segunda parte (do mesmo problema) está na forma como definimos uma "boa previsão". Digamos que temos uma rede, que produz a previsão, que é 75% precisa. Compará-lo com o NN, que está produzindo uma previsão 100% precisa. O último é melhor. Now, DIVIDE the output (prediction) of the 100% accurate NN by 10. We will have a VERY inaccurate network, as its signal is nowhere near the signal we used as a "desired output". And yet, it can be used same way we used 100% accurate NN, all we have to do is to multiply it to 10!


See, the NN is created, by tuning the mean quadratic error, and not the correlation, so, at least in theory, a better NN can show poor results, when used for the actual stock / Forex trading.


To solve this problem, we need to test our NNs using trading, and to use results of this trading (profit and drawdowns) to decide, if this NN is better than the other one.


Let's do it. Let's create a program, that can be used to fine-tune NN, and this time, by fine-tuning, we will mean trading results.


Neural Network Trading: Few short notes.


First of all, in our example above, the "automatic" learning will never stop, because we haven't specified any stop criteria. In the dialog, or in the CREATE_NN function, you can provide the min. error (when the NN reaches it, it stops and, if bResumeScript is set to 1, the dialog will close and the script will resume). Also yo can provide the maximum number of epochs, or both. I am not using it in the example below, at least not always, because I am planning to watch the learning and to click STOP when I think the NN is ready. If you want to do it in fully automatic mode, pay attention to these parameters.


Second. One of the ways to make a network smaller, faster and more accurate, is to begin with the small network, and increase it's size, neuron by neuron. Obwiously, the number of the input neurons is determined by the number of input data columns (but we can vary them, too), and the number of output neurons should be equal to the number of output data columns (usually one, but not necessarily). This means we need to optimize the number of neurons in the hidden layer(s).


Also, as I have mentioned, we don't really know which data to use. Will Clv-15 (15 days delayed) increase the accuracy of our prediction? Do we need Clv-256? Will it be better to use both of them in the same NN, or will adding Clv-256 ruin our performance?


Using nested cycles to try different input parameters, you can:


Create the NN, same way we did it for the stock data (let me repeate, for the NN, there is no difference between stocks and FOREX, it just happened that I have couple of high quality data files for FOREX that I want to process, while writing this text). Try different combinations of lags. Try different number of neurons in the hidden layer. . and different combinations of different indicators. . e assim por diante.


However, if you try all possible combinations of all possible parameters, you will NEVER get your results, no matter how fast your computer is. Below, we will use couple of tricks to reduce calculations to a bare minimum.


By the way, it may seem, that if you start from one hidden neuron, then increase it to 2, 3 and so on, and at some point the error (quality of the prediction) or the profit (if you test the NN by trading using it) will begin to go down, then you have your winner. Unfortunately, I cannot prove, that after the first "performance peak" there can be no second one. It means, that the error may go like 100, 30, 20, 40, 50 (it was just at its minimum, right?) and then 30, 20, 10, 15, . (the second minimum). We just have to test all reasonable numbers.


Third. Optimization is a two-edged sword. If you over-optimize your code, it may not work outside the data you used to fine-tune it. I will do my best to avoid this pitfall. If you want to do additional optimizations to your code or NN, I advise you to do a research in the Internet, to learn more about hidden problems of this approach. ALso, I am going to pay some attention to the smoothness of the profit curve. The profit that looks like 0, -500, 1000, -100, 10000 may be great, but the profit 0, 100, 200, 300, 400. is better, as it is less risky. We may talk about it later.


Finally, for this example we are going to use FOREX, rather than stock prices. From the point of view of the NN there is no difference, and from my point - Forex is much more fun to trade. If you prefer stocks, the code can easily be modified.


A FOREX Trading Strategy to play with.


First of all, let's create a prototype of our code, one that can easily be optimized in future. It is going to be a trading system, that uses a Neural Network to trade and produces a chart (profit against trade number). It will also calculate drawdown, as a measure of robustness of our trading system.


forex_nn_01.tsc, part 1.


The main difference here is that we use functions, instead of placing all the code in the main block of the program. This way it is much easier to manage.


Second, we have a TestNet function. I am using a very simple algorithm of trading . The CLV indicator is confined to 0 - 1 interval (our version of CLV is), so when the indicator crosses up the dBuyLevel (see code above), I am buying, when it is crossing down the dSellLevel, I am selling.


Obviously, it is not the best trading strategy, but it will do for our purpose (just for now). If you want to improve it, here are some pointers. First, you may want to have a system, that is not ALWAYS in the market. Second, you may want to use more than one indicator as inputs, and maybe, more than one NN, so that the trading decision is made based on few predicted indicators. We will add some improvements to the trading algorithm later.


We use some standard assumptions of the FOREX trading: spread is 5 points, leverade is 100, min. lot is $100 (mini-FOREX).


Let's take a look at our "trading" system. Once again, it is an oversimplified one. An important note: the TestNn() is called last, and it has access to all variables that were created to that point. So if you see a variable that I am using, without initializing it, it probably means that it was initialized in NewNn(), TeachNn() or some other function that was called prior to TestNn().


To make things easier, comments are placed in the code.


forex_nn_01.tsc, part 2.


Few words about the drawdown. There are few ways of calculating it, and we are using what I consider the most "honest". The drawdown is a measure of instability of our system. What is a chance, that it will loose money? Lets say the initial amount is $1000. If the profit goes 100, 200, 300, 400. the drawdown is 0. If it goes 100, 200, 100. then the drawdown is 0.1 (10%), as we have just lost an amount, equal to 1/10 of the initial deposit (from 1200 to 1100).


I would strongly advice against using trading systems with large drawdowns.


Also, here I use a drawdown, that is to be used with variable lot size. However, in the actual samples, that come with the eBook, you will see another version:


As you can see, here we always use 1000 (the initial amount) to calculate the drawdown. The reason is simple: we always use the same lot size (no money management yet), so there is no difference, how much money we have already accumulated on our account, an average profit should be constant. The worse possible scenario in this case looks like this: from the very beginning ($1000 on account) we are loosing money. If we use 1000$ to calculate the drawdown, we will get the worse drawdown. This will help us not to trick ourselves. For example, say, we traded for some time, and we have $10,000$ on our account. Then we loose some money, and we now have $8,000. Then we have recovered, and got $12,000. Good trading system? Provavelmente não.


Let's repeat the logic again, as it is very important (and it will become even more important, when we start doing money management). We trade using fixed size lots. So, statistically, there is no guarantee, that the maximum loss will not happen at the very beginning, when we only have $1000. And if it happens, we will have -1000$ (10,000 - 8,000), so the trading system is probably too risky.


When we talk about the money management (probably, not in this text), we will have to use different approach to drawdown calculation.


Note, that in this trading system, I am using the worse possible scenario: I am buying using High and selling, using Low. Many testers do not follow these rules, and create trading systems, that work fine on historical data. But in the real life, these trading systems have very poor performance. Por quê?


Take a look at the price bar. It has Open, High, Low and Close. Do you know, how the price was moving inside the bar? No. So, let's say, your trading system generated a "buy" signal, at the bottom of the price bar (if dLow.


Note that I am using dLotSize equal 0.1 lot ($100). Obviously, in the "real" trading, you will benefit greatly, if the lot size is calculated depending on the money you have, something like:


forex_nn_01.tsc, part 3.


However, we are doing testing here, not trading. And for testing, we need, among other things, to see how smooth the profit curve is. This is much easier to do if the lot size is the same (in ideal situation, for dLotSize = 100 we will get a straight line, with some positive slope, while in case of the adjustable lot size we will get an exponent, that is much harder to analyze).


Later in this text, we will apply money management rules to our trading system, but not yet.


After we are done with the last part of our testing function, let's walk through the rest of the code.


The following function creates a CLV indicator. It takes the interval as a parameter, which means that we can call it many times, during the optimization, passing different numbers.


Note, that I am using the NN that works in the 0 - 1 interval. The data can be normalized, of course, but I chose to divide the indicator by 2 and to add 0.5, so that it is in 0 - 1 range.


forex_nn_01.tsc, part 4.


To make lag file, we can use the CREATE_LAG_FILE function. Alternatively, we can do it by explicitly providing all the necessary code. In this case, we have more control, and we are going to need it, if we begin varying number of lagged columns and so on.


forex_nn_01.tsc, part 5.


The nRemoveFirst parameter is important. Many functions, like indicators, moving averages, lag generators, for that matter, do not work well within the first few records of the dataset. Let's say we have MA(14) - what will it place in the records 1 - 13? So we choose to simply remove the first few (unreliable) records.


For the NewNn, as well as for all functions of this program, we need to pass as parameters only what can be changed during optimization process. For example, there is no need to pass a "skip before" parameter, as it is always the same.


forex_nn_01.tsc, part 6.


The TeachNn function simply brings up the NN dialog.


forex_nn_01.tsc, part 7.


Finally, we need a charting function. It is not mandatory, but it is always a good idea to see what our profit line looks like. The following code uses the XML to produce a chart, so it is a good idea to read the tutorial. Alternatively, you can draw the chart, rather than saving it in a file. To do it, use one of the samples, that are in the samples/scripts directory. Finally, you can modify the code, to produce HTML, rather than XML. HTML is easier to learn, but the code itself will be a bit less readable.


forex_nn_01.tsc, part 8.


Compile and Run the script.


Bem. As expected, using 7 hours as an interval for the CLV produced very poor results:


FOREX Trading Strategies and Optimization.


The reason for the poor results is quite obvious: we used the Interval, Stop Loss, buy and sell levels and other parameters, that were purely random - we just picked first that came in mind! What if we try few combinations?


FOREX Trading Signals: What to optimize?


First of all, by overoptimizing the buy and sell levels, we can ruin our future performance. However we still can tune them, especially, if the performance is close for close values of buy and sell limits. For example, if we have -10% profit at buy limit equal 0.3, and +1000% profit when it equals 0.35, then there is probably a lucky coincidence, and we should not use 0.35 for our trading system, as in future it will probably not happen again. If, instead, we have -10% and +10% (instead of +1000%), it may be safer to use.


Generally, our trading system should be built for WORSE possible scenario, as if during the "real" trading the performance will be better, then during the test, we will survive, but not the other way around.


We can vary the value for the indicator interval, provided we have enough trades, so that we can be confident, in terms of statistics, in the performance of a system.


We certainly can vary the number of neurons, I don't think it can be overoptimized easily.


We can vary number of inputs and lags for inputs. It is possible to overoptimize this, but it is not very likely to happen.


And, of course, we can try different indicators.


Accurate FOREX Signals: How to optimize?


As have already been mentioned, if we start trying all possible combinations, it will take forever. So we are going to cheat. We will create pre-defined sets of parameters, that we think are reasonable, and pass them to the program.


To make as few calculations as possible, note, that Clv-1 and Clv-2 are, probably, important, but what about Clv-128? And - if we already have Clv-128, do we need Clv-129? Probably, not. So we are going to have something like Clv-1, Clv-2, Clv-4, Clv-8, . Clv-128 with just few variations, which will make our calculation time thousands times shorter.


FOREX Professional System Trading: Can it work at all?


What is it exactly we want to predict? Until this point we have used 1 hour chart for EURUSD, and we were predicting the next bar's CLV. Will the CLV+2 be better? What about CLV+3?


Also, especially considering the poor performance of our first trading system, it would be nice to know, that - at least in the "ideal" world, the goal (profitable trading) can be achieved.


To answer these questions, let's create a simple testing program. We assume, that our prediction is 100 % accurate, and, based on this assumption, we will use CLV+N, not the NN predicted one. That's right - we are going to take data from the future, and to use them instead of the NN prediction. This approach wouldn't work in the real life, of course, but at leats, it will give us some ideas of what to expect.


When looking at the results, please keep in mind, that we are not using any advanced money management, our lot size is set to a minimum $100. If you use variable lot sizes, results will be dramatically different. But even at a lot size set to 0.1 we can see (below) that getting the information from the future is an ultimate trader's "holly graal".


forex_nn_02.tsc, part 1.


You are already familiar with this code, it was used in FOREX_NN_01.TSC. It handles data loading. The only difference is in the part that obtains the list of files in the "images" directory and deletes all files with the. PNG extention. The reason for this code is simple: during our tests we are going to create many - may be, thousands - image files. We don't want them to hung around after we are done. So at the beginning of the script we are deleting images, created by other scripts.


forex_nn_02.tsc, part 2.


Just a few comments. We do not want to try all possible values for, for example, CLV interval. Instead, we can create an array, that contains only values we want to test. Then (see below) we will walk through this array.


Stop losses are important part of any trading strategy, so I have decided to vary them as well. It is a dangerous idea, however, as it is easy to overoptimize the system.


I am planning to test different values for buy and sell levels, but it will be done in cycle, without using arrays.


Unlike in our previous example, we want to have a large XML file, containing many images. To do it, I have moved the code, that is forming the XML header and footer outside of the Chart function. Read one of the online XML tutorials for details.


Note, that I am using 0 as the first lag, which means, that first I am testing the indicator (CLV) that was not "shifted" from the future. Just to get an idea, how good out "trading system" would be without NN (horrible, is the right word. It is loosing all the money).


Cortex uses the Internet Explorer control to display XML pages. When pages grow large, it takes a lot of memory. If your computer cannot handle it, consider creating multiple XML or HTML pages, instead. In the case of forex_nn_02, it should not be a problem, as the page is relatively short. Alternatively (that is what I am doing in scripts later in this text), create XML file, but do not open it from Cortex. Open them using Internet Explorer instead - unlike IE control, the Internet Explorer does not have the memory problem.


Now the code that is trying different combinations of parameters.


forex_nn_02.tsc, part 3.


Here, we are using nested cycles. In every cycle, we are assidning some variable (for example, nInterval for the outer cycle). This way the cycle will assign values of all elements of a corresponding array, one in a time. Then WITHIN it, the inner cycle is used, and so on, so that all combinations of all array elements are tested.


In the innermost cycle, I am calling the Test() function, to "test trade", and Chart() to add a new picture to a list of images saved on disk. Note, that this Chart() does not show any images, until all cycles are completed.


The Test() and CreateClv() functions are almost the same as in the previous example. The only real difference is due to the fact that it is called more then once. To do it, I am calling ARRAY_REMOVE to cleanup arrays.


Also, notice, that we are only creating charts for the combinations of parameters, that produce trading system with positive profit. Otherwise, we call "continue", to skip the Chart() function.


Finally, we have Take Profit now, so our trading system can be a bit more flexible.


forex_nn_02.tsc, part 4.


The Chart() function was broken into two pieces. The header and the footer should be written to the XML file only once, so they were moved to the main part of the program.


Also, I am using the counter, to save files under the different names. The information about parameters is written to the header of an image, so we can easily see which one it is. Finally, images are only saved for winning configurations, meaning the balance at the end should be more, then at the beginning.


forex_nn_02.tsc, part 5.


Run the program (it will take some time to complete). You will end up with a large XML page with images, one for each winning configuration.


Some of the results are great, however, as we used data "from the future", this system will not work in the real life. Actually, if you look at the Test() function, you will notice, that the cycle stops before we reach the last element of arrClose:


for(nBar = nRemoveFirst + 1; nBar.


THIS IS C++, just an example.


As you can see, the code is really simple. Now lets do the same using the SLANG script. As in examples before, we will keep the overall structure of the code, so that this example looks familiar. The only difference is that instead of using the built-in APPLY_NN function, we call the function of our own. The code that we do not use (such as cycles) is commented, but not removed.


Note, that the logic behind it was discussed in Neural Networks and Stock / Forex Trading article already. Briefly, the output of this script is formated to be compatible with the MQL, MetaTrader's scripting engine. MetaTrader is a trading platform we use, if you want something different, like TradeStation, for example, you will have to alter the code to comply to its syntax.


Then, in the following chapters, we are going to insert this code in the MetaTrader's indicator, and to use it to trade.


Porting script to trading platform.


The next step is not really required, but it is something, that may be useful. We are going to create a version of a tsc file (one above), but this time, we will use SLANG (Cortex scripting language) to emulate APPLY_NN function. The reason is, in the next chapter we are going to port it to the scripting language of a MetaTrader trading platform, so it is a good idea to make sure everything works.


After we run this function, we discover, that the result it produces is the same, as the forex_nn_05a produced, which means the code works fine. :


Note, that there is a difference at the beginning of the charts, as "our" NN does not try to process the data at the beginning (where lag is incomplete), while the built-in NN does not "know" about this problem. Of course, it doesn't affect the result, as the beginning of the chart is ignored by using the nRemoveFirst parameter in our script (set to 200, which is guaranteed to be larger, then our lag).


Using third-party trading platform.


We have the NN that (more or less) can be used. We have the script, implementing this NN without calls to the Cortex-specific NN functions. Now we are going to port it to the trading platform that can be used for the real trading, which means it can contact brocker, place orders and earn (or loose) money.


As a trading platform, I am going to use MetaTrader.


Disclaimer: I am not related to MetaQuotes in any way. I do not work for them, I am not their affiliate and so on. I use MetaTrader, ONLY because I like it.


I find this program user-friendly, flexible and powerful, and "not a monster". Also, it is free (compare to other packages of this class).


The only (minor) problem is that it is not always easy to find the dealer using MT in your area. Then, when you do a research, you may find couple of brockers, with screenshots on their web sites, that look suspiciously familiar. Yes, they use MetaTrader, but they don't call it MetaTrader!


I have asked for clarification at the company's forum, and they have told me, that they don't reveal brockers using their services. Very strange.


One of the brockers that is not hiding the fact they use MT, is Alpari. They will allow you to open a Demo account, so that you can trade in a real time, but without risking your money.


I am not going to recommeng services of Alpari. Once again, I am not being paid for that. Try their Demo account, and use your own judgement. Or you can start your own research at Internet forums.


Finally, if you do not like the MT, you can probably follow the example below using TS, MS or some other trading platform. Este é apenas um exemplo.


Our MT-based trading system will include two files, the indicator and an expert. This is the way they call it in MQL (scripting language of MT), and I am going to follow this naming convention.


The indicator implements the neural network and draws a chart. An expert takes these data and does trading. As MetaTrader has a "strategy tester", we will be able to test our strategy, to see how good it is.


I will assume, that you are familiar with MQL programming, it is quite close to SLANG and tutorials can be found both at MetaQuotes and Alpari.


Finally, I am using the code structure, that is borrowed from MetaQuotes forum, permission to use it the author of the corresponding posts had granted me permission to use fragments of his code.


Also, as some of our MetaTrader code is the same for all experts and indicators, we moved it to a separate library file. MetaTrader's libraries are nothing but includable files. This library takes care of synhronization, when two or more expert are trying to run in the same time, as well as of few other things. If you use MetaTrader, it will help you to create robust experts, in any case, the MQL language is easy to understand.


mylib. mql, a helper library.


The code should look familiar, all I did was re-writing it, using slightly different language syntax of MQL.


This indicator has two buffers, and draws two lines, one for the original NOC, and one for the NN-predicted NOC. For trading, you don't have to draw both indicator lines, of course (see MQL tutorials to learn how to do it), but I have decided to show them together, so you can compare.


Another difference, that you should know about, is the way MT performs testing. It may, in some cases, be more accurate, then one we did (we did the worse case scenario). Of course, you can always to change the SLANG script from the examples above, to implement any logic you want.


The result of our testing in MT is a bit better, then in Cortex, due to all these reasons.


Keep in mind, that MT calculates the DD in a different way. I still think, that my way is better.


In should be especially noted, that no additional optimization had been performed using MetaTrader's optimizer. We have just plugged our MTS (mechanical trading system) in, and it worked as expected.


É isso. You can now create Cortex Neural Network, optimize it to do trading, and to port it to the trading platform of your choice.

No comments:

Post a Comment