Rede neural sob a forma de um roteiro - página 4

 
rip:
YuraZ:

Nem sempre é necessário normalizar, quem diz que a grade PODE e DEVE funcionar apenas com 0 e 1?


Posso anexar uma grade simples com um exemplo, (infelizmente não há materiais à mão no momento) - o farei mais tarde

onde um simples NN resolve este problema sem preparação de dados com normalização

infelizmente esta não é a fonte


o exemplo que dei, no entanto! é como se já estivesse normalizado

a condição tem duas faixas


1 0-100

2 10-30


você só precisa encontrar a proporção da posição em uma faixa - que é conhecida por

em essência, isto é escalada.

A normalização é quase sempre necessária. Os dados devem estar dentro do intervalo de definição da função de ativação.

No roteiro, o sigmóide é [-1;+1]. Se você o substituir por, digamos, um exponencial ... ou raiz quadrada.


http://www.statsoft.ru/home/portal/applications/NeuralNetworksAdvisor/Adv-new/ActivationFunctions.htm








http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


aqui está um exemplo de criação de rede ... a entrada é BAIXA, ou seja, sem normalização

 
YuraZ:

http://www.statsoft.ru/statportal/tabID__32/MId__141/ModeID__0/PageID__354/DesktopDefault.aspx


aqui está um exemplo de criação de rede ... A entrada é BAIXA, ou seja, sem normalização


O uso de dados não normalizados é às vezes muito útil. Eles não perdem a informatividade, que pode ser perdida durante as transformações.

E não há nenhum mecanismo formalizado para determinar a informatividade da amostra de treinamento...


A propósito, o artigo não mostra em lugar algum qual função de ativação é utilizada. Aparentemente, algo com a área de definição [-inf;+inf] ou [0;+inf] ...

 

mudou um pouco o programa!

alterou ligeiramente o formato de saída


SCRIPT agora considera um dever calcular os dados de saída com alta precisão

é claro, o programa não é universal, mas especializado para uma série de entradas e saídas.

mas o tamanho da camada oculta! é ajustado no processo de aprendizagem



o próximo lançamento - vou tentar torná-lo flexível no número de entradas e saídas

e se tiver sucesso, acrescentarei um algoritmo genético

cujo objetivo será matar NEURONS com um grande número de erros

e reproduzir neurônios com poucos erros!

ou seja, essencialmente, procurar os neurônios da matriz que tenham o menor número de erros e procriar a partir deles para substituir

aqueles neurônios que se comportaram mal...


1 A taxa de aprendizagem é atualmente baixa

2 Mudança - o número de neurônios ocultos do 1º nível é aleatório sem lógica

3 Interrompe o processo de aprendizagem se obtiver alta precisão nos dados das amostras de entrada e saída


Arquivos anexados:
 

Como posso usar isto? Colocar um roteiro no gráfico, pilhas de números começaram a reescrever... O que dizem estes números?

 
Blast:

Como posso usar isto? Colocar um roteiro no gráfico, pilhas de números começaram a reescrever... O que dizem estes números?

Para que você precisa deles? Eu tenho meu próprio algoritmo GA, mas mal entendi o código - eu preciso de tempo para descobrir onde colocar os inputs, como produzi-los, quando comprá-los e se eu posso fazer isso de alguma forma ? Ou você está aqui para o graal?

 
Loknar:
Explosão:

Como posso usar isto? Colocar um roteiro no gráfico, pilhas de números começaram a reescrever... O que dizem estes números?

Para que você precisa deles? Tenho meu próprio algoritmo GA, mas mal entendi o código - preciso de tempo para descobrir onde colocar as entradas, como retirá-las e quando liquidá-las, se for o caso? Ou talvez você esteja atrás do graal aqui?

Explosão , não procure um Expert Advisor ou indicador - é um longo caminho.


Este é mais um estudo dos princípios de uma rede neural na MQL4

---

em geral, é razoável escrevê-lo em C++ sob a forma de DLL, ou outros idiomas rápidos


Loknar - é apenas uma modificação do roteiro no início, tentando obter resultados mais precisos

--

a propósito, tentou adicionar uma camada :-), para não mencionar as entradas das saídas ... o algoritmo de aprendizagem de tubos morre de um momento para o outro.


---

querem tentar algo como

3 saídas

a saída não é apenas 0 ou 1 ou -1 0 +1, mas uma faixa

x 0 0 0 - compre porão

0 x 0 - plano (saída comprar ou vender)

0 0 x venda - hold sell

onde x não é 0 ou 1 mas tem algum desvio em alguma faixa, por exemplo -1.000 0.000 +1.000

ou seja, pode assumir um valor de, digamos, 0,1122 ou -0,012


a combinação de três saídas é analisada para a travessia de fronteiras


entradas 9 em cada período de tempo - pegue M1 M5 M15 M30 H1 H4 54 entradas no total

alimentamos a diferença entre as médias 3 5 8 13 21 34 55 89 144 233 para cada traf

total 3-5 5-8 8-13 13-21 21-34 34-55 55-89 89-144 144-233 no total 9 por período de tempo

obtemos uma espécie de VERIABILIDADE de médias na visualização em grade. :-) na matriz

quando temos algo como padrão 2 3 4 5 6 7 8 9 10 11 ventilador está totalmente aberto para cima julgando que é VENDA

quando temos -2 -3 -4 -5 -6 -7 -8 -8 -9 -10 -11 padrão, o padrão é totalmente aberto para baixo - BAY

Os números são arbitrários e às vezes um padrão -1 -3 -7 -10 -15 -20 -30 -40 -80 em um período de tempo maior



---

uma amostra de treinamento de algo como


1 2 1 0 -3 2 3 0 4 M1

-1 2 -1 0 1 2 3 0 -4 M5

...

........................ H4

 

Preparando dados para o treinamento





#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "http://www.metaquotes.net/"
 
static int hWR;
 
static double    ma[9][233] ;
static datetime  SaveTime[9];
static int       indx[8]={3,5,8,13,21,34,55,89,144};
static  int iFW = 0;
 
int init()
  {
   hWR = FileOpen( "MA.CSV", FILE_BIN|FILE_WRITE) ; 
   string strPut="DATETIM            |"+
   "m100035|m010058|m010813|m011321|m012134|m013455|m015589|"+
   "m500035|m050058|m050813|m051321|m052134|m053455|m055589|"+
   "m150035|m150058|m150813|m151321|m152134|m153455|m155589|"+
   "m300035|m300058|m300813|m301321|m302134|m303455|m305589|"+
   "h010035|h010058|h010813|h011321|h012134|h013455|h015589|";
 
 
 
// "-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|-0.0001|
   FileWrite(hWR, strPut);
   return(0);
  }
int deinit()
  {
  FileClose(hWR);
  }
 
int start()
{
  iFW = 0;
  getMA( PERIOD_M1 ,1);
  getMA( PERIOD_M5 ,2);
  getMA( PERIOD_M15,3);
  getMA( PERIOD_M30,4);
  getMA( PERIOD_H1 ,5);
  getMA( PERIOD_H4 ,6);
   if ( iFW == 1 )
   {
      PutFile( );
   }
   return(0);
}
void getMA(int TF,int iTF)
{
 if ( SaveTime[iTF] != iTime(Symbol(),TF,0) )
 {
 SaveTime[iTF] = iTime(Symbol(),TF,0);
 ma[iTF][89] =  iMA(Symbol(),TF,89,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][55] =  iMA(Symbol(),TF,55,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][34] =  iMA(Symbol(),TF,34,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][21] =  iMA(Symbol(),TF,21,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][13] =  iMA(Symbol(),TF,13,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 8] =  iMA(Symbol(),TF, 8,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 5] =  iMA(Symbol(),TF, 5,0,MODE_EMA,PRICE_CLOSE,0);
 ma[iTF][ 3] =  iMA(Symbol(),TF, 3,0,MODE_EMA,PRICE_CLOSE,0);
 iFW = 1;
 }
}
void  PutFile( )
{
 string strPut;
 strPut = TimeToStr( SaveTime[1] , TIME_DATE|TIME_MINUTES|TIME_SECONDS) ;
 for ( int iiTF = 1; iiTF <= 6; iiTF++)
 {
   for ( int jM = 0; jM <= 6; jM++)
   {
      int nMA = indx[jM];
      int nMA_N = indx[jM+1];
      double nn = NormalizeDouble( (ma[iiTF][ nMA] - ma[iiTF][ nMA_N])/Point,0) ;
      string sss = DoubleToStr( nn , 0);
      if ( nn >= 0 )
         sss =" "+sss;
      if (MathAbs(nn)  <= 9)
         sss =" "+sss;
       
         
      // strPut = strPut+DoubleToStr( ma[iiTF][ nMA] , 4)+"|";
      strPut = strPut+"|"+sss;
   }
 }
 FileWrite(hWR, strPut);
}
 
Loknar:
Explosão:

Como posso usar isto? Colocar um roteiro no gráfico, pilhas de números começaram a reescrever... O que dizem estes números?

Para que você precisa deles? Eu tenho meu próprio algoritmo GA, mas mal entendi o código - eu preciso de tempo para descobrir onde colocar os inputs, como produzi-los, quando comprá-los e se eu posso fazer isso de alguma forma ? Ou você já foi para o graal?

Inicialmente eu gosto da idéia de redes neurais. Tudo o que sei sobre isso é que ter 1000 pontos de alguma forma a rede convergirá para um ponto... e que o autotrading foi ganho com um EA baseado no algoritmo de rede. Tenho planos de criar minha própria versão de tal rede, mas nesta fase não entendo nada nem em mql4 nem em redes neurais.

Portanto, primeiro vou colocar minha estratégia no Expert Advisor para aprender o mql4. E então vou começar a pensar em redes.

Fiz o download de sua versão apenas por interesse. É a primeira vez que me deparo com tais coisas. Eu não entendo o funcionamento de tais redes. Não tenho idéia de como tais redes funcionam, por isso tenho tantas perguntas a fazer.

Ficarei satisfeito com quaisquer referências sobre assuntos semelhantes, que na sua opinião merecem atenção!

 

ESTA REDE

YuraZ:

mudou um pouco o software!

mudou um pouco o formato de exibição

agora o SCRIPT considera um dever calcular com alta precisão os dados de saída

o programa não é universal, mas especializado em número de entradas e saídas

mas o tamanho da camada oculta! é ajustado no processo de aprendizagem



o próximo lançamento - vou tentar torná-lo flexível no número de entradas e saídas

e se tiver sucesso, acrescentarei um algoritmo genético

cujo objetivo será matar NEURONS com um grande número de erros

e reproduzir neurônios com poucos erros!

ou seja, procurar os neurônios da matriz que tenham o menor número de erros e procriar a partir deles para substituir

aqueles neurônios que se comportaram mal...


1 A taxa de aprendizagem é atualmente baixa

2 Mudança - o número de neurônios ocultos do 1º nível é aleatório sem lógica

3 Pare de aprender se obtiver alta precisão nos dados de entrada e saída das amostras


A MESMA REDE, mas escrita em Microsoft Visual C++ 6.0

Velocidade é ordem de magnitude maior do que na MQL4

o algoritmo não sofreu alterações, a transferência da MQL4 para C++ é tão simples quanto possível sem o uso de objetos de classe

Arquivos anexados:
yzpnn.zip  63 kb
 

Outra opção, mas na MQL


apenas tentando trabalhar na M1 mostra a direção da tendência atual

sair no dia 3, em teoria você não pode ensinar na inicialização - mas imediatamente tomar pesos prontos - ensinar com antecedência


---

9 entradas para as quais a diferença normalizada de muwings é alimentada

---

saída de 1 saída de 2 saída de 3

0,9 0,01 0,01 0,01 tendência para cima

0,01 0,9 0,01 0,01 flet

0.01 0.01 0.9 tendência de queda



---

Pretendo adicionar 3-4 prazos e contá-los todos de uma só vez!

PNN quando já pesada funciona muito rápido

---


Código de teste experimental - por favor, não me chute.






Arquivos anexados:
Razão: