L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 2104

 
elibrarius:

Non credo che il numero di scambi debba essere contato qui. Basta sottrarre lo spread e la commissione da ogni scambio. Le cose stanno così:

non è così che funziona, bisogna contare comunque

 
Vladimir Perervenko:

Sì, il tuo è più corretto.

No) il tuo è più corretto!

Perché l'affare che è stato aperto "prima" (l'apertura non è caduta nel nostro vettore)

significa che la commissione è stata ritirata "prima" ma non nel vettore corrente

ma questi sono dettagli minori...

 

per chi ha 2 ore di tempo


 
mytarmailS:

per coloro che hanno due ore di tempo.


Di cosa si tratta?

 
mytarmailS:

per coloro che hanno 2 ore di tempo


Stuprare i cervelli dei giovani con le sue fantasie schizoidi e le sue false conclusioni.

 
mytarmailS:

No) il tuo è più corretto!

perché l'affare che è stato aperto "prima" (l'apertura non è caduta nel nostro vettore)

significa che la commissione è stata ritirata "prima" ma non nel vettore corrente

ma questi sono dettagli minori.

Queste sono davvero delle sciocchezze, tranne due cose. Il primo è la velocità di esecuzione:

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

Il secondo è 15 volte più veloce. E se è coinvolto in una funzione di fitness che viene chiamata decine di migliaia di volte, causerà una notevole perdita di tempo.

Secondo punto. Tutto va bene se abbiamo due condizioni Buy/Sell/ Ma come regola, il TS genera tre segnali - Buy/Sell/hold (1, -1, 0). E poi la seconda opzione non funziona. E la prima variante con una leggera modifica

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

La prima variante mostrerà il risultato corretto (anche se lento), e la seconda considererà l'uscita dalla posizione come un accordo, il che è sbagliato.

 
Vladimir Perervenko:

Queste sono davvero piccole cose se non si considerano due cose. Il primo è la velocità di esecuzione:

Sono completamente d'accordo...

Ci sono modi per addestrare reti o foreste con la funzione di fitness?
 
mytarmailS:

sono completamente d'accordo...

C'è un modo per addestrare una rete o scaffold con una funzione di fitness?

La funzione di fitness calcola il valore del criterio di ottimizzazione durante il processo di ottimizzazione. Non ha niente a che vedere con l'addestramento dei modelli.

 

abbiamo bisogno di sparare il multiclasse catbust nel metac per aggiungere "non commerciare"

la gamma di strategie aumenterà

 

Ho aggiunto una nuova funzione di calcolo dell'equilibrio e di commissione alla funzione di fitness...

Penso che l'algoritmo stia cercando di ridurre al minimo il numero di scambi per risparmiare sulle commissioni... di conseguenza meno scambi si traducono in meno esperienza...

Ecco i grafici, si può vedere chiaramente che quando ci sono pochi scambi, l'apprendimento non funziona...

il grigio è TRAIN 1500 pips

il nero è il TEST 500 punti

Questo aveva pochi scambi, l'algo non ha imparato nulla, è molto a bassa frequenza...


È divertente conoscere i punti d'ingresso con 2 giorni d'anticipo ))

Ma probabilmente è meglio riqualificare sempre, non so ancora come testare il tutto