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

 
Maxim Kuznetsov #:

Funciona?

Vamos começar com algo mais simples: um agente 2D que tem 9 olhos apontando para ângulos diferentes à frente e cada olho detecta 3 valores em sua direção (até uma determinada distância máxima de visibilidade): distância até uma parede, distância até um objeto verde ou distância até um objeto vermelho. O agente navega usando uma das 5 ações que o fazem girar em ângulos diferentes. Os objetos vermelhos são maçãs e o agente recebe recompensa por comê-las. Os objetos verdes são venenos e o agente recebe uma recompensa negativa por comê-los. O treinamento leva algumas dezenas de minutos com as configurações de parâmetros atuais."

você pode clicar em start learning... e depois em stop learning.....

a barata deve correr e preferir os pontos vermelhos para evitar os pontos verdes...

Na realidade: depois de parar de aprender, ela segue mais ou menos o último padrão de movimento e não faz distinção entre vermelho e verde. Ou eu tenho uma barata excepcionalmente estúpida :-)

porque você não deve pressionar Parar aprendizado antes que o aprendizado seja concluído .

 
mytarmailS #:

porque você não consegue parar de aprender antes que o aprendizado esteja completo .

Viva! Funcionou... 3 horas de aprendizado, quase me esqueci disso.

Agora a barata corre como deveria (quase), tenta evitar as verdes e come as vermelhas.

Aparentemente, aconteceu que um "feeler" a menos foi treinado :-) Ou seja, se um verde de penalidade estiver em um determinado lado, ele será comido imediatamente. Por outro lado, os vermelhos em uma determinada travessia são evitados

Mas isso provavelmente é um ogrito do sistema.

 
Aleksey Nikolayev #:

Isso funciona somente no caso de recursos independentes e, como eles são contados pelo mesmo preço, isso não é possível. No caso de dependência, é muito mais complicado - podemos usar as cópulas como exemplo, em que as distribuições univariadas são sempre as mesmas uniformes, mas, ao mesmo tempo, as distribuições bivariadas podem ser muito diferentes.

Talvez haja uma solução no mesmo R, mas você só precisa procurá-la?

Aleksey Nikolayev #:

Você tem uma predileção por cálculos de enumeração pesados) Teremos que adicionar (à quantidade já considerável de enumeração) a enumeração por tipos de recursos e, com certeza, por parâmetros de recursos.

No entanto, parece-me que há um grão racional em sua abordagem, há algo em que pensar.

Sim, aparentemente sou ruim em prever resultados sem experimentação, portanto, é melhor testar e, muitas vezes, ficar desapontado do que criar cálculos lógicos de vários estágios nos quais um erro pode aparecer em uma das etapas.

Mesmo que você aprenda a dividir uma amostra em subamostras, a próxima questão é como classificar corretamente a amostra atual e aplicar o modelo necessário a ela.

 
mytarmailS #:
Talvez, em vez de critérios estatísticos de homogeneidade da amostra, basta observar a alteração da importância do recurso do modelo na dinâmica (em uma janela deslizante).

Se houver uma grande discrepância entre o estado atual e o estado anterior, isso significa que já estamos em outra amostra....

Prós:
1. você não precisa programar o stat. Testes, tudo está pronto para sair da caixa
2. Ele leva em conta não apenas a mudança no tempo de amostragem, mas também a mudança no alvo, o que, na minha opinião, não é menos importante.

Em que momento observar, no momento do treinamento? E como você sugere observar na dinâmica, como implementar?

Tenho um script que mostra a ativação das folhas do modelo na dinâmica, ou seja, você pode ver quais folhas são acionadas. Talvez devêssemos calcular a frequência média de sua ativação no segmento de treinamento e, em seguida, observar os desvios nos segmentos de teste? Dessa forma, podemos pelo menos tentar monitorar a diminuição da eficiência do modelo, teoricamente.

 
Aleksey Vyazmikin #:

Em que momento observar, no momento do treinamento? E como você propõe observar na dinâmica, como realizar?

Tenho um script que mostra dinamicamente a ativação das folhas do modelo, ou seja, você pode ver quais folhas estão ativadas. Talvez devêssemos calcular a frequência média de sua ativação no segmento de treinamento e, em seguida, observar os desvios nos segmentos de teste? Dessa forma, podemos pelo menos tentar monitorar a diminuição da eficiência do modelo, teoricamente.

Não faz sentido olhar para o modelo antigo, pois ele não capta as mudanças no mercado....

Proponho a implementação conforme sugerido))))))
Em uma janela deslizante, treine novamente o modelo e observe a importância dos sinais, ou simplesmente pegue algum determinante de bons sinais e observe-o em uma janela deslizante. janela


Aqui está um exemplo em uma amostra gerada aleatoriamente de 5 recursos e 1 alvo binário.

seletor forrest e fiche

X <- matrix(rnorm(1000),ncol = 5)
Y <- as.factor(sample(0:1,nrow(X),replace = T))

head(X)
head(Y)

#install.packages("randomForest")
library(randomForest)
rf_imp_mat <- matrix(ncol = ncol(X),nrow = nrow(X))
for(i in 30:nrow(X)){
  ii <- (i-29):i
  rf <- randomForest(Y[ii]~.,X[ii,],ntree=100)
  rf_imp_mat[i,] <- importance(rf)[,1]
}

#install.packages("FSelectorRcpp")
library(FSelectorRcpp)
fs_imp_mat <- matrix(ncol = ncol(X),nrow = nrow(X))
for(i in 30:nrow(X)){
  ii <- (i-29):i
  infg <- information_gain(y = Y[ii],x = as.data.frame(X[ii,]))
  fs_imp_mat[i,] <-  infg$importance
}

par(mfrow=c(1,2))
matplot(rf_imp_mat , t="l",lty=1,main="rf_var_imp")
matplot(fs_imp_mat , t="l",lty=1,main="fs_var_imp")


Em R-ka, é claro que não é costume escrever em ciclos se não for necessário, mas esse estilo confunde os recém-chegados, e intermediários como eu também confundem....

mas você pode escrever assim, o código é 3 vezes menor e o resultado é o mesmo.

X <- matrix(rnorm(1000),ncol = 5)
Y <- as.factor(sample(0:1,nrow(X),replace = T))
idx <- embed(1:nrow(X),dimension = 30)[,30:1]

library(randomForest)
rf_imp_mat <- t(apply(idx,1,function(i) importance(randomForest(Y[i]~.,X[i,]))[,1]))
library(FSelectorRcpp)
fs_imp_mat <- t(apply(idx,1,function(i) information_gain(y=Y[i],x=as.data.frame(X[i,]))$importance))

par(mfrow=c(1,2))
matplot(rf_imp_mat , t="l",lty=1,main="rf_var_imp")
matplot(fs_imp_mat , t="l",lty=1,main="fs_var_imp")


Também há seletores diferentes para todos os gostos, provavelmente 5% do que está disponível no R-ka.

GitHub - FrancisArgnR/R-FeatureSelection-Packages: Brief guide to feature selection packages in R
GitHub - FrancisArgnR/R-FeatureSelection-Packages: Brief guide to feature selection packages in R
  • FrancisArgnR
  • github.com
Feature selection or variable selection in machine learning is the process of selecting a subset of relevant features (variables or predictors) for use in model construction. Packages FSinR Boruta caret spFSR varSelRF CORElearn FSelector
 

ou observe as janelas em duas ou três moedas e negocie com um atraso na terceira.

Ou seja, olhar para a segunda metade do dia EUR,CHF para USD CAD e abrir no início da manhã JPY (AUD,NZD)... para que o sistema aprenda a determinar a tendência do USD e tenha tempo de comprar antes que "não esteja podre".

Só tenho medo de que, em uma única citação, "todos os caminhos tenham sido percorridos" e seja impossível tirar proveito disso usando os métodos disponíveis.

 
Para inventar algo, é preciso definir o objeto de pesquisa e, em seguida, determinar suas propriedades, para que não seja como um macaco e óculos
 
Maxim Dmitrievsky #:
Para inventar algo, é preciso definir o objeto de pesquisa e, em seguida, definir suas propriedades, para que não seja como um macaco e óculos

É muito cedo para definir o objeto de pesquisa e suas propriedades, o fórum tem apenas 6 anos de idade. Não seja tão desagradável!

 
Evgeny Dyuka #:

É muito cedo para definir o objeto de pesquisa e suas propriedades, pois o fórum tem apenas 6 anos de existência. Não seja tão desagradável!

Se você começar a estudar as cotações como uma série temporal, poderá notar algumas peculiaridades que não são encontradas em outras séries temporais. Talvez existam padrões nessas características. E, sim, nem tudo pode ser extraído pela autorregressão e classificação diretamente usando recursos de defasagem, mas com a adição de engenhosidade você pode
 
Maxim Kuznetsov #:

(Espero que não o matem por causa do link do CodeBase: https: //www.mql5.com/ru/code/36558

pode ser útil para prever sinais - você pode prever :-) o indicador apenas mostra (e resume) os sinais "preto/branco".

Mostrarei os sinais de barra aqui, não é uma pena.

Vou vasculhar meu modesto arquivo de desenvolvimentos e publicá-los.

É interessante, é claro, não discuto, mas também há não estacionariedade.

É por isso que ele é previsto com uma probabilidade um pouco menor que um.

mas, basicamente, se estiver subindo agora, a próxima barra será de baixa.

E esse tipo de movimento dos TFMs mais novos se reflete nos mais antigos.

Portanto, a tendência não é uma linha reta, mas com muitos recuos, múltiplos em duração e tamanho de barra dos mais novos.

No entanto, parece que você pode aplicar Fourier e encontrar essas ondas, mas não é assim, porque

a escala de tempo é modulada da mesma forma, para frente e para trás.

Não é fácil entender esse milagre e, se você o fizer de frente, haverá muitas perguntas.

Por exemplo, podemos considerar o movimento do preço da esquerda para a direita ou da direita para a esquerda, começando não necessariamente pela borda direita.

Assim, você avança e retrocede, sobe e desce.

Razão: