Encontrar um conjunto de indicadores para alimentar as entradas da rede neural. Discussão. Uma ferramenta para avaliar os resultados.

 

Saudações a todos os participantes e visitantes do fórum.


Quero oferecer a todos os interessados para discutir e buscar um conjunto de indicadores mais adequados para alimentar as entradas da rede neural.

A rentabilidade do neurônio em meu programa pode ser usada como uma ferramenta de estimativa, eu também posso apresentar o MQL4 Expert Advisor com um neurônio treinado. Dentro de limites razoáveis, é claro.


Eu tenho perseptron autoescrito (em java) com número arbitrário de camadas e neurônios em cada camada eu o treino com algoritmo genético da biblioteca JGAP (http://jgap.sourceforge.net/).

O número de neurônios na primeira camada é igual ao número de insumos e na segunda camada - arbitrariamente, na terceira camada 1 neurônio. O neurônio produz sinais comerciais (saída do neurônio >0,5 - compra, saída do neurônio<-0,5 - venda). Os sinais são processados por um testador comercial auto-escrito que, baseado no sinal do neurônio, inverte a posição (ou entra no mercado, se nenhuma posição for aberta). A função alvo do algoritmo genético é o lucro resultante. Tal abordagem, em minha opinião, nos permite minimizar todos os erros possíveis e trazer o treinamento o mais próximo possível da negociação real. Exporto a rede treinada para a MQL4 Expert Advisor e a testei no testador de estratégia da MT4. Eu formo as entradas para a rede neural no indicador MT4 e as descarrego em um arquivo. O indicador e o Expert Advisor são formados pelo programa e são escritos nos arquivos (menos confusão e menos erros).

Para mim, as redes de 4 camadas não dão mais lucro (geralmente menos) do que as de 3 camadas, mas levam mais tempo para treinar.
Treinei uma rede 8-10-1 por 4 dias em um Core2 Quadro 2.3. 10 fios paralelos com diferentes populações iniciais competindo para ver "quem tem mais lucro". 4 dias passaram cerca de 4000 gerações com 200 cromossomos em uma população. O lucro máximo foi obtido nas primeiras 2000 gerações, além disso, o lucro não aumentou. O maior aumento de lucro foi nas primeiras 100 gerações.

Eu verifiquei os resultados desta rede no testador de estratégia MT4. Descobri que a rede quase nunca alcança o limiar +-0,5 e o sinal comercial não é acionado. O motivo não é claro, ou seja, eu verifiquei a exatidão da exportação para MQL4 (com os mesmos valores de entradas em Java e MQL4 a rede dá os mesmos valores, talvez todo o fluxo de entrada devesse ter sido submetido, e não alguns valores aleatórios). Baixei o limiar para 0,4 e parece funcionar... Depois descobri que o Expert Advisor não pode reverter uma posição de uma só vez. Meu consultor especializado fechará a barra e o preço tem tempo para se mover antes da próxima barra. No período de aprendizagem (estou aprendendo em 1-08-09 a 1-10-09) o lucro na MT4 foi menor do que no meu testador, no período de testes na MT4 (1-10-09 a 1-11-09), a rede foi rentável. Olhei para os pontos de entradas não rentáveis e fiquei com a impressão de que os dados que entram na rede neural trazem informações insuficientes...

Eu insero rede neural: (k=100)

a[0]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k;
a[1]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[2]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[3]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[4]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[5]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.9;
a[6]=(iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.8;
a[7]=(iMA(NULL,0, 377,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.6;
Entendo como funcionam os indicadores, mas não os entendo o suficiente e o mercado para escolher um número mínimo de indicadores por mim mesmo...

Procurei no fórum e encontrei (o autor do post do qual tirei a idéia, infelizmente, não me lembro):

a[0]=(iMA(NULL,0, 3,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[1]=(iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[2]=(iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[3]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[4]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[5]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[6]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i))*140;
a[7]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i))*130;
a[8]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i))*120;
estudado em 10 fios, 200 gerações, tamanho populacional 200 para o período 1-08-09 a 1-10-09 (meu testador de java dá os resultados):
rede 9-10-1 : lucro 10521
9-20-1 líquido : lucro 10.434
9-30-1 rede : lucro 10361
9-50-1 rede : lucro 10059
o resultado é bom, mas parecia ser melhor com a versão anterior... terei que colocá-lo com as entradas anteriores (não salvei os resultados do último treinamento)

São necessários multiplicadores adicionais para ajustar os valores na faixa de -1 a +1


Depois de ler o que escrevi, comecei a pensar em um possível erro na exportação da rede neural treinada para o Expert Advisor - ela deve ser testada novamente.

P.S. Agora estou escrevendo uma rede neural recorrente de estrutura arbitrária (como entendo, a rede neural recorrente leva em conta não apenas o valor, mas também o ângulo de inclinação).

 

O problema é próximo ao seu. A abordagem é diferente.

Sou ainda menos geneticista do que engenheiro, mas entendo isso de forma aproximada.

Deixe-me fazer-lhe algumas perguntas, a função objetivo de maximizar o placar não é a melhor opção. Se entendi corretamente pelo exemplo acima - você vai procurar um conjunto de sistemas, no seu caso - 9, bem, num relance otimizando os lucros de parada + mais fantasia total pelo menos um sistema (aqui usamos um indicador) tem pelo menos 2-300 variantes possíveis. Não vamos colocar essas variantes dentro do quadro, digamos CCI ou RSI cairão fora de vista. Então, temos um indicador mágico para o momento atual. Que se mova(20) -mov(10) > < 0. Como estimar ou pelo menos estimar quanto tempo a situação irá durar .

 
iliarr >> :

Tenho um perseptron autoescrito (em java) com um número arbitrário de camadas e neurônios em cada camada eu o treino com um algoritmo genético da biblioteca JGAP (http://jgap.sourceforge.net/).

Como você faz o treinamento? Por favor, descreva o algoritmo de treinamento.

Se bem me lembro - JGap, é apenas uma biblioteca de algoritmos genéticos e nada mais, nada mais a ver com NS. Talvez a questão seja como o genoma é formado e a correção da seleção da função de aptidão.

 

Há muitas armadilhas no treinamento de uma rede com Ga, que você dificilmente será capaz de resolver... No mínimo, a pergunta "Quanto tempo a rede funcionará, bem como em treinamento?" não me parece possível, quando se trata de treinamento com Ga.

Recomendo ir a uma solução padrão de previsão de problemas com o ns-i.

 
rip >> :

Como você conduz o treinamento? Por favor, descreva o algoritmo de treinamento.

Se bem me lembro - JGap é apenas uma biblioteca de algoritmos genéticos e nada mais, não tem nada a ver com NS. Talvez a questão seja como o genoma é formado e a correção da função da aptidão.

JGap é uma biblioteca que implementa um algoritmo genético. para mim é uma caixa preta que precisa receber uma função alvo que depende de um vetor de um determinado comprimento. o algoritmo genético desta biblioteca seleciona valores deste vetor de forma que a função alvo seja máxima. a minha função alvo sai lucros do histórico passa por um emulador comercial que reflete sinais de uma rede neural. o vetor cujos valores o algoritmo genético seleciona, determina os pesos das redes neurais.

ivandurak >> :

O problema é próximo ao seu. A abordagem é diferente.

Sou menos geneticista do que engenheiro, mas entendo a essência do assunto.

Deixe-me fazer-lhe algumas perguntas, a função alvo maximizando a pontuação não é a melhor opção. Se entendi corretamente pelo exemplo acima - você vai procurar um conjunto de sistemas, no seu caso - 9, bem, num relance, otimizando lucros de parada + mais fantasia total pelo menos um sistema (aqui usamos um indicador) tem pelo menos 2-300 variantes possíveis. Não vamos colocar essas variantes dentro do quadro, digamos CCI ou RSI cairão fora de vista. Então, temos um indicador mágico para o momento atual. Que se mova(20) -mov(10) > < 0. Como estimar ou pelo menos estimar quanto tempo a situação benigna irá durar .

Infelizmente, não tenho recursos computacionais suficientes para procurar os indicadores ideais (rede 9-10-1 em 10 fios, 200 gerações, tamanho populacional 200 de 1-08-09 a 1-10-09 aprendido durante uma hora, embora o número de pesos de neurônio (comprimento vetorial que o algoritmo genético capta) = 181)

Eu preciso de um conjunto de indicadores que reflitam a situação do mercado. os indicadores devem ser simples, de preferência o MT4 padrão (questão de implementação e possíveis erros) há apenas 30 deles. nenhum indicador de metas deve dar informações para onde o mercado vai. eu preciso deles para obter o máximo de informações possíveis das flutuações de preços.


Eu gosto disto aqui... Penso que como e o que escrever, formular e mais compreensão aparece. graças ao fórum e a você ivandurak . :)

 
iliarr >> :

JGap é uma biblioteca que implementa um algoritmo genético. minha função alvo é uma caixa preta que precisa receber uma função alvo que depende de um vetor de um determinado comprimento. o algoritmo genético desta biblioteca se encaixa nos valores deste vetor para que a função alvo seja máxima. minha função alvo gera lucro com a história passa por um emulador comercial que processa sinais da rede neural. o vetor cujos valores o algoritmo genético se encaixa, define os pesos dos neurônios da rede neural.

É exatamente isso que quero dizer...


Como você forma um vetor que depois passa para JGap, é apenas um vetor de valores W ou são codificados valores W.

Qual é a f-função alvo. Posso dar um exemplo - se tomarmos como alvo a função F E[i](t) = D[i](t) - Y[i](t), onde E é um erro, D é um valor esperado na saída, Y é um valor obtido ao alimentar a amostra de treinamento X, i é norma de neurônio, t é número de época. Se tomarmos E[i](t) = Sign(D[i](t) - Y[i](t))*(D[i](t) - Y[i](t))^2 em uma série de tarefas, o resultado é muito melhor. Digamos, se formarmos uma série que reflita os atrativos dos sistemas dinâmicos clássicos (Lorenz, Henon, Rössler,...), podemos até mesmo treinar a rede para aproximar tais dados, não profundamente mas ainda assim.


Eu não tentei :) porque não acho que vai funcionar :)

 
Com um projeto como este, você pode conseguir eviti quase vertical sem deslizamento. Você vai abordar a questão do excesso de treinamento na neurônica?
 
IlyaA >> :
Com um projeto como este, você pode conseguir um eviti quase vertical sem deslizamento. Você vai abordar a questão da retreinamento no neurônio?

E pode não haver qualquer reciclagem ... Se o autor grafa o erro na amostra de teste, você pode dizer imediatamente o que acontece com a reciclagem.

 
rip >> :

E o supertreinamento pode não acontecer ... Se o autor citar como um gráfico de erro em uma amostra de teste, você pode dizer num relance o que acontece com o excesso de treinamento.


Concordo. funciona com uma caixa preta. é muito provável que haja supertreinamento. Caro ileiarr, você pode publicar um horário para o treinamento.
 
iliarr >>:.............

Você não deveria estar usando os braços ondulantes. Ou melhor, você não deve utilizar apenas médias móveis. Tente experimentar um conjunto de diferentes tipos de indicadores, de preferência o algoritmo de cada indicador deve ser radicalmente diferente dos outros. Então, você obterá mais informações para a rede.

Mais um ponto.

Você está usando um sistema de comércio reverso baseado em sinais NN. Isto é exatamente o mesmo que o especialista em média móvel padrão. Não há melhor nem pior.

Procure uma maneira de determinar o tamanho SL e TP com a ajuda da NN, e formas de acompanhar as posições abertas. Também é possível abrir ao acaso.


StatBars escreveu :>>

No treinamento da rede com ha muitas armadilhas, que dificilmente podem ser resolvidas... No mínimo, resolver a questão "Por quanto tempo a rede funcionará, assim como em treinamento?" não me parece possível, quando se treina com Ga, de forma alguma.

Recomendo ir para uma solução padrão de previsão de problemas de n-ey.

GA é apenas uma ferramenta de otimização (chave de fenda para a máquina). Com diferenças mínimas você pode usá-lo ou qualquer outro algoritmo de otimização (chave de fenda).

 

Olá

Sempre tive interesse em aprender sobre NS, mas assim que começo a ler alguma literatura sobre o assunto minha cabeça começa a ferver e eventualmente não consigo nem mesmo entender o que é NS

você poderia dar um exemplo simples (por assim dizer, nos dedos) para explicar o que é

Obrigado