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

 
Vladimir Perervenko:


PS. E parallelizzare il calcolo di lm(). Questo è proprio il momento giusto per farlo.

Grazie.

Ho visto come parallelizzare un'operazione in un ciclo attraverso foreach %dopar%. Non so come agganciarlo a un anello nascosto in DT. Non so se può essere più veloce o meno.

 
Alexey Burnakov:

Grazie.

Ho visto come parallelizzare un'operazione in un ciclo attraverso foreach %dopar%. Non so come attaccarlo a un anello nascosto in DT. E non so se sarebbe più veloce.

Intendevo questa parte del codice.

lm_models <-    x[,
{
        lapply(c(1:20), function(x) summary(lm(data = .SD[, c(1:x, 21), with = F],    formula = V21 ~ . -1))$'fstatistic'[[1]])
}
, by = sampling
]

Foreach() invece di lapply

 

C'è qualcosa di sbagliato nei grafici che impiegano diverse decine di secondi per essere costruiti.

Controllate questo pacchetto ("nhstplot"). È veloce da disegnare e penso che sia abbastanza buono.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

 
Vladimir Perervenko:

C'è qualcosa di sbagliato nei grafici che richiedono diverse decine di secondi per essere costruiti.

Controllate questo pacchetto ("nhstplot"). È veloce da disegnare e penso che sia abbastanza buono.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

Gli darò un'occhiata. Ma dov'è la semitrasparenza qui, dove sono le centinaia di oggetti sovrapposti? Testatelo in condizioni pesanti e poi capiremo se è più veloce o no.
 
Vladimir Perervenko:

Ahh. Lo proverò, grazie. Risulta che il ciclo lapply sarà sostituito da un ciclo parallelo. E tutto gira in un ciclo DT con 1000 iterazioni.

Oppure c'è un altro modo per saltare queste 1000 iterazioni attraverso foreach.

 
Alexey Burnakov:
Darò un'occhiata, naturalmente. Ma dov'è la semitrasparenza qui, dove sono le centinaia di oggetti sovrapposti? Prova in condizioni pesanti e poi capiremo se è più veloce o no.

Il disegno semi-trasparente veloce può essere ottenuto con una scheda grafica OpenGL. In R c'è una libreria rgl per questo, è più per il 3d, ma se puoi fare la proiezione ortogonale e disegnare linee, sarà proprio quello che ti serve. Non l'ho capito subito, bisogna leggere la documentazione.

Capito:

È abbastanza facile disegnare linee semitrasparenti, avete solo bisogno di una tabella con le coordinate X e Y. Si potrebbe anche aggiungere una terza colonna Z per la tridimensionalità.

library(rgl)
for(i in 1:1000){
    lines3d(cbind(1:1000, cumsum(rnorm(1000))), col="blue", alpha=0.1)
}

Ma si è rivelato lento lo stesso. A giudicare da procesexplorer - il video è usato solo dal 5%, mentre un processore logico è al 100%. Penso che R sia troppo lento nel fornire dati a OpenGL, molto più lento di quanto possa ricevere. In qualche modo è venuto fuori così.

Solo per il gusto di ingombrare :) fallo, massimizza la finestra a schermo intero, e gira "figura" con il tasto sinistro del mouse.

library(rgl)
for(i in 1:100){
    lines3d(cbind(cumsum(rnorm(100)), cumsum(rnorm(100)), cumsum(rnorm(100))), alpha=0.2)
}
 
Si potrebbe fare così. Togli un centinaio di righe a caso. E le distribuzioni sarebbero piene. Sarebbe molto più veloce
 

Ho finalmente fatto la prima prova dell'idea del cluster che ho annunciato prima, è una prova, solo per vedere come va, i predittori sono semplici

serie mobile di 5 valori OHLC + volume + volatil 6 predittori di 5 valori ciascuno

imparare la storia 100 000 bar

ogni predittore è stato normalizzato, naturalmente) e poi raggruppato in 100 cluster, scusate il nonsense

L'obiettivo è stato creato di punto in bianco (al momento mi sono appena seduto), ho semplicemente preso l'inversione in questa forma: Il target è un estremo superiore alle 4 candele precedenti e superiore alle 10 candele successive.

Ho iniziato a cercare dei modelli che si ripetono...

Il meglio che ho trovato con tali predittori è il seguente schema

open high low close volum volat target_avg target_count
91      30  41    91    100   0.4        9

in(open high low close volum vol um) sono i numeri di cluster che caratterizzano questo modello

target_avg - questa è la probabilità che la mia inversione sia innescata in questo modello. Non sono riuscito a trovare nessun modello con l'80-90% di probabilità di innescare secondo questi predittori

target_count - ilnumero di volte che il modello è stato catturato nella storia, non ho trovato alcun modello significativo, che è stato catturato 30-50 volte utilizzando questi predittori

La cosa migliore che ho trovato con questi predittori è un pattern, in cui l'inversione (target) si innesca il 40% delle volte e ci sono solo 9 osservazioni (numero di pattern)

Quindi è forse l'unico pezzo di informazione utile, il "NO BLOW" richiesto, che può essere estratto dall'insieme dei predittori e spiega solo una ragione per l'inversione e anche quella è il 40% di essa e diverse ragioni per diverse inversioni e non ce ne sono sicuramente 10 o 30 imho.

E ora pensate a come l'algoritmo MO possa spiegare tutti i movimenti del mercato con tali predittori, è impossibile, perché i predittori possono spiegare solo il 2% e il resto è rumore...

in più non c'è controllo della ricorrenza statistica, cioè IR può prendere una decisione sulla base di una o due osservazioni, e questo è vero infatti nella stragrande maggioranza dei casi sotto il 95% dei casi

Comunque, sto divagando... continuiamo su un modello, avendo stimato la qualità degli ingressi su un nuovo campione dirò così, lontano non la Mercedes ma se è un ucciso Zaporozhets poi questo approccio un nove appena da una fabbrica

La qualità degli input è molto migliore, più chiara, meno errori...

e l'altra cosa è che lo schema completo è...

open high low close volum volat
91   6    30  41    91    100

Quando ho eseguito il riconoscimento sui nuovi dati di 50 000 candele, l'algoritmo non è riuscito a trovare alcun modello di questo tipo, semplicemente non è apparso ))

Ho dovuto tagliare il modello e ho lasciato solo i prezzi

open high low close volum volat
91   6    30  41    91    100

Ho già trovato circa 20 di questi modelli

qui sono le voci nel modello, non ho scelto nulla "ala migliori voci" appena preso le foto come è nella sequenza in cui le offerte sono state fatte, non tutte le offerte naturalmente solo i primi pochi, in modo che si può valutare

й

le azioni sono belle, anche se il rischio è maggiore del previsto.

к

ricorda, è solo un modello e solo pantaloncini

Se qualcuno ha bisogno del codice, lo posterò, anche se ne dubito, è già molto chiaro
 

214 pagine sono molte per studiare/imparare. E ognuno parla di qualcosa di diverso e non sempre facile da capire).

È possibile riassumere tutte queste pagine in un post, anche se non molto breve? Tipo: obiettivo fissato, metodi di soluzione, risultati, conclusioni.

Lasciatemi dire subito che il mio modello di mercato è un processo casuale (moto browniano), o piuttosto la somma di diversi (possono essere molti) di questi movimenti con feedback. E prevedere qualcosa o cercare modelli diversi da quelli statistici è un esercizio assolutamente inutile. Cioè, qualsiasi predittore significativo semplicemente non esiste, almeno per scopi speculativi.

 
Codice, naturalmente. è interessante.