Tuesday 24 April 2018

Indicador forex da rede neural


Provedor de preço seguinte usando a rede Neural - indicador para o MetaTrader 4.
26/06/2009 - adicionou um novo indicador BPNN Predictor com Smoothing. mq4, em que os preços são alisados ​​usando EMA antes das previsões.
20/08/2009 - corrigiu o código que calcula a função de ativação do neurônio para evitar a exceção aritmética; BPNN. cpp e BPNN. dll atualizados.
21/08/2009 - adicionou limpeza da memória no final da execução da DLL; BPNN. cpp e BPNN. dll atualizados.
Breve teoria das redes neurais:
A rede neural é um modelo ajustável de saídas como funções das entradas. Consiste em várias camadas:
camada de entrada, que consiste na camada escondida de dados de entrada, que consiste em processar nós chamados camada de saída de neurônios, que consiste em um ou vários neurônios, cujas saídas são as saídas de rede.
Todos os nós das camadas adjacentes estão interligados. Essas conexões são chamadas de sinapses. Toda sinapse tem um coeficiente de escala designado, pelo qual os dados propagados através da sinapse são multiplicados. Esse coeficiente de escala é chamado de pesos (w [i] [j] [k]). Em uma Rede de Neuro Feed-Forward (FFNN), os dados são propagados a partir de entradas para as saídas. Aqui está um exemplo de FFNN com uma camada de entrada, uma camada de saída e duas camadas ocultas:
A topologia de um FFNN é frequentemente abreviada da seguinte forma: & lt; # of input & gt; - & lt; # de neurônios na primeira camada escondida & gt; - & lt; # de neurônios na segunda camada escondida & gt; -. - & lt; # de saídas & gt ;. A rede acima pode ser referida como uma rede 4-3-3-1.
Os dados são processados ​​por neurônios em duas etapas, correspondentemente mostradas dentro do círculo por um sinal de soma e um sinal de etapa:
Todas as entradas são multiplicadas pelos pesos associados e somados. As somas resultantes são processadas pela função de ativação do neurônio, cuja saída é a saída do neurônio.
É a função de ativação do neurônio que dá não linearidade ao modelo de rede neural. Sem isso, não há motivos para ter camadas ocultas, e a rede neural se torna um modelo auto-regenerado linear (AR).
Os arquivos de biblioteca fechados para funções NN permitem a seleção entre três funções de ativação:
O limite de ativação dessas funções é x = 0. Esse limite pode ser movido ao longo do eixo x graças a uma entrada adicional de cada neurônio, chamada entrada de polarização, que também possui um peso atribuído a ele.
O número de entradas, saídas, camadas ocultas, neurônios nessas camadas e os valores dos pesos de sinapse descrevem completamente um FFNN, isto é, o modelo não linear que ele cria. Para encontrar pesos, a rede deve ser treinada. Durante um treinamento supervisionado, vários conjuntos de entradas passadas e as correspondentes saídas esperadas são alimentados na rede. Os pesos são otimizados para obter o menor erro entre as saídas de rede e as saídas esperadas. O método mais simples de otimização de peso é a propagação traseira de erros, que é um método de descida gradiente. A função de treinamento fechada Train () usa uma variante deste método, denominada Back-Propagation Plus (iRProp +) aprimorada Resilient. Este método é descrito aqui.
A principal desvantagem dos métodos de otimização baseados em gradientes é que eles geralmente encontram um mínimo local. Para séries caóticas, como uma série de preços, a superfície do erro de treinamento tem uma forma muito complexa com muitos mínimos locais. Para essas séries, um algoritmo genético é um método de treinamento preferido.
BPNN. dll - arquivo de biblioteca BPNN. zip - arquivo de todos os arquivos necessários para compilar BPNN. dll em C ++ BPNN Predictor. mq4 - indicador prevendo futuros preços abertos BPNN Predictor com Smoothing. mq4 - indicador que prevê preços abertos lisos.
Arquivo BPNN. cpp tem duas funções: Train () и Test (). Train () é usado para treinar a rede com base na entrada passada fornecida e nos valores de saída esperados. Test () é usado para calcular as saídas de rede usando pesos otimizados, encontrados por Train ().
Aqui está a lista de parâmetros de entrada (verde) и output (azul) de Train ():
double inpTrain [] - Dados de treinamento de entrada (matriz 1D com dados 2D, antigo)
double outTarget [] - Saída de dados de destino para treinamento (dados 2D como matriz 1D, 1 maior)
double outTrain [] - Output 1D array para manter as saídas líquidas do treinamento.
int ntr - número de conjuntos de treinamento.
int UEW - Use Ext. Pesos para inicialização (1 = use extInitWt, 0 = use rnd)
double extInitWt [] - Insira a matriz 1D para armazenar a matriz 3D de pesos iniciais externos.
Double TrainingWt [] - Output 1D array para armazenar matriz 3D de pesos treinados.
int numLayers - número de camadas, incluindo entrada, oculto e saída.
int lSz [] - # de neurônios em camadas. lSz [0] é # de entradas líquidas.
int AFT - Tipo de função de ativação do neurônio (0: sigm, 1: tanh, 2: x / (1 + x))
int OAF - 1 permite a função de ativação para a camada de saída; 0 desabilita.
int nep - Número máximo de épocas de treinamento.
duplo maxMSE - Max MSE; O treinamento pára quando o maxMSE é alcançado.
Aqui está a lista de parâmetros de entrada (verde) и output (azul) de Test ():
double inpTest [] - dados de teste de entrada (dados 2D como matriz 1D, o mais antigo primeiro)
double outTest [] - Output 1D array para manter as saídas líquidas do treinamento (o mais antigo primeiro)
int ntt - número de conjuntos de teste.
double extInitWt [] - Insira a matriz 1D para armazenar a matriz 3D de pesos iniciais externos.
int numLayers - número de camadas, incluindo entrada, oculto e saída.
int lSz [] - # de neurônios em camadas. lSz [0] é # de entradas líquidas.
int AFT - Tipo de função de ativação do neurônio (0: sigm, 1: tanh, 2: x / (1 + x))
int OAF - 1 permite a função de ativação para a camada de saída; 0 desabilita.
Quer usar a função de ativação na camada de saída ou não (valor do parâmetro OAF) depende da natureza das saídas. Se as saídas são binárias, o que é frequentemente o caso nos problemas de classificação, a função de ativação deve ser usada na camada de saída (OAF = 1). Por favor, preste atenção que a função de ativação # 0 (sigmoid) tem 0 e 1 níveis saturados, enquanto as funções de ativação # 1 e 2 têm -1 e 1 níveis. Se as saídas de rede forem uma previsão de preço, então não será necessária nenhuma função de ativação na camada de saída (OAF = 0).
Exemplos de utilização da biblioteca NN:
BPNN Predictor. mq4 - prevê preços abertos futuros. As entradas da rede são mudanças de preço relativo:
onde o atraso [i] é calculado como um número de Fibonacci (1,2,3,5,8,13,21 ..). A saída da rede é a variação relativa prevista do próximo preço. A função de ativação é desativada na camada de saída (OAF = 0).
extern int lastBar - Última barra nos dados passados.
extern int futBars - número de barras futuras para prever.
extern int numLayers - número de camadas, incluindo entrada, oculto e amp; saída (2..6)
extern int numInputs - número de entradas.
extern int numNeurons1 - # de neurônios na primeira camada escondida ou saída.
extern int numNeurons2 - # de neurônios na segunda camada escondida ou saída.
extern int numNeurons3 - # de neurônios na terceira camada escondida ou saída.
extern int numNeurons4 - # de neurônios na quarta camada escondida ou saída.
extern int numNeurons5 - # de neurônios na quinta camada escondida ou saída.
extern int ntr - número de conjuntos de treinamento.
extern int nep - Número máximo de épocas.
extern int maxMSEpwr - define maxMSE = 10 ^ maxMSEpwr; O treino pára & lt; maxMSE.
extern int AFT - Tipo de atividade. função (0: sigm, 1: tanh, 2: x / (1 + x))
O indicador traça três curvas no gráfico:
cor vermelha - previsões de preços futuros.
BPNN Predictor. mq4 - prevê futuros preços abertos suavizados. Ele usa o suavização EMA com o período smoothPer.
Copie o arquivo BPNN. DLL para C: \ Program Files \ MetaTrader 4 \ experts \ bibliotecas.
Você também pode compilar seu próprio arquivo DLL usando códigos-fonte em BPNN. zip.
Uma rede com três camadas (numLayers = 3: uma entrada, uma escondida e uma saída) é suficiente para a grande maioria dos casos. De acordo com o Teorema de Cybenko (1989), uma rede com uma camada oculta é capaz de aproximar qualquer função contínua e multivariada a qualquer grau de precisão desejado; uma rede com duas camadas ocultas é capaz de aproximar qualquer função descontínua e multivariada:
O gráfico abaixo mostra uma função linear y = b * x (entrada x, saída y) cujas saídas são corrompidas por ruído. Esse ruído adicional faz com que a função de saídas medidas (pontos negros) se desvie de uma linha reta. A função y = f (x) pode ser modelada por uma rede neural de avanço. A rede com um grande número de pesos pode ser ajustada aos dados medidos com erro zero. Seu comportamento é mostrado como a curva vermelha passando por todos os pontos negros. No entanto, esta curva vermelha não tem nada a ver com a função linear original y = b * x (verde). Quando esta rede sobrecarregada é usada para prever valores futuros da função y (x), isso resultará em grandes erros devido à aleatoriedade do ruído adicional.

Indicador de rede neural Forex.
Para alcançar o sucesso neste mercado, você precisa estar pensando no futuro. Ao conversar com veteranos de risco, você saberá quanto ênfase se debruçou na previsão dos preços das moedas. De muitas maneiras, parece certo. O Forex é, depois de toda troca de moedas, e, para negociá-los corretamente, você precisa saber como se comportar de presente e como eles estarão nos próximos tempos. Um bom caminho a seguir seria usar o indicador de rede neural Forex.
Os especialistas acreditam que é realmente bom em prever os próximos movimentos de preços!
Este indicador é conhecido por sua previsão financeira precisa e também na representação de padrões de sistemas não-lineares. Alguns especialistas & rsquo; estado - de muitas maneiras, o mercado Forex é uma configuração não-linear que é assustadora para decifrar.
No entanto, esses especialistas também opinam - o mercado também traz padrões específicos que podem ser colocados em estratégias e decisões comerciais. Todas essas teorias e métodos que os comerciantes usam para identificar os padrões de preços são evidência clara disso. E é por isso que eles têm muita confiança no Forex indicador neural.
Um briefing esclarecido sobre este instrumento comercial de rede neural:
Este indicador hospeda um modo alterável consistindo de várias camadas, nomeadamente a entrada, a saída e as camadas ocultas. Mostrando compatibilidade adequada com MetaTrader 4, este indicador prevê preços abertos do futuro.
Assuma um exemplo: você tem seu par de moedas como GBP e USD, e você inclui esse indicador em seu gráfico comercial. Você verá que esse indicador de rede neural divide três curvas distintas nas tabelas, cada uma com sua própria cor diferenciadora.
&touro; As curvas vermelhas indicam as previsões de preços cambiais do futuro.
&touro; As curvas de cor preta mostram esses preços abertos de treinamento prévios utilizados como resultados anteriores.
&touro; Por último, aqueles com curvas azuis implicam a saída de rede existente.
Como funciona a coleta de dados?
Usuários anteriores afirmam que o primeiro passo é reunir informações com base nas quais sua estrutura de negociação se formará. Mas, como não é possível acumular tais massas de dados, faça isso em segmentos separados.
Cada um desses segmentos que incorporam vários setores de barras por comerciantes está disponível. Estas coleções de barras são sobre a barra a seguir e são conhecidas como a barra futura. Cada uma dessas informações, é coletada em uma folha de cálculo e indica o Open, Close, High e Low.
Esses dados são importados dentro de indicadores de divisas da rede neural e oferecem sugestões para selecionar aquele que você pretende usar. Se você estiver procurando por preços abertos, você pode personalizar apenas as entradas de dados Open. Dependendo do tipo de saída que você deseja usar, você pode configurá-lo e começar sua prática comercial.
É um pouco confuso se você está ouvindo sobre isso pela primeira vez. Mas, quando você realmente usá-lo para algumas negociações, você entenderá que é realmente bastante interessante e divertido de trabalhar.
O fato de esse indicador de rede neural forex lhe fornecer previsões de preços precisas o tempo todo é um grande ponto positivo. E de muitas maneiras, esse recurso em si é o que poderia fazer a diferença entre ganhar e perder.
O conteúdo deste artigo reflete a opinião do autor e não reflete necessariamente a posição oficial do LiteForex. O material publicado nesta página é fornecido apenas para fins informativos e não deve ser considerado como provisão de consultoria de investimento para efeitos da Diretiva 2004/39 / CE.
Postagens recentes:
24 de outubro de 2017 9:40:14 PM.
Ao negociar, você deve ter encontrado flechas e triângulos engraçados, bem sobre seus padrões de castiçal. E sem conhecimento sobre isso, a primeira pergunta.
24 de outubro de 2017 9:33:50 PM.
O mundo Forex está ganhando popularidade de forma transcendente em cada fase passageira. A natureza expansiva deste empreendimento, é de mais de US $ 5 trilhões de rotas e cardina.
24 de outubro de 2017 9:29:19 PM.
Entre todos os benefícios que o download gratuito do preditor do indicador Forex tem, um dos mais importantes é melhor comerciante em menos tempo. Considerando a situação o.
Neste risco de moeda, existem 2 tipos de situações de mercado que um comerciante sempre.
Simplesmente falando formas de envelope com algumas linhas de média móvel. Mais distintamente.
Obtenha acesso aos materiais exclusivos e ferramentas analíticas adicionais da Claws & Horns.
Caros comerciantes! Acompanhe o nosso canal Telegram e obtenha acesso a um pacote analítico eficaz diariamente entregue por verdadeiros especialistas:
- análises e previsões analíticas únicas;
- análise técnica, fundamental, onda;
- Opiniões de especialistas e materiais de treinamento.
Este site usa cookies para aprimorar sua experiência. Ao continuar navegando no site, você concorda com o uso de cookies.
Aviso de risco: a negociação nos mercados financeiros traz riscos. Os Contratos de Diferença (CFDs) são produtos financeiros complexos que são negociados na margem. Trading CFDs traz um alto nível de risco, uma vez que a alavancagem pode funcionar tanto para sua vantagem quanto para sua desvantagem. Como resultado, os CFDs podem não ser adequados para todos os investidores porque você pode perder todo seu capital investido. Você não deve arriscar mais do que está preparado para perder. Antes de decidir comercializar, você precisa garantir que compreenda os riscos envolvidos levando em consideração seus objetivos de investimento e nível de experiência. Clique aqui para obter nossa Divulgação de risco completa.
LiteForex Investments Limited registrado nas Ilhas Marshall (número de registro 63888) e regulamentado de acordo com a Lei das Sociedades Comerciais das Ilhas Marshall. Endereço da empresa: Ajeltake Road, Ajeltake Island, Majuro, Marshall Islands MH96960. E-mail: clientes @ liteforex.
A Liteforex Investments Limited não fornece serviços aos residentes dos EUA, Israel, Bélgica e Japão.

Seu acesso a este site foi limitado.
Seu acesso a este serviço foi temporariamente limitado. Por favor, tente novamente em alguns minutos. (Código de resposta HTTP 503)
Motivo: O acesso da sua área foi temporariamente limitado por motivos de segurança.
Nota importante para os administradores do site: se você é o administrador deste site, note que seu acesso foi limitado porque você quebrou uma das regras de bloqueio avançadas do Wordfence. A razão pela qual seu acesso foi limitado é: "O acesso da sua área foi temporariamente limitado por motivos de segurança". .
Se você é um administrador do site e foi bloqueado acidentalmente, insira seu e-mail na caixa abaixo e clique em "Enviar". Se o endereço de e-mail que você inserir pertence a um administrador conhecido do site ou a alguém configurado para receber alertas do Wordfence, enviaremos um e-mail para ajudá-lo a recuperar o acesso. Leia esta entrada de FAQ se isso não funcionar.
Gerado por Wordfence em Fri, 29 de dezembro de 2017 3:31:05 GMT.

Usando redes neurais no MetaTrader.
Introdução.
Muitos de vocês provavelmente consideraram a possibilidade de usar redes neurais em sua EA. Este assunto foi muito quente especialmente após 2007 Automated Trading Championship e a vitória espetacular de Melhor com seu sistema baseado em redes neurais. Muitos fóruns na internet foram inundados com tópicos relacionados a redes neurais e negociação Forex. Infelizmente, escrever a implementação nativa do MQL4 do NN não é fácil. Isso requer algumas habilidades de programação e o resultado não seria muito eficiente, especialmente se você quiser testar seu resultado final no testador em um grande número de dados.
Neste artigo, vou mostrar-lhe como você pode usar a biblioteca de rede neural rápida Artificial (FANN) livremente disponível (em LGPL), em seu código MQL4, evitando certos obstáculos e limitações. Além disso, eu suponho que o leitor esteja familiarizado com as Redes Neurais Artificiais (ann) e a terminologia relacionada a este assunto, então eu me concentrei em aspectos práticos de usar a implementação particular de ann na linguagem MQL4.
Recursos da FANN.
Para entender completamente as possibilidades de implementação do FANN, é necessário familiarizar-se com sua documentação e as funções mais utilizadas. O uso típico do FANN é criar uma rede feedforward simples, treiná-la com alguns dados e executar. A rede criada e treinada pode então ser salva no arquivo e restaurada mais tarde para uso posterior. Para criar um ann tem que usar a função fann_create_standard (). Vamos ver sua sintaxe:
Onde num_layers representa o número total de camadas, incluindo a camada de entrada e de saída. O nnum e os seguintes argumentos representam o número de neurônios em cada camada começando com a camada de entrada e terminando com a camada de saída. Para criar uma rede com uma camada oculta com 5 neurônios, 10 entradas e 1 saída, seria necessário chamá-lo da seguinte maneira:
Uma vez que o ann é criado, a próxima operação seria treiná-lo com alguns dados de entrada e saída. O método de treinamento mais simples é o treinamento incremental que pode ser alcançado pela seguinte função:
Esta função leva o ponteiro para struct fann retornado anteriormente pelo fann_create_standard () e o vetor de dados de entrada e o vetor de dados de saída. Os vetores de entrada e saída são de matriz do tipo fann_type. Esse tipo é, na verdade, um tipo duplo ou flutuante, dependendo da forma como o FANN é compilado. Nesta implementação, os vetores de entrada e saída serão matrizes de duplo.
Uma vez que o ann é treinado, o próximo recurso desejado seria executar essa rede. A função que implementa é definida como segue:
Esta função leva o ponteiro para struct fann que representa a rede criada anteriormente e um vetor de entrada do tipo definido (matriz dupla). O valor retornado é uma matriz vetorial de saída. Esse fato é importante, pois, para uma rede de utput, nós sempre conseguimos uma matriz de elementos com o valor de saída em vez do próprio valor de saída.
Infelizmente, a maioria das funções da FANN usam um ponteiro para uma estrutura fann que representa o ann que não pode ser processado diretamente pelo MQL4, que não suporta estruturas como tipos de dados. Para evitar essa limitação, temos que encerrar isso de alguma forma e ocultar do MQL4. O método mais fácil é criar uma matriz de ponteiros struct fann segurando os valores apropriados e referir-se a eles com um índice representado por uma variável int. Desta forma, podemos substituir o tipo de variável não suportado com o suportado e criar uma biblioteca wrapper que pode ser facilmente integrada com o código MQL4.
Envolvendo o FANN ao redor.
Quanto ao meu melhor conhecimento, o MQL4 não suporta funções com lista de argumentos variáveis, então temos que lidar com isso também. Por outro lado, se a função C (do comprimento dos argumentos variáveis) é chamada com muitos argumentos, nada de errado acontece, então podemos assumir um número máximo fixo de argumentos na função MQL4 passada para a biblioteca C. A função de invólucro resultante seria a seguinte:
Nós mudamos o fann_ principal com f2M_ (que significa FANN TO MQL), o número de argumentos estático usado (4 camadas) e o valor de retorno agora é um índice para a matriz interna de anns que contém os dados de estrutura fann exigidos pelo FANN para operar. Desta forma, podemos chamar facilmente essa função do código MQL.
O mesmo vale para:
Por último, mas não menos importante, é o fato de que você deve destruir seu ann criado pela chamada para:
Para liberar alças de anéis, você deve destruir redes em ordem inversa do que foram criadas criadas. Alternativamente, você poderia usar:
No entanto, tenho certeza de que alguns de vocês talvez preferem salvar sua rede treinada para uso posterior com:
É claro que a rede salva pode ser carregada mais tarde (ou recriada) com:
Uma vez que conhecemos as funções básicas, podemos tentar usar isso em nossa EA, mas primeiro precisamos instalar o pacote Fann2MQL.
Instalando o Fann2MQL.
Para facilitar o uso deste pacote, criei o instalador msi que contém todo o código-fonte mais as bibliotecas pré-compiladas e o arquivo de cabeçalho Fann2MQL. mqh que declara todas as funções do Fann2MQL.
O procedimento de instalação é bastante direto. Primeiro você está informado de que o Fann2MQL está sob licença GPL:
Instalação do Fann2MQL, passo 1.
Em seguida, escolha a pasta para instalar o pacote. Você pode usar o programa padrão Files \ Fann2MQL \ ou instalar diretamente em seu diretório Meta Trader \ experts \. O mais tarde colocará todos os arquivos diretamente em seus lugares, caso contrário você terá que copiá-los manualmente.
Instalação do Fann2MQL, etapa 2.
O instalador coloca os arquivos nas seguintes pastas:
Se você optar por instalar na pasta Fann2MQL dedicada, copie o conteúdo de suas subpastas de inclusão e bibliotecas no diretório apropriado do Meta Trader.
O instalador também instala a biblioteca FANN na pasta de bibliotecas do sistema (Windows \ system32 na maioria dos casos). A pasta src contém todo o código-fonte do Fann2MQL. Você pode ler o código-fonte que é uma documentação final, se você precisar de mais informações sobre os internos. Você também pode melhorar o código e adicionar recursos adicionais, se desejar. Eu encorajo você a me enviar seus patches se você implementar algo interessante.
Usando redes neurais em sua EA.
Uma vez que o Fann2MQL esteja instalado, você pode começar a escrever seu próprio EA ou indicador. Existe uma grande quantidade possível de uso de NN. Você pode usá-los para prever futuros movimentos de preços, mas a qualidade de tais previsões e a possibilidade de tirar proveito real disso é duvidosa. Você pode tentar escrever sua própria estratégia usando técnicas de Reforço de Aprendizagem, diga um Q-Learning ou algo parecido. Você pode tentar usar o NN como um filtro de sinal para sua EA heurística ou combinar todas essas técnicas além do que você deseja. Você é limitado apenas por sua imaginação.
Aqui vou mostrar-lhe um exemplo de usar o NN como um filtro simples para os sinais gerados pelo MACD. Não considere isso como uma EA valiosa, mas como um exemplo de aplicação do Fann2MQL. Durante a explicação da maneira como o exemplo EA: NeuroMACD. mq4 funciona, vou mostrar-lhe como o Fann2MQL pode ser efetivamente usado no MQL.
A primeira coisa para cada EA é a declaração de variáveis ​​globais, define e inclui a seção. Aqui está o início do NeuroMACD contendo essas coisas:
O comando include diz para carregar o arquivo de cabeçalho Fann2MQL. mqh contendo a declaração de todas as funções Fann2MQL. Depois disso, todas as funções do pacote Fann2MQL estão disponíveis para uso no script. A constante ANN_PATH define o caminho para armazenar e carregar arquivos com redes FANN treinadas. Você precisa criar essa pasta, ou seja, C: \ ANN. A constante NAME contém o nome desta EA, que é usado mais tarde para carregar e salvar arquivos de rede. Os parâmetros de entrada são bastante óbvios e aqueles que não são serão explicados posteriormente, bem como variáveis ​​globais.
O ponto de entrada de cada EA é a função init ():
Primeiro, verifica se a EA é aplicada no período de período de tempo correto. A variável AnnInputs contém o número de entradas de rede neural. Como usaremos 3 conjuntos de argumentos diferentes, queremos que seja divisível por 3. AnnPath é calculado para refletir o EA NAME e o MagicNumber, que é calculado a partir dos argumentos de entrada SlowMA, FastMA e SignalMA que são usados ​​mais tarde para a sinalização do indicador MACD . Uma vez que conhece o AnnPath, a EA tenta carregar redes neurais usando a função ann_load () que descreverei abaixo. A metade das redes carregadas destina-se à filtragem de posição longa e a outra metade é para calções. A variável AnnsLoaded é usada para indicar o fato de que todas as redes foram inicializadas corretamente. Como você provavelmente notou este exemplo, a EA está tentando carregar várias redes. Eu duvido que seja realmente necessário neste aplicativo, mas queria mostrar o potencial total do Fann2MQL, que está lidando com múltiplas redes ao mesmo tempo e pode processá-las em paralelo, aproveitando múltiplos núcleos ou CPUs. Para tornar isso possível, a Fann2MQL está aproveitando a tecnologia Intel® Threading Building Blocks. A função f2M_parallel_init () é usada para inicializar essa interface.
Aqui está a maneira como eu costumava inicializar as redes:
Como você pode ver se o f2M_create_from_file () falha, o que é indicado pelo valor de retorno negativo, a rede é criada com a função f2M_create_standard () com argumentos que indicam que a rede criada deve ter 4 camadas (incluindo entrada e saída), entradas AnnInput, AnnInput neurônios na primeira camada escondida, AnnInput / 2 + 1 neurônios na 2ª camada escondida e 1 neurônio na camada de saída. f2M_set_act_function_hidden () é usado para definir a função de ativação de camadas ocultas para SIGMOID_SYMMETRIC_STEPWISE (consulte a documentação do Fann de fann_activationfunc_enum) e o mesmo se aplica à camada de saída. Depois, há a chamada para f2m_randomize_weights () que é usada para inicializar os pesos de conexão do neurônio dentro da rede. Aqui usei o intervalo de & lt; -0.4; 0,4 & gt; mas você pode usar qualquer outro dependendo da sua aplicação.
Neste ponto, você provavelmente notou a função debug () que usei algumas vezes. É um dos métodos mais simples para alterar o nível detalhado de sua EA. Juntamente com ele e o parâmetro de entrada DebugLevel, você pode ajustar a forma como seu código está produzindo a saída de depuração.
Se o primeiro argumento da função debug (), o nível de depuração é superior ao DebugLevel, a função não produz qualquer saída. Se for menor, a cadeia de texto será impressa. Se o nível de depuração for 0, a string "ERROR:" será anexada ao início. Desta forma, você pode dividir o debug produzido pelo seu código em vários níveis. Os mais importantes são provavelmente erros, então eles são atribuídos ao nível 0. Eles serão impressos, a menos que você baixe seu DebugLevel para abaixo de 0 (o que não é recomendado). No nível 1, serão impressas algumas informações importantes, como a confirmação do carregamento ou criação de rede bem sucedida. No nível 2 ou superior, a importância da informação impressa está diminuindo gradualmente.
Antes da explicação detalhada da função start (), que é bastante longa, preciso mostrar-lhe mais algumas funções destinadas a preparar a entrada de rede e executar as redes reais:
A função ann_prepare_input () é usada para preparar o nome de entrada para as redes (assim, o nome). O objetivo disso é bastante direto, mas esse é o ponto em que devo lembrar que os dados de entrada devem ser devidamente normalizados. Não há uma normalização sofisticada neste caso, eu simplesmente usei o MACD principal e os valores de sinal que nunca excedem o alcance desejado nos dados contabilizados. No exemplo real, você provavelmente deve prestar mais atenção a esta questão. Como você provavelmente pode suspeitar de escolher os argumentos de entrada apropriados para a entrada de rede, codificá-lo, decompor e normalizar é um dos fatores mais importantes no processamento da rede neural.
Como mencionei antes, o Fann2MQL possui a capacidade de estender a funcionalidade normal do MetaTrader, que é o processamento paralelo de várias redes neurais. O argumento global Parallel controla esse comportamento. A função run_anns () executa todas as redes inicializadas e obtém as saídas delas e armazena na matriz AnnOutput []. A função anns_run_parallel é responsável por lidar com o trabalho da maneira multithread. Ele chama o f2m_run_parallel () que leva como primeiro argumento o número de redes a processar, o segundo argumento é uma matriz contendo alças para todas as redes que deseja executar fornecendo o vetor de entrada como um terceiro argumento. Todas as redes devem ser executadas nos mesmos dados de entrada. Obter o resultado da rede é feito por várias chamadas para f2m_get_output ().
Agora vejamos a função start ():
Vou descrevê-lo brevemente, pois é bem comentado. O trade_allowed () verifica se é permitido o comércio. Basicamente, verifica a variável AnnsLoaded indicando que todos os anns foram inicializados corretamente e, em seguida, verifica o equilíbrio da conta mínima do período do período de tempo apropriado e, no final, permite trocar apenas o primeiro tic de uma nova barra. As duas funções seguintes que são usadas para preparar a entrada de rede e executar o processamento da rede foram descritas apenas algumas linhas acima. Em seguida, calculamos e colocamos em variáveis ​​para posteriormente processar os valores MACD do sinal e da linha principal para a última barra de acumulação e a anterior. A barra atual é omitida, pois não é acumulada ainda e provavelmente será redrapped. O SellSignal e o BuySignal são calculados de acordo com o sinal MACD e crossover da linha principal. Ambos os sinais são usados ​​para o processamento de posição longa e curta, que são simétricos, então eu descreverei apenas o caso por longos.
A variável LongTicket mantém o número do ticket da posição atualmente aberta. Se for igual a -1, nenhuma posição está aberta, então, se o BuySignal estiver configurado, isso pode indicar boa oportunidade para abrir uma posição longa. Se a variável NeuroFilter não estiver configurada, a posição longa é aberta e esse é o caso sem a rede neural de filtragem de sinais - a ordem é enviada para comprar. Neste ponto, a variável LongInput deve lembrar o InputVector preparado por ann_prepare_input () para uso posterior.
Se a variável LongTicekt conter o número de ticket válido, a EA verifica se esta é ainda aberta ou foi fechada pelo StopLoss ou TakeProfit. Se a ordem não for fechada, nada acontece, no entanto, se a ordem for fechada, o vetor train_output [], que possui apenas um otput, é calculado para manter o valor de -1 se a ordem foi fechada com perda ou 1 se a ordem foi fechada com lucro. Esse valor é passado para a função ann_train () e todas as redes responsáveis ​​pela manipulação da posição longa são treinadas com ela. Como o vetor de entrada, a variável LongInput é usada, que mantém o InputVector no momento da abertura da posição. Desta forma, a rede ensina qual sinal traz lucros e qual não é.
Depois de ter uma rede treinada, mudar o NeuroFilter para verdadeiras filtragens de rede. O ann_wise_long () está usando a rede neural calculada como uma média de valores retornados por todas as redes destinadas a lidar com a posição longa. O parâmetro Delta é usado como um valor limiar que indica que o sinal filtrado é válido ou não. Como muitos outros valores obtidos através do processo de otimização.
Agora, uma vez que sabemos como funciona, vou mostrar-lhe como ele pode ser usado. O par de teste é, naturalmente, EURUSD. Utilizei os dados da Alpari, convertidos para o período M5. Utilizei o período de 2007.12.31 a 2009.01.01 para treinamento / otimização e 2009.01.01-2009.03.22 para fins de teste. Na primeira execução, tentei obter os valores mais rentáveis ​​para o argumento StopLoss, TakeProfit, SlowMA, FastMA e SignalMA, que eu codifiquei no arquivo NeuroMACD. mq4. O NeuroFIlter foi desligado, bem como SaveAnn, o AnnsNumber foi configurado para 0 para evitar o processamento neural. Usei o algoritmo genético para o processo de otimização. Uma vez que os valores foram obtidos, o relatório resultante foi o seguinte:
Relate os dados de treinamento após a otimização básica dos parâmetros.
Como você pode ver, executei esta EA na mini conta com o tamanho do Lote de 0,01 e o saldo inicial de 200. No entanto, você pode ajustar esses parâmetros de acordo com as configurações ou preferências da sua conta.
Neste ponto, temos bastante lucrativos e perdemos negociações para que possamos ativar o SaveAnn e configurar o AnnsNumber para 30. Uma vez feito, então eu executei o testador mais uma vez. O resultado foi exatamente o mesmo com a exceção do fato de que o processo foi muito mais lento (como resultado do processamento neural) e a pasta C: \ ANN foi preenchida com as redes treinadas como mostrado na imagem abaixo. Verifique se a pasta C: \ ANN existiu antes dessa execução!
A pasta C: \\ ANN \\.
Uma vez que temos redes treinadas, é hora de testar como ela se comporta. Primeiro, tentaremos os dados de treinamento. Mude o NeuroFilter para true e SaveAnn para false e inicie o testador. O resultado obtido é mostrado abaixo. Observe que ele pode variar ligeiramente para você, pois há alguma aleatoriedade dentro de redes em pesos de conexão de neurônio fornecidos no processo de inicialização de rede (neste exemplo eu usei uma chamada explícita para f2M_randomize_weights () dentro de ann_load ()).
Resultado obtido em dados de treinamento com filtragem neural de sinal ativada.
O lucro líquido é pouco maior (20,03 versus 16,92), mas o fator de lucro é muito maior (1,25 versus 1,1). O número de negócios é muito menor (83 vs 1188) e o número médio de perdas consecutivas é reduzido de 7 para 2. No entanto, isso só mostra que a filtragem de sinais neurais está funcionando, mas não diz nada sobre como ele opera em dados que não foram usados ​​para durante o treino. O resultado obtido no período de teste (2009.01.01 - 2009.30.28) é mostrado abaixo:
Resultado obtido a partir de dados de teste com filtragem neural ativada.
O número de transações realizadas é bastante baixo e é difícil dizer a qualidade desta estratégia, mas eu não vou mostrar-lhe como escrever a melhor EA rentável, mas para explicar como você poderia usar redes neurais no seu código MQL4. O efeito real do uso de redes neurais neste caso só pode ser visto quando comparados os resultados da EA em dados de teste com o NeuroFilter ativados e desativados. Abaixo está o resultado obtido a partir do período de dados de teste sem filtragem de sinal neural:
Resultados de dados de teste sem filtragem neural.
A diferença é bastante óbvia. Como você pode ver, a filtragem de sinal neural transformou a EA perdedora em uma lucrativa!
Conclusão.
Espero que você tenha aprendido com este artigo como usar redes neurais no MetaTrader. Com a ajuda do pacote simples, gratuito e de código aberto Fann2MQL, você pode facilmente adicionar a camada de rede neural a praticamente qualquer Consultor Especialista ou começar a escrever sua própria, que seja total ou parcialmente baseada em redes neurais. O recurso multithreading exclusivo pode acelerar seu processamento muitas vezes, dependendo do número de seus núcleos de CPU, especialmente ao otimizar determinados parâmetros. Em um caso, reduziu a otimização do meu processamento de EA baseado em reforço de aproximadamente 4 dias para "apenas" 28 horas em uma CPU Intel de 4 núcleos.
Durante a redação deste artigo, decidi colocar o Fann2MQL em seu próprio site: fann2mql. wordpress /. Você pode encontrar a versão mais recente do Fann2MQL e, possivelmente, todas as versões futuras, bem como a documentação de todas as funções. Eu prometo manter este software sob a licença GPL para todos os lançamentos, então, se você me enviar comentários, solicitações de recursos ou patches que eu encontrei interessantes, certifique-se de encontrar os próximos lançamentos.
Observe que este artigo mostra apenas o uso muito básico do Fann2MQL. Como este pacote não é muito mais do que o FANN, você pode usar todas as ferramentas projetadas para gerenciar redes FANN, como:
E há muito mais sobre a FANN na página inicial da Fast Artificial Neural Network Library: leenissen. dk/fann/!
Post Scriptum.
Depois de escrever este artigo, encontrei um erro insignificante no NeuroMACD. mq4. A função OrderClose () para posição curta foi alimentada com um número de ticket de posição longo. Isso resultou em uma estratégia distorcida que era mais provável para manter shorts e longs longos:
Na versão correta do script, reparei esse erro e removi a estratégia OrderClose (). Isso não alterou a imagem geral da influência da filtragem neural na EA, mas a forma da curva de equilíbrio era bastante diferente. Você pode encontrar ambas as versões desta EA anexadas a este artigo.

Indicador Forex da rede neuronal
Estratégias de Stop-and-Reverse da Rede Neural Híbrida para Forex.
por Michael R. Bryant.
As redes de neurônios têm sido utilizadas 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 de negociação padrão, baseadas em indicadores. Uma das críticas foi que as estratégias de negociação baseadas na rede neural tendem a ser excessivas e, portanto, não funcionam bem em novos dados. Uma possível solução para este problema é combinar redes neurais com lógica de estratégia baseada em regras para criar um tipo de estratégia híbrida. Este artigo mostrará como isso pode ser feito usando o Adaptrade Builder.
Em particular, este artigo irá ilustrar o seguinte:
Combinando rede neural e lógica baseada em regras para entradas de comércio.
Segmentação múltipla de plataformas simultaneamente (MetaTrader 4 e TradeStation)
Desenvolvendo uma estratégia com lógica de parada e inversa assimétrica.
Usando dados forex intraday.
Será utilizada uma abordagem de dados de três segmentos, com o terceiro segmento usado para validar as estratégias finais. O código de estratégia resultante para MetaTrader 4 e TradeStation será mostrado, e será demonstrado que os resultados de validação são positivos para cada plataforma.
Redes Neurais como Filtros de Entrada Comercial.
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 negociação, uma rede neural geralmente é usada de duas maneiras: (1) como previsão de movimento futuro de preços, ou (2) como indicador ou filtro para negociação. Aqui, será usado como indicador ou filtro comercial.
Como um indicador, uma rede neural age como uma condição ou filtro adicional que deve ser satisfeito antes que uma troca possa ser inserida. As entradas para a rede normalmente são outros indicadores técnicos, tais como dinâmica, estocástica, ADX, médias móveis, etc., bem como preços e combinações dos anteriores. 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 limiar, como 0,5 e uma entrada curta, se a saída for menor ou igual ao negativo do limite; por exemplo, -0,5. Esta condição seria adicional a quaisquer condições de entrada existentes. Por exemplo, se houvesse uma condição de entrada longa, 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 normalmente seria responsável por escolher as entradas e a topologia da rede e para "treinamento" a rede, que determina os melhores valores de pesos. Como será mostrado abaixo, o Adaptrade Builder executa essas etapas automaticamente como parte do processo de compilação evolutiva no qual o software se baseia. Usar a rede neural como um filtro de comércio permite que ele seja facilmente combinado com outras regras para criar uma estratégia de negociação híbrida, que combine as melhores características das abordagens tradicionais baseadas em regras e as vantagens das redes neurais. Como um exemplo simples, o Builder pode combinar uma regra de cruzamento média móvel com uma rede neural de modo que uma posição longa seja tomada quando a média móvel rápida cruza acima da média lenta e a saída da rede neural está em ou acima do seu limite.
Estratégias de negociação Stop-and-Reverse.
Uma estratégia de negociação de parada e reversa é uma que está sempre no mercado, seja longa ou curta. Estritamente falando, "stop-and-reverse" significa que você inverte o comércio quando sua ordem de parada é atingida. No entanto, uso-o como uma mão curta para qualquer estratégia de negociação que reverte 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 pedidos de parada. Você pode entrar e reverter usando pedidos de mercado ou limite também. Também não é necessário que cada lado use a mesma lógica ou mesmo o mesmo tipo de ordem. Por exemplo, você pode entrar em um período longo (e sair curto) em uma ordem de parada e digitar curto (e sair por muito tempo) em uma ordem de mercado, usando diferentes regras e condições para cada entrada / saída. Este seria um exemplo de uma estratégia de parada e inversão assimétrica.
A principal vantagem de uma estratégia de parar e reverter é que, sempre no mercado, você nunca perca nenhuma grande jogada. Outra vantagem é a simplicidade. Quando existem regras e condições separadas para entrar e sair de negócios, há mais complexidade e mais que podem dar errado. A combinação de entradas e saídas significa que há menos decisões de tempo, o que pode significar menos erros.
Por outro lado, pode-se argumentar que as melhores condições para sair de um comércio raramente são as mesmas para entrar na direção oposta; que entrar e sair trades são decisões inerentemente separadas que, portanto, deveriam empregar regras e lógica separadas. Outra desvantagem potencial de estar sempre no mercado é que a estratégia irá trocar todo o intervalo 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 mais seletivamente ou que saem ao final do dia podem minimizar o impacto das brechas de abertura.
Uma vez que o objetivo é construir uma estratégia forex, o MetaTrader 4 (MT4) é uma escolha óbvia para a plataforma de negociação, dado que o MetaTrader 4 foi projetado principalmente para o forex e é amplamente utilizado para comercializar esses mercados (veja, por exemplo, MetaTrader vs. TradeStation : Uma comparação de linguagem). No entanto, nos últimos anos, a TradeStation segmentou os mercados de divisas de forma muito mais agressiva. Dependendo do seu volume de negociação e / ou nível da conta, é possível negociar os mercados de divisas através da TradeStation sem incorrer em taxas de plataforma ou pagar comissões. Spreads são supostamente apertado com boa liquidez nos principais pares de divisas. Por estas razões, ambas as plataformas foram direcionadas para este projeto.
Várias questões surgem ao direcionar várias plataformas simultaneamente. Primeiro, os dados podem ser diferentes em diferentes plataformas, com diferenças em fusos horários, cotações de preços para algumas barras, volume e faixas 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 das diferenças nos dados.
As configurações de dados usadas no Builder são mostradas abaixo na Fig. 1. Como se pode inferir da tabela Market Data na figura, o mercado de Forex Euro / dólar foi segmentado (EURUSD) com um tamanho de barra de 4 horas (240 minutos). Outros tamanhos de barras ou mercados teriam servido também. 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 nº 2), de modo que o mesmo intervalo de datas foi usado na obtenção de séries de dados equivalentes da TradeStation (data series # 1). 80% dos dados foram utilizados para construção (combinado na amostra e "fora da amostra"), com 20% (6/20/14 a 2/10/15) reservado para validação. 80% dos 80% originais foram então ajustados para "na amostra" com 20% definido para "out-of-sample", & quot; como mostrado na Fig. 1. O spread de oferta / solicitação foi fixado em 5 pips, e os custos de negociação de 6 pips ou US $ 60 por lote completo (100.000 ações) foram assumidos por rodada. Ambas as séries de dados foram incluídas na compilação, conforme indicado pelas marcas de seleção na coluna da esquerda da tabela de dados do mercado.
Figura 1. Configurações de dados do mercado para construir uma estratégia forex para MetaTrader 4 e TradeStation.
Outro problema potencial ao direcionar várias plataformas é que o Builder foi projetado para duplicar a forma como cada plataforma suportada calcula seus indicadores, o que pode significar que os valores dos indicadores serão diferentes dependendo da plataforma selecionada. Para evitar esta possível fonte de discrepância, todos os indicadores que avaliem de forma diferente 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 estocástico D.
Todos os outros indicadores que estão disponíveis para ambas as plataformas são calculados da mesma maneira em ambas as plataformas. O TradeStation inclui todos os indicadores que estão 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 Builder. Isso eliminará automaticamente qualquer indicador do conjunto de compilação que não esteja disponível para MT4, o que deixará os indicadores disponíveis em ambas as plataformas. Além disso, como notei diferenças nos dados de volume obtidos de cada plataforma, removi todos os indicadores dependentes do volume do conjunto de compilação. Por fim, o indicador do horário 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 utilizados no conjunto de compilação é mostrada ordenada por se o indicador foi ou não considerado pelo processo de compilação ("Considere" coluna). Os indicadores removidos da consideração pelos motivos discutidos acima são mostrados no topo da lista. Os indicadores restantes, começando com "Simple Mov Ave", foram todos parte do conjunto de compilação.
Figura 2. Seleções de indicadores no Builder, mostrando os indicadores removidos do conjunto de compilação.
As opções de avaliação usadas no processo de compilação são mostradas na Fig. 3. Conforme discutido, o MetaTrader 4 foi selecionado como a escolha de saída do código. Depois que as estratégias são criadas no Builder, 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, que também reescreverão o código em qualquer idioma selecionado. Esse recurso foi usado para obter o código da TradeStation para a estratégia final depois que as estratégias foram criadas para o MetaTrader 4.
Figura 3. Opções de avaliação no Builder para a estratégia forex EURUSD.
Para criar estratégias de parada e reversão, todos os tipos de saída foram removidos do conjunto de compilação, conforme mostrado abaixo na Fig. 4. Todos os três tipos de pedidos de entrada - mercado, parada e limite - foram deixados como "considerar" , o que significa que o processo de compilação poderia considerar qualquer um deles durante o processo de compilação.
Figura 4. Tipos de ordem selecionados no Builder 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 "Incluir uma rede neural nas condições de entrada" na guia Opções de Estratégia, como mostrado abaixo na Fig. 5. As configurações de rede neural foram deixadas em seus padrões. Como parte da lógica stop-and-reverse, a opção Market Sides foi definida para Long / Short e a opção para "Wait for exit before enter new trade". estava desmarcado. O último é necessário para habilitar a ordem de entrada para sair da posição atual em uma inversã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 baseadas em regras e neurais.
A natureza evolutiva do processo de construção no Builder é orientada pela aptidão, que é calculada a partir dos objetivos e condições definidos na guia Metrics, conforme mostrado abaixo na Figura 6. Os objetivos de construção foram mantidos simples: maximizando o lucro líquido e minimizando a complexidade, que recebeu um pequeno peso em relação ao lucro líquido. Mais ênfase foi colocada nas condições de construção, que incluíram o coeficiente de correlação e significância para a qualidade geral da estratégia, bem como as barras médias nos negócios e a quantidade de negócios.
Inicialmente, apenas as barras médias em negociações foram incluídas como condição de construção. No entanto, em algumas das construções iniciais, o lucro líquido foi favorecido ao longo do prazo comercial, de modo que a métrica do número de negociações foi adicionada. O intervalo especificado para o número de trades (entre 209 e 418) é equivalente ao comprimento médio de comércio entre 15 e 30 barras com base no número de barras no período de compilação. Como resultado, a adição desta métrica colocou mais ênfase no objetivo de longo prazo, o que resultou em mais membros da população com o intervalo desejado de comprimentos comerciais.
Figura 6. Construir objetivos e condições definidos na guia Métrica determinar como a aptidão é calculada.
As "condições para selecionar estratégias superiores" duplicar as condições de compilação, exceto que as principais condições de estratégias são avaliadas em toda a gama de dados (não incluindo o segmento de validação, que é separado), em vez de apenas ao longo do período de compilação, como é o caso das condições de construção. As principais condições de estratégias são usadas pelo programa para deixar de lado quaisquer estratégias que atendam a todas as condições em uma população separada.
As configurações finais são feitas na guia Configurações de Configuração, como mostrado abaixo na Figura 7. As opções mais importantes aqui são o tamanho da população, o número de gerações ea opção para redefinir com base no "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 uma quantidade razoável de tempo. O número de gerações foi baseado em quanto tempo levou durante algumas compilações preliminares para que os resultados começassem a convergir.
Figura 7. As opções de construção incluem o tamanho da população, o número de gerações e as opções para redefinir a população com base em "out-of-sample" desempenho.
A opção para & quot; Reset on Out-of-Sample (OOS) Performance & 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á redefinida se o "out-of-sample" O lucro líquido é inferior a US $ 20.000. Esse 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 compilação foi repetido a cada 30 gerações até parar manualmente. Esta é uma maneira de permitir que o programa identifique estratégias com base nas condições de Top Strategies durante um longo período de tempo. Periodicamente, a população Top Strategies pode ser verificada e o processo de compilação é cancelado quando são encontradas estratégias adequadas.
Observe que eu coloco "out-of-sample" entre citações. Quando o "fora da amostra" O período é usado para redefinir a população desta maneira, a "saída de amostra" O período não é mais verdadeiramente fora da amostra. Uma vez que esse período agora está sendo usado para orientar o processo de compilação, é efetivamente parte do período de exibição. É por isso que é aconselhável reservar um terceiro segmento para validação, conforme discutido acima.
Após várias horas de processamento e uma série de reconstruções automáticas, uma estratégia adequada foi encontrada na população Top Strategies. A curva de equidade comercial fechada é mostrada abaixo na Figura 8. A curva de equidade demonstra um desempenho consistente em ambos os segmentos de dados com um número adequado de negócios e, essencialmente, os mesmos resultados em ambas as séries de dados.
Figura 8. Curva de equidade de comércio fechado para a estratégia de paragem e reversão do EURUSD.
Para verificar a estratégia durante o período de validação, a data controlada na guia Mercados (veja a Fig. 1) foi alterada para a data final dos dados (2/11/2018) e a estratégia foi reavaliada selecionando Avaliar comando no menu Estratégia no Builder. Os resultados são mostrados abaixo na Fig. 9. Os resultados de validação na caixa vermelha demonstram que a estratégia mantida em dados não utilizados durante o processo de compilação.
Figura 9. Curva de equidade de comércio fechado para a estratégia de paragem e reversão do EURUSD, incluindo o período de validação.
A verificação final é ver como a estratégia realizada 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) das séries 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 guia 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 equidade de comércio fechado para a estratégia de paragem e reversão do 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 Mercados, a saída do código foi alterada para "TradeStation", "quot; 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, conforme esperado.
Figura 11. Curva de equidade de comércio fechado para a estratégia de paragem e reversão do EURUSD, incluindo o período de validação, para a TradeStation.
O código para ambas as plataformas é fornecido abaixo na Fig. 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-semana, a tendência (ZLTrend), o intraday high, osciladores (InvFisherCycle, InvFisherRSI), as bandas de Bollinger e o desvio padrão.
A natureza híbrida da estratégia pode ser vista diretamente na declaração de código (do código da TradeStation):
Se EntCondL e NNOutput & gt; = 0.5 então começarem.
Compre (& quot; EnMark-L & quot;); NShares compartilha a próxima barra no mercado;
A variável "EntCondL" representa as condições de entrada baseadas em regras, e "NNOuput & quot; é o resultado da rede neural. Ambas as condições devem 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 reversa do 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 de rede baseada em regras híbridas / neural para o EURUSD usando uma abordagem stop-and-reverse (sempre no mercado) com o Adaptrade Builder. Foi mostrado como o código da estratégia pode ser gerado para várias 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 se revertem de longo para curto e para trás foram descritas, e foi demonstrado que a estratégia resultante foi realizada positivamente em um segmento separado de validação de dados. Verificou-se também que a estratégia gerou resultados semelhantes com a opção de dados e código para cada plataforma.
Conforme discutido acima, a abordagem de parar e reverter tem várias desvantagens e pode não atrair a todos. No entanto, uma abordagem sempre no mercado pode ser mais atraente com os dados de divisas, porque os mercados de divisas são comercializados 24 horas por dia. Como resultado, não há lacunas de abertura de sessão e as ordens de negociação sempre estão ativas e disponíveis para reverter o comércio quando o mercado muda. The use of intraday data (4-hour bars) provided more bars of data for use in the build process but was otherwise fairly arbitrary in that the always-in-the-market nature of the strategy means that trades are carried overnight.
The build process was allowed to evolve different conditions for entering long and short, resulting in an asymmetric stop-and-reverse strategy. Despite the name, the resulting strategy enters both long and short trades on market orders, although market, stop, and limit orders were all considered by the build process independently for each side. In practice, reversing from long to short would mean selling short twice the number of shares at the market as the strategy was currently long; e. g., if the current long position was 100,000 shares, you would sell short 200,000 shares at market. Likewise, if the current short position was 100,000 shares, you would buy 200,000 shares at market to reverse from short to long.
A shorter price history was used than would be ideal. Nonetheless, the results were positive on the validation segment, suggesting the strategy was not over-fit. This supports the idea that a neural network can be used in a trading strategy without necessarily over-fitting the strategy to the market.
The strategy presented here is not intended for actual trading and was not tested in real-time tracking or trading. However, this article can be used as a template for developing similar strategies for the EURUSD or other markets. As always, any trading strategy you develop should be tested thoroughly in real-time tracking or on separate data to validate the results and to familiarize yourself with the trading characteristics of the strategy prior to live trading.
This article appeared in the February 2018 issue of the Adaptrade Software newsletter.
OS RESULTADOS DE DESEMPENHO HIPOTÉTICOS OU SIMULADOS TÊM CERTAS LIMITAÇÕES INERENTES. DESEJO UM REGISTRO DE DESEMPENHO REAL, OS RESULTADOS SIMULADOS NÃO REPRESENTAM A NEGOCIAÇÃO REAL. TAMBÉM, DESDE QUE OS NEGÓCIOS NÃO SEJAM REALMENTE EXECUTOS, OS RESULTADOS PODEM TENER SOB OU COMENTÁRIOS COMPLEMENTARES PARA O IMPACTO, SE HAVER, DE CERTOS FATORES DE MERCADO, TAL COMO FALTA DE LIQUIDEZ. PROGRAMAS DE NEGOCIAÇÃO SIMULADOS EM GERAL SÃO TAMBÉM SUJEITOS AO FATO QUE ESTÃO DESIGNADOS COM O BENEFÍCIO DE HINDSIGHT. NENHUMA REPRESENTAÇÃO ESTÁ FAZENDO QUE QUALQUER CONTA VÁ OU SEJA PROBABILITÁVEL PARA ALCANÇAR LUCROS OU PERDAS SIMILARES ÀOS MOSTRADOS.
Se você quiser ser informado de novos desenvolvimentos, novidades e ofertas especiais do Adaptrade Software, por favor, junte-se à nossa lista de e-mail. Obrigado.
Copyright © 2004-2018 Adaptrade Software. Todos os direitos reservados.

No comments:

Post a Comment