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

 
elibrarius:

Acho que o número de negócios não precisa de ser contado aqui. Basta subtrair o spread e a comissão de cada comércio. É assim que as coisas são:

Não é assim que funciona, tens de contar de qualquer maneira.

 
Vladimir Perervenko:

Sim, o teu é mais correcto.

Não) o seu é mais correcto!

Porque o negócio que foi aberto "antes" (a abertura não caiu no nosso vector)

significa que a comissão foi retirada "mais cedo". mas não no vector actual

mas estes são pequenos detalhes...

 

para aqueles com 2 horas de tempo


 
mytarmailS:

para aqueles que têm duas horas de tempo.


Do que se trata?

 
mytarmailS:

para aqueles que têm 2 horas de tempo


Aprimorando os cérebros dos jovens com suas fantasias esquizóides e falsas conclusões.

 
mytarmailS:

Não) o seu é mais correcto!

porque o negócio que foi aberto "antes" (a abertura não caiu no nosso vector)

significa que a comissão foi retirada "mais cedo". mas não no vector actual

mas estes são pequenos detalhes.

Isto são realmente triviais, excepto por duas coisas. A primeira é a velocidade de execução:

cnt<-function(x){
    n <- 1:(length(x)-1)
    cnt <- 0
    for(i in n) {if(x[i]!=x[i+1]) {cnt<-cnt+1}}
    return(cnt)
}
cnt1 <- function(x){
    length(rle(c(x))$values)
}

sig <- rep(c(1,1,1,-1,-1,-1), 3000)

bench::workout({
    c <- cnt(sig)
    c1 <- cnt1(sig)
})
# A tibble: 2 x 3
  exprs            process     real
  <bch:expr>      <bch:tm> <bch:tm>
1 c <- cnt(sig)     15.6 ms   9.21 ms
2 c1 <- cnt1(sig)        0   1.15 ms

A segunda é 15 vezes mais rápida. E se ela estiver envolvida numa função de fitness que é chamada dezenas de milhares de vezes, perderemos muito tempo.

Segundo ponto. Tudo está bem se tivermos duas condições Comprar/Vender/ Mas como regra geral, o TS gera três sinais - Comprar/Vender/Reter (1, -1, 0). E então a segunda variante não funciona. E a primeira variante com uma ligeira modificação

sig <- rep(c(1,1,1,-1,-1,-1,0,0,0), 3000)
> length(sig)
[1] 27000
cnt<-function(x){
    n <- 1:(length(x)-1)
    cnt <- 0
    for(i in n) {if(x[i] != x[i+1] & x[i+1] != 0) {cnt<-cnt+1}}
    return(cnt)
}
bench::workout({
    op <- cnt(sig)
    op1 <- cnt1(sig)
})
# A tibble: 2 x 3
  exprs             process     real
  <bch:expr>       <bch:tm> <bch:tm>
1 op <- cnt(sig)     31.2 ms  17.43 ms
2 op1 <- cnt1(sig)        0   3.23 ms
> op
[1] 5999
> op1
[1] 9000

A primeira variante mostrará o resultado correto (embora lento), e a segunda considerará a saída da posição como um negócio, o que é errado.

 
Vladimir Perervenko:

São coisas muito pequenas, se não considerarmos duas coisas. A primeira é a velocidade de execução:

Eu concordo completamente...

Existem formas de treinar redes ou florestas com função de aptidão?
 
mytarmailS:

concordar completamente...

Existe alguma forma de treinar uma rede ou um andaime com uma função de aptidão?

A função fitness calcula o valor do critério de optimização durante o processo de optimização. Não tem nada a ver com o treino de modelos.

 

precisamos de poupar o catbust multiclasse na metaq para adicionar "no trading".

a gama de estratégias irá aumentar

 

Adicionei um novo cálculo de balanço e função de comissão à função fitness...

Acho que o algoritmo está agora a tentar minimizar o número de negócios para salvar a comissão... como resultado, menos negócios resultam em menos experiência...

Aqui estão os gráficos, você pode ver claramente que quando há poucos ofícios, o aprendizado não funciona...

cinza é TRAIN 1500 pips

o preto é o TESTE 500 pontos

Este tinha poucos negócios, o algo não aprendeu nada, é de muito baixa frequência...


É divertido conhecer os pontos de entrada com 2 dias de antecedência ))

Mas provavelmente é melhor reciclar o tempo todo, ainda não sei como testar tudo.