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

 
Anton Zverev:
Eu sempre leio tais tópicos (não apenas neste fórum) onde eles tentam construir teorias comerciais complexas.
Algoritmos genéticos, redes neurais, fórmulas convolutas que só o autor entende, etc.

E eu sempre vejo que tais sistemas não funcionam no mercado. O monitoramento vai para zero ou para menos.
Mas no próximo tópico alguém ganha usando um Expert Advisor em dois deslizes. E eles ganham bom dinheiro.

A questão é se tudo isto faz sentido.
Porque, pela minha experiência, quanto mais simples e claro for o sistema, mais lucrativo ele é.

Você é por acaso um funcionário de uma corretora de estilo antigo?

Eu acho que o seu "método secreto" é trocar mashki (aleatório) e dobrar quando você perde, certo?)

Cavalheiros, terão de viver à comissão...

 
Dr. Trader:

Criação de um comité e testes:

Há um problema em que as classes originais são do tipo fator, e o resultado na matriz é convertido para os números ordinais do fator correspondente. Assim, no final a comparação é feita como.numberic().

Para que tudo funcione corretamente com fatores, precisamos criar a predictionMatrix como data.frame, mas depois disso minha função rbind deu varizes, eu preciso mudar algo mais, eu não entendi o que está errado lá.

Algumas ideias sobre o código:

1. Você não tem que usar a construção for() a menos que seja absolutamente necessário. Existe uma alternativa maravilhosa à foreach() que, além da alta velocidade de execução, permite fazer cálculos paralelos entre núcleos acessíveis.

2) O conjunto de modelos faz sentido e só dá resultados se os modelos tiverem diferenças significativas. Duas variantes: um conjunto de dados - modelos diferentes (RF, DT, SVM); um modelo - conjuntos de dados diferentes. Um exemplo deste último caso está abaixo

#----------------------------------------------------------------------
require(ranger)
require(foreach)
require(magrittr)
data("iris")
totalModels = 50
res <- list()
Acc <- c()
res <- foreach(i = seq_len(totalModels),
               .packages = c("ranger", "magrittr")) %do% {
          id <- rminer::holdout(y = iris$Species, ratio = 2/3)
          x.test <- iris[id$ts, -ncol(iris)]
          y.test <- iris[id$ts, ncol(iris)]
          model <- ranger(Species~., data = iris[id$tr, ], 
                          write.forest = TRUE)
          pred <- predict(model, x.test)$predictions
          acc <- sum(pred == y.test) / length(y.test)
          list(Acc = acc, mod = model) 
        }
for (i in 1:totalModels) {Acc[i] <- res[[i]]$Acc}
Acc
 [1] 0.9803922 0.9607843 0.9803922 0.9607843
 [5] 0.9607843 0.9215686 1.0000000 0.9411765
 [9] 0.9019608 0.9607843 0.9803922 0.9607843
[13] 0.9803922 0.9215686 0.9607843 0.9215686
[17] 0.9803922 0.8823529 0.9411765 0.9803922
[21] 0.9607843 0.9215686 0.9607843 0.9411765
[25] 0.9411765 0.9607843 0.9411765 0.9607843
[29] 0.8823529 0.9019608 1.0000000 0.9411765
[33] 0.9215686 0.9803922 1.0000000 0.9607843
[37] 0.9411765 0.9803922 0.9607843 0.9215686
[41] 0.9411765 0.9607843 0.9411765 1.0000000
[45] 0.9607843 0.9411765 0.9215686 0.9411765
[49] 0.9803922 0.9607843

Escolha os modelos com o melhor desempenho e trabalhe com eles a partir daí.

Boa sorte.

 
Vladimir Perervenko:

Algumas ideias sobre o código:

1. Você não precisa usar para() a menos que seja absolutamente necessário. Existe uma maravilhosa alternativa ao foreach() que, além da alta velocidade de execução, permite fazer cálculos paralelos entre os núcleos disponíveis.

2) O conjunto de modelos faz sentido e só dá resultados se os modelos tiverem diferenças significativas. Duas variantes: um conjunto de dados - modelos diferentes (RF, DT, SVM); um modelo - conjuntos de dados diferentes. Um exemplo para esta última opção está abaixo

Escolha modelos com melhor desempenho e trabalhe com eles.

Boa sorte.

Eu gostaria de te ver mais vezes. Não desapareça.
 
Vladimir Perervenko:


Depois escolhemos o modelo com os melhores indicadores e trabalhamos com eles.


É aqui que reside o problema.

Qual é o melhor desempenho com base em que dados?

Por que eu pergunto, porque a Vkontas está tentando descobrir como escolher um modelo (entre muitos modelos) usando dados de treinamento e testes. Mas aqui você tem tão simples: pegamos os melhores indicadores e trabalhamos com eles.

 
Alexey Burnakov:

É aqui que reside o problema.

Qual é o melhor desempenho com base em que dados?

Por que eu pergunto, porque a Vkontas está tentando descobrir como escolher um modelo (entre muitos modelos) usando dados de treinamento e testes. Mas aqui você tem tão simples: pegamos os melhores indicadores e trabalhamos com eles.

O conjunto inicial é dividido em comboio/teste estratificado. No trem nós treinamos e no teste respectivamente nós testamos. Não está claro a partir do código?

Boa sorte.

 
SanSanych Fomenko:
Eu gostaria de te ver mais vezes. Não desapareças.
Infelizmente eu só tenho tempo para navegar no site de vez em quando. Eu tenho muito trabalho a fazer.
 
Vladimir Perervenko:

O conjunto inicial é dividido em comboio/teste estratificado. No comboio treinamos no teste, respectivamente, testamos. Não está mesmo claro a partir do código?

Boa sorte,

Vou tentar o rminer::holdout, obrigado pelo exemplo. Bem, pela minha experiência, se você escolher um modelo e seus parâmetros para obter o melhor resultado em uma amostra de teste, então o modelo finalmente lhe dará um resultado realmente bom na amostra de teste. Mas o resultado é normalmente muito baixo em novos dados. Estou falando especificamente de dados forex, em outras áreas esta é uma abordagem bastante normal. Eu não espero que o rminer:::espera por forex mude alguma coisa dramaticamente.
 
Dr. Trader:
Vou tentar o Rminer::holdout, obrigado pelo exemplo. Geralmente, por experiência, se escolhermos um modelo e seus parâmetros para obter o melhor resultado em uma amostra de teste - então o modelo finalmente dará um resultado realmente bom na amostra de teste. Mas o resultado é normalmente muito baixo em novos dados. Estou falando especificamente de dados forex, em outras áreas esta é uma abordagem bastante normal. Eu não espero que o rminer:::espera por forex mude alguma coisa dramaticamente.
É isso que estou a dizer. E ele não o recebeu.

Em forex, um bom teste não significa um bom desempenho fora da amostra. É por isso que as pessoas estão a lutar. Mas aqui é assim mesmo - nós pegamos os melhores resultados (e a melhor adaptação). De boa maneira )
 
Dr. Trader:
então o modelo acabará por mostrar um resultado realmente bom na amostra de teste. Mas o resultado é normalmente muito baixo em novos dados. Estou a falar especificamente de dados forex,
Alexey Burnakov:
Em forex, um bom teste não significa um bom desempenho fora da amostra. É por isso que as pessoas estão a lutar.

O mercado está a caminhar contra as suas próprias estatísticas, esta é uma teoria que tenho confirmado com a prática, é a única teoria que conheço que responde a tudo desde o porquê de o modelo não funcionar com novos dados até ao porquê de todos perderem dinheiro no mercado em primeiro lugar...

porque é que isto é tão difícil de aceitar?

Os velhos conhecimentos e hábitos são tão atenuantes para as novas informações?

por que se concentrar tanto no modelo quando a diferença de desempenho entre modelos está entre 0,5% e 5%?

nenhum modelo pode ajudar porque é tudo sobre os dados

1

já publiquei esta foto mais de uma vez mas mesmo assim.....

Veja bem! Esta é a diferença entre as previsões cumulativas de compra e venda de duas redes cum(buy.signal) - cum(sell.signal), idealmente se o nosso modelo for bom então o gráfico azul deve estar correlacionado com o preço, significa que a rede entende bem os dados e reage adequadamente a eles, na verdade o que vemos????????

Não se pode dizer que o modelo não entende os dados, embora a correlação seja inversa, mas a estrutura é idêntica, mas o mercado se move contra as previsões e contra as estatísticas em que a rede foi treinada no passado...

Agora diga-me, que modelo o pode gerir? Que validação cruzada pode ajudar aqui? qualquer treinamento de modelo seguido por fora de amostra (novos dados) não seria nada mais que um ajuste de um modelo que funciona bem fora de amostra e nada mais... E você vê o tempo todo quando você mesmo treina modelos, que em novos dados o modelo sempre falha, não vê?! ? Eu te dou a resposta porque isso acontece!

 

É este o gráfico com os dados em que se realizou o treinamento em si, ou é apenas um teste aos novos dados? Se você desenhar um gráfico para ambos os períodos de tempo ao mesmo tempo, tanto para treinamento como para teste, então na primeira parte (treinamento) dos dados haverá uma sobreposição completa de gráficos azuis e cinzas, e quando novos dados começam, haverá uma mudança brusca para a correlação inversa?

Se fosse assim tão simples, bastaria treinar qualquer modelo, e apenas inverter as suas previsões. Isso, infelizmente, não funciona.
Ensinar um modelo que dá 0% de precisão em novos dados é tão difícil quanto conseguir 100% de precisão. A virada padrão de uma moeda, por exemplo, é 50% de precisão, e escapar com algumas dezenas de por cento em qualquer direção é igualmente difícil. O problema não é que os modelos dão resultados opostos, mas que algumas barras dão resultados correctos, outras dão resultados errados, e tudo isto é aleatório e não há forma de filtrar apenas os resultados correctos.

E por que você subtrai a previsão S da previsão B? Talvez devesses fazer o oposto, S-B? Então a correlação também se tornaria subitamente correcta.

Razão: