English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
Utilizzo dell'analisi discriminante per sviluppare sistemi di trading

Utilizzo dell'analisi discriminante per sviluppare sistemi di trading

MetaTrader 5Sistemi di trading | 17 dicembre 2021, 15:58
100 0
ArtemGaleev
ArtemGaleev

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:

  1. G1 = a1*RSI+b1*MACD+с1, l'equazione per i casi in cui il prezzo è salito;
  2. 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.

  1. Preparazione dei dati;
  2. Selezione delle migliori variabili dai dati preparati;
  3. Analisi e test del modello risultante utilizzando dati di test;
  4. 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:

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

Fig.1. Importazione del file in Statistica

Clicca su OK e la tabella contenente i nostri dati è pronta.

Fig.2. Database in Statistica

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:

  1. Oltre 200 punti verso il basso;
  2. Meno di 200 punti verso il basso;
  3. Meno di 200 punti in su;
  4. 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

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

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

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

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 allenamento

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

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

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

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

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

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

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

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

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

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

File allegati |
masterdata.zip (662.43 KB)
da_demo.mq5 (12.36 KB)
Previsione delle serie temporali mediante livellamento esponenziale (parte 2) Previsione delle serie temporali mediante livellamento esponenziale (parte 2)
Questo articolo cerca di aggiornare l'indicatore creato in precedenza e tratta brevemente un metodo per stimare gli intervalli di confidenza delle previsioni utilizzando il bootstrap e i quantili. Di conseguenza, otterremo l'indicatore di previsione e gli script da utilizzare per la stima dell'accuratezza della previsione.
Analisi dei parametri statistici degli indicatori Analisi dei parametri statistici degli indicatori
L'analisi tecnica implementa ampiamente gli indicatori che mostrano le quotazioni di base "più chiaramente" e consentono ai trader di eseguire analisi e prevedere il movimento dei prezzi di mercato. È abbastanza ovvio che non ha senso utilizzare gli indicatori, tanto meno applicarli nella creazione di sistemi di trading, a meno che non si risolvano i problemi relativi alla trasformazione delle quotazioni iniziali e alla credibilità dei risultati ottenuti. In questo articolo mostriamo che ci sono serie ragioni per una tale conclusione.
Creazione di un Expert Advisor mediante Expert Advisor Visual Wizard Creazione di un Expert Advisor mediante Expert Advisor Visual Wizard
Expert Advisor Visual Wizard per MetaTrader 5 fornisce un ambiente grafico altamente intuitivo con un set completo di blocchi di trading predefiniti, i quali consentono di progettare un Expert Advisor in pochi minuti. L'approccio click, drag and drop di Expert Advisor Visual Wizard ti consente di creare rappresentazioni visive delle strategie e dei segnali di trading forex come faresti con carta e matita. Questi diagrammi di trading vengono analizzati automaticamente dal generatore di codice MQL5 di Molanis che li trasforma in Expert Advisor pronti all'uso. L'ambiente grafico interattivo semplifica il processo di progettazione ed elimina la necessità di scrivere codice MQL5.
Previsione di serie temporali mediante livellamento esponenziale Previsione di serie temporali mediante livellamento esponenziale
L'articolo permette al lettore di familiarizzare con i modelli di livellamento esponenziale utilizzati per la previsione a breve termine delle serie temporali. Inoltre, tocca le questioni relative all'ottimizzazione e alla stima dei risultati di previsione e fornisce alcuni esempi di script e indicatori. Questo articolo sarà utile come prima conoscenza dei principi di previsione sulla base di modelli di livellamento esponenziale.