English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Türkçe
preview
Scienza dei Dati e Apprendimento Automatico (Parte 04): Predire l'Attuale Crollo del Mercato Azionario

Scienza dei Dati e Apprendimento Automatico (Parte 04): Predire l'Attuale Crollo del Mercato Azionario

MetaTrader 5Trading | 15 gennaio 2023, 12:39
361 0
Omega J Msigwa
Omega J Msigwa

Introduzione

Nella Parte 02 di questa serie di articoli abbiamo creato un semplice modello logistico basato sui dati del titanic, oggi costruiremo un modello logistico che potrebbe aiutarci a prevedere il crollo del mercato.

In questo articolo, faremo un'utile impiego dei nostri modelli logistici realizzando un modello predittivo del crollo del mercato azionario, per testare il nostro modello utilizzeremo i dati del test sull'attuale crollo del mercato azionario. Credo che questo sia importante per tutti noi.

immagine dell'articolo sul crollo del mercato azionario


Nel mercato azionario


Un crollo del mercato azionario è una forte e rapida caduta del valore totale del mercato con prezzi che in genere scendono di oltre il 10% in pochi giorni. Esempi famosi di gravi crolli del mercato azionario sono il Lunedì nero nel 1987 e la bolla immobiliare nel 2008 . Un crollo è generalmente attribuibile allo scoppio di una bolla dei prezzi ed è dovuto ad una massiccia svendita che si verifica quando la maggioranza dei partecipanti al mercato azionario prova a vendere i propri asset contemporaneamente.

Prima di approfondire questa cosa, voglio dare una dichiarazione di non responsabilità su questo:

Questo non è un consiglio finanziario o commerciale. Spero che tu creda che io non sia il Sig. Buffet o Charlie Munger, o un investitore professionista del mercato azionario, sono solo uno scienziato di dati che trova un modo per mettere in relazione i modelli scientifici con il trading, gentilmente non prendere le cose in questo articolo sul serio, poiché la maggior parte di queste opinioni sono state raccolte online e da varie fonti affidabili linkate alla sezione di riferimento alla fine dell'articolo. Ricerca prima di decidere di utilizzare uno qualsiasi degli approcci discussi in questo articolo per prendere decisioni di trading.

Ora che l'abbiamo tolto di mezzo, andiamo avanti.

Prima di tutto, vediamo i fattori che influenzano i prezzi delle azioni, una volta compresi questi fattori avremo un punto di partenza perché questi fattori potrebbero essere utilizzati come dati (variabili indipendenti) per il nostro modello logistico.


Fattori che Influenzano i Prezzi delle Azioni 


Ci sono molti fattori che influenzano il mercato azionario, i seguenti sono solo alcuni. Tieni presente che non c'è mai stato un indicatore chiaro di come si comportano i mercati, quindi userò i seguenti fattori:

  1. Domanda e Offerta
  2. Fattori Correlati alla Società
  3. Tassi d'Interesse
  4. Eventi in Corso
  5. Inflazione 

01: Domanda e Offerta


Ci sono molti fattori che influenzano il mercato azionario, ma se togli tutto ciò che c'è all'esterno e guardi al fattore fondamentale, è semplice, domanda e offerta, uno squilibrio tra domanda e offerta aumenterà e abbasserà il prezzo del titolo.

Se c'è un'improvvisa scarsità di mele, sempre più persone fanno la fila per comprarle e il prezzo delle mele salirà immediatamente alle stelle.

Allo stesso modo, se la società sta andando bene e tutti vogliono acquistare azioni della stessa società, ci sarà una carenza di azioni che porterà all'impennata del prezzo delle azioni di quella società. Ed è vero il contrario, se ci sono troppe azioni ma nessuno vuole comprarle, in tal caso il prezzo dell’azione crollerà.

È impossibile (potrei dire) per noi ottenere tutti i dati di domanda e offerta da poter utilizzare nel nostro modello, quindi lasceremo questo fattore nel nostro set di dati, ma credo che chiunque potrebbe essere in grado di ottenere questi dati in modo accurato, è un passo avanti verso la costruzione del Santo Graal


02: Fattori Correlati alla Società


Tutto ciò che accade all'interno dell'azienda influenzerà direttamente il prezzo delle azioni, se la società è in aumento, con lanci di prodotti di successo, aumento delle entrate, riduzione del debito e maggiore afflusso di investitori, il prezzo di un'azienda è destinato ad aumentare perché tutti vorrebbero acquistare azioni di tale società che sta passando da un picco all’altro.

Tuttavia, se una società sta registrando perdite, problemi con prodotti e aumento del debito, la maggioranza degli azionisti vorrebbe scaricare le azioni della società, riducendo così il prezzo delle azioni.

Un buon esempio per chiarire questo punto è Netflix e Apple.

Abbiamo visto Netflix perdere oltre 200.000 abbonati al servizio entro i primi 3 mesi del 2022, a causa dell'aumento dei prezzi delle sanzioni ad alcuni membri e di molte altre situazioni che si sono verificate all'interno dell'azienda che hanno portato direttamente al calo del prezzo delle azioni di Netflix.

Apple, dall'altra parte, è stata un'azienda di successo per molto tempo grazie al rilascio di prodotti di successo, alla buona leadership nell'azienda e ad altre situazioni positive all'interno dell'azienda che hanno portato ad un prezzo rialzista delle azioni negli ultimi anni.

Per determinare la salute dell'azienda utilizzeremo una metrica chiamata rapporto Prezzo/Utili.

Rapporto Prezzo-Utili

Il rapporto Prezzo/Utili per la valutazione di una società, misura il prezzo corrente delle sue azioni rispetto ai suoi utili per azione (EPS). Il rapporto PE può essere utilizzato come indicatore di quanto sia sana un'azienda. Ecco come appaiono i grafici in base ai prezzi delle azioni e al rapporto PE per Apple e Netflix.

Apple:

grafico del rapporto tra il prezzo delle azioni Apple vs utili

fonte dati: macrotrends.net


NETFLIX

Rapporto tra prezzo delle azioni Netflix e utili

fonte dati: macrotrends.net

Sembra che il rapporto PE venga calcolato trimestralmente in un anno, quindi in questo caso, sembra che fosse tutto ciò che le fonti di dati gratuite potevano offrire, immagino che ci sia di più nelle fonti a pagamento, potremmo considerare che i nostri dati hanno dei buchi , poiché dobbiamo avere lo stesso numero di righe in tutte le nostre colonne del set di dati affinché i nostri calcoli nei nostri modelli funzionino in modo efficace, questi sono i dati per APPLE:

buchi nel rapporto prezzo/utili apple

se i dati vengono calcolati in ogni trimestre dell'anno, per il resto del trimestre utilizzeremo gli stessi dati che sono stati precalcolati fino al trimestre successivo, quindi in questo caso duplichiamo i dati:

dati duplicati rapporto PE apple

Gli stessi passaggi verranno eseguiti per NETFLIX.


03: Tassi d‘Interesse


Le attività della Federal Reserve Bank influenzano direttamente i prezzi delle azioni, le banche di riserva continuano a cambiare i tassi a intervalli regolari per stabilizzare l'economia. Naturalmente, un tasso di interesse più elevato significa che le aziende dovranno pagare di più per i prestiti, con conseguenti minori profitti. Ciò ridurrà il loro prezzo delle azioni. Al contrario, tassi di interesse più bassi significano che le aziende possono prendere in prestito denaro dalle banche per costi molto inferiori, risparmiando così il loro denaro e realizzando un profitto maggiore. In questo caso, i prezzi delle azioni saliranno

> La Fed ha recentemente alzato i tassi per distruggere la domanda e forzare le imprese a diminuire i loro prezzi e infine, aiutare a far scendere l’inflazione.

Il grafico del tasso di riferimento della Fed dal 2010 ad oggi si presenta così:

tasso sui fondi fed

04: Eventi in corso


Gli eventi in corso in tutto il paese o nel mondo, in generale, possono avere un impatto enorme anche sul mercato azionario. Nessuno può negare che la pandemia di covid-19 abbia avuto un effetto negativo molto forte sul mercato azionario alla fine del 2019 e nel 2020 , e le rivolte per l'uguaglianza negli Stati Uniti nello stesso anno. 

Altri eventi che influenzano il prezzo del mercato azionario includono guerre e attacchi terroristici.

Tutti questi eventi sono destinati a far scendere drasticamente i prezzi delle azioni e influenzare la volatilità del mercato.

Non raccoglierò alcun dato da questo fattore, perché richiederebbe così tanto lavoro e più modelli da addestrare per questi eventi, questo va oltre lo scopo di ciò che abbiamo già trattato in questa serie di articoli.


05: Inflazione


L'inflazione è la perdita del potere d'acquisto di una data valuta nel tempo. Una stima quantitativa del tasso al quale si verifica il calo del potere d'acquisto può riflettersi nell'aumento del livello medio dei prezzi di un paniere di beni e servizi selezionati in un'economia in un certo periodo di tempo. L'aumento del livello generale dei prezzi, spesso espresso in percentuale, significa che un'unità di valuta acquista effettivamente meno di quanto non facesse nei periodi precedenti.

Maggiori informazioni sull'inflazione qui https://it.wikipedia.org/wiki/Inflazione

Quindi, sostanzialmente, ci sono due tipi di inflazione Core CPI e CPI:

  • Core CPI - è tutto tranne i prezzi dell'energia e del cibo.
  • CPI - è tutto all'interno dell'economia; energia, prezzi degli alimentari, istruzione, intrattenimento, ecc. Tutto ciò che esiste nella vita quotidiana delle persone di un'economia specifica.

Poiché l'inflazione erode il valore di un dollaro di utili, può rendere difficile per il mercato, valutare il valore corrente delle società che compongono gli indici di mercato. Inoltre, i prezzi più elevati per materiali, inventario e manodopera possono influire sugli utili man mano che le aziende si adeguano. Di conseguenza, i prezzi delle azioni possono fluttuare e questo causa volatilità. 

La buona notizia è che mentre l'inasprimento della Fed può avere un impatto negativo sugli investimenti a reddito fisso, le azioni hanno spesso storicamente registrato buoni risultati durante questi cicli.

Guarda il grafico CPI degli Stati Uniti dal 1970.

  Immagine del grafico cpi US


Ora raccogliamo tutti i dati necessari e memorizziamoli in un unico file CSV .

Partendo con Apple:

Raccolta dei Dati


I dati che raccoglieremo per il nostro file CSV sono Core CPI, CPI, tasso del fondo Fed, EPS e Tasso PE, ho tutti questi dati disponibili.

Manca solo un dato nel nostro set di dati, e questa è la nostra variabile dipendente, ma abbiamo solo i valori grezzi dei prezzi delle azioni. Creiamo uno script che potrebbe dirci se un mese specifico ha avuto un crollo del mercato azionario o meno

all’interno di CrashClassifyScript.mq5

void DetectCrash(double &prices[], int& out_binary[])
 {
     double prev_high = prices[0];
     
     ArrayResize(out_binary,ArraySize(prices)-1); //we reduce the size by one since we ignore the current we predict the previous one
     for (int i=1; i<ArraySize(prices); i++)
        {
           int prev = i-1;
            if (prices[i] >= prev_high)
                prev_high = prices[i]; //grab the highest price 
                
            double percent_crash = ((prev_high - prices[i]) / prev_high) * 100.0; //convert crash to percentage
            printf("crash percentage %.2f high price %.4f curr price %.4f ", percent_crash,prev_high,prices[i]);  
          
            //based on the definition of a crash; markets has to fall more than 10% percent
            if (percent_crash > 10)
                out_binary[prev] = 0; //downtrend (crash)
            else
                out_binary[prev] = 1; //uptrend (no crash )
        }
 }

Se fai attenzione al primo prev_high noterai che gli ho dato principalmente il valore del prezzo precedente perché ho copiato i valori di apple dal 1 dicembre 2009, invece che dal 1 gennaio 2010. Volevo avere una stanza per rilevare il crash al primo calcolo e aggiungendo quel mese, è diventato possibile, ma ignoriamo quel mese nel nostro set di dati di output perché non ne abbiamo più bisogno, ecco perché l'indice prev out_binary[prev] all'interno che è fondamentalmente i-1 perché eseguiamo il loop partendo dall'indice di 1.

Ecco l'output quando stampiamo l'Array out_binary

 CrashClassifyScript  DATA 1/1/2010 TREND 1

 CrashClassifyScript  DATA 2/1/2010 TREND 1

.........

 CrashClassifyScript  DATA 4/1/2022 TREND 0

 CrashClassifyScript  DATA 5/1/2022 TREND 0

Aggiungendo tutte le colonne di dati a un file csv in excel, si otterrà un file csv simile a questo:

Panoramica set di dati Apple

GRANDE, ora è tutto impostato, iniziamo a lavorare con altro codice.

Sappiamo tutti che dietro le quinte del nostro modello logistico esiste un algoritmo di regressione lineare e prima di poter utilizzare qualsiasi dato in un modello lineare dobbiamo verificare se è correlato con la sua variabile indipendente. Controlliamolo chiamando il metodo corrcoeff che ho aggiunto alla nostra Libreria LinearRegression che ho creato nel precedente articolo.

All’interno di TestScript.mq5

m_lr = new CMatrixRegression;
      
Print("Matrix multiple regression");
m_lr.Init(8,"2,4,5,6,7",file_name,",",0.7);
      
m_lr.corrcoeff();
m_lr.MultipleMatLinearRegMain();    
delete m_lr;       

L'output sarà sicuramente:

Matrix multiple regression

TestScript  Init, numero di colonne X scelte =5

TestScript  "2" "4" "5" "6" "7"

TestScript  Tutti i dati Array Size 740 consumano 52 byte di memoria

TestScript  Coefficienti di correlazione

TestScript  Var Indipendente Vs Trend = 0,225

TestScript  Var Indipendente Vs CPI = -0,079

TestScript  Var Indipendente Vs Core CPI = -0,460

TestScript  Var Indipendente Vs EPS($) = -0,743

TestScript  Var Indipendente Vs Rapporto PE = -0,215

Sembra che tutti i dati che ho appena raccolto in luoghi diversi non siano correlati al prezzo del titolo, nonostante molte persone online stiano urlando che questi sono i fattori che influenzano il mercato azionario, capisco che le fonti inizialmente abbiano fornito un disclaimer che non esiste un indicatore chiaro su come i mercati fanno ciò che fanno, ma i numeri per un modello lineare mostrano una storia molto diversa, ad esempio, il CPI rispetto al Prezzo di Apple, mi aspettavo di avere una correlazione negativa molto forte qui, ma sembra che la correlazione sia troppo debole per essere utilizzata nella regressione lineare, solo il core CPI mostra una promettente correlazione negativa di circa -0,46. Il più forte di tutti è l'EPS (Utile per azione) che mostra la correlazione negativa di circa 0,743 che può essere convertita in -74,3%

Non abbiamo finito, è estremamente importante visualizzare i dati in Python e vedere di persona nel caso in cui ci manchi qualcosa nei numeri, nel caso in cui i nostri calcoli non siano andati bene:

Visualizzazione del grafico della coppia Seaborn

Output

analisi delle scorte sns di Apple

Penso che a questo punto, sia molto chiaro che non c'è una forte relazione tra la maggior parte dei dati che abbiamo raccolto, filtriamo i nostri dati.

Useremo solo le tre variabili indipendenti per costruire il nostro modello che sono, 

  • Core CPI (correlato con circa -46% vicino alla metà)
  • EPS (correlato con circa il -74,2% il migliore tra tutti i dati)
  • Infine, il tasso del fondo FED (correlato con circa -33%, meno correlato non lo consiglierei quando stai costruendo un modello serio)

Ok, ora inizializziamo la nostra libreria con solo le colonne che vogliamo:

log_reg.Init(file_name,delimiter,2,"3,5,6",0.7);

Per coloro che hanno perso la funzionalità di base della regressione logistica dovrebbero fare riferimento a questo articolo.

Ulteriori miglioramenti della libreria 

//These should be called before the Init 
                           
void    FixMissingValues(string columns);
void    LabelEncoder(string columns, string members);

I modelli logistici sono sensibili ai valori mancanti e poiché si tratta di un modello di apprendimento automatico classificatore, tratta dati zero che potrebbero indicare che i dati mancano come una classe classificata, può anche trattare i valori nan e le stringhe come zero a seconda di come leggiamo il file in MQL5, ecco perché ho apportato alcuni miglioramenti alla libreria.

La funzione per sostituire i valori mancanti con la media e la funzione per codificare le stringhe in etichette, 

queste funzioni dovrebbero essere chiamate prima della funzione Init.

Ora la nostra libreria logistica Eredita, i componenti della nostra libreria MatrixRegression che abbiamo creato nell'articolo precedente

class CLogisticRegression: protected CMatrixRegression

passiamo alla parte buona e vediamo quanto è buono il nostro modello,

Chiamata alla libreria di regressione logistica

L'output sarà: 

  Confusion Matrix 
   [ 0  13 ]
    [  0  31  ] 
  Tested model accuracy =0.7045

La precisione del nostro modello è del 70,45% sul set di dati del test😲 Sono sbalordito a questo punto.

Ho pensato che a causa dell'inconveniente dei dati che avevo in precedenza non avrei potuto raggiungere nemmeno il segno del 50%, ho pensato a un certo punto dovesse esserci un errore fino a quando non ho provato la stessa cosa con Python solo per ottenere lo stesso risultato.

modello di precisione testato con python

B  A  M

Tieni presente che la nostra variabile dipendente è la colonna Trend che abbiamo raccolto con il nostro script per rilevare il crash, all'inizio di questo articolo. La colonna del prezzo è stata utilizzata solo per mostrare i coefficienti di correlazione per i nostri modelli lineari perché non possiamo utilizzare i valori binari di 0 e 1che indicano rispettivamente il trend al ribasso e al rialzo, a trovare le correlazioni sono piuttosto i prezzi reali sul titolo in quel caso.

Ora spostiamo l'attenzione su NETFLIX

Ecco come appaiono i numeri dei coefficienti di correlazione per questo fratello qui:

        Correlation Coefficients
         Independent Var Vs Trend = 0.071
         Independent Var Vs  rate (FEDs rate) = 0.310
         Independent Var Vs CPI = 0.509
         Independent Var Vs Core CPI  = 0.607
         Independent Var Vs  EPS = 0.917
         Independent Var Vs PE Ratio = -0.213

Sembra che la maggior parte dei fattori che abbiamo discusso di seguito influisca positivamente NETFLIX, solo in negativo è il rapporto prezzo/utili. Il fattore più forte è l'utile per azione con una correlazione di circa il 92% sul prezzo delle azioni. Altri sono core CPI e CPI, quindi per NETFLIX utilizzeremo solo tre dati per costruire il nostro Modello:

  • EPS
  • Core CPI 
  • e CPI

Ancora una volta visualizziamo i nostri dati.

Grafico di conteggio dei dati di Netflix

Sembra molto meglio su NETFLIX che su Apple l'ultima volta.

Per farla breve,

   log_reg = new CLogisticRegression();
    
    Print("NETFLIX"); 
    
    file_name =  "Netflix Dataset.csv";
    
    log_reg.Init(file_name,delimiter,2,"4,5,6",0.7);
    log_reg.LogisticRegressionMain(accuracy);
    
    printf("Tested model accuracy =%.4f",accuracy);
    delete log_reg;

L'output è: 

FN      0       07:54:45.106    TestScript      NETFLIX
PN      0       07:54:45.108    TestScript      ==== TRAINED LINEAR REGRESSION MODEL COEFFICIENTS ====
ED      0       07:54:45.108    TestScript      [ 
RO      0       07:54:45.108    TestScript       1.43120 -0.05632 -0.54159  0.48957
EE      0       07:54:45.108    TestScript      ] 
CQ      0       07:54:45.108    TestScript      columns = 4 rows = 1
PH      0       07:54:45.108    TestScript      ========= LINEAR REGRESSION MODEL TESTING STARTED =========
QP      0       07:54:45.108    TestScript      Tested Linear Model R square is = -0.35263665822405277
GR      0       07:54:45.108    TestScript      Confusion Matrix 
EE      0       07:54:45.108    TestScript       [ 0  18 ]
HN      0       07:54:45.108    TestScript        [  0  26  ] 
MJ      0       07:54:45.108    TestScript      Tested model accuracy =0.5909

Pur avendo dati che avevano una forte correlazione lineare con il prezzo delle azioni, il modello NETFLIX ha una precisione inferiore circa il 60%, rispetto alla precisione del modello APPLE col 70%, puoi giocare da solo con il resto del set di dati e vedere come potrebbe essere il modello.


Test del Mercato Azionario in Tempo Reale


Per poter testare sul mercato in tempo reale all'interno del nostro Expert Advisor, dobbiamo apportare alcune modifiche alla nostra funzione LogisticRegression principale, dobbiamo fare in modo che la funzione memorizzi i valori previsti con le rispettive date in un file CSV che utilizzeremo nel tester della strategia per lanciare i segnali su dove andrà il mercato secondo il nostro modello.

Ecco come raccoglieremo i dati e li memorizzeremo in un file csv:

WriteToCSV(TestPredicted,dates,"Predicted "+m_filename,m_delimiter);

Ricorda che raccogliamo solo i risultati del set di dati del test.

Ecco una breve panoramica su come i dati vengono archiviati in un file csv:

NETFLIX

Predicted, date_time
1,8/1/2018
1,9/1/2018
1,10/1/2018
1,11/1/2018
1,12/1/2018
1,1/1/2019

APPLE 

Predicted, date_time
1,9/1/2018
1,10/1/2018
1,11/1/2018
1,12/1/2018
1,1/1/2019
1,2/1/2019      

Se hai prestato attenzione alla confusa Matrix Part, noterai che il nostro modello è un buon predittore della tendenza al rialzo, il TP (il vero positivo aveva un gran numero di righe della matrice in Matrix).

Test del Prezzo delle Azioni in Tempo Reale EA

Il primo passo è creare il nostro EA e raccogliere dati dal nostro file CSV, ma prima vogliamo far sapere al nostro tester della strategia che useremo questo file durante i test.

#property tester_file "Predicted Apple Dataset.csv"

Ora, solo una breve panoramica delle funzioni che ho codificato e le ho chiamate nella funzione OnInit

 GetColumnDatatoArray(1,Trend);
 GetColumnDatatoArray(2,dates);

Queste funzioni sono molto comuni, le abbiamo utilizzate molto nella nostra libreria, fondamentalmente raccogliamo i dati dalla prima colonna quindi li memorizziamo nell’Array Trend[] lo stesso processo per l’Array dates[].

La prossima cosa importante è convertire l'ora che abbiamo raccolto da un file csv in un formato orario standard che potrebbe essere compreso in MQL5

ConvertTimeToStandard();

Ecco cosa c'è dentro la funzione:

void ConvertTimeToStandard()
 {
// A one time attempt to convert the date to yy.mm.dd
    
    ArrayResize(date_datetime,ArraySize(dates));
    for (int i=0; i<ArraySize(dates); i++)
       {
         StringReplace(dates[i],"/","."); //replace comma with period in each and every date
         //Print(dates[i]);
         string mm_dd_yy[];
         
         ushort sep = StringGetCharacter(".",0);
         StringSplit(dates[i],sep,mm_dd_yy); //separate month, day and year 
         
         //Print("mm dd yy date format");
         //ArrayPrint(mm_dd_yy);
         
         string year = mm_dd_yy[2];
         string  day = mm_dd_yy[1];
         string month = mm_dd_yy[0];
                
         dates[i] = year+"."+month+"."+day; //store to a yy.mm.dd format
         
         date_datetime[i] = StringToTime(dates[i]); //lastly convert the string datetime to an actual date and time
       }  
 }

Queste sono le funzioni che penso valga la pena spiegare, cosa è stato fatto nella funzione Init() .

La prossima cosa è testare le previsioni del modello sulla funzione Ontick, ecco il pilastro del nostro Expert Advisor:

    datetime today[1];
    int trend_signal = -1; //1 is buy signal 0 is sell signal
    
    CopyTime(Symbol(),PERIOD_D1,0,1,today);
    
    if (isNewBar())
     for (int i=0; i<ArraySize(date_datetime); i++)
      {
          if (today[0] == date_datetime[i]) //train in that specific day only
              {
                 
                  if ((int)Trend[i] == 1)
                    trend_signal = 1;
                  else 
                     trend_signal = 0; 
                     
                  // close all the existing positions since we are coming up with new data signals    
                  ClosePosByType(POSITION_TYPE_BUY);
                  ClosePosByType(POSITION_TYPE_SELL);
                  break;
              }
          
          if (MQLInfoInteger(MQL_TESTER) && today[0] > date_datetime[ArrayMaximum(date_datetime)])
             {
                 Print("we've run out of the testing data, Tester will be cancelled");
                 ExpertRemove();
             }
     } 
     
//--- Time to trade

      MqlTick tick;
      SymbolInfoTick(Symbol(),tick);
      double ask = tick.ask , bid = tick.bid;

//---

      if (trend_signal == 1 && PositionCounter(POSITION_TYPE_BUY)<1)
        {
           m_trade.Buy(Lots,Symbol(),ask,0,0," Buy trade ");
           ClosePosByType(POSITION_TYPE_SELL); //if the model predicts a bullish market close all sell trades if available
        }
        
      if (trend_signal == 0 && PositionCounter(POSITION_TYPE_SELL)<1)
        {
            m_trade.Sell(Lots,Symbol(),bid,0,0,"Sell trade");
            ClosePosByType(POSITION_TYPE_BUY); //vice versa if the model predicts bear market
        }
  }

Il motivo principale per cui ho scelto di addestrare il modello in quel giorno specifico e all'handle dell'evento NewBar è ridurre il costo del test della nostra applicazione, per ridurre ulteriormente questo costo ho anche codificato la condizione che il tester della strategia dovrebbe fermarsi una volta esaurito il set di dati del test.

Ecco il codice completo linkato di seguito, ora è il momento di testare il modello nel tester della strategia.

APPLE Risultati dei Test

Rapporto del tester Apple

Grafico

Grafico tester Apple

Netflix dall'altra parte, rapporto del tester

Rapporto del tester Netflix

Grafico del tester

Grafico tester Netflix

Fantastico, come puoi vedere il modello Apple aveva una precisione di circa il 70% e finora ha realizzato un buon modello predittivo con un bel grafico sul tester della strategia rispetto al suo rivale NETFLIX.


La Linea Inferiore

La cosa buona dei modelli logistici è che sono facili da costruire e addestrare ma fanno un buon lavoro nel classificare i nostri dati, anche se trovare i dati nel nostro modello è qualcosa che non dovrebbe essere dato per scontato in quanto è tra i passaggi più cruciali che una volta sbagliati potrebbero portare a un modello inefficiente.

Puoi comunque apportare ulteriori miglioramenti alla nostra libreria e ricordare nuovamente i dati perché credo ancora che il modo in cui ho raccolto i dati e li abbia classificati all'interno dello script Crashclassify non sia un modo efficace per osservare il crash, comunque è per la lettura.

Repository Github per questo articolo linkato qui >https://github.com/MegaJoctan/LogisticRegression-MQL5-and-python.



Tradotto dall’inglese da MetaQuotes Ltd.
Articolo originale: https://www.mql5.com/en/articles/10983

File allegati |
Files.zip (26.58 KB)
Scienza dei Dati e Apprendimento Automatico (Parte 05): Alberi Decisionali Scienza dei Dati e Apprendimento Automatico (Parte 05): Alberi Decisionali
Gli alberi decisionali imitano il modo in cui gli esseri umani pensano nel classificare i dati. Vediamo come costruire alberi e utilizzarli per classificare e prevedere alcuni dati. L'obiettivo principale dell'algoritmo degli alberi decisionali è separare i dati con impurità in nodi puri o vicini.
Matrici e vettori in MQL5 Matrici e vettori in MQL5
Utilizzando tipi di dati speciali "matrix" e "vector", è possibile creare un codice che è molto vicino alla notazione matematica. Con questi metodi, si evita la necessità di creare cicli annidati o di occuparsi della corretta indicizzazione degli array nei calcoli. Pertanto, l'uso di metodi matriciali e vettoriali aumenta l'affidabilità e la velocità nello sviluppo di programmi complessi.
Sviluppare un Expert Advisor per il trading da zero (Parte 14): Aggiunta dei Volumi al Prezzo (II) Sviluppare un Expert Advisor per il trading da zero (Parte 14): Aggiunta dei Volumi al Prezzo (II)
Oggi aggiungeremo altre risorse al nostro EA. Questo interessante articolo può fornire alcune nuove idee e metodi di presentazione delle informazioni. Allo stesso tempo, può assistere a correggere piccoli difetti nei tuoi progetti.
Impara come progettare un sistema di trading tramite Volumes Impara come progettare un sistema di trading tramite Volumes
Ecco un nuovo articolo della nostra serie sull'apprendimento di come progettare sistemi di trading basati sugli indicatori tecnici più comuni. Questo articolo sarà dedicato all'indicatore Volumes. Il volume come concetto è uno dei fattori più importanti nel trading sui mercati finanziari e dobbiamo prestargli attenzione. Attraverso questo articolo, impareremo come progettare un semplice sistema di trading tramite l'indicatore Volumes.