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

 
Dr. Trader:

Já coloquei exemplos de neurônica aqui, vou procurar algo adequado e refazê-lo para seus dados (e com um comitê). Eu não vou escrever palestras introdutórias, mas vou adicionar mais comentários ao código.


Desculpe, eu não entendo o significado da variável com(F,T) no laço

for(i in c(1:nrow(table))[c(F,T)]){
   ..... table[i,] ..... 
}

Isto é, este laço vai em filas iguais na mesa, mas então como é que se faz em estranhas???

 

F e T são abreviações para valores booleanos FALSO e VERDADEIRO, em princípio não importa se se escreve c(T,F) ou c(TRUE,FALSE), a primeira variante é apenas mais curta.

Se a tabela tem 10 linhas, então c(1:linha(tabela)) é apenas um vetor de c(1,2,3,4,5,6,7,8,9,10).
E as arrays com valores booleanos, neste caso, vão loop até o comprimento exigido, você recebe c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE).

i.e. c(1:nrow(table))[c(F,T)] R irá entender como
c(1,2,3,4,5,6,7,8,9,10)[c(VERDADEIRO,FALSO,VERDADEIRO,FALSO,VERDADEIRO,FALSO]
e leva em ordem os elementos vetoriais que combinam com VERDADEIRO.

Por exemplo, se quisermos tomar cada terceiro elemento, podemos escrevê-lo como
c(1,2,3,4,5,6,7,8,9,10) [c(FALSO,FALSO,VERDADEIRO,FALSO,FALSO,FALSO,VERDADEIRO,FALSO]
ou abreviado
c(1:10)[c(F,F,T)]


Para elementos ímpares basta trocar T e F: c(1:nrow(table))[c(T,F)].

 
Dr. Trader:

F e T são abreviações para valores booleanos FALSO e VERDADEIRO, em princípio não importa se se escreve c(T,F) ou c(TRUE,FALSE), a primeira variante é apenas mais curta.

Se você tem 10 linhas na tabela, então c(1:nrow(table)) é apenas c(1,2,3,4,5,6,7,8,9,10) vetor.
E as arrays com valores booleanos, neste caso, vão loop até o comprimento exigido, você recebe c(TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,TRUE,FALSE,FALSE,TRUE,FALSE).

i.e. c(1:nrow(table))[c(F,T)] R irá entender como
c(1,2,3,4,5,6,7,8,9,10)[c(VERDADEIRO,FALSO,VERDADEIRO,FALSO,VERDADEIRO,FALSO]
e leva em ordem os elementos vetoriais que combinam com VERDADEIRO.

Por exemplo, se quisermos tomar cada terceiro elemento, podemos escrevê-lo como
c(1,2,3,4,5,6,7,8,9,10) [c(FALSO,FALSO,VERDADEIRO,FALSO,FALSO,FALSO,VERDADEIRO,FALSO]
ou abreviado
c(1:10)[c(F,F,T)]


para elementos ímpares basta trocar T e F: c(1:nrow(table))[c(T,F)]

Obrigado por não se preocupar em escrever descrições tão detalhadas. De facto, muita coisa se torna clara. Até tenho vergonha de perguntar, mas vou decidir. A essência do problema é a seguinte.....

O arquivo de treinamento consiste no mesmo número de aulas por alvo. Em outras palavras, eu tenho 24 uns e 24 zeros no alvo. Mais uma vez, eu quero fazer como Reshetov.....

Eu dividi a tabela de treinamento em duas tabelas, uma com todos os vetores onde o alvo é 1 e a outra onde o alvo é 0.

Eu pego a tabela com o alvo 1 e depois preciso criar duas sub-mesas, onde mesmo vetores numerados escrevem para o Train1, e os ímpares para o Train2.

Primeiro fazemo-lo para os números pares.

for(i in c(1:nrow(Qwe_true))[c(F,T)]){
  Train1[i,]<-Qwe_true[i,]
  }

Mas então a tabela do Train1 contém linhas c NA, e o Train1 foi criado com 12 linhas, porque apenas 12 de 24 linhas são iguais. Não tenho ideia de como fazer isso....

 

Por favor, por favor.

Para R você precisa de uma maneira diferente de pensar, você precisa operar mentalmente os vetores, então o código é bastante simples de escrever. Os profissionais escrevem tais coisas em uma linha, que eu nem entendo, e eu mesmo escreveria ciclos em várias linhas.

Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ])
Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T)], ], Qwe[which(Qwe[, "target"]==0)[c(F,T)], ])

em etapas -
which(Qwe[, "target"]==1) - o número de linhas com o alvo 1
which(Qwe[, "target"]==1)[c(T,F)] - número de linhas com o target1, saltando 1
Qwe[que(Qwe[, "alvo"]==1)[c(T,F)], ] - a tabela foi obtida de Qwe, com um alvo 1 com um espaço em 1
rbind(... , ...) - fundir duas tabelas (com o alvo 1 e com o alvo 0)

 
Dr. Trader:

Por favor, por favor.

Para R você precisa de uma maneira diferente de pensar, você precisa operar mentalmente os vetores, então o código é bastante simples de escrever. Os profissionais escrevem coisas em uma linha que eu nem entendo, e eu mesmo escreveria ciclos de várias linhas.

Train1 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(T,F)], ], Qwe[which(Qwe[, "target"]==0)[c(T,F)], ])
Train2 <- rbind(Qwe[which(Qwe[, "target"]==1)[c(F,T)], ], Qwe[which(Qwe[, "target"]==0)[c(F,T)], ])

Você é apenas um monstro. Duas linhas, isso é um peso fora da tua mente. Muito bem, vou continuar a trabalhar nisso... Obrigado!

 
Sexta-feira à noite... a minha cabeça não está a sentir-se muito bem. Que tal testar a teoria em conjunto.... Com a sua capacidade de escrita R e as minhas capacidades de resolução de problemas (precisão), poderíamos ter verificado tudo em meia hora? Há tempo? Dr.Trader
 
Não, continua a aprender. Eu ajudo se houver alguma dúvida.
 

Mais duas amostras precisam de ser adicionadas a estas duas.

MLP1=Trem1+Teste(Comboio2)

MPL2=Trem2+Teste(Trem1)

Se somarmos Test(Train2)+Test(Train1), obtemos o resultado de toda a secção de treino, e esta secção será um teste, para cada um dos polinómios.

Talvez demore algum tempo, se não for possível neste momento. Mas é meia hora e já te certificaste. Eu só quero fazer um espelho. Vou pegar no mesmo ficheiro e ensiná-lo de duas maneiras. Depois atiramos tudo para o local de controlo e vemos tudo. O que você diz?

 

você pode combinar as tabelas usando a função rbind()
MLP1 <- rbind(Train1, Test)

O que é Teste(Train2)? E porque é que a mesa de treino e a mesa de testes devem ser combinadas? O teste deve ser separado, a fim de testar o modelo treinado sobre ele.

Nem tudo sairá tão fácil e rápido quanto você quer. No modelo Reshetov você pode simplesmente alimentar os dados, e o modelo em si irá peneirar os preditores, determinar pesos, número de neurônios, e assim por diante. Mas você não pode fazê-lo com neurônios regulares, você precisa selecionar parâmetros para neurônios por validação cruzada, por exemplo como no exemplo que escrevi aqui hoje, ou como em artigos de Vladimir Perervenko.


Veja novamente o que eu escrevi lá -https://www.mql5.com/ru/forum/86386/page753#comment_6821981
Basta colar nesse código os seus dados como descrito e executar. Se todos os preditores forem tomados um a um e não eliminados, então desde a primeira vez será provavelmente muito mau. Após executar o comando de execução de códigomax(gaResult@fitness) adicionalmente, isto mostrará a pontuação R2 do melhor modelo encontrado pela genética. Se a estimativa for perto de 1 ou inferior é bom, se for perto de 0 ou mesmo negativo é mau.

Depois emPREDICTOR_COLUMNS especifique o número exacto de colunas que identificou como boas, e mais uma vez execute o código, o modelo será treinado apenas sobre estes preditores. O ideal é que a melhor avaliação do modelo por genética seja próxima de 1 e que a exatidão na tabela de treinamento e teste seja de 1,00.

A tabela de teste deve ser cronometrada estritamente após os dados de treinamento, como se este modelo já estivesse sendo negociado no mercado.

Se nada de bom acontecer com esse código (mesmo comKFOLDS=10) - então não é bom. Se funcionar, então há uma boa alternativa ao modelo Reshetov e podemos ordenar ainda mais o código e exportar o modelo para o mql.

 

Meu ponto é que se você fizer algo como no modelo Reshetov, adicionar algo extra, então pegue um neurônio comum e, de alguma forma, misture-o com os passos anteriores, e espere que tudo funcione como o Reshetov - vai se tornar um processo longo e fútil, o que eu definitivamente não subscrevo.

Se eu quiser o mesmo resultado do Reshetov, mas em R, então eu tenho que reescrever todo o código java do modelo em R.

Mas há muitas alternativas. Se eles trabalham ainda melhor que o Reshetov, então é perfeito, você não precisa de mais nada, está tudo pronto.

Razão: