Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 321

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/code/127

Há apenas algum erro no código, acho que o indicador está normalizado incorrectamente.

Está correto, ele apenas normaliza para um intervalo diferente de [0;1].


Para simplificar, você pode deixar a mesma função CalcRegression que você tem (mas leve em conta que b já retorna com sinal oposto*, ou seja, você não precisa mudar o sinal pela segunda vez). Encontre experimentalmente, por qual valor você precisa multiplicar o resultado, para obtê-lo no intervalo [-0,5;0,5]. E depois adicionar +0,5 para mudar o meio de 0 para 0,5.


*Esta fórmula lhe dará b com o sinal certo se os preços mais antigos tiverem o índice mais alto no array.

 
Dr. Trader:

Tudo está correto, é apenas normalizado não em [0;1], mas em outro intervalo.


Para simplificar, você pode deixar a mesma função CalcRegression que você tem (mas leve em conta que b já retorna com sinal oposto, ou seja, você não precisa mudar o sinal pela segunda vez). Encontre experimentalmente, por qual valor você precisa multiplicar o resultado, para obtê-lo no intervalo [-0,5;0,5]. E depois adicionar +0,5 para mudar a média de 0 para 0,5.


para diferentes períodos de tempo precisamos de diferentes máximos e mínimos, não é muito conveniente, parece-me que normalizar num intervalo de história maior é o melhor
 
Dr. Trader:

*Esta fórmula lhe dará b com o sinal certo se os preços mais antigos tiverem o índice mais alto no array.


basta adicionar outro buffer normalizado ao indicador sobre o buffer existente :)
 

A inclinação de regressão também pode ser interessante. Para trás e para a frente. Em resumo, parece que você pode trabalhar com essa lógica e experimentar diferentes preditores.


Arquivos anexados:
 
Maxim Dmitrievsky:

A inclinação de regressão também pode ser interessante. Para trás e para a frente. Em resumo, parece que você pode trabalhar com esta lógica e experimentar diferentes preditores.


Obrigado pelo código, eu testei-o. Eu fiquei pior. Mas eu levei apenas 1 mês para a otimização em vez de ano, eu queria verificar rapidamente. No Fronttest eu vi como a EA primeiro é normal, depois lentamente começa a achatar o equilíbrio e depois abranda. Ainda vive um pouco de novos dados, nada mal.

Eu mudaria isto.

1) duplo a3 = regr[0]; - índice zero é o mais antigo por dados de tempo. O mais recente (novo) bar aqui seria 49 (desde que 50 foi tomado), é melhor. Mas o último pode estar a descoberto, por isso 48 é melhor. Também é necessário verificar se o indicador está a descoberto.
O mesmo acontece com o RSI, você removeu o que era mais novo. Faz sentido tentar remover o que tem índice zero, como o mais ultrapassado.

2) A terceira versão do Expert Advisor do Yuri tem a função RNN com quatro parâmetros, para que possa ser combinada com três barras e uma tendência. Em geral, a função pode ser complementada por novos parâmetros, como escrito no artigo de Yuri, mas cada parâmetro +1 irá duplicar o número de coeficientes.

3) Eu não gosto de paradas e decolagens, seus valores ótimos estão constantemente mudando em barras novas. Para ser mais preciso, não existem valores ótimos, existem apenas certos valores "convenientes" para uma EA em um intervalo de tempo específico. Além disso, os corretores podem desenhar castiçais antes das paragens. Eu tentaria fazer uma previsão em cada novo bar e simplesmente manter a transação nesta direção até o próximo bar e previsão, e lá virava se necessário.

4)

   int handle=iRSI(_Symbol,0,9,PRICE_OPEN);
   double rsi[30];
   CopyBuffer(handle,0,0,28,rsi);

O manuseio deve ser inicializado no OnInit, e não toda vez que se cria uma EA. E também a matriz tem 30 elementos, e apenas 28 são copiados. Ou seja, os índices 28 e 29 não podem ser acessados (ninguém nunca o faz, mas nunca se sabe), eles não são preenchidos.

 
Dr. Trader:


Obrigado pelo código, já o experimentei. Eu tenho um pior. Mas só levei 1 mês para optimizar em vez de ano, queria verificar rapidamente. O fronttest mostra que o meu Expert Advisor é bom no início, depois começa a aplanar o equilíbrio e depois desce. Ainda vive um pouco de novos dados, nada mal.

Eu mudaria isto.

1) duplo a3 = regr[0]; - índice zero é o mais antigo por dados de tempo. O último (mais recente) bar aqui seria 49 (desde que 50 foi tomado), é melhor. Mas o último pode estar a descoberto, por isso 48 é melhor. Também é necessário verificar se o indicador está a descoberto.
O mesmo acontece com o RSI, você removeu o que era mais novo. Faz sentido tentar remover o que tem índice zero como o mais antigo.

2) Na terceira versão da EA do Yuri a função RNN contém quatro parâmetros, você pode levar tanto 3 rsi como tendência com ela. Em geral, a função pode ser ampliada com novos parâmetros, como escrito no artigo do Yuri, mas cada parâmetro +1 duplicará o número de coeficientes.

3) Eu não gosto de paradas e decolagens, seus valores ótimos estão constantemente mudando em barras novas. Para ser mais preciso, não existem valores ótimos, existem apenas certos valores "convenientes" para uma EA em um intervalo de tempo específico. Além disso, os corretores podem desenhar castiçais antes das paragens. Eu tentaria fazer uma previsão em cada novo bar e simplesmente manter a transação nessa direção até o próximo bar e previsão, e lá virava se necessário.

4)

O manuseio deve ser inicializado no OnInit, e não toda vez que se cria uma EA. E também a matriz tem 30 elementos, e apenas 28 são copiados. Ou seja, os índices 28 e 29 não podem ser acessados (ninguém o fará, mas podem querer), eles não são preenchidos.


Ai sim? Pensei que o zero ao copiar o buffer devolvia o primeiro valor. Preciso de verificar...

https://www.mql5.com/ru/docs/series/copybuffer

Acrescentei o trailing em vez do sl e assim por diante, os resultados não são muito melhores.

sobre o cabo, sim, por regressão coloquei-o no init, por radsy esqueci-me de o fazer.

Lá eu preciso escolher qual frente com o maior fator de lucro, e o backktest deve ser mais ou menos o mesmo, então com estes parâmetros a grade é capaz de fazer uma previsão decente. Se eu der uma olhada nas estatísticas, não vejo porque perdi, não vejo porque não perdi, e não vejo porquê.

E o RNN3 dá muito menos sinais por alguma razão.

Eu ainda não entendo bem se é melhor para a função de normalização levar uma matriz de 5000 barras em vez de 50, para que ela encontre mais correto máximo e mínimo desde o início e não atualizá-los ao longo do tempo, porque no início dos testes não vamos receber valores normalizados corretamente para a entrada, mas mais tarde mais e mais precisamente

Além disso, eu ainda detrenderia gráficos e alimentaria valores mais digeríveis para a grade, ainda não sei como melhorar, digamos, a inclinação de regressão e a autocorrelação em uma série estacionária, como não sou muito bom em econometria, estou assistindo videoclipes agora

E eu também quero comparar mais tarde este RNN com um MLP regular, mas não será uma comparação adequada lá, porque o mlp terá que alimentar algo para a saída. Outra opção, fazer uma comissão de 3 RNN e alimentar o RNN :D, ou em alguns NS convolucionais. Vai demorar muito tempo a optimizar, mesmo através do claud. Melhor ainda, alimentar 3 RNN no MLP e produzi-lo com aumentos de preços, livrando-se assim, em teoria, do sobretreinamento. Ou seja, o RNN desempenhará um papel de autocodificador http://cyberleninka.ru/article/n/avtoenkoder-podhod-k-ponizheniyu-razmernosti-vektornogo-prostranstva-s-kontroliruemoy-poterey-informatsii


 
Maxim Dmitrievsky:




Encontrar uma cotação que possa ser aplicada à ARIMA é quase impossível. Mas esse foi o fim da palestra.

E O GARCH? É muito mais promissor e muito mais usado no período de menos de um dia, mesmo para negociações de alta freqüência.

 
SanSanych Fomenko:


Encontrar um orçamento, ao qual a ARIMA poderia ser aplicada, é quase impossível. Mas esse foi o fim da palestra.

E O GARCH? É muito mais promissor e muito mais utilizado no prazo de menos de um dia, mesmo para negociações de alta freqüência.


Comecei agora a familiarizar-me com estas coisas, ainda nem sequer experimentei. Eu só ouvi falar de lixo :)

O que você acha de usar o RNN como um autocodificador para o MLP?

Tanto quanto entendi, a rede recorrente é um autoencoder do tipo com um conjunto de regras lógicas:


 
Maxim Dmitrievsky:

Bem, e quanto à subtracção de tendências e depois a aplicação da autoregressão a elas, e depois a introdução dos valores na NS, juntamente com a inclinação de regressão? Comecei agora a familiarizar-me com estas coisas, ainda nem sequer experimentei

é melhor experimentar imediatamente!

Você economizará muito tempo e conhecimento desnecessário.

 
SanSanych Fomenko:


Encontrar uma cotação que possa ser aplicada à ARIMA é quase impossível. Mas esse foi o fim da palestra.

E O GARCH? É muito mais promissor e amplamente utilizado no período de menos de um dia, mesmo para negociações de alta freqüência.

Eu também já assisti a isso. Imho, não é a nossa área de estudo.