Discussão do artigo "Construindo uma rede neural profunda do zero em linguagem MQL" - página 5

 
Os parâmetros da rede profunda na forma de variáveis externas são muito inflexíveis.
 

Modifiquei a entrada "bodyPer". Em vez de carregar simplesmente o comprimento relativo do corpo, calculei este valor: bodyPer=0,5+((close-open)/p100)/2;

Assim, mais do que o comprimento relativo, a variável também captura a direção da vela. Isso libera um espaço para uma quarta variável, eu acho.

 

int error=CandlePatterns(rates[0].high,rates[0].low,rates[0].open,rates[0].close,rates[0].close-rates[0].open,_xValues);

Aqui passamos os dados de uma vela que ainda não foi formada. Na realidade, todos os parâmetros serão os mesmos quando o candle for aberto. Todos serão = rates[0].open

 
Vasily Pototsky #:

int error=CandlePatterns(rates[0].high,rates[0].low,rates[0].open,rates[0].close,rates[0].close-rates[0].open,_xValues);

Aqui passamos os dados de uma vela que ainda não foi formada. Na realidade, todos os parâmetros serão os mesmos quando o candle for aberto. Todos serão = rates[0].open

Incorreto!

int copied=CopyRates(_Symbol,0,1,5,rates);

Aqui a cópia é realizada não a partir da barra zero, mas a partir da primeira, portanto, aqui:

CandlePatterns(rates[0].high,rates[0].low,rates[0].open,rates[0].close,rates[0].close-rates[0].open,_xValues);

serão os valores da última barra...

Não acho que seja necessário copiar 5 barras, basta copiar 1 barra passada dessa forma:

int copied=CopyRates(_Symbol,0,1,1,rates);
 

Olá Anddy, ótimo trabalho que você fez!!!

Estou analisando seu código para se adaptar à minha estratégia e até agora posso afirmar que seu DNN é incrível! Obrigado por compartilhar.

Só tenho uma dúvida: não reconheço o uso de "yValues[2]>0.6" em nenhuma situação. Após diversas tentativas com ativos diferentes, nenhuma negociação foi fechada por esta condição. Está certo?

Obrigado!

Melhor,
Alexandre

Neste fórum, por favor comentar em português. Utilize a ferramenta de tradução automática ou comente num dos fóruns doutro idioma.

 
Comportamento estranho sempre que a variável de tendência é alterada, os resultados do treinamento são sempre diferentes, por quê?

Há um erro lógico no código!

   double trend=0; // также при trend=100 результаты много лучше и больше количество точек оптимизаций!? 
   if(uod>0)
     {
      highPer=high-close;
      lowPer=open-low;
      bodyPer=close-open;
      trend=1;

     }
   else
     {
      highPer=high-open;
      lowPer=close-low;
      bodyPer=open-close;
      trend=-1; // стоял ноль!
     }
 
Nikolai Kalinin #:
Comportamento estranho sempre que a variável de tendência é alterada, os resultados do treinamento são sempre diferentes, por quê?

Há um erro lógico no código!

Especificidade da função de ativação.

Quanto mais camadas, mais atenuação - os valores ficarão mais próximos de 0.

O deslocamento corrige um pouco esse problema.

Portanto, quando o limite é definido como 0,6, a maioria dos conjuntos possíveis é descartada. E se você estiver alimentando a entrada com um número enorme ou vários números grandes, mesmo uma passagem direta trará mais valores possíveis para o final da rede neural.

E quanto mais valores atingirem ou ultrapassarem o limite do limiar, mais posições ou mais oportunidades de ajustar (memorizar o caminho) o gráfico de preços à rede neural.
 
Ivan Butko #:

Especificidade da função de ativação.

Quanto mais camadas, mais atenuação - os valores ficarão mais próximos de 0.

O deslocamento corrige um pouco esse problema.

Portanto, quando o limite é definido como 0,6, a maioria dos conjuntos possíveis é descartada. E se você estiver alimentando a entrada com um número enorme ou vários números grandes, mesmo uma passagem direta trará mais valores possíveis para o final da rede neural.

E quanto mais valores atingirem ou ultrapassarem o limite do limiar, mais posições ou mais oportunidades de ajustar (lembre-se do caminho) o gráfico de preços à rede neural.

De qualquer forma, os resultados do treinamento são sempre muito variáveis com qualquer tipo de otimização, o que levanta certas dúvidas sobre sua aplicabilidade à negociação real - sempre haverá melhores parâmetros de pesos em combinações de reordenamento. Qual é a explicação para essa peculiaridade dessa NS?

 
Nikolai Kalinin #:

De qualquer forma, os resultados do treinamento são sempre muito variáveis com qualquer tipo de otimização, o que levanta certas dúvidas sobre a aplicabilidade para a negociação real - sempre haverá melhores parâmetros de pesos na reordenação das combinações. Qual é a explicação para essa peculiaridade desse NS?

Você dá muita importância a esse NS, na verdade todos os NSs e tudo relacionado a MO, em geral - em todos os lugares em que há multiplicação de números por números e um somador na função de ativação - tudo será um ajuste ao gráfico. Um sistema totalmente instável.

Além disso, a precificação é um processo não estacionário. Sempre que houver novos dados, e se você dividir o gráfico em padrões, eles tenderão a funcionar 50/50 no histórico.

NS é para sistemas estacionários, repetitivos.

Mas no Forex e assim por diante você precisa de sistemas mais avançados e inteligentes. Algo como vários NSs, de alguma forma conectados entre si, de alguma forma se adaptando magicamente à mudança das estatísticas do padrão, etc.

O NS em si é uma memorização do caminho do preço ou uma média dos resultados, se a quantidade de novos dados for maior do que as combinações possíveis de números obtidos por multiplicação (ou, falando de forma simples, a arquitetura NS mais simples com duas ou três entradas).

É interessante se aprofundar nisso, construir arquiteturas, adicionar neurônios e camadas. Mas isso é absolutamente inútil, não é melhor do que cruzar mashka.
 
Ivan Butko #:

Você dá muita importância a esse NS; na verdade, todos os NSs e tudo relacionado a MO, em geral - em qualquer lugar em que haja multiplicação de números por números e um somador na função de ativação - tudo será um ajuste ao gráfico. Um sistema totalmente instável.

Além disso, a precificação é um processo não estacionário. Sempre que houver novos dados, e se você dividir o gráfico em padrões, eles tenderão a funcionar 50/50 no histórico.

NS é para sistemas estacionários, repetitivos.

Mas no Forex e assim por diante você precisa de sistemas mais avançados e inteligentes. Algo como vários NSs, de alguma forma conectados entre si, de alguma forma se adaptando magicamente à mudança das estatísticas do padrão, etc.

O NS em si é uma memorização do caminho do preço ou uma média dos resultados, se a quantidade de novos dados for maior do que as combinações possíveis de números obtidos por multiplicação (ou, falando de forma simples, a arquitetura NS mais simples com duas ou três entradas).

É interessante se aprofundar nisso, construir arquiteturas, adicionar neurônios e camadas. Mas isso é completamente inútil, não é melhor do que atravessar o mashka.

Ivan, obrigado pelo esclarecimento. Qualquer estatística tem uma tendência a se repetir. Em princípio, se um indicador integral for usado na otimização (treinamento) do NS, poderemos ver pelos pontos como e quando ocorre a transição da ignorância para o conhecimento - como negociá-lo melhor. A busca por uma variável significativa é uma conversa à parte. Você conseguiu resolver o problema com o escalonamento das entradas em mais de 4x?