Redes Neurais: Previsão de Lucros.
As redes neurais são algoritmos treináveis de última geração que emulam certos aspectos importantes no funcionamento do cérebro humano. Isso lhes dá uma capacidade única de auto-treinamento, a capacidade de formalizar informações não confidenciais e, mais importante, a capacidade de fazer previsões com base nas informações históricas que têm à sua disposição.
As redes neurais têm sido usadas cada vez mais em uma variedade de aplicações de negócios, incluindo soluções de previsão e pesquisa de marketing. Em algumas áreas, como detecção de fraudes ou avaliação de riscos, elas são líderes indiscutíveis. Os principais campos em que as redes neurais encontraram aplicação são operações financeiras, planejamento empresarial, comércio, análise de negócios e manutenção de produtos. As redes neurais podem ser aplicadas de forma vantajosa por todos os tipos de traders, então se você é um trader e ainda não foi apresentado a redes neurais, nós o levaremos através deste método de análise técnica e mostraremos como aplicá-lo a seu estilo de negociação.
Use Redes Neurais para Descobrir Oportunidades.
Assim como qualquer tipo de ótimo produto ou tecnologia, as redes neurais começaram a atrair todos aqueles que estão procurando um mercado promissor. Torrents de anúncios sobre softwares da próxima geração inundaram o mercado - anúncios que celebram o mais poderoso de todos os algoritmos de redes neurais já criados. Mesmo nos raros casos em que as declarações de propaganda se assemelham à verdade, tenha em mente que um aumento de 10% na eficiência é provavelmente o máximo que você obterá de uma rede neural. Em outras palavras, ele não produz retornos miraculosos e independentemente de quão bem ele funciona em uma situação particular, haverá alguns conjuntos de dados e classes de tarefas para os quais os algoritmos usados anteriormente permanecem superiores. Lembre-se disso: não é o algoritmo que faz o truque. Informações de entrada bem preparadas sobre o indicador alvo são o componente mais importante do seu sucesso com redes neurais.
Convergência mais rápida é melhor?
Muitos daqueles que já usam redes neurais acreditam erroneamente que quanto mais rápido sua rede fornece resultados, melhor é. Isso, no entanto, é uma ilusão. Uma boa rede não é determinada pela taxa na qual ela produz resultados e os usuários devem aprender a encontrar o melhor equilíbrio entre a velocidade na qual a rede treina e a qualidade dos resultados que ela produz.
Aplicação correta de redes neurais.
Muitos traders aplicam redes neurais incorretamente porque depositam muita confiança no software que usam, sem ter recebido instruções adequadas sobre como usá-lo corretamente. Para usar uma rede neural do jeito certo e, assim, de forma vantajosa, um comerciante deve prestar atenção a todos os estágios do ciclo de preparação da rede. É o comerciante e não a sua rede que é responsável por inventar uma ideia, formalizar essa ideia, testá-la e aperfeiçoá-la e, finalmente, escolher o momento certo para descartá-la quando ela não for mais útil. Vamos considerar as etapas desse processo crucial em mais detalhes:
1. Encontrar e formalizar uma ideia de negociação.
2. Melhorando os parâmetros do seu modelo.
3. Descarte do modelo quando se tornar obsoleto.
Todo modelo baseado em rede neural tem vida útil e não pode ser usado indefinidamente. A longevidade do tempo de vida de um modelo depende da situação do mercado e de quanto tempo as interdependências de mercado refletidas nele permanecem atuais. No entanto, mais cedo ou mais tarde, qualquer modelo se torna obsoleto. Quando isso acontece, você pode treinar novamente o modelo usando dados completamente novos (ou seja, substituir todos os dados que foram usados), adicionar novos dados ao conjunto de dados existente e treinar o modelo novamente ou simplesmente retirar o modelo completamente.
Muitos comerciantes cometem o erro de seguir o caminho mais simples - eles dependem muito e usam a abordagem para a qual seu software fornece a funcionalidade mais amigável e automatizada. Essa abordagem mais simples está prevendo um preço de algumas barras à frente e baseando seu sistema de negociação nessa previsão. Outros traders prevêem mudança de preço ou porcentagem da mudança de preço. Essa abordagem raramente produz melhores resultados do que a previsão direta do preço. Ambas as abordagens simplistas não descobrem e exploram com lucro a maioria das importantes interdependências de longo prazo e, como resultado, o modelo rapidamente se torna obsoleto à medida que as forças motrizes globais mudam.
A abordagem geral mais ideal para o uso de redes neurais.
Estrategia de rede neural Forex
Estratégias de Stop-and-Reverse de rede neural híbrida para Forex.
por Michael R. Bryant.
Redes neurais têm sido usadas em sistemas de negociação por muitos anos com vários graus de sucesso. Sua principal atração é que sua estrutura não linear é mais capaz de capturar as complexidades do movimento de preços do que as regras comerciais padrão baseadas em indicadores. Uma das críticas tem sido que as estratégias de negociação baseadas em redes neurais tendem a ser excessivamente ajustadas e, portanto, não apresentam bom desempenho em novos dados. Uma possível solução para esse problema é combinar as redes neurais com a lógica de estratégia baseada em regras para criar um tipo híbrido de estratégia. Este artigo mostrará como isso pode ser feito usando o Adaptrade Builder.
Em particular, este artigo ilustrará o seguinte:
Combinando lógica neural e lógica baseada em regras para entradas de comércio.
Segmentando várias plataformas simultaneamente (MetaTrader 4 e TradeStation)
Desenvolvendo uma estratégia com lógica de parada e reversão assimétrica.
Usando dados forex intraday.
Uma abordagem de dados de três segmentos será usada, com o terceiro segmento usado para validar as estratégias finais. O código de estratégia resultante para o MetaTrader 4 e TradeStation será mostrado, e será demonstrado que os resultados da validação são positivos para cada plataforma.
Redes Neurais como Filtros de Entrada no Comércio.
Matematicamente, uma rede neural é uma combinação não linear de uma ou mais entradas ponderadas que gera um ou mais valores de saída. Para negociar, uma rede neural é geralmente usada de duas maneiras: (1) como uma previsão de movimento futuro de preços, ou (2) como um indicador ou filtro para negociação. Aqui, seu uso como indicador ou filtro de negociação será considerado.
Como um indicador, uma rede neural atua como uma condição adicional ou filtro que deve ser satisfeita antes que uma negociação possa ser inserida. As entradas para a rede são tipicamente outros indicadores técnicos, como momentum, stochastics, ADX, médias móveis e assim por diante, bem como preços e combinações dos precedentes. As entradas são dimensionadas e a rede neural é projetada para que a saída seja um valor entre -1 e +1. Uma abordagem é permitir uma entrada longa se a saída for maior ou igual a um valor limite, como 0,5, e uma entrada curta se a saída for menor ou igual ao negativo do limite; por exemplo, -0,5. Essa condição seria adicional a qualquer condição de entrada existente. Por exemplo, se houvesse uma condição de entrada longa, ela teria que ser verdadeira e a saída da rede neural teria que ser pelo menos igual ao valor limite para uma entrada longa.
Ao configurar uma rede neural, um comerciante seria tipicamente responsável por escolher as entradas e a topologia de rede e por "treinamento". a rede, que determina os valores ideais de pesos. Como será mostrado abaixo, o Adaptrade Builder executa essas etapas automaticamente como parte do processo de criação evolucionário no qual o software é baseado. O uso da rede neural como filtro de comércio permite que ela seja facilmente combinada com outras regras para criar uma estratégia de negociação híbrida, que combina as melhores características de abordagens tradicionais baseadas em regras com as vantagens das redes neurais. Como um exemplo simples, o Builder pode combinar uma regra de crossover de média móvel com uma rede neural de modo que uma posição longa seja tomada quando a média de movimento rápido ultrapassar a média de movimento lento e a saída da rede neural for igual ou superior ao seu limite.
Estratégias de Negociação Stop-and-Reverse.
Uma estratégia de negociação stop-and-reverse é aquela que está sempre no mercado, seja longa ou curta. Estritamente falando, & quot; stop-and-reverse & quot; significa que você reverta a negociação quando sua ordem de parada é atingida. No entanto, eu uso isso como um shorthand para qualquer estratégia de negociação que inverte de longo para curto para longo e assim por diante, para que você esteja sempre no mercado. Por esta definição, não é necessário que as ordens sejam ordens de parada. Você pode entrar e reverter usando ordens de mercado ou limite também. Também não é necessário que cada lado use a mesma lógica ou até mesmo o mesmo tipo de pedido. Por exemplo, você pode entrar com um valor longo (e sair curto) em uma ordem de parada e entrar com um valor curto (e sair longo) em uma ordem de mercado, usando regras e condições diferentes para cada entrada / saída. Este seria um exemplo de estratégia de parada e reversão assimétrica.
A principal vantagem de uma estratégia de parar e reverter é que, por estar sempre no mercado, você nunca perde grandes movimentos. Outra vantagem é a simplicidade. Quando há regras e condições separadas para entrar e sair de negociações, há mais complexidade e mais coisas que podem dar errado. Combinar entradas e saídas significa que menos decisões de tempo têm que ser tomadas, o que pode significar menos erros.
Por outro lado, pode-se argumentar que as melhores condições para sair de uma negociação raramente são as mesmas que as de entrar na direção oposta; que entrar e sair de negociações são decisões inerentemente separadas que devem, portanto, empregar regras e lógica separadas. Outra possível desvantagem de estar sempre no mercado é que a estratégia será negociada em todas as lacunas de abertura. Um grande intervalo de abertura contra a posição pode significar uma grande perda antes que a estratégia seja capaz de reverter. Estratégias que entram e saem de forma mais seletiva ou que saem até o final do dia podem minimizar o impacto da abertura de lacunas.
Como o objetivo é construir uma estratégia forex, o MetaTrader 4 (MT4) é uma escolha óbvia para a plataforma de negociação, pois o MetaTrader 4 é projetado principalmente para forex e é amplamente usado para negociar esses mercados (ver, por exemplo, MetaTrader vs. TradeStation : Uma comparação de idiomas). No entanto, nos últimos anos, a TradeStation tem visado os mercados forex de forma muito mais agressiva. Dependendo do seu volume de negociação e / ou nível de conta, é possível negociar os mercados cambiais através da TradeStation sem incorrer em qualquer taxa de plataforma ou pagar comissões. Spreads são supostamente apertados com boa liquidez nos principais pares de forex. Por estas razões, ambas as plataformas foram direcionadas para este projeto.
Vários problemas surgem quando se segmentam múltiplas plataformas simultaneamente. Primeiro, os dados podem ser diferentes em plataformas diferentes, com diferenças em fusos horários, cotações de preços para algumas barras, volume e intervalos de datas disponíveis. Para suavizar essas diferenças, os dados foram obtidos de ambas as plataformas e as estratégias foram construídas em ambas as séries de dados simultaneamente. As melhores estratégias foram, portanto, as que funcionaram bem em ambas as séries de dados, apesar de quaisquer diferenças nos dados.
As configurações de dados usadas no Builder são mostradas abaixo na Figura 1. Como pode ser inferido a partir da tabela Market Data na figura, o mercado forex Euro / dólar foi direcionado (EURUSD) com um tamanho de barra de 4 horas (240 minutos). Outros bar tamanhos ou mercados teriam servido tão bem. Eu só consegui obter tantos dados através da minha plataforma MT4 como indicado pelo intervalo de datas mostrado na Fig. 1 (série de dados # 2), então o mesmo intervalo de datas foi usado na obtenção da série de dados equivalente da TradeStation 1). 80% dos dados foram utilizados para Building (combinados in-sample e "out-of-sample"), com 20% (6/20/14 a 2/10/15) reservados para validação. 80% dos 80% originais foram então definidos para & quot; na amostra & quot; com 20% configurado para & quot; fora da amostra & quot; como mostrado na Fig. 1. O spread bid / ask foi definido em 5 pips, e os custos de negociação de 6 pips ou US $ 60 por lote de tamanho normal (100.000 ações) foram assumidos por turno. Ambas as séries de dados foram incluídas na compilação, conforme indicado pelas marcas de seleção na coluna à esquerda da tabela Market Data.
Figura 1. Configurações de dados de mercado para construir uma estratégia de forex para o MetaTrader 4 e TradeStation.
Outro possível problema ao segmentar várias plataformas é que o Builder foi projetado para duplicar a maneira como cada plataforma suportada calcula seus indicadores, o que pode significar que os valores do indicador serão diferentes dependendo de qual plataforma está selecionada. Para evitar essa possível fonte de discrepância, quaisquer indicadores que avaliem diferentemente no MetaTrader 4 do que na TradeStation devem ser eliminados da compilação, o que significa que os seguintes indicadores devem ser evitados:
Slow D estocástico.
Fast D estocástico.
Todos os outros indicadores disponíveis para ambas as plataformas são calculados da mesma maneira em ambas as plataformas. A TradeStation inclui todos os indicadores disponíveis no Builder, enquanto o MetaTrader 4 não. Portanto, para incluir apenas indicadores que estão disponíveis em ambas as plataformas, a plataforma MetaTrader 4 deve ser selecionada como o tipo de código no Construtor. Isso removerá automaticamente todos os indicadores do conjunto de builds que não estão disponíveis para o MT4, o que deixará os indicadores disponíveis em ambas as plataformas. Além disso, como notei diferenças nos dados de volume obtidos em cada plataforma, removi todos os indicadores dependentes de volume do conjunto de builds. Por último, o indicador de hora do dia foi removido devido a diferenças nos fusos horários entre os arquivos de dados.
Na Fig. 2, abaixo, a lista de indicadores usados no conjunto de compilação é mostrada classificada por se o indicador foi ou não considerado pelo processo de compilação (coluna "Considerar"). Os indicadores removidos da consideração pelas razões discutidas acima são mostrados no topo da lista. Os indicadores restantes, começando com & quot; Simple Mov Ave & quot ;, faziam parte do conjunto de builds.
Figura 2. Seleções de indicadores no Construtor, mostrando os indicadores removidos do conjunto de builds.
As opções de avaliação usadas no processo de construção são mostradas na Figura 3. Como discutido, o MetaTrader 4 foi selecionado como a escolha de saída do código. Depois que as estratégias são construídas no Construtor, qualquer uma das opções na guia Opções de Avaliação, incluindo o tipo de código, pode ser alterada e as estratégias reavaliadas, o que também reescreverá o código em qualquer idioma selecionado. Este recurso foi usado para obter o código da TradeStation para a estratégia final depois que as estratégias foram construídas para o MetaTrader 4.
Figura 3. Opções de avaliação no Builder para a estratégia de forex do EURUSD.
Para criar estratégias stop-and-reverse, todos os tipos de saída foram removidos do conjunto de construção, como mostrado abaixo na Figura 4. Todos os três tipos de ordens de entrada - mercado, parada e limite - foram deixados como & quot; considerar & quot; , o que significa que o processo de construção pode considerar qualquer um deles durante o processo de criação.
Figura 4. Tipos de pedidos selecionados no Construtor para criar uma estratégia de parada e reversão.
O software Builder gera automaticamente condições lógicas baseadas em regras para entrada e / ou saída. Para adicionar uma rede neural à estratégia, basta selecionar a opção & quot; Incluir uma rede neural nas condições de entrada & quot; na guia Opções de Estratégia, conforme mostrado abaixo na Figura 5. As configurações da rede neural foram deixadas em seus padrões. Como parte da lógica de parada e reversão, a opção Lados do mercado foi definida como Longo / Curto e a opção para & quot; Aguardar a saída antes de entrar no novo comércio & quot; foi desmarcada. O último é necessário para permitir que a ordem de entrada saia da posição atual em uma reversão. Todas as outras configurações foram deixadas nos padrões.
Figura 5. Opções de estratégia selecionadas no Builder para criar uma estratégia híbrida usando condições de rede neural e baseada em regras.
A natureza evolutiva do processo de construção no Builder é guiada pela adequação, que é calculada a partir dos objetivos e condições definidos na guia Métricas, conforme mostrado na Fig. 6. Os objetivos de construção foram mantidos simples: maximizando o lucro líquido enquanto minimizava a complexidade, que foi dado um pequeno peso em relação ao lucro líquido. Foi dada maior ênfase às condições de construção, que incluíam o coeficiente de correlação e significância para a qualidade geral da estratégia, bem como a média das barras nos negócios e o número de negócios.
Inicialmente, apenas as barras médias nas negociações foram incluídas como uma condição de construção. No entanto, em algumas das versões iniciais, o lucro líquido estava sendo favorecido em relação à duração da negociação, de modo que a métrica de número de negócios foi adicionada. O intervalo especificado para o número de negociações (entre 209 e 418) é equivalente a comprimentos médios de negociação entre 15 e 30 barras com base no número de barras no período de construção. Como resultado, a adição dessa métrica deu mais ênfase à meta de duração do comércio, o que resultou em mais membros da população com a faixa desejada de comprimentos de comércio.
Figura 6. Objetivos de compilação e condições definidas na guia Métricas determinam como a adequação é calculada.
As "Condições para selecionar estratégias principais" duplique as condições de compilação, exceto que as principais condições de estratégias são avaliadas em todo o intervalo de dados (não incluindo o segmento de validação, que é separado), em vez de apenas sobre o período de compilação, como é o caso das condições de compilação. As principais condições de estratégias são usadas pelo programa para anular quaisquer estratégias que atendam a todas as condições em uma população separada.
As configurações finais são feitas na guia Build Options, como mostrado abaixo na Fig. 7. As opções mais importantes aqui são o tamanho da população, o número de gerações e a opção de redefinir com base na variável "out-of-sample". desempenho. O tamanho da população foi escolhido para ser grande o suficiente para obter uma boa diversidade na população enquanto ainda é pequeno o suficiente para construir em um período de tempo razoável. O número de gerações foi baseado em quanto tempo demorou durante alguns builds preliminares para os resultados começarem a convergir.
Figura 7. Opções de construção incluem o tamanho da população, número de gerações e opções para redefinir a população com base em & quot; fora da amostra & quot; desempenho.
A opção para & quot; Redefinir no desempenho fora da amostra (OOS) & quot; inicia o processo de compilação após o número especificado de gerações, se a condição especificada for atendida; neste caso, a população será reposta se o valor "fora da amostra" O lucro líquido é inferior a US $ 20.000. Este valor foi escolhido com base em testes preliminares para ser um valor suficientemente alto que provavelmente não seria alcançado. Como resultado, o processo de criação foi repetido a cada 30 gerações até ser interrompido manualmente. Essa é uma forma de permitir que o programa identifique estratégias com base nas condições de Principais Estratégias durante um período prolongado de tempo. Periodicamente, a população de Top Strategies pode ser verificada e o processo de construção cancelado quando estratégias adequadas são encontradas.
Observe que eu coloquei "out-of-sample" entre aspas. Quando o & quot; fora da amostra & quot; período é utilizado para repor a população desta maneira, a expressão "fora da amostra" período não é mais verdadeiramente fora de amostra. Como esse período está sendo usado agora para orientar o processo de criação, ele é efetivamente parte do período in-sample. É por isso que é aconselhável reservar um terceiro segmento para validação, como foi discutido acima.
Após várias horas de processamento e várias reconstruções automáticas, foi encontrada uma estratégia adequada na população das Principais Estratégias. Sua curva de capital fechado é mostrada abaixo na Figura 8. A curva de patrimônio demonstra um desempenho consistente em ambos os segmentos de dados com um número adequado de negociações e essencialmente os mesmos resultados em ambas as séries de dados.
Figura 8. Curva de capital de comércio fechado para a estratégia de parada e reversão EURUSD.
Para verificar a estratégia durante o período de validação, os controles de data na guia Mercados (veja a Figura 1) foram alterados para a data final dos dados (2/11/2015), e a estratégia foi reavaliada selecionando-se a opção Avaliar comando no menu Estratégia no Construtor. Os resultados são mostrados abaixo na Figura 9. Os resultados da validação na caixa vermelha demonstram que a estratégia resistiu aos dados não utilizados durante o processo de construção.
Figura 9. Curva de capital de comércio fechado para a estratégia stop-and-reverse do EURUSD, incluindo o período de validação.
A verificação final é ver como a estratégia é executada em cada série de dados separadamente usando a opção de saída de código para essa plataforma. Isso é necessário porque, como explicado acima, pode haver diferenças nos resultados, dependendo (1) do tipo de código e (2) da série de dados. Precisamos verificar se as configurações escolhidas minimizaram essas diferenças, conforme pretendido. Para testar a estratégia do MetaTrader 4, a série de dados da TradeStation foi desmarcada na aba Mercados, e a estratégia foi reavaliada. Os resultados são mostrados abaixo na Fig. 10, que duplica a curva inferior na Fig. 9.
Figura 10. Curva de capital de comércio fechado para a estratégia de parada e reversão EURUSD, incluindo o período de validação, para o MetaTrader 4.
Finalmente, para testar a estratégia para a TradeStation, a série de dados da TradeStation foi selecionada e a série para o MetaTrader 4 foi desmarcada na aba Markets, a saída do código foi alterada para "TradeStation," e a estratégia foi reavaliada. Os resultados são mostrados abaixo na Fig. 11 e parecem ser muito semelhantes à curva do meio na Fig. 9, como esperado.
Figura 11. Curva de capital fechado de negociação para a estratégia stop-and-reverse EURUSD, incluindo o período de validação, para a TradeStation.
O código para ambas as plataformas é fornecido abaixo na Figura 12. Clique na imagem para abrir o arquivo de código para a plataforma correspondente. Examinar o código revela que a parte baseada em regras da estratégia usa diferentes condições relacionadas à volatilidade para os lados longo e curto. As entradas da rede neural consistem em uma variedade de indicadores, incluindo o dia da semana, tendência (ZLTrend), osciladores de alta intraday (InvFisherCycle, InvFisherRSI), bandas de Bollinger e desvio padrão.
A natureza híbrida da estratégia pode ser vista diretamente no código (do código da TradeStation):
Se EntCondL e NNOput <& gt; = 0,5 então começarem.
Compre (& quot; EnMark-L & quot;) ações NShares próximo bar no mercado;
A variável & quot; EntCondL & quot; representa as condições de entrada baseadas em regras e & quot; NNOuput & quot; é a saída da rede neural. Ambas as condições precisam ser verdadeiras para colocar a ordem de entrada longa. A condição de entrada curta funciona da mesma maneira.
Figura 12. Código de estratégia de negociação para a estratégia de parada e reversão EURUSD (esquerda, MetaTrader 4; direita, TradeStation). Clique na figura para abrir o arquivo de código correspondente.
Este artigo analisou o processo de construção de uma estratégia híbrida baseada em regras / rede neural para o EURUSD usando uma abordagem stop-and-reverse (sempre no mercado) com o Adaptrade Builder. Foi mostrado como o código de estratégia pode ser gerado para múltiplas plataformas, selecionando um subconjunto comum dos indicadores que funcionam da mesma maneira em cada plataforma. As configurações necessárias para gerar estratégias que invertem de longo para curto e para trás foram descritas, e foi demonstrado que a estratégia resultante foi realizada de forma positiva em um segmento de dados separado de validação. Verificou-se também que a estratégia gerou resultados semelhantes com a opção de dados e código para cada plataforma.
Como discutido acima, a abordagem stop-and-reverse tem várias desvantagens e pode não ser atraente para todos. No entanto, uma abordagem sempre no mercado pode ser mais atraente com os dados forex porque os mercados forex negociam o tempo todo. Como resultado, não há lacunas de abertura de sessão e as ordens de negociação estão sempre ativas e disponíveis para reverter a negociação quando o mercado muda. O uso de dados intradiários (barras de 4 horas) forneceu mais barras de dados para uso no processo de construção, mas foi, de outra forma, bastante arbitrário, pois a natureza sempre presente no mercado da estratégia significa que as negociações são realizadas durante a noite.
O processo de construção foi permitido para evoluir condições diferentes para entrar longo e curto, resultando em uma estratégia de parada e reversão assimétrica. Apesar do nome, a estratégia resultante entra em negociações longas e curtas em ordens de mercado, embora as ordens de mercado, parada e limite sejam consideradas pelo processo de construção independentemente para cada lado. Na prática, a reversão do longo para o curto significaria vender curto o dobro do número de ações no mercado, uma vez que a estratégia era atualmente longa; Por exemplo, se a atual posição comprada fosse 100.000 ações, você venderia 200.000 ações a descoberto no mercado. Da mesma forma, se a posição atual fosse de 100.000 ações, você compraria 200.000 ações no mercado para reverter de curto para longo prazo.
Um histórico de preços mais curto foi usado do que seria ideal. No entanto, os resultados foram positivos no segmento de validação, sugerindo que a estratégia não foi excessiva. Isso apoia a ideia de que uma rede neural pode ser usada em uma estratégia de negociação sem necessariamente ajustar a estratégia ao mercado.
A estratégia apresentada aqui não se destina à negociação real e não foi testada em rastreamento ou negociação em tempo real. No entanto, este artigo pode ser usado como um modelo para o desenvolvimento de estratégias semelhantes para o EURUSD ou outros mercados. Como sempre, qualquer estratégia de negociação que você desenvolver deve ser testada minuciosamente em rastreamento em tempo real ou em dados separados para validar os resultados e se familiarizar com as características de negociação da estratégia antes da negociação ao vivo.
Este artigo foi publicado na edição de fevereiro de 2015 do boletim da Adaptrade Software.
OS RESULTADOS DE DESEMPENHO HIPOTÉTICOS OU SIMULADOS TÊM CERTAS LIMITAÇÕES INERENTES. A PARTIR DE UM REGISTRO DE DESEMPENHO REAL, OS RESULTADOS SIMULADOS NÃO REPRESENTAM A NEGOCIAÇÃO REAL. TAMBÉM, UMA VEZ QUE AS COMERCIALIZAÇÕES NAO SÃO REALMENTE EXECUTADAS, OS RESULTADOS PODEM TER COMPENSADO OU SUPERIOR AO IMPACTO, SE ALGUM, DE DETERMINADOS FATORES DE MERCADO, COMO A FALTA DE LIQUIDEZ. PROGRAMAS DE NEGOCIAÇÃO SIMULADOS EM GERAL TAMBÉM ESTÃO SUJEITOS AO FATO DE QUE ELES FORAM CONCEBIDOS COM O BENEFÍCIO DE HINDSIGHT. NENHUMA REPRESENTAÇÃO ESTÁ SENDO FEITA QUE QUALQUER CONTA PODERÁ OU POSSIBILITAR LUCROS OU PERDAS SIMILARES AOS APRESENTADOS.
Se você gostaria de ser informado sobre novos desenvolvimentos, novidades e ofertas especiais da Adaptrade Software, por favor, junte-se à nossa lista de e-mail. Obrigado.
Copyright © 2004-2015 Adaptrade Software. Todos os direitos reservados.
SnowCron.
GRATUITO E. Mail Classes.
Neste artigo: um exemplo do uso de nosso software de redes neurais para criar um sistema completo de negociação de rede neural.
Este exemplo usa a linguagem de script interna do Cortex, portanto, leia primeiro o guia da linguagem de script.
Usando redes neurais para criar a 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 em 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ê vai encontrar um exemplo de um script pronto para usar que permite realizar a 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 negociar em tempo real, você precisa usar algo como Trade Station, MetaQuotes ou MetaTrader. Como portar o sistema de negociação FOREX do Cortex para sua plataforma de negociação favorita? Você tem que 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 portar facilmente a Rede Neural resultante (treinada) para a linguagem de script da sua plataforma de negociação. Nenhuma DLL, DDE, ActiveX ou qualquer outra solução de baixo nível - tudo é claro 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 de negociação. O que usamos aqui é apenas um ponto de partida, e não deve ser usado como uma estratégia de negociação forex "como está". A idéia deste texto é ensiná-lo a criar sistemas de negociação baseados em NN e portá-los para a plataforma de negociação de sua escolha. O exemplo é, no entanto, simplificado, 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, não está mais funcionando bem (como os mercados mudaram), mas ainda é um bom exemplo do uso de indicadores para negociações mecânicas.
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í todas elas, não apenas fragmentos. No entanto, torna o texto muito mais longo. Além disso, estou indo desde o primeiro, desajeitado sistema de negociação forex, até o mais avançado, sempre explicando o que foi melhorado e por quê. Seja paciente ou pule diretamente para a seção que você precisa.
Nota final importante: o código não é algo esculpido em pedra, pode mudar enquanto este texto foi escrito. As versões finais dos arquivos de script estão incluídas no arquivo Cortex.
Armadilhas de FOREX BUY / SELL Sinais: O que há de errado com exemplos "simples"?
No guia do usuário do software Cortex Neural Networks, utilizamos um exemplo simples de uma rede neural artificial, que previa o preço do estoque da GENZ. Para descobrir o que há de errado com essa abordagem, vamos fazer o mesmo exemplo "simples", usando MSFT. TXT, em vez do GENZ. TXT (use 800 registros no conjunto de aprendizado, pois o MSFT. TXT é um pouco mais curto, então GENZ. TXT).
Apenas não funcionaria! Por quê?
A razão 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 em primeiro lugar?"
A resposta é: ele está aprendendo a fazer o que é chamado de reconhecimento de padrões de redes neurais, a reconhecer padrões, e se há uma lógica oculta nesses padrões, então até 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.
Primeiro de tudo, se você olhar para o preço das ações da Microsoft, você vai notar, que estava indo para baixo na parte de "aprendizagem" dos nossos dados, e para os lados - na parte de "teste". Então é possível que a lógica tenha mudado.
Em segundo lugar, e ainda mais importante - O QUE É O PADRÃO? Você vê, se nós ensinamos a rede neural na faixa de 10 a 100, e então a apresentamos com algo na faixa de 1 a 3 - eles são padrões diferentes! 10, 20, 30 e 1, 2, 3 são similares aos humanos porque - PORQUE - temos essa capacidade de dividir por dez, quando apresentados 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 ensinar isso? Claro. O que é exatamente precisamos ensiná-lo?
Este é o terceiro e o mais importante. Nós não precisamos da previsão de preço! Nós não ligamos! O que precisamos é de sinais de venda FOREX.
Agora espere um minuto! Precisamos de a) ter nossa entrada (aprendendo e testando) na mesma faixa, e precisamos b) sermos capazes de tomar decisões de negociação com base nela? Não é isso que chamamos de indicador? Bingo?
Então, é isso que vamos fazer - vamos construir um indicador, para alimentar o NN como uma entrada, e vamos tentar obter uma previsão do valor do indicador, não o preço das ações sem valor!
Em nosso primeiro exemplo, carregaremos cotações de ações do disco, abriremos o arquivo da Rede Neural e iniciaremos o aprendizado - tudo em um modo automatizado.
Crie um novo arquivo de script (ou abra aquele que veio com o arquivo do Cortex Neural Networks Software) e chame-o de stocks_nn. tsc.
Primeiro de tudo, precisamos baixar os valores de preço do arquivo MSFT. TXT. Vamos usar o indicador CLV (veja abaixo), mas, para calculá-lo, precisamos de valores ajustados para alta e baixa, e não apenas para fechamento. Aqui está 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 o seu arquivo de dados estiver localizado no diretório diferente.
Na segunda linha, especificamos que esse caminho não é relativo (o "relativo" ao local do arquivo Cortex. exe).
O TABLE_LOADER recebe o caminho, a string vazia para a "linha de partida", 1 - para pular a primeira linha (nomes das colunas), parte da linha de rodapé do arquivo (a última linha em MSFT. TXT não contém dados), é também instruído a carregar o número da coluna 0 (e chamá-lo arrDate), 2 (arrHigh), 3 (arrLow), 4 (arrC) e 6 (arrClose).
Para uma descrição completa de TABLE_LOADER, consulte o guia de referência SLANG.
Em seguida, calculamos a divisão, dividindo o Fecho Ajustado por Fechar e usamos esse valor para ajustar Baixo e Alto.
O arquivo MSFT. TXT contém os dados mais recentes em PRIMEIRO, enquanto os queremos em LAST.
Em seguida, precisamos criar um indicador. Digamos que seja um indicador de Valor de Local Fechado, embora na "vida real" eu provavelmente usaria mais de um indicador como a entrada NN.
O indicador de valor de local fechado é calculado como.
CLV = ((Close - Low) - (High - Close)) / (Alto - Baixo), onde Close, Low e High são para o intervalo, não necessariamente para uma única barra. Note que nós queremos isso no intervalo de 0 - 1, para tornar mais fácil a normalização do alcance do nosso NN (que é, novamente, 0-1).
stocks_nn. tsc, parte 3.
Em seguida, precisamos criar um arquivo de latência. Vamos usar defasagens iguais a 1, 2. 9 (Para detalhes sobre funções de arquivo, veja o guia de referência SLANG). Note que a caixa de diálogo NN do Cortex pode produzir defasagens simples automaticamente (você pode usar um botão "Gerar atraso"). Mas, mais adiante neste texto, vamos trabalhar com atrasos complexos (ou seja, eles não são 1, 2, 3, mas 1, 3, 64. o que for), então precisamos criar o código que pode lidar com essa tarefa em uma maneira 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, por isso tenha cuidado. No entanto, o código é muito simples.
By the way, a maior parte deste código pode ser removido, se você acha que pode manipular números, em vez de nomes significativos em seu código, no entanto, isso seria uma prática muito ruim de codificação.
stocks_nn. tsc, parte 5.
Agora, depois que temos uma rede neural e o arquivo atrasado com dados, precisamos ensinar a rede. O arquivo de latência (msft_ind. lgg) tem 1074 registros, portanto, é razoável usar 800 como um conjunto de aprendizado e os demais 274 como um conjunto de testes.
Você pode, obviamente, abrir um arquivo de rede e clicar no botão "Executar" na guia "Aprendizado". Mas como esta é uma introdução à avançada programação do software Cortex Neural Networks, vamos usar a linguagem de script built-in SLANG.
O código a seguir exibe o diálogo modal com as configurações do ann NN. Observe que, se você quiser ter o privilégio de clicar no botão "Executar", precisará alterar o.
stocks_nn. tsc, parte 6.
O bStartLearning pode ser 0 e, nesse caso, a caixa de diálogo aguardará sua entrada ou 1 e, em seguida, o aprendizado começará de maneira atomatizada.
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 do início do aprendizado.
Execute o script e aguarde até que o contador de época exceda 1.000 e clique em "Parar". Vá até a aba "Aplicar" e clique em "Aplicar". Isso executará todo o conjunto de dados (aprendendo e testando) por meio do NN e criará o arquivo. APL, contendo tanto a entrada-saída original quanto a previsão gerada pelo NN, assim você poderá facilmente plotá-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", selecione "Não" na caixa de lista à esquerda e (mantendo pressionada a tecla CTRL enquanto seleciona com o mouse ) Clv e NN: Clv na caixa de listagem à direita. Clique em "Gráfico" para ver quão boa é a nossa previsão. Bem. É mais ou menos bom, pelo que podemos dizer olhando para ele. Ainda assim, nada de 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 lag personalizado, digamos, com 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 script.
Estratégia de Negociação de FOREX: o que otimizar?
Aqui está o nosso próximo problema. Precisamos de uma previsão de boa aparência, ou precisamos do que podemos usar para negociar com lucro? A pergunta parece estranha, mas pense por um momento. Digamos que tenhamos uma boa previsão de 1 hora. 95% de precisão Ainda assim, até onde o preço pode ir em uma hora? Não muito longe, estou com medo. Compare isso com a situação, quando você tem uma previsão de 10 horas bastante imprecisa. Será melhor?
Para responder a essa pergunta, precisamos realmente negociar, uma simples comparação dos erros médios produzidos pelas duas NNs não ajudará.
A segunda parte (do mesmo problema) está na maneira como definimos uma "boa previsão". Digamos que tenhamos uma rede, que produza a previsão, que é 75% precisa. Compare-o com o NN, que está produzindo uma previsão 100% precisa. O último é melhor. Agora, DIVIDE a saída (predição) do NN 100% preciso por 10. Teremos uma rede MUITO imprecisa, já que seu sinal não está nem perto do sinal que usamos como "saída desejada". E, no entanto, pode ser usado da mesma forma que usamos 100% de precisão NN, tudo o que temos a fazer é multiplicá-lo para 10!
Veja, o NN é criado, ajustando o erro quadrático médio, e não a correlação, portanto, pelo menos em teoria, um NN melhor pode mostrar resultados ruins, quando usado para o estoque real / negociação de Forex.
Para resolver esse problema, precisamos testar nossos NNs usando negociação e usar os resultados dessa negociação (lucro e rebaixamentos) para decidir se esse NN é melhor que o outro.
Vamos fazer isso. Vamos criar um programa que possa ser usado para ajustar o NN, e desta vez, por meio de ajuste fino, iremos nos referir a resultados de negociação.
Negociação em Rede Neural: Poucas notas curtas.
Em primeiro lugar, no nosso exemplo acima, o aprendizado "automático" nunca irá parar, porque não especificamos nenhum critério de parada. No diálogo, ou na função CREATE_NN, você pode fornecer o min. erro (quando o NN alcança, pára e, se o bResumeScript estiver definido como 1, a caixa de diálogo será fechada e o script será retomado). Também você pode fornecer o número máximo de épocas, ou ambos. Não estou usando no exemplo abaixo, pelo menos não sempre, porque estou planejando assistir o aprendizado e clicar em STOP quando achar que o NN está pronto. Se você quiser fazê-lo no modo totalmente automático, preste atenção a esses parâmetros.
Segundo. Uma das maneiras de tornar uma rede menor, mais rápida e mais precisa é começar com a pequena rede e aumentar seu tamanho, neurônio por neurônio. Obviamente, o número de neurônios de entrada é determinado pelo número de colunas de dados de entrada (mas também podemos variar), e o número de neurônios de saída deve ser igual ao número de colunas de dados de saída (geralmente um, mas não necessariamente ). Isso significa que precisamos otimizar o número de neurônios na (s) camada (s) oculta (s).
Além disso, como mencionei, não sabemos realmente quais dados usar. O Clv-15 (15 dias atrasado) aumentará a precisão de nossa previsão? Precisamos de Clv-256? Será melhor usar os dois no mesmo NN, ou adicionar Clv-256 arruinará nosso desempenho?
Usando ciclos aninhados para experimentar diferentes parâmetros de entrada, você pode:
Crie o NN, da mesma forma que fizemos para os dados de estoque (deixe-me repassar, para o NN, não há diferença entre estoques e FOREX, só aconteceu que eu tenho alguns arquivos de dados de alta qualidade para FOREX que eu quero processar , enquanto escrevia este texto). Tente combinações diferentes de atrasos. Tente um número diferente de neurônios na camada oculta. . e diferentes combinações de diferentes indicadores. . e assim por diante.
No entanto, se você tentar todas as combinações possíveis de todos os parâmetros possíveis, NUNCA receberá seus resultados, não importa o quão rápido o seu computador seja. Abaixo, usaremos alguns truques para reduzir os cálculos ao mínimo possível.
By the way, pode parecer que, se você começar a partir de um neurônio oculto, em seguida, aumentá-lo para 2, 3 e assim por diante, e em algum momento o erro (qualidade da previsão) ou o lucro (se você testar o NN por negociação usando) vai começar a descer, então você tem o seu vencedor. Infelizmente, não posso provar que após o primeiro "pico de desempenho" não pode haver um segundo. Isso significa que o erro pode ir como 100, 30, 20, 40, 50 (foi apenas no mínimo, certo?) E, em seguida, 30, 20, 10, 15,. (o segundo mínimo). Nós apenas temos que testar todos os números razoáveis.
Terceiro. Otimização é uma espada de dois gumes. Se você otimizar demais seu código, talvez ele não funcione fora dos dados usados para ajustá-lo. Eu farei o meu melhor para evitar essa armadilha. Se você quiser fazer otimizações adicionais para o seu código ou NN, eu aconselho você a fazer uma pesquisa na Internet, para aprender mais sobre os problemas ocultos desta abordagem. Além disso, prestarei atenção à suavidade da curva de lucro. O lucro que parece 0, -500, 1000, -100, 10000 pode ser grande, mas o lucro 0, 100, 200, 300, 400. é melhor, pois é menos arriscado. Podemos falar sobre isso depois.
Finalmente, para este exemplo, vamos usar o FOREX, em vez dos preços das ações. Do ponto de vista do NN não há diferença, e do meu ponto - Forex é muito mais divertido de negociar. Se você preferir ações, o código pode ser facilmente modificado.
Uma estratégia de negociação FOREX para jogar.
Primeiro de tudo, vamos criar um protótipo do nosso código, que pode ser facilmente otimizado no futuro. Vai ser um sistema de negociação, que usa uma rede neural para negociar e produz um gráfico (lucro contra o número do comércio). Ele também irá calcular o rebaixamento, como uma medida de robustez do nosso sistema de negociação.
forex_nn_01.tsc, parte 1.
A principal diferença aqui é que usamos funções, em vez de colocar todo o código no bloco principal do programa. Desta forma, é muito mais fácil de gerenciar.
Em segundo lugar, temos uma função TestNet. Eu estou usando um algoritmo muito simples de negociação. O indicador CLV está confinado a um intervalo de 0 - 1 (nossa versão do CLV é), então quando o indicador cruza o dBuyLevel (veja o código acima), eu estou comprando, quando ele está cruzando o dSellLevel, estou vendendo.
Obviamente, não é a melhor estratégia de negociação, mas fará para o nosso propósito (só por enquanto). Se você quiser melhorá-lo, aqui estão algumas dicas. Primeiro, você pode querer ter um sistema que não esteja SEMPRE no mercado. Segundo, você pode querer usar mais de um indicador como entradas, e talvez, mais de um NN, para que a decisão de negociação seja feita com base em poucos indicadores previstos. Vamos adicionar algumas melhorias ao algoritmo de negociação mais tarde.
Nós usamos algumas premissas padrão da negociação FOREX: spread é de 5 pontos, alavanca é 100, min. lote é de US $ 100 (mini-FOREX).
Vamos dar uma olhada no nosso sistema de "negociação". Mais uma vez, é um simplista demais. Uma observação importante: o TestNn () é chamado last e tem acesso a todas as variáveis que foram criadas até esse ponto. Portanto, se você vir uma variável que estou usando, sem inicializá-la, provavelmente significa que ela foi inicializada em NewNn (), TeachNn () ou alguma outra função que foi chamada antes de TestNn ().
Para facilitar as coisas, os comentários são colocados no código.
forex_nn_01.tsc, parte 2.
Poucas palavras sobre o levantamento. Existem poucas maneiras de calculá-lo e estamos usando o que considero mais "honesto". O rebaixamento é uma medida de instabilidade do nosso sistema. Qual é a chance de perder dinheiro? Vamos dizer que o valor inicial é de $ 1000. Se o lucro for 100, 200, 300, 400. o rebaixamento é 0. Se for 100, 200, 100. então o rebaixamento é 0,1 (10%), já que acabamos de perder uma quantia, igual a 1/10 de o depósito inicial (de 1200 a 1100).
Eu recomendaria fortemente contra o uso de sistemas de negociação com grandes rebaixamentos.
Além disso, aqui eu uso um drawdown, que é para ser usado com tamanho de lote variável. No entanto, nas amostras reais, que vêm com o eBook, você verá outra versão:
Como você pode ver, aqui usamos sempre 1000 (o montante inicial) para calcular o rebaixamento. O motivo é simples: sempre usamos o mesmo tamanho de lote (sem gerenciamento de dinheiro ainda), então não há diferença, quanto dinheiro já acumulamos em nossa conta, um lucro médio deve ser constante. O pior cenário possível neste caso é o seguinte: desde o início ($ 1000 por conta) estamos perdendo dinheiro. Se usarmos $ 1000 para calcular o rebaixamento, obteremos o pior levantamento. Isso nos ajudará a não nos enganarmos. Por exemplo, digamos, negociamos por algum tempo e temos $ 10.000 em nossa conta. Então perdemos algum dinheiro e agora temos US $ 8.000. Então nos recuperamos e recebemos US $ 12.000. Bom sistema de negociacao? Provavelmente não.
Vamos repetir a lógica novamente, pois é muito importante (e se tornará ainda mais importante quando começarmos a administrar o dinheiro). Nós negociamos usando lotes de tamanho fixo. Então, estatisticamente, não há garantia de que a perda máxima não acontecerá no começo, quando só temos $ 1000. E se isso acontecer, teremos -1.000 $ (10.000 - 8.000), então o sistema de negociação é provavelmente muito arriscado.
Quando falamos sobre a gestão do dinheiro (provavelmente, não neste texto), teremos que usar uma abordagem diferente para o cálculo do drawdown.
Note que neste sistema de negociação, estou usando o pior cenário possível: estou comprando usando High e vendendo, usando Low. Muitos testadores não seguem essas regras e criam sistemas de negociação que funcionam bem com dados históricos. Mas na vida real, esses sistemas de negociação têm um desempenho muito ruim. Por quê?
Dê uma olhada na barra de preços. Tem Aberto, Alto, Baixo e Fechado. Você sabe, como o preço estava se movendo dentro do bar? Não. Então, digamos, o seu sistema de negociação gerou um sinal de "compra", na parte inferior da barra de preços (se dLow.
Observe que estou usando dLotSize igual a 0,1 lote (US $ 100). Obviamente, na negociação "real", você se beneficiará muito, se o tamanho do lote for calculado, dependendo do dinheiro que você tem, algo como:
forex_nn_01.tsc, parte 3.
No entanto, estamos fazendo testes aqui, não negociando. E para testes, precisamos, entre outras coisas, ver quão suave é a curva de lucro. Isto é muito mais fácil de fazer se o tamanho do lote for o mesmo (em situação ideal, para dLotSize = 100 nós obteremos uma linha reta, com alguma inclinação positiva, enquanto no caso do tamanho do lote ajustável teremos um expoente, isto é muito mais difícil de analisar).
Mais adiante neste texto, aplicaremos regras de gerenciamento de dinheiro ao nosso sistema de negociação, mas ainda não.
Depois que terminarmos a última parte da nossa função de teste, vamos percorrer o resto do código.
A função a seguir cria um indicador CLV. Ele toma o intervalo como um parâmetro, o que significa que podemos chamá-lo muitas vezes, durante a otimização, passando números diferentes.
Observe que estou usando o NN que funciona no intervalo de 0 a 1. Os dados podem ser normalizados, é claro, mas optei por dividir o indicador por 2 e adicionar 0,5, de modo que ele esteja em 0 - 1 intervalo.
forex_nn_01.tsc, parte 4.
Para criar um arquivo com atraso, podemos usar a função CREATE_LAG_FILE. Alternativamente, podemos fazê-lo explicitamente fornecendo todo o código necessário. Nesse caso, temos mais controle, e vamos precisar disso, se começarmos a variar o número de colunas atrasadas e assim por diante.
forex_nn_01.tsc, parte 5.
O parâmetro nRemoveFirst é importante. Muitas funções, como indicadores, médias móveis, geradores de atraso, não funcionam bem nos primeiros registros do conjunto de dados. Vamos dizer que temos MA (14) - o que vai colocar nos registros 1 - 13? Por isso, escolhemos simplesmente remover os primeiros registros (não confiáveis).
Para o NewNn, bem como para todas as funções deste programa, precisamos passar como parâmetros apenas o que pode ser alterado durante o processo de otimização. Por exemplo, não há necessidade de passar um parâmetro "pular antes", já que é sempre o mesmo.
forex_nn_01.tsc, parte 6.
A função TeachNn simplesmente exibe o diálogo NN.
forex_nn_01.tsc, parte 7.
Finalmente, precisamos de uma função de gráficos. Não é obrigatório, mas é sempre uma boa ideia ver como é nossa linha de lucro. O código a seguir usa o XML para produzir um gráfico, por isso é uma boa ideia ler o tutorial. Como alternativa, você pode desenhar o gráfico, em vez de salvá-lo em um arquivo. Para fazer isso, use uma das amostras, que estão no diretório samples / scripts. Finalmente, você pode modificar o código para produzir HTML, em vez de XML. O HTML é mais fácil de aprender, mas o próprio código será um pouco menos legível.
forex_nn_01.tsc, parte 8.
Compile e execute o script.
Bem. Como esperado, usar 7 horas como intervalo para o CLV produziu resultados muito ruins:
Estratégias de Negociação e Otimização de FOREX.
A razão para os resultados ruins é bastante óbvia: usamos o Intervalo, Stop Loss, níveis de compra e venda e outros parâmetros, que eram puramente aleatórios - nós escolhemos primeiro o que veio em mente! E se nós tentarmos algumas combinações?
Sinais de Negociação FOREX: O que otimizar?
Primeiro de tudo, superoptimizando os níveis de compra e venda, podemos arruinar nosso desempenho futuro. No entanto, ainda podemos ajustá-los, especialmente, se o desempenho estiver próximo para valores próximos de limites de compra e venda. Por exemplo, se tivermos lucro de -10% no limite de compra igual a 0,3 e lucro de + 1000% quando igual a 0,35, então provavelmente haverá uma coincidência de sorte, e não devemos usar 0,35 para o nosso sistema de negociação, pois no futuro ele será provavelmente não vai acontecer de novo. Se, em vez disso, tivermos -10% e + 10% (em vez de + 1000%), pode ser mais seguro usar.
Geralmente, nosso sistema de negociação deve ser construído para o pior cenário possível, como se durante a negociação "real" o desempenho fosse melhor, então, durante o teste, nós sobreviveríamos, mas não o contrário.
Podemos variar o valor do intervalo do indicador, desde que tenhamos negociações suficientes, para que possamos ter confiança, em termos de estatísticas, no desempenho de um sistema.
Nós certamente podemos variar o número de neurônios, eu não acho que pode ser superoptimizado facilmente.
Podemos variar o número de entradas e atrasos para insumos. É possível superoptimizar isso, mas não é muito provável que isso aconteça.
E, claro, podemos tentar indicadores diferentes.
Sinais Accurate FOREX: Como otimizar?
Como já foi mencionado, se começarmos a tentar todas as combinações possíveis, levará uma eternidade. Então vamos trapacear. Vamos criar conjuntos pré-definidos de parâmetros, que consideramos razoáveis, e passá-los para o programa.
Para fazer o menor número de cálculos possível, note que Clv-1 e Clv-2 são, provavelmente, importantes, mas e quanto ao Clv-128? E - se já temos o Clv-128, precisamos do Clv-129? Provavelmente não. Então, vamos ter algo como Clv-1, Clv-2, Clv-4, Clv-8,. Clv-128 com apenas algumas variações, o que tornará nosso tempo de cálculo milhares de vezes menor.
FOREX Professional System Trading: Pode funcionar de todo?
O que exatamente queremos prever? Até este ponto, usamos um gráfico de 1 hora para o EURUSD, e estávamos prevendo o CLV da próxima barra. O CLV + 2 será melhor? E quanto ao CLV + 3?
Além disso, especialmente considerando o fraco desempenho do nosso primeiro sistema de negociação, seria bom saber que - pelo menos no mundo "ideal", o objetivo (negociação lucrativa) pode ser alcançado.
Para responder a essas perguntas, vamos criar um programa de teste simples. Assumimos que nossa previsão é 100% precisa e, com base nessa suposição, usaremos CLV + N, não o NN previsto. É isso mesmo - vamos pegar dados do futuro e usá-los em vez da previsão do NN. Essa abordagem não funcionaria na vida real, é claro, mas em léguas, isso nos daria algumas idéias do que esperar.
Ao analisar os resultados, lembre-se de que não estamos usando nenhum gerenciamento avançado de dinheiro, nosso tamanho de lote é definido para um mínimo de $ 100. Se você usar tamanhos de lote variáveis, os resultados serão dramaticamente diferentes. Mas mesmo em um tamanho de lote definido para 0,1, podemos ver (abaixo) que obter as informações do futuro é o "holly graal" de um profissional supremo.
forex_nn_02.tsc, parte 1.
Você já está familiarizado com este código, ele foi usado em FOREX_NN_01.TSC. Ele lida com o carregamento de dados. A única diferença está na parte que obtém a lista de arquivos no diretório "images" e apaga todos os arquivos com a extensão. PNG. A razão para este código é simples: durante nossos testes, vamos criar muitos arquivos - talvez milhares de imagens. Nós não queremos que eles fiquem por perto depois que terminarmos. Portanto, no início do script, estamos excluindo imagens criadas por outros scripts.
forex_nn_02.tsc, parte 2.
Apenas alguns comentários. Não queremos tentar todos os valores possíveis para, por exemplo, o intervalo CLV. Em vez disso, podemos criar uma matriz que contenha apenas valores que queremos testar. Então (veja abaixo) nós iremos percorrer este array.
As perdas de parada são parte importante de qualquer estratégia de negociação, então decidi também alterá-las. É uma ideia perigosa, no entanto, como é fácil superoptimizar o sistema.
Estou planejando testar diferentes valores para os níveis de compra e venda, mas isso será feito em ciclo, sem usar arrays.
Ao contrário do nosso exemplo anterior, queremos ter um arquivo XML grande, contendo muitas imagens. Para fazer isso, movi o código, que está formando o cabeçalho e o rodapé XML fora da função Chart. Leia um dos tutoriais XML on-line para obter detalhes.
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.
Neural Networks Learn Forex Trading Strategies.
The latest buzz in the Forex world is neural networks, a term taken from the artificial intelligence community. In technical terms, neural networks are data analysis methods that consist of a large number of processing units that are linked together by weighted probabilities. In more simple terms, neural networks are a model loosely resembling the way that the human brain works and learns. For several decades now, those in the artificial intelligence community have used the neural network model in creating computers that 'think' and 'learn' based on the outcomes of their actions.
Unlike the traditional data structure, neural networks take in multiple streams of data and output one result. If there's a way to quantify the data, there's a way to add it to the factors being considered in making a prediction. They're often used in Forex market prediction software because the network can be trained to interpret data and draw a conclusion from it.
Before they can be of any use in making Forex predictions, neural networks have to be 'trained' to recognize and adjust for patterns that arise between input and output. The training and testing can be time consuming, but is what gives neural networks their ability to predict future outcomes based on past data. The basic idea is that when presented with examples of pairs of input and output data, the network can 'learn' the dependencies, and apply those dependencies when presented with new data. From there, the network can compare its own output to see how close to correct the prediction was, and go back and adjust the weight of the various dependencies until it reaches the correct answer.
This requires that the network be trained with two separate data sets — the training and the testing set. One of the strengths of neural networks is that it can continue to learn by comparing its own predictions with the data that is continually fed to it. Neural networks are also very good at combining both technical and fundamental data, thus making a best of both worlds scenario. Their very power allows them to find patterns that may not have been considered, and apply those patterns to prediction to come up with uncannily accurate results.
Unfortunately, this strength can also be a weakness in the use of neural networks for trading predictions. Ultimately, the output is only as good as the input. They are very good at correlating data even when you feed them enormous amounts of it. They are very good at extracting patterns from widely disparate types of information — even when no pattern or relationship exists. Its other major strength — the ability to apply intelligence without emotion — after all, a computer doesn't have an ego — can also become a weakness when dealing with a volatile market. When an unknown factor is introduced, the artificial neural network has no way of assigning an emotional weight to that factor.
There are currently dozens of Forex trading platforms on the market that incorporate neural network theory and technology to 'teach' the network your system and let it make predictions and generate buy/sell orders based on it. The important thing to keep in mind is that the most basic rule of Forex trading applies when you set out to build your neural network — educate yourself and know what you're doing. Whether you're dealing with technical analysis, fundamentals, neural networks or your own emotions, the single most important thing you can do to ensure your success in Forex trading is to learn all you can.
Neural Networks Скальпинг Стратегия форекс.
Это система скальпинг, что вновь система нейро тенденция торговой системы и имеет новый показатель называется jaimo-СОУ. Эта система работает на 15-минутном графике и могут быть использованы для любых основных валютных пар.
индикаторы Metatrader:
индикатор Neurotrend, Индикатор Jaimo-Jima (настройка по умолчанию), индикатор RSX(12 период), Pivot Points Уровень.
Купить Вход:
Neuro Trend в полосах частот Jaimo СОУ. Синяя линия индикатора Jaimo Jma больше, чем красная линия. Индикатор RSX является зеленый цвет.
Продать запись:
Neuro Trend в полосах частот Jaimo СОУ. Красная линия индикатора Jaimo Jma больше синей линии. Индикатор RSX является зеленый цвет.
Выход из позиции:
Целевая прибыль 8-12 пипсов. На уровне Pivot Points. Установить потери начальная остановка 5 пипсов выше или ниже входа бар.
Инструкции по установке стратегии форекс.
Neural Networks Forex скальпинг стратегия представляет собой сочетание Metatrader 4 (MT4) индикатор(s) и шаблон.
Суть этой стратегии форекс заключается в преобразовании накопленных исторических данных и торговые сигналы.
Neural Networks Forex Скальпинг Стратегия дает возможность выявить различные особенности и закономерности в динамике цен, которые не видны невооруженным глазом.
На основании этой информации, трейдеры могут предполагать дальнейшее движение цены и регулировать эту стратегию соответственно.
Rede neural.
A rede neural é uma das palavras-chave mais recentes na negociação. Parece legal e sofisticado. Não muitas pessoas parecem entender o que são as redes neurais.
Neurônios no mundo real.
Nossos cérebros são fenomenalmente complicados. O que surpreende a maioria das pessoas, no entanto, é que o cérebro é mais ou menos uma enorme caixa de circuitos. Os neurônios são células que agem como circuitos com "fios elétricos", chamados axônios, que se esgotam e se conectam através do corpo humano. Todo movimento, percepção ou ação que você faz é a soma de todos os axônios que disparam impulsos elétricos. A mudança ocorre sempre que a frequência dos impulsos elétricos enviados pelo neurônio varia. Mais impulsos causam uma reação, uma redução causa outra.
As redes neurais tentam emular processos do cérebro humano organizando informações em neurônios. Ao contrário das células de neurônios reais, um neurônio de rede só existe na máquina. É um peso da máquina que contém informações sobre o que está sendo estudado.
Uma rede neural para um sistema de negociação pode decidir estudar indicadores comuns, como uma média móvel, o oscilador RSI e Stochastics. O valor médio móvel da barra atual conta como seu próprio neurônio. O RSI é diferente, então chega a ser um neurônio separado. Se eu tiver dez indicadores na minha caixa de ferramentas, então eu tenho 10 neurônios na minha rede.
Computadores tradicionalmente resolvem problemas lineares e simples. Se você quiser saber o resultado de operações matemáticas como a raiz cúbica de 355, os computadores são perfeitos para a tarefa. Eles calculam rapidamente uma resposta precisa.
Como nos cérebros humanos, as redes neurais formam sinapses com outros neurônios. Quando treinados, grupos de neurônios podem aprender a reconhecer padrões. É essa propriedade que torna as redes neurais tão úteis. Isso nos permite criar programas que seriam impossíveis com a computação tradicional. Criar um programa de software para reconhecer um rosto, por exemplo, seria extremamente difícil. É muito mais fácil treinar uma rede para reconhecer um rosto mostrando repetidamente as faces da rede.
O cérebro é um tópico fascinante por si só. Como um aparte, minha esposa e eu estamos fazendo um curso de pesquisa em neurociência através de uma série de vídeos dos Grandes Cursos. Se você tem algum interesse no assunto, eu recomendo Entendendo o Cérebro por Jeanette Norden. Ele aborda em detalhes como os neurônios se conectam à anatomia em todo o cérebro e em todo o corpo.
Redes Neurais e Forex Trading.
Redes neurais entram em jogo quando a resposta não é tão precisa. Continuando com o tema deste blog de negociação forex, não há resposta certa para o que torna o sistema de negociação perfeito. Um típico investidor varejista pode dizer que o melhor sistema de negociação é aquele que faz mais dinheiro. Outro pode dizer que o melhor sistema de negociação é aquele com o maior índice de Sharpe. Muitos querem algo no meio.
O problema do "melhor sistema de negociação" é ambíguo, o que o torna um candidato ideal para atacar com redes neurais. O designer descreve conjuntos de regras que, na opinião do profissional, formam uma maneira numérica de medir o melhor sistema.
Cérebros humanos hospedam aproximadamente 100 bilhões de neurônios. Apesar dos melhores esforços de muitos de nossos clientes, ainda não encontrei ninguém com 100 bilhões de indicadores de mercado à sua disposição. Uma maneira de ampliar o efeito dos neurônios em nossa caixa de ferramentas é criar camadas ocultas.
Uma rede é composta de múltiplas camadas, cada uma composta de múltiplos neurônios. Cada neurônio está conectado a todos os neurônios na próxima camada. Cada conexão carrega seu próprio valor ponderado exclusivo. Um neurônio transmitirá seu valor pela multiplicação do valor do neurônio e pelo peso da conexão de saída. O neurônio no final da conexão de saída irá somar todas as suas conexões de entrada e propagar esse resultado para a próxima camada através de todas as suas conexões de saída.
As imagens tornam a ideia muito mais intuitiva. A figura 1 contém um pequeno exemplo. Os 2 e 3 à esquerda são as entradas na rede. Essas entradas são multiplicadas pelo peso da conexão para a próxima camada. O 2 é multiplicado por 0.5, dando-nos 1, e 3 por 2, dando-nos 6. A segunda camada contém um nó que resume os resultados da camada anterior, dando-nos 7. O próximo passo seria multiplicar 7 pelos pesos em as conexões de saída e passá-lo para a próxima camada.
Figura 1: Um exemplo de uma rede neural propagando os resultados para frente.
O pequeno exemplo acima pode ser repetido e encadeado para formar uma rede maior. Abaixo, na Figura 2, temos um exemplo de uma rede maior. A rede de exemplo tem 3 entradas conectadas a uma camada oculta. A camada oculta é então conectada a uma única saída. As camadas ocultas são para facilitar o treinamento. Quanto mais complexo o problema, mais camadas e nós são necessários.
Figura 2: Um exemplo de uma rede neural maior.
A rede aprende atualizando os pesos de suas muitas conexões. Existem muitos algoritmos de software que são usados para realizar aprendizado em redes neurais. Eles se enquadram em duas categorias, aprendizado supervisionado e aprendizado não supervisionado. O aprendizado supervisionado é realizado com o usuário informando à rede se suas previsões estão corretas ou não. A rede calcula seu erro e usa um dos algoritmos para corrigir o erro. Um exemplo disso é a propagação reversa, que calcula o erro da previsão de uma rede. A rede usa um algoritmo rápido para atualizar cada um dos pesos de conexão com esse erro. A propagação reversa é uma das estratégias de treinamento mais comuns.
O aprendizado não supervisionado usa algum tipo de algoritmo de condicionamento físico ou de pontuação, no qual a rede se classificará e tentará melhorar em cada tentativa subseqüente. Um exemplo de treinamento não supervisionado é o algoritmo genético. Esse algoritmo cria uma população de redes neurais e usa um algoritmo de pontuação projetado pelo usuário para classificar a população. Depois disso, é a sobrevivência do mais apto. As redes mais bem posicionadas conseguem ficar e "reproduzir" e o último classificado é descartado. As redes reproduzem misturando e combinando pesos de conexão.
As redes neurais podem auxiliar substancialmente os comerciantes de sistemas em seu projeto de algoritmo, explorando bilhões de combinações entre uma caixa de ferramentas de indicadores relativamente pequena. Isso difere da otimização padrão, que envolve ligar números a vários indicadores, procurando por qualquer combinação que resulte em mais dinheiro.
O fato de as redes poderem considerar múltiplas medidas (equilíbrio, Índice de Sharpe, etc) para determinar o melhor sistema de negociação ajuda a reduzir a probabilidade de que superenfatize uma medida em particular. Um bom exemplo disso é o saldo da conta. Se um sistema pesa o dar e receber entre o retorno líquido e o retorno ajustado ao risco, ele começa a se afastar do processamento de números para descobrir os melhores números para usar e seguir em direção ao aprendizado real e ao reconhecimento de padrões.
As redes neurais estão se mostrando muito úteis em uma ampla gama de aplicações, desde o reconhecimento facial até as previsões do mercado de câmbio. Eles se destacam onde há padrões que são difíceis de reconhecer. Essa capacidade torna as redes inestimáveis na resolução de problemas difíceis envolvendo múltiplas variáveis.
Comments
Post a Comment