English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Le foreste casuali prevedono le tendenze

Le foreste casuali prevedono le tendenze

MetaTrader 5Sistemi di trading | 12 gennaio 2022, 11:38
157 0
СанСаныч Фоменко
СанСаныч Фоменко

Introduzione

L'obiettivo iniziale della costruzione di qualsiasi sistema di trading è prevedere il comportamento di uno strumento di mercato, ad esempio una coppia di valute. Gli obiettivi delle previsioni possono essere diversi. Ci limiteremo a prevedere le tendenze, o per essere precisi, a prevedere la crescita (posizioni lunghe) o il declino (posizioni corte) delle quotazioni delle coppie di valute.

Per prevedere il comportamento della valuta, un trader collega un paio di indicatori a un grafico di una coppia di valute e cerca di trovare un modello che abbia potere predittivo.

Questo articolo prende in considerazione la selezione automatica dei pattern e la loro valutazione preliminare utilizzando il pacchetto Rattle, che è una libreria del sistema di analisi delle statistiche R.


1. A proposito di sonaglio (Rattle)

Useremo R per prevedere il comportamento delle coppie di valute, che è l'ideale per prevedere i mercati finanziari. Detto questo, R è principalmente un linguaggio di programmazione per statistici qualificati ed è troppo difficile per molti trader. La complessità di R è esacerbata dal fatto che gli strumenti per la previsione sono numerosi e sparsi in molti pacchetti che definiscono le funzionalità di base di R.

Rattle (lo strumento di analisi R per imparare facilmente) unisce un insieme di pacchetti R, importanti per lo sviluppo di sistemi di trading ma non facili da usare separatamente dai principianti. Non è necessario conoscere e comprendere R per iniziare a lavorare con Rattle. Il risultato del lavoro con Rattle sarà il codice in R, che può essere utilizzato per sviluppare un vero sistema di trading. Tuttavia, in questa fase sarà richiesta la conoscenza di R.

In ogni caso, Rattle è uno strumento insostituibile nella fase di progettazione di un sistema di trading. Consente anche ai principianti di vedere rapidamente i risultati di varie idee e valutarli.

Rattle (Williams, 2009) è un software gratuito con codice open source creato come pacchetto, che fa parte di R (R Developing working group, 2011). Poiché è un software gratuito, il codice sorgente di Rattle e R è disponibile senza limitazioni. Il codice sorgente di Rattle è scritto in С e gli utenti sono autorizzati e incoraggiati a studiare il codice, testarlo ed estenderlo.


2. Descrizione dei dati di origine

I calcoli eseguiti in questo articolo si basano su un set di dati contenente le quotazioni di sei coppie di valute EURUSD, GBPUSD, USDCHF, USDJPY, EURGBP, USDCAD con prezzi di chiusura sull'intervallo di tempo Н1 per il periodo dal 10.01.2011 al 24.12.2013. I dati comprendono oltre 18 000 barre, il che rende il calcolo affidabile. Il set di dati basato sulle coppie di valute di cui sopra, è stato utilizzato per cercare modelli che predicessero posizioni lunghe e corte.

Il set di dati con le virgolette iniziali può essere trovato nel file allegato denominato kot60_110101_131231_UA.txt.


2.1. Creazione di una variabile di destinazione

Nella primissima fase dobbiamo definire cosa esattamente andremo a prevedere. Nonostante l'apparente semplicità, è fondamentale selezionare l'obiettivo corretto per la previsione e i dati che presenteranno questo obiettivo come un insieme di numeri.

Per quanto riguarda l'idea di prevedere un trend, si basa sul desiderio di fare trading con un trend.

Secondo la definizione di "trend", "un trend al rialzo è quando ogni prezzo successivo è superiore a quello trovato in precedenza" ed è l'opposto per il trend al ribasso. Quindi, la necessità di prevedere il prezzo di una coppia di valute segue dalla definizione. Se il tasso iniziale per EURUSD è 1,3500 e quello previsto è 1,3550, allora è un trend rialzista e richiede l'acquisto.

Tuttavia, gli ordini di base sono "comprare" e "vendere" mentre la previsione è per il livello dei prezzi. Ad esempio, il livello dei prezzi viene utilizzato nei sistemi di trading per prevedere un livello di sfondamento. Per implementare l'idea del trading in trend, è necessario effettuare un ulteriore confronto dei prezzi. In realtà stiamo prevedendo una cosa diversa da ciò che stavamo per scambiare!

Pertanto, se il sistema di trading è progettato per seguire le tendenze (trend), il modello deve saperle prevedere. Il modello deve essere addestrato a riconoscere i trend, la variabile target deve assumere solo due valori "buy" e "sell". Nella forma del codice (categoriale) la variabile di destinazione assomiglierà a "1" e "-1".

Esiste una differenza fondamentale tra i modelli che utilizzano il popolamento dei dati di origine per calcolare il prezzo di uno strumento finanziario ei modelli che affiliano una popolazione di dati di origine a una classe. I modelli del primo tipo appartengono ai modelli di regressione ei modelli del secondo tipo appartengono a quelli di classificazione.

I modelli predittivi del tipo di regressione vengono utilizzati per calcolare un valore in futuro. Quando arriverà questo futuro, avremo il valore fattuale con cui confrontare quello previsto.

I modelli predittivi del tipo ‘classificazione’ vengono utilizzati per calcolare la classe a cui sarà affiliata una popolazione di dati sorgente ricevuta al momento della previsione. Due classi "lungo" e "corto" saranno come tali. Come in qualsiasi altro modello di tipo qualifica, queste due classi non hanno una dimensione specifica. Quindi, la classe "lunga" non può essere paragonata a quella "corta". Sebbene codificheremo "long" come "1" e "short" come "0" per comodità, ciò non significa che "long" sia maggiore di "short". Per sottolineare questo, per tali variabili qualitative R e di conseguenza Rattle, esse presentano un tipo specializzato di variabili categoriali (nominali).

Non esistono posizioni lunghe e corte come variabili target e questa è la principale differenza rispetto alle variabili indipendenti descritte di seguito. Questo aspetto concorda con il fatto che stiamo per predire un futuro che non esiste nel momento presente. Possiamo ben tracciare le tendenze sui dati storici poiché conosciamo il futuro in relazione al passato.

Per distinguere le tendenze sui dati storici, utilizzeremo ZigZag. Questo è un indicatore utilissimo per i dati storici e inutile per i dati reali poiché l'ultimo collegamento e talvolta il precedente vengono ridisegnati. Poiché non ci sono dinamiche sui dati storici, possiamo disegnare tendenze molto belle con questo indicatore.

Per il calcolo della variabile target è stato utilizzato l'indicatore ZigZag con un parametro “distanza tra punti di inversione” pari a 0,0035 dollari. La Fig. 1 mostra il risultato.

Fig. 1. L'indicatore ZigZag

Fig. 1. L'indicatore ZigZag

Ora, i valori dell'indicatore devono essere convertiti in un valore categoriale dove "long" = 1 e "short" = 0. 

Il risultato è mostrato in Fig. 2.

Fig.2. L'indicatore ZigZag in forma categorica

Fig. 2. L'indicatore ZigZag in forma categorica

Eseguiamo l'ultima operazione con la variabile target. Se spostiamo l'indicatore ZigZag a sinistra, la barra corrente corrisponderà al valore futuro dell'indicatore ZigZag. In questo articolo lo spostamento è di una barra, che equivale a una previsione di un passo avanti per i dati utilizzati con un'ora di anticipo.

Lo spostamento può essere effettuato per un numero maggiore di barre e sarà correlato a una previsione per un numero maggiore di barre. Questo approccio differisce da altri approcci predittivi in cui il valore precedente può essere utilizzato per prevedere diversi valori futuri che portano a una somma degli errori di previsione.

I modelli evidenziati in questo articolo così come i modelli di classificazione in generale, non accumulano errori. Nei modelli di classificazione, la previsione per due barre avanti ha un proprio errore di previsione non connesso in alcun modo con l'errore di previsione per una barra avanti.


2.2. Creazione di variabili indipendenti

Le variabili indipendenti o predittori sono così chiamate perché arrivano al modello dall'esterno. Possono essere variabili esterne misurabili oppure variabili calcolate sulla base di tali variabili esterne. Tutti i dati economici e finanziari, comprese le quotazioni per le coppie di valute, sono variabili indipendenti in quanto i loro valori sono il risultato dell'attività degli attori del mercato. I dati ricevuti dagli indicatori tecnici appartengono alla stessa categoria in quanto calcolati sulla base delle quotazioni.

La selezione delle variabili indipendenti è importante quanto la scelta della variabile target. In effetti, è la selezione di variabili indipendenti che definisce il successo della modellazione. La maggior parte del tempo dedicato allo sviluppo del modello è dedicato all'analisi e alla selezione di un insieme di variabili indipendenti.

Le variabili del file sorgente kot60_110101_131231_UA contenente sei quotazioni di coppie di valute, ora e data, possono essere definite come predittori.

Tempo e dati sono piuttosto interessanti in questo contesto. Ci sono sempre stati tentativi di utilizzare tempo e dati nei sistemi di trading. Nei nostri modelli, tenendo conto di alcuni dati nascosti sulla dipendenza delle quotazioni dall'ora del giorno e dal giorno della settimana, i modelli di classificazione possono rivelare automaticamente. L'unica cosa da fare qui è convertire queste due variabili nella forma categorica. Il tempo deve diventare una categoria con 24 livelli e la data deve diventare una variabile categoriale con cinque livelli per abbinare il numero di giorni della settimana.

Oltre ai predittori della fonte, creeremo predittori aggiuntivi che, a mio parere, rivelano l'esistenza di tendenze nelle citazioni della fonte. Utilizzeremo indicatori ben noti per creare ulteriori predittori.

Saranno utilizzati i seguenti indicatori: 5,10 e 15; MACD(12,26,9), RSI con periodi 14,21,28. Oltre a questi utilizzeremo incrementi di quotazioni e medie mobili. Tutte queste conversioni devono essere applicate a tutte e sei le quotazioni delle coppie di valute.

L'indicatore ZigZag sarà incluso nel numero di variabili indipendenti a scopo di supporto. Non verrà utilizzato per lo sviluppo di modelli poiché il suo valore sulla barra all'estrema destra è sconosciuto.

Quindi, abbiamo 88 variabili indipendenti, una variabile di destinazione e una variabile di servizio (ZigZag). La quantità di dati per ciascuna delle variabili è 18083 barre.

Questo set di dati ha la forma dell'area di lavoro R e può essere trovato nell'allegato a questo articolo con il nome di TC.RData. Questo set di dati può essere utilizzato come segue:

  • carica R;
  • carica la libreria Rattle;
  • scheda File/Workspace;
  • trova il file TC.RData sul disco e caricalo.

3. Analisi intelligente dei dati di origine

Il pacchetto Rattle offre una serie di strumenti per l'elaborazione preliminare o intelligente dei dati: il data mining.

3.1. Input e anteprima

Consideriamo alcune opportunità che si rendono disponibili dopo aver eseguito le azioni menzionate nella sezione precedente.

Il risultato può essere visto sull'immagine rappresentata in Fig. 3.

Fig. 3. Schermata iniziale di Rattle

Fig. 3. Schermata iniziale di Rattle

Lo sviluppo di un modello in Rattle avviene mentre ci spostiamo dalla scheda Dati (Data) alla scheda Registro (Log).

La prima scheda di Rattle è Data. Come descrive il suo nome, questa scheda consente di caricare i dati con cui è possibile lavorare in futuro.

I due pulsanti Spreadsheets e R Dataset sono di particolare interesse per noi.

Il pulsante Spreadsheets (fogli di calcolo) consente di caricare file Excel. Se il lettore vuole mettere alla prova le proprie idee, può preparare il proprio file Excel e poi provare Rattle.

Per ripetere le azioni descritte in questo articolo o eseguire alcune azioni aggiuntive con un file contenente dati non elaborati allegati a questo articolo, utilizzare il pulsante R Dataset. Questo pulsante carica il file nel formato R. Il file si chiama "Directory di lavoro" o "File di lavoro". Hanno un'estensione sul disco .RData. Questo file può essere caricato su R e sarà disponibile facendo clic su questo pulsante dopo di esso.

Carica il nostro file preparato e ottieni la parte superiore dell'immagine in Fig. 4 e la parte inferiore dell'immagine in Fig. 5.

Fig. 4. Parte superiore del file sorgente

Fig. 4. Parte superiore del file sorgente

Fig. 5. Parte inferiore del file sorgente

Fig. 5. Parte inferiore del file sorgente



3.2. Correlazione della variabile target con variabili indipendenti

Nota: Il pulsante "Esegui" svolge un ruolo cruciale. L'azione viene preparata ma non viene eseguita. Per eseguire qualsiasi azione, premere il pulsante "Esegui". Deve essere fatto ogni volta che si ripetono le azioni descritte in questo articolo.

La Fig. 4 mostra un elenco di variabili, le loro caratteristiche e il ruolo di queste variabili. Poiché non utilizzeremo l'indicatore ZigZag nei modelli, non potremmo farlo comunque, lo contrassegneremo come ‘Ignora’.

Altre variabili vengono utilizzate come quelle di input tranne l'ultima, che viene utilizzata come variabile di destinazione.

Il pulsante Partizione svolge un ruolo importante per la convalida del livello di attendibilità dei risultati della modellazione. Utilizzando questo pulsante, il set di dati può essere diviso in tre parti, se necessario. In questa fase vengono specificate le proporzioni del set di dati utilizzate per l'addestramento, la convalida e il test del modello.

Nel campo successivo viene specificato il seme per il sensore di numeri pseudocasuali. Ad esempio, il 70% dei dati di origine raccolti per il set di dati di addestramento viene selezionato casualmente dal set di dati di origine. Di conseguenza, anche le altre due parti del 15% (come nel nostro caso) sono sequenze di barre casuali.

Pertanto, modificando Seed (seme) dal set di dati di origine, è possibile ottenere una quantità indefinita di vari set di dati di training e altri.

Fig. 6. Correlazione delle variabili

Fig. 6. Correlazione delle variabili

Trova una colonna con il nome ZZ.35 nella tabella ricevuta. Il campione mostrato nella tabella seguente è stato preso da quella colonna.

Variabile
ZZ.35
 RSI_cad.14
 -0.0104122177
 JPY.dif2
 -0.0088412685
 EUR.dif3
 -0.0052379279
 CHF.dif3
 -0.0049692265
 GBP.dif3
 -0.0047409208
 GBP.dif1
  0.0044691430
 MA_cad.15.dif1
 -0.0039004722
 JPY.dif1
 -0.0023831247
 GBP.dif2
 -0.0015356091
 EUR.dif2
 -0.0013759749
 CHF.dif2
 -0.0012447101
 EUR.dif1
 0.0005863149
 MA_cad.10.dif1
 0.0023981433
 CHF.dif1
 0.0024543973
 MA_gbp.5.dif1
 0.0043757197
 MA_cad.5.dif1
 0.0075424397
 MA_gbp.10.dif1
 0.0094964069
 EURGBP.dif1
 0.0095990416
 CAD.dif1
 0.0110571043

Tabella 1.  Correlazione delle variabili

Come possiamo vedere, esiste un elenco piuttosto lungo di variabili che hanno una correlazione con ZZ.35 inferiore a 0,01. Il livello di correlazione, inferiore a 0,1, non consente di trarre alcuna conclusione circa l'influenza delle variabili indipendenti sulla variabile target.

In questa fase prenderemo nota di questo fatto e lo utilizzeremo appropriatamente dopo che i modelli sono stati valutati.

Nei modelli di classificazione, il grado di influenza dei predittori sulla variabile target gioca un ruolo molto importante. A un livello di correlazione basso, si ritiene che il predittore di corrispondenza sia il rumore nel modello, che porta alla sua riqualificazione. La riqualificazione del modello avviene quando il modello inizia a prendere in considerazione dettagli e predittori non significativi per la variabile di destinazione.

Non ci sono raccomandazioni sul livello di correlazione. Di solito usano il numero magico di statistiche – 5%. Non è corretto. La rimozione dei predittori, che sono il rumore nel modello, porta alla riduzione dell'errore di previsione. La rimozione di un predittore che non è il rumore nel modello porta all'aumento dell'errore di previsione. Pertanto l'elenco minimo di predittori utili per il modello viene stabilito tramite esperimenti.


3.3. Ridimensionamento

Alcuni modelli, come le macchine vettoriali di supporto (SVM), sono molto sensibili a diverse scale di predittori. Vediamolo in dettaglio. Per esempio, i dati sulla coppia di valute EURUSD cambiano entro il limite di 0,5, mentre USDJPY cambia entro un paio di dozzine di unità. Per escludere una scala diversa di predittori, devono essere portati a una scala nella scheda Trasforma. È preferibile che le fluttuazioni dei predittori avvengano entro il limite di [0-1].

Per eseguire il ridimensionamento, selezionare Transform/Rescale/Scale [0-1]. Dopodiché selezioniamo tutte le variabili e premiamo il pulsante "Esegui".


3.4. Conversione nella forma categorica

La conversione in forma categoriale permette di convertire il valore di una variabile numerica in un fattore a più livelli. L'indicatore RSI è il primo ad essere convertito in un fattore multilivello. Si ritiene che esso mostri un'inversione di tendenza quando i suoi valori si avvicinano a zero o 100.

Per convertire i valori dell'indicatore RSI nella forma categoriale, selezionare: Transform/Recode/KMeans. In questo modo, imposta il numero di livelli di fattore su 8. Spunta tutti gli indicatori RSI e premi "Esegui (Run)".

Dopo aver impostato la variabile ZZ.35 su Ignora, possiamo passare allo sviluppo dei modelli.


4. Algoritmo generale del modello di classificazione

I seguenti modelli sono disponibili in Rattle:

  • modello di classificazione ad albero (Tree);
  • modello forestale casuale (foresta);
  • modello di potenziamento degli alberi (ada);
  • supporto modello di macchine vettoriali (SVM);
  • modello lineare generalizzato (glm);
  • modello di rete neurale (NNET).

Nonostante la differenza fondamentale tra i modelli di classificazione, (non stiamo parlando solo di quelli disponibili in Rattle) tutti hanno caratteristiche comuni descritte di seguito.

Prendiamo un training set composto da stringhe (nel nostro caso il numero è 18030), contenente i valori dei predittori (88 nel nostro caso) e il valore della variabile target ("long" e "short").

Qualsiasi algoritmo di classificazione affronta il problema di separare le combinazioni di valori di predittori corrispondenti a "lungo" da quelle di valori di predittori corrispondenti a "corto". Questa è una fase della formazione di un modello.

Segue poi la fase di verifica del modello.

Poiché abbiamo diviso il set di dati di origine in tre parti, prendiamo un altro set di dati e consideriamo le combinazioni di predittori da confrontare con quelli ricevuti nella fase di addestramento. Ogni combinazione di predittori viene stabilita se appartiene a "corto" o "lungo". Poiché il set di dati di verifica contiene quei valori noti, il risultato viene confrontato con i dati di fatto. Il rapporto tra posizioni long e short effettive e quelle previste è l'errore di previsione.

Se il risultato non ci soddisfa, possiamo tornare alla fase dell'analisi intelligente dei dati per migliorare il risultato. Sfortunatamente, la qualità di questa fase dipende dall'esperienza di un trader. Le modifiche vengono apportate nel set di dati di origine e quindi viene nuovamente sviluppato un modello.

Se troviamo soddisfacenti i risultati ottenuti sui data set di training e verifica, allora verifichiamo il modello sul data set di test, cioè quello che non è stato utilizzato.

La qualità del modello è definita non solo da un piccolo errore di previsione, ma anche da una piccola differenza tra i valori di questo errore su diversi set di dati. Ciò dimostra la robustezza del modello e l'assenza di un ulteriore training o, come lo chiamano i trader, ultra aggiustamento.

In questo articolo verrà esaminato in dettaglio solo un modello di foresta casuale.


5. Modello di foresta casuale

5.1. Sommario

L'algoritmo del lavoro di un trader è il seguente. Una serie di indicatori viene aggiunta a una quotazione di una coppia di valute e viene presa una decisione commerciale giudicando il totale delle quotazioni correnti e dei dati degli indicatori.

Nel sistema di trading più semplice "Media mobile", acquistano se il prezzo corrente è superiore alla media mobile e vendono se è inferiore. Possono aggiungere condizioni aggiuntive come i dati ricevuti dall'indicatore RSI. Di conseguenza, un trader ottiene un albero decisionale. Nelle foglie di quell'albero ci sono le quotazioni della coppia di valute, i valori della media mobile e l'indicatore RSI. La radice dell'albero contiene solo due valori: "acquista" e "vendi".

Il processo descritto di costruzione di un albero è stato automatizzato nel modello degli alberi di classificazione. Di conseguenza, c'è solo un albero o, nel gergo dei trader, un modello.

L'algoritmo di un singolo albero non è in grado di costruire modelli precisi poiché la diversità porta all'instabilità, che può essere vista nella costruzione di alberi decisionali separati.

Un lettore può verificare personalmente questa affermazione utilizzando il modello Tree in Rattle. Questo modello implementa l'algoritmo descritto di costruzione di un albero.

L'idea del modello di foresta casuale consiste nell'includere molti alberi di classificazione (schemi) nel modello, non solo uno. Quindi, la foresta casuale tende ad avere una maggiore resistenza alle modifiche dei dati e al rumore (ovvero variabili che hanno poca influenza sulla variabile target).

La casualità utilizzata dall'algoritmo della foresta casuale si manifesta nella scelta sia delle righe della tabella (osservazioni) che dei predittori. Questa casualità definisce la resistenza al rumore, ai valori anomali e al riaddestramento quando si confronta con un classificatore autonomo simile ad un albero.

La probabilità definisce anche l'efficienza computazionale significativa. Costruendo un albero decisionale autonomo, lo sviluppatore del modello può selezionare un sottoinsieme casuale di osservazioni disponibili nel set di dati di addestramento. Inoltre, in ogni nodo del processo di costruzione di un albero, considerano solo una piccola parte di tutte le variabili disponibili per stabilire la migliore proporzione di suddivisione di un set di dati. Questo porta ad un significativo rilassamento dei requisiti a riguardo delle prestazioni computazionali.

Quindi, il modello di foresta casuale è una buona scelta per lo sviluppo di modelli per una serie di motivi. Molto spesso è necessaria una piccola elaborazione preliminare dei dati poiché i dati non dovrebbero essere normalizzati e l'approccio è elastico rispetto ai valori anomali. La necessità di selezionare le variabili può essere evitata poiché l'algoritmo sceglie in modo efficiente il proprio insieme di variabili. Poiché molti alberi vengono costruiti utilizzando due livelli di casualità (osservazioni e predittori), ogni albero è un modello indipendente efficiente. Questo modello non è soggetto a riaddestramento sul set di dati di addestramento.

Gli algoritmi delle foreste casuali spesso generano da 100 a 500 alberi. Quando viene sviluppato il modello finale, le decisioni prese da ogni albero vengono integrate elaborando gli alberi come uguali. La decisione finale su un assemblaggio di alberi sarà la decisione sulla maggior parte degli alberi costituenti. Se 51 alberi su 100 indicano "lungo", il valore di "lungo" sarà accettato, ma con minore sicurezza.


5.2. Algoritmo

5.2.1. Formare un campione da un set di dati

L'algoritmo di formazione di un albero casuale genera molti alberi decisionali utilizzando l'aggregazione bootstrap o il bagging per introdurre la casualità nel processo di formazione del campione. L'aggregazione bootstrap è un'idea di raccolta di un campione casuale di osservazioni in una borsa. Molte borse formate in ordine casuale sono costituite da osservazioni selezionate ricevute da osservazioni sorgente sul set di dati di addestramento.

La fascicolazione alle borse viene eseguita con sostituzione. Significa che ogni osservazione ha una possibilità di apparire più volte in una certa borsa. La dimensione del campione è spesso la stessa del set di dati completo. La pratica mostra che due terzi delle osservazioni saranno incluse in un sacchetto (con ripetizioni) e un terzo non sarà preso in considerazione. Ogni pacchetto di osservazioni viene utilizzato come set di dati di addestramento per la creazione di un albero decisionale. Le osservazioni non contabilizzate possono essere utilizzate come campione indipendente per valutare il risultato.


5.2.2. Formare la scelta dei predittori

Il secondo elemento fondamentale della casualità riguarda la scelta dei predittori per la suddivisione di un insieme di dati. Ad ogni passo della creazione di un nodo decisionale separato, cioè ad ogni punto di divisione di un albero, viene selezionato un insieme casuale e solitamente piccolo di predittori. Vengono considerati solo i predittori selezionati nel punto di suddivisione. Per ogni nodo nella costruzione di un albero, considerano un diverso insieme casuale di predittori.


5.2.3. Casualità

Formando insiemi casuali di dati e variabili, ricevono alberi decisionali con vari risultati a seconda del sottoinsieme di dati. Proprio questo cambiamento consente di trattare questo assemblaggio di alberi come un team di esperti cooperanti con diversi livelli di competenza che lavorano insieme per creare la previsione più affidabile.

La formazione del campione ha anche un altro vantaggio significativo: l'efficienza di calcolo. Considerare solo una piccola parte del numero totale di predittori durante la suddivisione di un set di dati riduce significativamente il volume di calcolo richiesto.

Durante la creazione di un albero decisionale, l'algoritmo di formazione di un albero casuale di solito non taglia gli alberi decisionali. Una foresta casuale con alberi ultraregolati può sviluppare un ottimo modello, che funziona bene su nuovi dati.


5.2.4. Calcolo nell’Assembly

Quando si trattano molti alberi decisionali come un unico modello, tutti gli alberi sono importanti nel processo decisionale finale. La maggioranza semplice determina il risultato. Ciò significa che il 51% delle divisioni e il 99% delle divisioni produrranno la stessa classe, ad esempio "lungo".

I calcoli di Rattle sono parziali in quanto l'utente ottiene il risultato sotto forma di classe. Se il modello viene utilizzato in R, diventano disponibili risultati sotto forma di probabilità di classe.


5.3. Sviluppo di un modello di foresta casuale

Per costruire un modello, seleziona Model/Forest. Il calcolo avviato del modello richiederà un paio di minuti per i nostri dati di origine.

Dividerò il risultato del calcolo in più parti e commenterò ciascuna di esse.

Rivediamo i risultati riportati in Fig. 7.

Fig. 7. La parte superiore dei risultati di regolazione del modello di foresta casuale

Fig. 7. La parte superiore dei risultati di regolazione del modello forestale casuale

Alcune informazioni su questa figura dovrebbero essere evidenziate.

TREND è una variabile target qui.

Durante la costruzione di questo modello sono stati generati 500 alberi. Alla suddivisione in ogni nodo dell'albero sono stati utilizzati 9 predittori (variabili). Inoltre, i pulsanti Errori e OOB ROC sono di particolare interesse per noi.

Quindi segui gli errori di previsione, che assomigliano a:

Stima OOB del tasso di errore: 15.97%

Matrice di confusione:


01class.error
0496011630.1899396
18585677 0.1312930

Tabella 2. Tabella di contingenza della matrice di errore per il set di allenamento

Dovrebbe essere interpretato come "Errore fuori borsa è 15,97%".

L'errore di previsione ottenuto è significativo. È importante capire come sia stato ottenuto o, per la precisione, se è stato ottenuto "fuori borsa". Per lo sviluppo di questo modello è stata utilizzata solo una parte del set di dati di addestramento. Questo modello, a sua volta, costituisce il 70% del set di dati di origine. Circa il 60% del set di dati di addestramento è stato utilizzato per la creazione di questo modello e il 40% non è stato utilizzato. Questo 40% di dati si chiama "Fuori borsa". L'errore di previsione del 15,97% è stato ricevuto su quei dati.

Continuiamo.

La tabella di contingenza o la matrice di errore viene interpretata nel modo seguente. 

La riga superiore contiene le posizioni corte e lunghe previste. La colonna di sinistra è una colonna con le posizioni corte e lunghe effettive, ricevute dall'indicatore ZigZag per i dati storici.

Il valore di 4960 con coordinate (0,0) è un numero di posizioni corte e lunghe correttamente previste. Il valore successivo di 1163 è il numero di posizioni corte previste come lunghe.

Il valore di 858 con coordinate (1,0) è un numero di posizioni lunghe previste come posizioni corte. Il valore di 5677 è il numero di posizioni lunghe correttamente previste.

Quindi passiamo ai risultati della modellazione.

Di seguito sono riportate alcune righe della grande tabella che comprende tutte le variabili del modello. Questa è una tabella di importanza delle variabili.


01MeanDecreaseAccuracyMeanDecreaseGini
MA_eur.5.dif142.9741.8554.86 321.86
EUR.dif337.2146.3851.80177.34
RSI_eur.14 37.7040.1150.75254.61
EUR.dif2 24.6631.6438.24110.83
MA_eur.10.dif122.9425.3931.48193.08
CHF.dif3  22.9123.4230.1573.36
MA_chf.5.dif1  21.8123.2429.56135.34

Tabella 3. Importanza delle variabili nel modello di foresta casuale

Ci sono diverse valutazioni sull'importanza delle variabili. La parola "importanza" qui riflette il grado di influenza di una certa variabile sulla variabile target. Maggiore è il valore, più "importante" è la variabile.

Questa tabella fornisce i dati per escludere i valori meno significativi dal modello. In statistica e in particolare nella classificazione, più semplice è un modello, meglio è, purché l'accuratezza del modello non venga sacrificata.

Il pulsante Errori è l'ultima cosa importante nella scheda Modello. Premendolo riceveremo Fig.8.

Fig. 8. Dipendenza dell'errore di modellazione dal numero di alberi

Fig. 8. Dipendenza dell'errore di modellazione dal numero di alberi

6. Efficienza del modello

La valutazione dell'efficienza del modello viene eseguita nella scheda Valuta, dove Rattle dà accesso al set di opzioni per questo.

Useremo Error Matrix, come era precedentemente chiamato Contingency Table, nell'elenco delle opzioni disponibili per la valutazione dell'efficienza del modello.

Quando ci si sposta dalla scheda Modello alla scheda Valuta, l'ultimo dei modelli creati verrà automaticamente contrassegnato. Questo corrisponde al principio generale di lavoro in Rattle: creiamo e impostiamo un modello e poi ne esploriamo l'efficienza nella scheda Valuta.

Per la valutazione di un modello, è necessario specificare il set di dati per eseguire il controllo. La riga successiva di opzioni nell'interfaccia Rattle è un insieme di fonti di dati alternative.

Le prime quattro opzioni per Dati corrispondono alla suddivisione del set di dati specificato nella scheda Dati. Le opzioni sono Training, Validation, Test e Full (l'intero set). La suddivisione del set di dati in insiemi di formazione, convalida e test è già stata discussa.

La prima opzione dovrebbe convalidare il modello sul set di dati di addestramento. Di solito non è una buona idea. Il problema con la valutazione del modello sul set di dati di addestramento è che il modello è stato costruito su questo set di dati. Lì, il modello darà un buon risultato in quanto inizialmente era quello che stavamo cercando di ottenere. Il modello è progettato per essere utilizzato su dati precedentemente sconosciuti.

È necessario un approccio per garantire una buona prestazione del modello su nuovi dati. Allo stesso tempo, otteniamo una valutazione effettiva degli errori del modello, che riflette la differenza tra la previsione per il modello e i dati reali. Questa valutazione dell'errore su un set di dati sconosciuto, non su quello di addestramento, è il modo migliore per valutare l'efficienza del modello.

Utilizziamo il set di dati di convalida per la verifica dell'efficienza del modello durante la sua creazione e impostazione. Pertanto, dopo che il modello è stato creato, la sua efficienza sarà verificata su questo set di dati di verifica. È possibile modificare alcune opzioni di impostazione per la creazione di un modello. Confrontiamo il nuovo modello con quello vecchio con la sua efficienza basata sul set di dati di verifica. In questo senso, il set di dati di verifica viene utilizzato nella modellazione per lo sviluppo del modello finale. Pertanto, abbiamo ancora una stima spostata dell'efficienza del nostro modello se ci basiamo sul set di dati di verifica.

Il set di dati Test è quello che non è stato utilizzato per creare il modello. Non appena abbiamo identificato il modello "migliore" sulla base del set di dati di allenamento e verifica, possiamo stimare l'efficienza del modello sul set di dati di test. Questa è la valutazione dell'efficienza attesa per eventuali nuovi dati. La quarta opzione utilizza il set di dati completo per valutare il modello. Il set di dati completo è il set di dati di formazione, verifica e test insieme. Questa non è altro che curiosità e non certo un tentativo di ottenere dati precisi.

Un'altra opportunità disponibile come fonte di dati fornita tramite la voce di esempio. È disponibile se l'opzione Punteggio è selezionata come tipo di valutazione. In questo caso si aprirà una finestra per l'inserimento di dati aggiuntivi.

La matrice di errore verrà utilizzata per prevedere la variabile obiettivo categoriale.

La matrice di errore mostra i risultati effettivi rispetto a quelli previsti. Ci sono due tabelle. La prima mostra i risultati quantitativi e la seconda mostra i risultati in percentuale.

La matrice di errore può essere trovata nella scheda Valuta in Rattle. Premendo "Esegui" si implementerà il modello selezionato sul set di dati specificato per prevedere il risultato per ogni osservazione in questo set di dati. Quindi le previsioni vengono confrontate con le osservazioni fattuali.

La Fig. 9 rappresenta la matrice di errore per il modello di foresta casuale calcolato in precedenza.

Fig. 9. Risultato della valutazione del modello a foresta casuale

Fig. 9. Risultato della valutazione del modello a foresta casuale

La figura mostra che l'errore medio è 0,167, cioè 16,7%. Nella fase di addestramento l'errore di previsione era del 15,97%. Possiamo considerare quei valori uguali.

Eseguiamo un calcolo per il set di dati di test. Il risultato è il seguente:

Matrice di errore per il modello Random Forest su TC [test] (conta):


previsto
previsto
Effettivo  01
01016256
11931248

Tabella 4. Matrice di errore per il modello a foresta casuale in termini assoluti (set di dati di prova)


Matrice di errore per il modello a foresta casuale su TC [test] (proporzioni):


previsto
previsto

Effettivo01Errore
00.370.090.20
10.070.460.13

Tabella 5. Matrice di errore per il modello di foresta casuale in termini relativi (set di dati di prova)


Errore complessivo: 0.1654994, Errore di classe medio: 0.1649244

L'errore di previsione è del 16,4%.

Tutte e tre le cifre sono approssimativamente uguali, il che è segno di un ragionevole risultato della modellazione.

Si prega di notare che l'efficienza dei modelli calcolati da Rattle deve essere verificata nello Strategy Tester di МetaТrader 4 o MetaTrader 5. Quindi dovrebbe essere testato su un conto demo e su un conto reale con piccoli lotti. Solo dopo tutti i test possiamo arrivare alle conclusioni finali sul modello.



7. Migliorare il modello

Quando abbiamo esplorato la correlazione della pseudo variabile ZZ.35 con i predittori, abbiamo scoperto che un numero significativo di predittori aveva una debole correlazione con la variabile target.

Eliminiamo i predittori che hanno il coefficiente di correlazione inferiore a 0,01. A tale scopo, impostare i predittori pertinenti su Ignora nella scheda Dati e ripetere il calcolo del modello di foresta casuale nella scheda Modello.

Arriveremo al seguente risultato:

  • errore di previsione fuori borsa = 15,77%;
  • errore di previsione per il set di dati di convalida = 15,67%;
  • errore di previsione per il set di dati del test = 15,77%.

Sebbene l'errore si sia ridotto in modo insignificante, il divario tra gli errori di previsione per diversi set di dati è diminuito. È un segno della stabilità del modello.

Puoi continuare a rimuovere i predittori seguendo la tabella di correlazione. L'efficacia del modello può essere migliorata, ovvero l'errore di previsione diminuito, utilizzando i dati della tabella di importanza dei predittori ottenuta calcolando il modello.

In ogni caso, la rimozione dei predittori può essere eseguita fino a quando la rimozione di un altro predittore porta a un deterioramento dell'efficienza del modello. A quel punto puoi fermarti poiché hai un modello minimale ed efficiente per un dato numero di predittori.


8. Utilizzo del modello in MetaTrader 4

In teoria, il trading con Rattle può essere organizzato nel modo seguente. I dati di input per Rattle in Excel vengono preparati da alcuni strumenti esterni per il periodo del giorno e della notte. Alla chiusura dello scambio, un trader ottiene i prezzi richiesti e li inserisce nel file sorgente. Pochi minuti dopo la previsione per il giorno successivo è pronta e può essere utilizzata fin dall'apertura.

Il terminale МetaТrader 4 o il suo analogo è necessario per il trading intraday.

Per organizzare un trading automatizzato o semiautomatico utilizzando Rattle, sono richiesti i seguenti elementi:

  • un modello precedentemente addestrato, che è stato salvato come spazio di lavoro R;
  • una libreria di cooperazione del terminale e R;
  • codice in R, che passa ogni nuovo blocco di dati al modello, ottiene il risultato e invia il risultato della modellazione al terminale.

L'addestramento di uno dei sei modelli disponibili in Rattle è stato considerato sopra. Il numero di modelli di classificazione disponibili in R sta arrivando a 150, ma Rattle non è di alcuna utilità per loro.

La libreria di interazione di R e del terminale МetaТrader 4 si trova nel CodeBase: mt4R per il nuovo MQL4.

Il codice in R, che corrisponde al modello addestrato, si trova nel journal (scheda Log). Tutte le azioni intraprese durante lo sviluppo del modello vengono registrate sotto forma di codice in R. Questo è ciò che deve essere utilizzato nel trading reale.


Conclusione

Sia i trader principianti che quelli esperti troveranno questo articolo utile per la valutazione preliminare e la selezione di un sistema di trading.

Utilizzando Rattle, la principale sfida intellettuale nello sviluppo di un sistema di trading è la giusta scelta della variabile target e dei predittori necessari. I trader esperti hanno già conoscenze in questo campo e i principianti potranno fare pratica con Rattle.


Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/1165

File allegati |
Article.zip (6598.05 KB)
Perché l'hosting virtuale su MetaTrader 4 e MetaTrader 5 è migliore del solito VPS? Perché l'hosting virtuale su MetaTrader 4 e MetaTrader 5 è migliore del solito VPS?
La rete Virtual Hosting Cloud è stata sviluppata appositamente per MetaTrader 4 e MetaTrader 5 e presenta tutti i vantaggi di una soluzione nativa. Approfitta della nostra offerta gratuita 24 ore su 24: prova subito un server virtuale.
Manuale MQL5: Gestione di eventi grafici personalizzati Manuale MQL5: Gestione di eventi grafici personalizzati
Questo articolo prende in considerazione gli aspetti della progettazione e dello sviluppo del sistema di eventi grafici personalizzati nell'ambiente MQL5. Qui è possibile trovare anche un esempio di approccio alla classificazione degli eventi, nonché un codice di programma per una classe di eventi e una classe di gestori di eventi personalizzati.
Manuale MQL5: Gestione di BookEvent Manuale MQL5: Gestione di BookEvent
Questo articolo parla di BookEvent - un evento Depth of Market e il principio della sua elaborazione. Un programma MQL che serve a gestire gli stati di Depth of Market, servirà da esempio. È scritto utilizzando l'approccio orientato agli oggetti. I risultati della gestione vengono visualizzati sullo schermo come un pannello e livelli di Depth of Market.
Manuale MQL5: Elaborazione dell'evento TradeTransaction Manuale MQL5: Elaborazione dell'evento TradeTransaction
Questo articolo considera le capacità del linguaggio MQL5 dal punto di vista della programmazione event-driven. Il più grande vantaggio di questo approccio è che il programma può ricevere informazioni sull'attuazione graduale di un'operazione di trading. L'articolo contiene anche un esempio di ricezione ed elaborazione di informazioni sull'operazione di trading in corso utilizzando il gestore dell'evento TradeTransaction. A mio parere, un tale approccio può essere utilizzato per copiare le offerte da un terminale all'altro.