
Utilizzo dell'analisi discriminante per sviluppare sistemi di trading
Introduzione
Uno dei compiti principali dell'analisi tecnica è determinare la direzione in cui si muoverà il mercato nel prossimo futuro. Da un punto di vista statistico, si tratta di selezionare indicatori e determinarne i valori in base ai quali sarebbe possibile suddividere la futura situazione di mercato in due categorie: 1) movimento verso l'alto, 2) movimento verso il basso.
L'analisi discriminante offre uno dei modi per decidere quale tipo di indicatori e quali valori consentono una migliore discriminazione tra queste categorie. In altre parole, l'analisi discriminante consente di costruire un modello che predice la direzione del mercato sulla base dei dati ricevuti dagli indicatori.
Tale analisi è però piuttosto complicata e richiede una grande quantità di dati in ingresso. Pertanto, è molto dispendioso in termini di tempo utilizzarlo manualmente per l'analisi della situazione del mercato. Fortunatamente, l'emergere del linguaggio MQL5 e del software statistico ci ha permesso di automatizzare la selezione dei dati, la preparazione e l'applicazione dell'analisi discriminante.
Questo articolo fornisce un esempio di sviluppo di un EA per la raccolta dei dati di mercato. Serve come tutorial sull'applicazione dell'analisi discriminante per la costruzione del modello prognostico per il mercato FOREX nel software Statistica.
1. Che cos'è l'analisi discriminante?
L'analisi discriminante (di seguito "DA") è uno dei metodi di riconoscimento di pattern. Le reti neurali possono essere considerate un caso speciale di DA. La DA viene utilizzata nella maggior parte dei sistemi di difesa di successo basati sul riconoscimento di schemi.
Permette di determinare quali variabili dividono (discriminano) il flusso di dati in ingresso in gruppi e vedere il meccanismo di tale discriminazione.
Diamo un'occhiata a un esempio semplificato di utilizzo di DA per il mercato FOREX. Abbiamo i valori dei dati dall’ Indice di forza relativa (RSI), dal MACD e dall’Indice di vigore relativo (RVI) e dobbiamo prevedere la direzione del prezzo. Come risultato di DA, possiamo ottenere quanto segue.
a. L'indicatore RVI non contribuisce alla previsione. Quindi escludiamolo dall'analisi.
b. DA ha prodotto due equazioni discriminanti:
- G1 = a1*RSI+b1*MACD+с1, l'equazione per i casi in cui il prezzo è salito;
- G2 = a2*RSI+b2*MACD+с2, l'equazione per i casi in cui il prezzo è sceso.
Calcolando G1 e G2 all'inizio di ogni barra, prevediamo che se G1 > G2, allora il prezzo salirà; mentre se G1 < G2, il prezzo scenderà.
DA può rivelarsi utile per la conoscenza iniziale delle reti neurali. Quando si utilizza DA, si ottengono equazioni simili a quelle calcolate per il funzionamento delle reti neurali. Ciò aiuta a comprendere meglio la loro struttura e a determinare in via preliminare se vale la pena utilizzare le reti neurali nelle proprie strategie.
2. Fasi dell'analisi discriminante
L'analisi può essere suddivisa in più fasi.
- Preparazione dei dati;
- Selezione delle migliori variabili dai dati preparati;
- Analisi e test del modello risultante utilizzando dati di test;
- Costruzione del modello sulla base di equazioni discriminanti.
L'analisi discriminante fa parte di quasi tutti i moderni pacchetti software progettati per l'analisi statistica dei dati. I più popolari sono Statistica (della StatSoft Inc.) e SPSS (della IBM Corporation) . Considereremo ulteriormente l'applicazione dell'analisi discriminante utilizzando il software Statistica. Gli screenshot forniti sono ottenuti dalla versione 8.0 di Statistica. Questi sembrerebbero più o meno gli stessi nelle versioni precedenti del software. Va notato che Statistica offre molti altri strumenti utili per il trader comprese le reti neurali.
2.1. Preparazione dei dati
La raccolta dei dati dipende da un determinato compito da svolgere. Definiamo il compito come segue: utilizzando indicatori, per prevedere la direzione del grafico dei prezzi sulla barra seguendo la barra con valori noti degli indicatori. Verrà sviluppato un EA per la raccolta dei dati per salvare i valori degli indicatori e i dati sui prezzi in un file.
Questo deve essere un file CSV con una struttura seguente. Le variabili devono essere disposte in colonne in cui ogni colonna corrisponde a un determinato indicatore. Le righe devono contenere misurazioni consecutive (casi), ovvero valori di indicatori per determinate barre. In altre parole, le intestazioni della tabella orizzontale contengono gli indicatori, le intestazioni della tabella verticale contengono le barre consecutive.
La tabella deve avere una variabile in base alla quale verrà effettuato il raggruppamento (la variabile di raggruppamento). Nel nostro caso, tale variabile sarà basata sulla variazione di prezzo sulla barra che segue la barra di cui sono stati ottenuti i valori dell'indicatore. La variabile di raggruppamento deve contenere il numero del gruppo i cui dati sono visualizzati nella stessa riga. Ad esempio, il numero 1 per i casi in cui il prezzo è aumentato e il numero 2 per i casi in cui il prezzo è diminuito.
Avremo bisogno dei valori dei seguenti indicatori:
- Acceleratore Oscillatore;
- Forza degli Orsi;
- Forza dei Tori;
- Awesome Oscillator;
- Commodity Channel Index;
- DeMarker;
- Media mobile adattiva frattale;
- MACD;
- Indice di forza relativa;
- Indice di vigore relativo;
- Stochastic;
- Williams Percent Range.
La funzione OnInit() crea gli indicatori (ottene gli handle degli indicatori) e il file MasterData.csv dove salva l'intestazione dei dati della colonna:
//+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- initialization of the indicators h_AC=iAC(Symbol(),Period()); h_BearsPower=iBearsPower(Symbol(),Period(),BearsPower_PeriodBears); h_BullsPower=iBullsPower(Symbol(),Period(),BullsPower_PeriodBulls); h_AO=iAO(Symbol(),Period()); h_CCI=iCCI(Symbol(),Period(),CCI_PeriodCCI,CCI_Applied); h_DeMarker=iDeMarker(Symbol(),Period(),DeM_PeriodDeM); h_FrAMA=iFrAMA(Symbol(),Period(),FraMA_PeriodMA,FraMA_Shift,FraMA_Applied); h_MACD=iMACD(Symbol(),Period(),MACD_PeriodFast,MACD_PeriodSlow,MACD_PeriodSignal,MACD_Applied); h_RSI=iRSI(Symbol(),Period(),RSI_PeriodRSI,RSI_Applied); h_RVI=iRVI(Symbol(),Period(),RVI_PeriodRVI); h_Stoch=iStochastic(Symbol(),Period(),Stoch_PeriodK,Stoch_PeriodD,Stoch_PeriodSlow,MODE_SMA,Stoch_Applied); h_WPR=iWPR(Symbol(),Period(),WPR_PeriodWPR); if(h_AC==INVALID_HANDLE || h_BearsPower==INVALID_HANDLE || h_BullsPower==INVALID_HANDLE || h_AO==INVALID_HANDLE || h_CCI==INVALID_HANDLE || h_DeMarker==INVALID_HANDLE || h_FrAMA==INVALID_HANDLE || h_MACD==INVALID_HANDLE || h_RSI==INVALID_HANDLE || h_RVI==INVALID_HANDLE || h_Stoch==INVALID_HANDLE || h_WPR==INVALID_HANDLE) { Print("Error creating indicators"); return(1); } ArraySetAsSeries(buf_AC,true); ArraySetAsSeries(buf_BearsPower,true); ArraySetAsSeries(buf_BullsPower,true); ArraySetAsSeries(buf_AO,true); ArraySetAsSeries(buf_CCI,true); ArraySetAsSeries(buf_DeMarker,true); ArraySetAsSeries(buf_FrAMA,true); ArraySetAsSeries(buf_MACD_m,true); ArraySetAsSeries(buf_MACD_s,true); ArraySetAsSeries(buf_RSI,true); ArraySetAsSeries(buf_RVI_m,true); ArraySetAsSeries(buf_RVI_s,true); ArraySetAsSeries(buf_Stoch_m,true); ArraySetAsSeries(buf_Stoch_s,true); ArraySetAsSeries(buf_WPR,true); FileHandle=FileOpen("MasterData2.csv",FILE_ANSI|FILE_WRITE|FILE_CSV|FILE_SHARE_READ,';'); if(FileHandle!=INVALID_HANDLE) { Print("FileOpen OK"); //--- saving names of the variables in the first line of the file for convenience of working with it FileWrite(FileHandle,"Time","Hour","Price","AC","dAC","Bears","dBears","Bulls","dBulls", "AO","dAO","CCI","dCCI","DeMarker","dDeMarker","FrAMA","dFrAMA","MACDm","dMACDm", "MACDs","dMACDs","MACDms","dMACDms","RSI","dRSI","RVIm","dRVIm","RVIs","dRVIs", "RVIms","dRVIms","Stoch_m","dStoch_m","Stoch_s","dStoch_s","Stoch_ms","dStoch_ms", "WPR","dWPR"); } else { Print("FileOpen action failed. Error",GetLastError()); ExpertRemove(); } //--- return(0); }
Il gestore dell'evento OnTick() identifica nuove barre e salva i dati nel file.
Il comportamento del prezzo sarà determinato dall'ultima barra completata e i valori degli indicatori saranno ottenuti dalla barra che precede l'ultima barra completata. Oltre al valore dell'indicatore assoluto, dobbiamo salvare la differenza tra il valore assoluto e il valore precedente per vedere la direzione del cambiamento. I nomi di tali variabili nell'esempio fornito avranno il prefisso "d".
Per gli indicatori della linea di segnale, è necessario salvare la differenza tra la linea principale e quella di segnale, nonché la sua dinamica. Inoltre, salva l'ora della nuova barra e il relativo valore dell'ora. Questo può tornare utile per filtrare i dati in base al tempo.
Pertanto, prenderemo in considerazione 37 indicatori per costruire un modello di previsione per stimare il movimento dei prezzi.
//+------------------------------------------------------------------+ //| Expert tick function | //| Monitoring the market situation and saving values | //| of the indicators into the file at the beginning of every new bar| //+------------------------------------------------------------------+ void OnTick() { //--- declaring a static variable of datetime type static datetime Prev_time; //--- it will be used to store prices, volumes and spread of each bar MqlRates mrate[]; MqlTick tickdata; ArraySetAsSeries(mrate,true); //--- obtaining the recent quotes if(!SymbolInfoTick(_Symbol,tickdata)) { Alert("Quote update error - error: ",GetLastError(),"!!"); return; } ///--- copying data of the last 4 bars if(CopyRates(_Symbol,_Period,0,4,mrate)<0) { Alert("Historical quote copy error - error: ",GetLastError(),"!!"); return; } //--- if both time values are equal, there is no new bar if(Prev_time==mrate[0].time) return; //--- saving the time in the static variable Prev_time=mrate[0].time; //--- filling the arrays with values of the indicators bool copy_result=true; copy_result=copy_result && FillArrayFromBuffer1(buf_AC,h_AC,4); copy_result=copy_result && FillArrayFromBuffer1(buf_BearsPower,h_BearsPower,4); copy_result=copy_result && FillArrayFromBuffer1(buf_BullsPower,h_BullsPower,4); copy_result=copy_result && FillArrayFromBuffer1(buf_AO,h_AO,4); copy_result=copy_result && FillArrayFromBuffer1(buf_CCI,h_CCI,4); copy_result=copy_result && FillArrayFromBuffer1(buf_DeMarker,h_DeMarker,4); copy_result=copy_result && FillArrayFromBuffer1(buf_FrAMA,h_FrAMA,4); copy_result=copy_result && FillArraysFromBuffers2(buf_MACD_m,buf_MACD_s,h_MACD,4); copy_result=copy_result && FillArrayFromBuffer1(buf_RSI,h_RSI,4); copy_result=copy_result && FillArraysFromBuffers2(buf_RVI_m,buf_RVI_s,h_RVI,4); copy_result=copy_result && FillArraysFromBuffers2(buf_Stoch_m,buf_Stoch_s,h_Stoch,4); copy_result=copy_result && FillArrayFromBuffer1(buf_WPR,h_WPR,4); //--- checking the accuracy of copying the data if(!copy_result==true) { Print("Data copy error"); return; } //--- saving to the file the price movement within the last two bars //--- and the preceding values of the indicators if(FileHandle!=INVALID_HANDLE) { MqlDateTime tm; TimeCurrent(tm); uint Result=0; Result=FileWrite(FileHandle,TimeToString(TimeCurrent()),tm.hour, // time of the bar (mrate[1].close-mrate[2].close)/_Point, // difference between the closing prices of the last two bars buf_AC[2],buf_AC[2]-buf_AC[3], // value of the indicator on the preceding bar and its dynamics buf_BearsPower[2],buf_BearsPower[2]-buf_BearsPower[3], buf_BullsPower[2],buf_BullsPower[2]-buf_BullsPower[3], buf_AO[2],buf_AO[2]-buf_AO[3], buf_CCI[2],buf_CCI[2]-buf_CCI[3], buf_DeMarker[2],buf_DeMarker[2]-buf_DeMarker[3], buf_FrAMA[2],buf_FrAMA[2]-buf_FrAMA[3], buf_MACD_m[2],buf_MACD_m[2]-buf_MACD_m[3], buf_MACD_s[2],buf_MACD_s[2]-buf_MACD_s[3], buf_MACD_m[2]-buf_MACD_s[2],buf_MACD_m[2]-buf_MACD_s[2]-buf_MACD_m[3]+buf_MACD_s[3], buf_RSI[2],buf_RSI[2]-buf_RSI[3], buf_RVI_m[2],buf_RVI_m[2]-buf_RVI_m[3], buf_RVI_s[2],buf_RVI_s[2]-buf_RVI_s[3], buf_RVI_m[2]-buf_RVI_s[2],buf_RVI_m[2]-buf_RVI_s[2]-buf_RVI_m[3]+buf_RVI_s[3], buf_Stoch_m[2],buf_Stoch_m[2]-buf_Stoch_m[3], buf_Stoch_s[2],buf_Stoch_s[2]-buf_Stoch_s[3], buf_Stoch_m[2]-buf_Stoch_s[2],buf_Stoch_m[2]-buf_Stoch_s[2]-buf_Stoch_m[3]+buf_Stoch_s[3], buf_WPR[2],buf_WPR[2]-buf_WPR[3]); if(Result==0) { Print("FileWrite action error ",GetLastError()); ExpertRemove(); } } }
Dopo aver avviato l'EA, il file MasterData.CSV verrà creato nel terminal_data_directory/MQL5/Files. Quando si avvia l'EA nel tester, si troverà in terminal_data_directory/tester/Agent-127.0.0.1-3000/MQL5/Files. Il file così come ottenuto può essere già utilizzato in Statistica.
Un esempio di tale file può essere trovato in MasterData.CSV. I dati sono stati raccolti per EURUSD H1 dal 1 agosto 2011 al 1 ottobre 2011.
Per aprire il file in Statistica, procedi come segue.
- In Statistica, vai al menu File > Open, seleziona il tipo di file: File di dati e apri il tuo file.
- Lascia Delimited nella finestra Text File Import Type e fai clic su OK.
- Abilita gli elementi sottolineati nella finestra aperta.
- Ricorda di inserire il punto decimale nel campo del carattere separatore decimale indipendentemente dal fatto che sia già presente o meno.
Fig.1. Importazione del file in Statistica
Clicca su OK e la tabella contenente i nostri dati è pronta.
Fig.2. Database in Statistica
Ora crea la variabile di raggruppamento sulla base della variabile Prezzo.
Individueremo quattro gruppi a seconda del comportamento dei prezzi:
- Oltre 200 punti verso il basso;
- Meno di 200 punti verso il basso;
- Meno di 200 punti in su;
- Oltre 200 punti in su.
Per aggiungere una nuova variabile, clicca con il pulsante destro del mouse sull'intestazione della colonna AC e selezionare l'opzione Add Variable.
Fig.3. Aggiunta di una nuova variabile
Specifica il nome "Group" per la nuova variabile nella finestra aperta e aggiungi la formula per la conversione della variabile Prezzo al numero di gruppi.
La formula è la seguente:
=iif(v3<=-200;1;0)+iif(v3<0 and v3>-200;2;0)+iif(v3>0 and v3<200;3;0)+iif(v3>=200;4;0)
Fig.4. Descrizione della variabile
Il file è pronto per l'analisi discriminante. Un esempio di questo file può essere trovato su MasterData.STA.
2.2. Selezione delle migliori variabili
Esegui l'analisi discriminante (Statistics->Multivariate Exploratory Techniques->Discriminant Analysis).
Fig.5. Esecuzione dell'analisi discriminante
Fare clic su Variables nella finestra aperta.
Seleziona la variabile di raggruppamento nel primo campo e tutte le variabili in base alle quali verrà eseguito il raggruppamento - nel secondo campo.
Nel nostro caso, nel primo campo è specificata la variabile Group e nel secondo campo tutte le variabili ricavate dagli indicatori nonché la variabile aggiuntiva Hour (l'ora di ricezione dei dati).
Fig.6. Selezione delle variabili
Clicca sul pulsante Select Cases (Figura 8). Si aprirà una finestra per la selezione dei casi (righe di dati) che verranno utilizzati nell'analisi discriminante. Abilita gli elementi come mostrato nello screenshot qui sotto (Figura 7).
Solo i primi 700 casi verranno utilizzati per l'analisi. I restanti verranno successivamente utilizzati per la verifica del modello prognostico risultante. I numeri dei casi vengono impostati tramite la variabile V0. Specificando i casi in questo modo, impostiamo un campione dei dati di addestramento per DA.
Quindi clicca su OK.
Fig.7. Definizione del campione di addestramento
Ora selezioniamo i gruppi per i quali sarà costruito il nostro modello prognostico.
C'è un problema che richiede la nostra attenzione. Uno dei punti deboli di DA è la sensibilità ai dati outlier. Eventi rari ma potenti, nel nostro caso i picchi di prezzo, possono distorcere il modello. Ad esempio, a seguito della notizia inaspettata, il mercato ha risposto con movimenti consistenti della durata di alcune ore. I valori degli indicatori tecnici sono stati in questo caso di scarsa importanza nella previsione ma saranno considerati altamente significativi in DA in quanto vi è stata una marcata variazione di prezzo. È quindi consigliabile controllare i dati per gli outlier prima di eseguire DA.
Per escludere gli outlier dal nostro esempio, analizzeremo solo i gruppi 2 e 3. Poiché c'è stata una sostanziale variazione di prezzo nei gruppi 1 e 4, potrebbero esserci degli outlier nei valori dell'indicatore.
Quindi, clicca su Codes for grouping variable (Figura 8). E specifica il numero di gruppi per l'analisi.
Fig.8. Selezione dei gruppi per l'analisi
Abilita le opzioni avanzate. Permetterà l'analisi graduale, che sarà richiesta in una fase successiva.
Per eseguire DA, clicca su OK.
Potrebbe apparire un messaggio come di seguito. Ciò significa che una delle variabili selezionate è eccessiva ed è sostanzialmente condizionata da altre variabili, ad esempio è la somma di altre due variabili.
Ciò è del tutto possibile per il flusso di dati ottenuto dagli indicatori. La presenza di tali variabili influisce sulla qualità dell'analisi. E saranno rimossi. Per fare ciò, torna alla finestra per la selezione delle variabili per DA e identifica le variabili in eccesso aggiungendole una per una ed eseguendo DA più e più volte.
Fig.9. Messaggio di valore di tolleranza basso
Si aprirà quindi una finestra per la selezione del metodo DA (Figura 10). Seleziona Forward Stepwise nell'elenco a discesa. Poiché i valori degli indicatori hanno poca importanza prognostica, si preferisce l'uso dell'analisi stepwise. E il modello di discriminazione di gruppo sarà costruito automaticamente per gradi.
Nello specifico, ad ogni passaggio verranno riviste e valutate tutte le variabili per determinare quale contribuirà maggiormente alla discriminazione tra i gruppi. Quella variabile verrà quindi inclusa nel modello e il processo ricomincerà da capo. Tutte le variabili che meglio discriminano tra il campione di dati verranno selezionate nel modo specificato passo dopo passo.
Fig.10. Selezione del metodo
Clicca su OK e si aprirà una finestra che informa che DA è stato completato con successo.
Fig.11. Finestra dei risultati DA
Clic su Summary: Variables in the model per visualizzare l'elenco delle variabili incluse nel modello seguendo l'analisi stepwise. Queste variabili discriminano meglio tra i nostri gruppi. Da notare che le variabili che producono un'accuratezza della discriminazione superiore al 95% (p<0,05) sono visualizzate in rosso. L'accuratezza della discriminazione rispetto ad altre variabili è inferiore. Il modello deve includere solo le variabili che producono un'accuratezza della discriminazione di almeno il 95%.
Tuttavia, secondo la "regola d'oro" delle statistiche, devono essere utilizzate solo le variabili che producono un'accuratezza superiore al 95%. Escluderemo quindi dall'analisi tutte le variabili che non sono visualizzate in rosso. Ovvero dBulls, Bulls, FraMA, Hour. Per escludere queste variabili, torna alla finestra in cui è stata selezionata l'analisi stepwise e specificale nella finestra che si aprirà dopo aver cliccato su Variables.
Ripeti l'analisi. Cliccando su Summary: Variables in the model, vedremo di nuovo che altre tre variabili ora appaiono come insignificanti. Questi sono DeMarker, Stoch_s, AO. Escluderemo anche loro dall'analisi.
Di conseguenza, avremo un modello che include le variabili che producono una discriminazione accurata tra i gruppi (p<0.01).
Fig.12. Variabili incluse nel modello
Pertanto, solo sette variabili su 37 sono rimaste nel nostro esempio come le più significative per la previsione.
Questo approccio consente di selezionare gli indicatori chiave sulla base dell'analisi tecnica per l'ulteriore sviluppo di sistemi di trading personalizzati, compresi quelli che utilizzano reti neurali.
2.3. Analisi e test del modello risultante utilizzando i dati di test
Al completamento della DA, abbiamo ottenuto il modello prognostico ei risultati della sua applicazione ai dati di addestramento.
Per vedere i risultati della discriminazione del modello e del gruppo, aprire la scheda Classification.
Fig.13. Scheda Classification
Clicca su Classification matrix per visualizzare la tabella contenente i risultati dell'applicazione del modello ai dati di addestramento.
Le righe mostrano le classificazioni osservate. Le colonne contengono le classificazioni previste in base al modello calcolato. Le celle che contengono previsioni accurate sono contrassegnate in verde e le previsioni imprecise vengono visualizzate in rosso.
La prima colonna mostra l'accuratezza della previsione in %.
Fig.14. Classificazione dei dati di addestramento
L'accuratezza della previsione (Totale) utilizzando i dati di addestramento è risultata essere del 60%.
Testiamo il modello utilizzando i dati di test. Per fare ciò, clicca su Select (Figura 13) e specifica v0>700, dopodiché il modello verrà verificato all'interno dell'intervallo di dati che non è stato utilizzato per la creazione del modello.
Avremo quanto segue:
Fig.15. Classificazione dei dati di test
L'accuratezza complessiva della previsione utilizzando il campione di prova si è rivelata all'incirca allo stesso livello raggiungendo il 55%. Questo è un livello abbastanza buono per il mercato FOREX.
2.4. Sviluppare un sistema di trading
Il modello prognostico in DA si basa sul sistema di equazioni lineari secondo cui i valori degli indicatori sono classificati in un gruppo o nell'altro.
Per vedere le descrizioni di queste funzioni, vai alla scheda Classification nella finestra dei risultati DA (Figura 13) e clicca su Classification functions. Vedrai una finestra con una tabella contenente i coefficienti delle equazioni discriminanti.
Fig.16. Equazioni discriminanti
Sviluppiamo un sistema di due equazioni sulla base dei dati della tabella:
Gruppo2 = 157,17*AC - 465,64*Orsi + 82,24*dOrsi - 0,006*dCCI + 761,06*dFrAMA + 2418,79*dMACDm + 0,01*dStoch_ms - 1,035
Gruppo3 = 527,11*AC - 641,97*Orsi + 271,21*dOrsi - 0,002*dCCI + 1483,47*dFrAMA - 726,16*dMACDm - 0,034*dStoch_ms - 1,353
Per utilizzare questo modello, inserisci i valori dell'indicatore nelle equazioni e calcola il valore del gruppo.
La previsione riguarderà il gruppo il cui valore Group è maggiore. Secondo il nostro esempio, se il valore di Group2 è maggiore di quello di Group3, si prevede che entro la prossima ora il grafico dei prezzi si sposterà molto probabilmente verso il basso. La previsione risulterà esattamente opposta nel caso in cui il valore del Gruppo3 sia maggiore di quello del Gruppo2.
Va notato che i valori degli indicatori e del periodo di analisi nel nostro esempio sono stati selezionati in modo piuttosto casuale. Ma anche questa quantità di dati è stata sufficiente per dimostrare le potenzialità e la potenza della DA.
Conclusione
L'analisi discriminante è uno strumento utile applicato al mercato FOREX. Può essere utilizzato per cercare e verificare l'insieme ottimale di variabili che consentono di classificare i valori degli indicatori osservati in diverse previsioni. Può anche essere utilizzato per costruire modelli prognostici.
I modelli costruiti a seguito dell'analisi discriminante possono essere facilmente integrati in EA che non richiedono una notevole esperienza di sviluppo. L'analisi discriminante di per sé è anche relativamente facile da usare. Il tutorial passo-passo di cui sopra sarebbe sufficiente per analizzare i tuoi dati.
Maggiori informazioni sull'analisi discriminante possono essere trovate nella relativa sezione del manuale elettronico.
Tradotto dal russo da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/ru/articles/335





- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso