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

 

Ecco il codice per trovare i parametri arym, potete trovarlo nel post atacha al link. Ho corretto un po' il primo post, ho sostituito il primo esempio più fallimentare con uno normale.

  arimaModel <- auto.arima(y = ts(DT$value[trainIndexes],frequency=48),
                           seasonal.test = "ocsb",
                           trace=TRUE,
                           stepwise = FALSE,
                           max.q = 48, 
                           max.order = 48+5
                         )

La funzione auto.arima cerca da sola i parametri p d q P D Q adatti
ts(DT$value[trainIndexes],frequency=48) # i dati sono convertiti in qualche formato dal pacchetto forecast, la cosa principale è specificare la frequenza, altrimenti la stagione non sarà usata
seasonal.test = "ocsb" # google dice che è meglio, non sono sicuro
stepwise = FALSE #false permette una ricerca più completa. il valore predefinito di true significherebbe che la ricerca è probabile che si blocchi al minimo locale e si fermi
max.q =48 #valore massimo di q nella ricerca. valore predefinito == 5, per questi dati è basso
max.order = 48+5 # somma massima p+q+P+Q. valore predefinito == 5, non sufficiente per questi dati

La funzione richiederà molto tempo, ma alla fine dovrebbe recuperare gli stessi parametri che ho usato io, forse anche trovarne di migliori.

Non ho aspettato che questa funzione trovasse tutto, ho solo scelto intuitivamente i parametri giusti. I dati hanno una tendenza, quindi p = 1 e P = 1. E il grafico mostra periodi prevalenti 24 e 48, quindi q = 24, e Q = 48 / frequenza = 1
Non potevo più inserire il periodo 336 in arim, richiede una seconda stagionalità, il pacchetto di previsioni non sa come farlo.

Arima con parametri già noti p d q P D Q viene creato così:

Arima(y = ts(DT$value[trainIndexes],frequency=48), order = c(1, 0, 24), seasonal = c(1, 0, 1))

la stagionalità non è in realtà (1,0,1), ma (1,0,48) perché Q è in qualche modo dominato da



SanSanych Fomenko:

Discutere di arima senza analizzare il residuo su ARCH è un esercizio completamente vuoto. Ci sono alcune serie che hanno un residuo stazionario dopo una simulazione ARCH. Ma discutere dell'errore di previsione sul presupposto che sia stazionario non è grave. Questo residuo è estremamente sfaccettato.

Sì, sono d'accordo, è solo che questi dati sono molto ciclici e semplici, quindi arima funziona senza problemi. Se incollo eurusd m30 nello stesso codice, il modello non entra in forti salti di prezzo con i nuovi dati.
 
Ildottor Trader:

Ecco il codice per trovare i parametri arym, potete trovarlo nel post atacha al link. Ho corretto un po' il primo post, ho sostituito il primo esempio più fallimentare con uno normale.

la funzione auto.arima cerca da sola i parametri p d q P D Q adatti
ts(DT$value[trainIndexes],frequency=48) # i dati sono convertiti in qualche formato dal pacchetto forecast, la cosa principale è specificare la frequenza, altrimenti la stagione non sarà usata
seasonal.test = "ocsb" # google dice che è meglio, non sono sicuro
stepwise = FALSE #false permette una ricerca più completa. il valore predefinito di true significherebbe che la ricerca è probabile che si blocchi al minimo locale e si fermi
max.q =48 #valore massimo di q nella ricerca. valore predefinito == 5, per questi dati è basso
max.order = 48+5 # somma massima p+q+P+Q. valore predefinito == 5, non sufficiente per questi dati

La funzione richiederà molto tempo, ma alla fine dovrebbe recuperare gli stessi parametri che ho usato, forse anche trovarne di migliori.

Non ho aspettato che questa funzione trovasse tutto, ho solo scelto intuitivamente i parametri giusti. I dati hanno una tendenza, quindi p = 1 e P = 1. E il grafico mostra periodi prevalenti 24 e 48, quindi q = 24, e Q = 48 / frequenza = 1
Non potrei più inserire il periodo 336 in arim, per questo ho bisogno della seconda stagionalità, le previsioni del pacchetto non possono farlo.

Arima con parametri già noti p d q P D Q viene creato così:

la stagionalità non è in realtà (1,0,1), ma (1,0,48) perché Q è in qualche modo dominato dalla frequenza



Sì, sono d'accordo, è solo che questi dati sono molto ciclici e semplici, quindi arima funziona senza problemi. Se incollo eurusd m30 nello stesso codice, il modello non entra nei picchi di prezzo con i nuovi dati.
Non ero interessato a questi pparametri "Ottimali", i parametri che i coefficienti nell'equazione di regressione - stampano dopo il fitting
 
summary(arimaModel)
Series: ts(DT$value[trainIndexes], frequency = period) 
ARIMA(1,0,24)(1,0,1)[48] with non-zero mean 

Coefficients:
         ar1     ma1     ma2     ma3     ma4     ma5     ma6     ma7     ma8     ma9    ma10    ma11    ma12    ma13    ma14    ma15    ma16    ma17    ma18
      0.8531  0.3469  0.3324  0.3512  0.3564  0.3176  0.2676  0.2223  0.1904  0.2015  0.2241  0.2529  0.2424  0.2383  0.2408  0.2507  0.2279  0.1701  0.1418
s.e.  0.0316  0.0350  0.0413  0.0462  0.0506  0.0542  0.0559  0.0554  0.0537  0.0514  0.0494  0.0481  0.0477  0.0469  0.0455  0.0451  0.0448  0.0439  0.0415
        ma19    ma20   ma21     ma22     ma23     ma24    sar1     sma1       mean
      0.0813  0.0525  0.028  -0.0152  -0.0226  -0.0159  0.9899  -0.4300  1816.9447
s.e.  0.0390  0.0358  0.032   0.0280   0.0224   0.0180  0.0015   0.0132   687.9652

sigma^2 estimated as 1442:  log likelihood=-23883.84
AIC=47825.68   AICc=47826.05   BIC=48012.95

Training set error measures:
                     ME     RMSE      MAE         MPE     MAPE      MASE         ACF1
Training set -0.1648644 37.86381 25.64976 -0.07217873 1.573367 0.1610166 0.0002493082
File:
arimaModel.zip  140 kb
 
Ildottor Trader:

È uno strano tavolo.

Ciononostante.

Confrontare il valore del coefficiente con la s.e. Con poche eccezioni più del 10%. Per qualche motivo non vedo una stima via t, ma a testa alta, quel 10% significa:

L'ipotesi nulla sulla stima del coefficiente: la probabilità che il coefficiente non sia significativo. Una deviazione superiore al 10% dice che tutti questi coefficienti NON sono significativi, cioè non avete un'equazione di regressione.


PS.

Di solito i coefficienti che sono significativi sono contrassegnati da asterischi. Poiché i coefficienti NON sono significativi, tutti gli altri numeri sono solo numeri.

hist(residuals(arimaModel), breaks= 100)


La ragione per cui i coefficienti NON sono significativi è perché la coda a sinistra è più spessa di quella a destra.

Ci sono test che permettono di identificare quantitativamente i problemi, non a occhio, e prendere gli strumenti per risolverli.

Conclusione:

Il modello ARIMA non è applicabile alla serie temporale utilizzata.

 
Maxim Dmitrievsky:

Nel mercato, qualsiasi classificatore viene riqualificato perché il mercato non è stazionario. Se vogliamo che non impari troppo, dobbiamo insegnare la NS per tutta la storia. Altrimenti sarà sempre il caso che il ciclo del mercato è cambiato e il modello è corrotto. L'unico approccio saggio è l'overtraining o il retraining nel processo di trading :) Non crediamo nelle bobine, che danno costantemente 1000% di profitto mensile sulla storia di 15 anni senza alcun intervento.

In generale, ancora non vedo quel bordo - cosa fa overtrained NM nel forex. È quando non si guadagna su un campione di prova? nah nah... no no no... si tratta di non stazionarietà. Se non sapete come controllarlo, non è pratico, non è realistico.


Qui hai assolutamente ragione, come puoi parlare di riqualificazione quando non conosci il concetto stesso???? Cosa intendi per NS riqualificato? Ognuno butta fuori come lo vede, e io vado per primo.

1. NS non funziona bene sui nuovi dati. Per implicazione non divide coerentemente i segnali, non importa giusto o sbagliato, ciò che conta è la stabilità di separare il cattivo dal buono.... Può drenare costantemente (inversione di modello), ma il fatto stesso di separare il male dal bene è in apparenza.

2. Il modello ha funzionato bene per meno della metà dell'intervallo di allenamento. L'implicazione di questo approccio è che un modello ben addestrato dovrebbe eseguire il 50% o più dell'intervallo di allenamento.

3.Balance curva sui nuovi dati ha forti alti e bassi (modello casuale funziona in un determinato periodo di tempo e ha portato alla redditività a causa di 1-2 grandi offerte, ma in generale l'affondatore)

E a proposito di classificazione, ecco la mia risposta.

NOT STATIONARY è un valore che cambia dolcemente, non appena una barra si è chiusa, inizia ad allontanarsi lentamente. E più la barra diventa nella storia, più questo famigerato valore STAZIONARIO (un simbolo di qualche caos o valore etereo che cambia il mercato in generale) diventa, quindi se insegniamo il modello di classificazione, otterremo che questo valore dipende direttamente dalla qualità del modello. Più vecchio è il modello, più basso è il suo livello di qualità, secondo il cambiamento di questo molto NON STAZIONARIO. L'obiettivo è quello di costruire un tale modello, che funzionerebbe abbastanza a lungo, che si potrebbe ottenere un paio di pips da esso :-)

 
Mihail Marchukajtes:

Cosa intende per "riqualificato" NS?

I dati per l'addestramento, specialmente nel forex, sono di solito rumorosi, e addestrando il modello al 100% di precisione gli insegniamo a riprodurre quel rumore insieme al risultato desiderato. E abbiamo bisogno che l'addestramento si fermi nel momento in cui il NS inizia a prevedere correttamente il risultato, ma non inizia a memorizzare le risposte corrette insieme al rumore. Nelle mie parole. Scientificamente,https://ru.wikipedia.org/wiki/Переобучение.


https://commons.wikimedia.org/wiki/File:Overfitting.svg

Ecco una buona illustrazione. Due modelli,
il primo (la linea del corridoio) ha appreso questi dati con una precisione del 100%. Ad occhio possiamo vedere che molti punti sul confine dello spazio rosso e blu sono spostati un po' di lato (rumore), e infatti il confine di questi due spazi non dovrebbe essere una linea spezzata, ma una specie di linea mediata.
Il primo modello viene riqualificato.
E c'è un secondo modello (linea nera) che ignora il rumore, e chiaramente per senso divide il piano.

 
Ildottor Trader:

I dati per l'addestramento, specialmente nel forex, sono di solito rumorosi, e addestrando il modello al 100% di precisione gli insegniamo a riprodurre quel rumore insieme al risultato desiderato. E abbiamo bisogno che l'addestramento si fermi nel momento in cui il NS inizia a prevedere correttamente il risultato, ma non inizia a memorizzare le risposte corrette insieme al rumore. Nelle mie parole. Scientificamente,https://ru.wikipedia.org/wiki/Переобучение.


https://commons.wikimedia.org/wiki/File:Overfitting.svg

Ecco un'illustrazione abbastanza buona. Due modelli,
il primo (linea del corridoio) ha appreso questi dati con una precisione del 100%. Ad occhio possiamo vedere che molti dei punti al confine dello spazio rosso e blu sono spostati leggermente di lato (rumore), e infatti il confine di questi due spazi non dovrebbe essere una linea spezzata, ma una sorta di media.
Il primo modello viene riqualificato.
E c'è un secondo modello (linea nera) che ignora il rumore, e chiaramente per senso divide il piano.

A volte il cervello comincia a rompersi... riguardo al rumore nel forex, non è un segnale radio, giusto? Perché dovrebbe esserci del rumore nel forex? Se il modello di Michael faceva 30-50 scambi al mese, 1-2 al giorno, era rumore di trading o cosa? In qualche modo questa definizione non si adatta qui :)

L'apprendimento eccessivo nel forex riguarda i modelli (temporali) mal classificati. Ma non ci sono altri modelli nel forex, quindi qualsiasi modello sarà sovrallenato in un modo o nell'altro

p.s. Quindi devi fare una selezione di strumenti e scegliere i BP più persistenti al momento, come azioni o indici in aumento

 

Tutto vero!!!! Ma il sovrallenamento ha anche una spiegazione matematica......

Quando ci si allena con un insegnante, si cerca di ridurre l'errore della rete sul set di allenamento. E questa riduzione dell'errore può essere infinita se si tratta di numeri reali. Ma arriva un momento in cui la riduzione dell'errore porta alla degradazione del modello anche al set di prova. Da questo possiamo trarre la seguente conclusione!

Teoricamente per ogni set di dati c'è un apprendimento assoluto, questa è una certa linea sulla scala degli errori dove 0,00000000000000000001 modello non viene riqualificato e 0,00000000000000000000009 viene riqualificato, una sorta di "zero assoluto", per dirla in termini fisici. Tutti i modelli i cui errori sono a destra di questo punto sono considerati non appresi, quelli a sinistra sono corrispondentemente sovraappresi. Lasciatemi ricordare che questa è solo una teoria della mia comprensione personale.

Questo è una specie di modello ideale per un particolare set di dati.

Il compito di qualsiasi IA è quello di avvicinarsi il più possibile al punto di imparabilità assoluta, ma non di superarlo. IMHO.


Questa teoria presuppone che non sia un punto, ma un dominio di modelli completamente addestrati e sovrallenati. Una zona mista, non abbastanza grande. Solo... immaginare...... Perché? Questo l'ho identificato dall'osservazione.

Comunque, la prima cosa che l'IA deve fare è assicurarsi di colpire questa zona di transizione. Ma ecco il fatto......

Se si divide il campione in modo stazionario allora è probabile che sia qualche valore specifico del limite di sovrallenamento (più probabile), se il campione è diviso casualmente ogni volta allora è OVER.... transitorio.... IMHO

Se l'IA non arriva in quella regione garantita, allora non è stato fatto bene. L'altra cosa è quale modello si fermerà lì!!!!

Ho ottenuto tutto questo usando JPrediction.

Iniziando ad addestrare lo stesso file, tenendo conto del campionamento casuale, ho ottenuto 10 diversi risultati di addestramento, il peggiore era 75%, il migliore 85% di generalizzazione (stiamo prendendo i numeri dell'ottimizzatore, giusto o sbagliato non è importante, ora...come esempio....) Quindi possiamo supporre di avere un'area tra 75 e 85, che contiene un numero infinito di varianti del modello, una rete neurale. Come regola io scelgo una media intorno a 80-82 e poi si può incontrare un tale modello, che su OOS sarà debole. Perché determinare il polinomio definitivo non è una cosa semplice.

Ecco un video e guardate dai 35 minuti, lì parla di esso....

https://www.youtube.com/watch?v=qLBkB4sMztk

001. Вводная лекция - К.В. Воронцов
001. Вводная лекция - К.В. Воронцов
  • 2014.12.22
  • www.youtube.com
Курс "Машинное обучение" является одним из основных курсов Школы, поэтому он является обязательным для всех студентов ШАД. Лектор: Константин Вячеславович Во...
 
Mihail Marchukajtes:

Ecco il video e guardate dal 35° minuto, parla di questo....

https://www.youtube.com/watch?v=qLBkB4sMztk


Sì, ho già visto questo tipo, lo guarderò di nuovo, thx).

Se non si capisce il senso matematico di esso, ma il senso reale - il NS sovrallenato nel Forex ha un significato completamente diverso, e non c'è fuga da tale sovrallenamento :) Questo è il motivo per cui sia l'ordinamento rigido e la ricerca di strumenti di tendenza o NS adattivo permanentemente riqualificato, ma secondo quali criteri - questa è una domanda creativa.

 
Maxim Dmitrievsky:

Sì, ho già visto quel tipo, lo vedrò ancora, grazie).

Il significato matematico è chiaro, ma il significato reale - che c'è un NS sovrallenato nel Forex ha un altro significato, e non c'è fuga da tale sovrallenamento :) Questo è il motivo per cui abbiamo bisogno o di una rigorosa selezione e ricerca di strumenti di tendenza o di NS adattativi permanenti riqualificati, ma secondo quali criteri - è una questione creativa qui.


Il vero punto, però, è questo. Se c'è una cattiva spaccatura sulla sezione di prova, NON importa se la spaccatura è corretta o meno, il fatto che la spaccatura sia debole. E il modello ha lavorato non più del 50% dell'intervallo di allenamento, allora tale modello è considerato sovrallenato.... IMHO

Motivazione: