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

 
Renat Fatkhullin:

R è un sistema incredibile, che personalmente mi ha aperto gli occhi su quanto fossimo lontani in MetaTrader/MQL dalle reali esigenze di "rendere i calcoli complessi semplici e subito".

Noi (sviluppatori C++) abbiamo nel sangue l'approccio "tu puoi fare tutto da solo e noi ti diamo la base di basso livello e la velocità dei calcoli". Siamo fanatici delle prestazioni e siamo bravi a farlo - MQL5 è ottimo su 64 bit.

Quando ho iniziato a lavorare io stesso su R mi sono reso conto che avevo bisogno di quante più funzioni potenti possibili in una linea e di poter fare ricerca in generale.

Quindi abbiamo preso una brusca svolta e abbiamo iniziato ad aggiornare MetaTrader 5:

  • incluso le librerie matematiche precedentemente riscritte Alglib e Fuzzy nella fornitura standard, coperte da test unitari
  • sviluppato un analogo delle funzioni statistiche da R, eseguito test e coperto con test. il lavoro è ancora in corso e la libreria è in espansione
  • ha sviluppato la prima versione beta della libreria Graphics come analogo di plot in R. ha aggiunto funzioni a linea singola per un output veloce
  • hanno iniziato a cambiare le interfacce nelle finestre di output del terminale, in modo da poter operare con dati tabulari. Hanno cambiato la direzione dell'output, aggiunto la disabilitazione delle colonne non necessarie, cambiato il carattere in monospaziato nella finestra di output di Expert Advisor
  • è stata aggiunta una potente funzione ArrayPrint per la stampa automatica degli array, comprese le strutture.
  • aggiunte le funzioni FileLoad e FileSave per caricare/scaricare rapidamente gli array su disco.


Certo, siamo all'inizio del cammino, ma il giusto vettore di sforzi è già chiaro.

La tua motivazione è grande! Se è esattamente come dici tu, si fa presto a mordere il ninja all'osso c multichart)))

Tuttavia, IMHO, qui dobbiamo creare qualcosa di radicalmente nuovo, cioè, oltre a quello che ha scritto, signor Reshetov, è necessario proprio uno studio di ricerca, per lavorare con set di dati arbitrari, non solo scaricabili dal mercato, perché molte cose hanno bisogno di provare esempi molto banali e sintetici per capire cosa succede, beh, dovrebbe capirmi come programmatore programmatore)) Avrei bisogno di disegnare diversi grafici, scatter, hitmap, distribuzioni e così via. In generale, sarebbe davvero bello se un tale insieme di strumenti fosse disponibile direttamente da MetaEditor, ma francamente parlando, non ho speranze...

Ma in generale, naturalmente, mi piace la tendenza dei tuoi pensieri))

 
Renat Fatkhullin:

Era una risposta educata senza dettagli o verifiche. E la risposta non corrispondeva a Wolfram Alpha e Matlab, il che è un problema.

Non c'è bisogno di fare un passo indietro - la questione di fondo è stata chiaramente esposta.

Cosa vuol dire che la sua risposta non corrisponde a Wolfram? Non corrispondeva al fatto che la risposta della persona non era "zero"? L'uomo ha risposto che non pensava che nel punto zero, dove l'integrale = 0, la densità debba necessariamente essere zero (gli ho posto la domanda in questo modo). L'ha detto esplicitamente. E ha aggiunto che il valore della densità in qualsiasi punto è irrilevante (ho letto "irrilevante" come irrilevante per la questione in questione). Questa è un'affermazione matematica abbastanza chiara.

Nella questione in questione, la matematica è importante.

Abbiamo l'integrale della funzione così e così (funzione di densità di probabilità della distribuzione gamma). Tutti sono abituati al fatto che si può dare a Wolfram un'equazione con parametri: specificare l'area di integrazione e i parametri della funzione, e lui integrerà e darà la risposta. Ma avete mai pensato che se voi stessi vi sedeste a calcolare questo integrale su un dato dominio, otterreste 0 a zero e 1 su tutto il dominio, e qualche valore [0,1] su qualche sottoarea. Semplicemente risolvendo l'equazione!

Il fatto che il limite della funzione di densità di probabilità della distribuzione gamma vada da qualche parte nella regione positiva è una proprietà di quella funzione. Non ha niente a che vedere con ciò che si ottiene integrando quella funzione. Questo è ciò che l'uomo ha scritto.

Non sto evitando i problemi alla radice. Ribadisco che il nostro punto è stato confermato da una persona fuori dal nostro controllo - che la densità a zero non ha importanza (irrilevante).

 
Zhenya:

La tua motivazione è grande! Se tutto è esattamente come dici tu, si morde rapidamente all'osso ninja c multichart)))

Tuttavia, IMHO, qui dobbiamo creare qualcosa di radicalmente nuovo, cioè, oltre a quello che ha scritto il signor Reshetov , è necessario proprio uno studio di ricerca, per lavorare con set di dati arbitrari, non solo scaricabili dal mercato, perché molte cose hanno bisogno di provare molto banale, esempi sintetici per capire cosa succede, beh, si dovrebbe capire me come un programmatore programmatore)) Avrei bisogno di disegnare diversi grafici, scatterplot, hitmap, distribuzioni e così via. In generale, sarebbe davvero bello se un tale insieme di strumenti fosse disponibile direttamente da MetaEditor, ma francamente parlando, non ho speranze...

Ma in generale, naturalmente, mi piace la tendenza dei tuoi pensieri)))

Si riferisce a questo "tiro" di Reshetov?

"Questa R è una specie di bicicletta marcia con ruote quadrate. Cosa dire di alcuni dei suoi pacchetti, quando la base, cioè il nucleo in R è storto e ha bisogno di una seria messa a punto con un "file matita"? Che credibilità può avere chi non si è nemmeno preoccupato di controllare la correttezza delle funzioni di base in R per tanti anni? Quale può essere la "forza" nella debolezza di R - la scorrettezza dei calcoli attraverso di esso?

È bene che MetaQuotes ha aperto gli occhi di alcuni utenti al fatto e ai test con l'open source, così ognuno potrebbe indipendentemente ricontrollare e assicurarsi, piuttosto che infondato. Non tutto l'open source, naturalmente, perché alcuni fanatici religiosi della setta distruttiva di R continueranno a credere ciecamente nell'"infallibilità" dei calcoli nel loro linguaggio e pacchetti storti, invece di rivolgersi ai test presentati e ricontrollarli indipendentemente, invece di dire cazzate bigotte, difendendo la stortura di R come "standard generalmente accettato".

Ora è abbastanza ovvio che sarebbe meglio utilizzare la funzionalità MQL per creare strategie di trading, in quanto il risultato sarà più corretto, piuttosto che cercare di farlo tramite curva e pendenza R.

Un ringraziamento speciale agli sviluppatori di MetaQuotes per l'approccio costruttivo, i test e il loro codice sorgente, così come per aver identificato il "re nudo - R"!"

 
Vladimir Perervenko:

È questo il "colpo" a cui si riferisce Reshetov?

No, questo è il messaggio:

Yury Reshetov:

R, così come molti altri linguaggi, è molto più conveniente per l'apprendimento automatico di MQL perché ha una funzionalità intrinseca per elaborare i dati in array. Il fatto è che un campione per l'apprendimento automatico è molto spesso un array di dati bidimensionale, quindi ha bisogno di un funzionale per lavorare con gli array:

  1. Inserire righe e colonne come array di dimensioni più piccole in un altro array
  2. Sostituzione di righe e colonne in un array come array di dimensioni più piccole
  3. Eliminare righe e colonne da un array (per esempio, per rimuovere predittori non importanti o esempi con evidenti "outlier" da una selezione)
  4. Dividere gli array in parti, ottenendo due o più array che sono parti dell'array originale (necessario per dividere un campione in parti di training e di test, o in più parti, ad esempio per Walling Forward).
  5. Mescolare casualmente righe e colonne in una matrice con una distribuzione uniforme (è necessario che certi esempi di un campione cadano in parti diverse, preferibilmente distribuite in modo uniforme su queste parti).
  6. Varie funzioni per l'elaborazione dei dati per riga o colonna (ad esempio, calcolo della media aritmetica per riga o per colonna, varianza, o ricerca del valore massimo o minimo in una riga per un'ulteriore normalizzazione).
  7. E così via.

Fino a quando MQL non avrà implementato il suddetto funzionale necessario per gestire i campioni negli array, la maggior parte degli sviluppatori di algoritmi di apprendimento automatico preferirà altri linguaggi di programmazione che hanno già tutto questo a disposizione. Oppure useranno senza pretese MLP (algoritmo degli anni '60) dalla libreria AlgLib dove, se ricordo bene, per comodità gli array bidimensionali sono rappresentati come monodimensionali.

Naturalmente, le funzioni per le densità delle distribuzioni casuali sono anche funzionalità necessarie. Ma tali funzioni non sono sempre necessarie nei compiti di apprendimento automatico, e in alcuni compiti non sono utilizzate affatto. Ma le operazioni con i campioni come array multidimensionali sono ciò che l'implementazione degli algoritmi di apprendimento automatico è sempre necessaria per qualsiasi compito, a meno che, naturalmente, non sia un compito di insegnare a una griglia a imparare dati ovviamente normalizzati da banali CWR.

 
Vladimir Perervenko:

È questo il "colpo" a cui si riferisce Reshetov?

"Questa R è marcia - una bicicletta con ruote quadrate. Cosa dire di alcuni dei suoi pacchetti, quando la base, cioè il nucleo di R è storto e ha bisogno di una seria revisione con un "file matita"? Che credibilità può avere chi non si è nemmeno preoccupato di controllare la correttezza delle funzioni di base in R per tanti anni? Quale può essere la "forza" nella debolezza di R - la scorrettezza dei calcoli attraverso di esso?

È bene che MetaQuotes ha aperto gli occhi di alcuni utenti al fatto e ai test con l'open source, così tutti potrebbero indipendentemente ricontrollare e assicurarsi, piuttosto che infondato. Non tutto l'open source, naturalmente, perché alcuni fanatici religiosi della setta distruttiva di R continueranno a credere ciecamente nell'"infallibilità" dei calcoli nel loro linguaggio e pacchetti storti, invece di rivolgersi ai test presentati e ricontrollarli indipendentemente, invece di fare fanaticamente stronzate, difendendo la stortura di R come "standard generalmente accettato".

Ora è abbastanza ovvio che sarebbe meglio usare la funzionalità MQL per creare strategie di trading, perché il risultato sarà più corretto, piuttosto che cercare di farlo tramite curva e pendenza R.

Un ringraziamento speciale agli sviluppatori di MetaQuotes per il loro approccio costruttivo, i test e le loro fonti, così come per l'identificazione del "Naked King - R"!"

Hai già cancellato il tuo post sul "minky MQL"? Stai strofinando i tuoi post nello stesso modo in cui le figure Radoviane strofinano i loro Facebook dopo l'elezione di Trump.

 

Ecco un esempio di una distribuzione gamma in Wolfram Alpha per divertimento.

Gli viene data una funzione, una funzione di densità di distribuzione gamma leggermente semplificata.

Il punto è nel denominatore x. Il limite a destra, come potete vedere, a x->0 Wolfram stima correttamente: inf.

Cioè, nel limite a destra la densità a zero è all'infinito (questa è esattamente la risposta a dgamma).

Integriamo questa funzione sul grande saport:

L'integrale è 1 (arrotondato, ovviamente, perché non viene preso l'intero supporto).

Conclusione, nonostante il fatto che la funzione vada all'infinito nel punto estremo, l'integrale di questa funzione conta bene come dovrebbe.

 
Alexey Burnakov:

Ecco un esempio della distribuzione gamma in Wolfram Alpha, solo per divertimento.

La conclusione è che anche se la funzione va all'infinito nel punto estremo, l'integrale di quella funzione conta bene come dovrebbe.

Grazie per l'esempio, hai ragione. Questo integrale è convergente.

L'estremo nel punto x=0 può anche essere usato per determinare la densità e non porterà alla divergenza.

 
Quantum:

Grazie per l'esempio, hai ragione. Questo integrale è convergente.

I valori limite a x=0 possono anche essere usati per determinare la densità e questo non porterà alla divergenza.


Grazie! Rispetto.

 

Esempio di R con pacchetti di elaborazione rapida.

library(data.table)

library(ggplot2)


start <- Sys.time()


set.seed(1)

dummy_coef <- 1:9


x <- as.data.table(matrix(rnorm(9000000, 0, 1), ncol = 9))

x[, (paste0('coef', c(1:9))):= lapply(1:9, function(x) rnorm(.N, x, 1))]


print(colMeans(x[, c(10:18), with = F]))


x[, output:= Reduce(`+`, Map(function(x, y) (x * y), .SD[, (1:9), with = FALSE], .SD[, (10:18), with = FALSE])), .SDcols = c(1:18)]


x[, sampling:= sample(1000, nrow(x), replace = T)]


lm_models <- x[, 

{

lm(data = .SD[, c(1:9, 19), with = F], formula = output ~ . -1)$coefficients

}, 

by = sampling]


lm_models[, coefs:= rep(1:9, times = 1000)]


avg_coefs <- lm_models[, mean(V1), by = coefs]

plot(dummy_coef, avg_coefs$V1)


lm_models[, 

  print(shapiro.test(V1)$p.value)

  , by = coefs]


ggplot(data = lm_models, aes(x = V1)) +

geom_histogram(binwidth = 0.05) +

facet_wrap(~ coefs, ncol = 3)


Sys.time() - start

Tempo di esecuzione: 5 sec. Sono stati costruiti 1.000 modelli lineari. Ognuno su 1000 osservazioni.

[1] 0.8908975

[1] 0.9146406

[1] 0.3111422

[1] 0.02741917

[1] 0.9824953

[1] 0.3194611

[1] 0.606778

[1] 0.08360257

[1] 0.4843107

Tutti i coefficienti sono distribuiti normalmente.

E ggplot-ic per la visualizzazione.

 

E un altro esempio. Si riferisce anche alla rotazione di grandi campioni per la simulazione statistica.

########## simulate diffference between mean density with different sample size


library(data.table)

library(ggplot2)


rm(list=ls());gc()


start <- Sys.time()


x <- rnorm(10000000, 0, 1)

y <- rnorm(10000000, 0, 1)


dat <- as.data.table(cbind(x, y))

dat[, (paste0('sampling_', c(100, 1000, 10000))):= lapply(c(100, 1000, 10000), function(x) sample(x, nrow(dat), replace = T))]


dat_melted <- melt(dat, measure.vars = paste0('sampling_', c(100, 1000, 10000)))


critical_t <- dat_melted[, 

   {

    mean(x) - mean(y)

   }

   , by = .(variable, value)]


ggplot(critical_t, aes(x = V1, group = variable, fill = variable)) + 

stat_density(alpha = 0.5)


Sys.time() - start


gc()

Tempo di esecuzione 3,4 secondi.

Vengono creati campioni normalmente distribuiti e centrati su zero:

1.000 per 10.000 coppie di valori

10 000 su 1 000 coppie di valori

100.000 di 100 coppie di valori

Si conta la differenza tra le medie (MO == 0) per ogni campione.

Le densità delle distribuzioni delle medie di campionamento per campioni di diverse dimensioni sono derivate.

Solo qui sampling_100 significa che avete bisogno di 10.000.000 / 100 per ottenere la dimensione del campione. Cioè, per campioni più piccoli, l'errore standard è più grande...