English Русский 中文 Español 日本語 Português 한국어 Français Italiano Türkçe
preview
Datenwissenschaft und maschinelles Lernen (Teil 04): Vorhersage des aktuellen Börsenkrachs

Datenwissenschaft und maschinelles Lernen (Teil 04): Vorhersage des aktuellen Börsenkrachs

MetaTrader 5Handel | 14 Juni 2022, 11:04
314 0
Omega J Msigwa
Omega J Msigwa

Einführung

In Teil 02 dieser Artikelserie haben wir ein einfaches logistisches Modell auf der Grundlage der Titanic-Daten erstellt. Heute werden wir ein logistisches Modell erstellen, das uns helfen könnte, den Börsencrash vorherzusagen.

In diesem Artikel werden wir eine nützliche Anwendung unserer logistischen Modelle vornehmen, indem wir ein Vorhersagemodell für den Börsencrash erstellen. Um unser Modell zu testen, werden wir die Testdaten des aktuellen Börsencrashs verwenden, der meines Erachtens für uns alle relevant sein wird.

Artikel über den Börsencrash


Börsencrash


Ein Börsencrash ist ein starker und schneller Rückgang des Gesamtwerts des Marktes, wobei die Kurse in der Regel innerhalb weniger Tage um mehr als 10 % fallen. Berühmte Beispiele für große Börsencrashs sind der Schwarze Montag im Jahr 1987 und wegen der Immobilienblase im Jahr 2008. Ein Crash ist in der Regel auf das Platzen einer Kursblase zurückzuführen und entsteht durch einen massiven Ausverkauf, der eintritt, wenn ein Großteil der Börsenteilnehmer versucht, ihre Vermögenswerte gleichzeitig zu veräußern.

Bevor wir weiter in die Sache einsteigen, möchte ich einen Haftungsausschluss geben:

Dies ist keine Finanz- oder Handelsberatung. Hoffentlich glauben Sie nicht, dass ich Mr. Buffet oder Charlie Munger oder ein professioneller Börseninvestor sei, sondern nur ein Datenwissenschaftler, der einen Weg findet, wissenschaftliche Modelle mit dem Handel in Verbindung zu bringen. Nehmen Sie die Dinge in diesem Artikel bitte nicht ernst, da die meisten dieser Ansichten online und von verschiedenen vertrauenswürdigen Quellen gesammelt wurden mit Links im Referenzteil am Ende des Artikels. Recherchieren Sie, bevor Sie sich entscheiden, einen der in diesem Artikel diskutierten Ansätze für Ihre Handelsentscheidungen zu nutzen.

Jetzt, da wir das hinter uns gebracht haben, können wir weitermachen.

Sobald wir diese Faktoren verstehen, haben wir einen Ansatzpunkt, denn diese Faktoren können als Daten (unabhängige Variablen) für unser logistisches Modell verwendet werden.


Faktoren, die die Aktienkurse beeinflussen 


Es gibt viele Faktoren, die den Aktienmarkt beeinflussen, die folgenden sind nur einige davon. Denken Sie daran, dass es nie einen eindeutigen Indikator dafür gab, wie sich die Märkte so verhalten, wie sie es tun, daher werde ich die folgenden Faktoren verwenden,

  1. Angebot und Nachfrage
  2. Unternehmensbezogene Faktoren
  3. Zinssätze
  4. Aktuelle Ereignisse
  5. Inflation 

01: Angebot und Nachfrage


Es gibt viele Faktoren, die sich auf den Aktienmarkt auswirken, aber wenn man alles Äußere abstreift und sich den grundlegenden Faktor ansieht, ist es ganz einfach: Angebot und Nachfrage. Ein Ungleichgewicht zwischen Angebot und Nachfrage wird den Preis der Aktie steigen und fallen lassen.

Wenn Äpfel plötzlich knapp werden, stehen immer mehr Menschen Schlange, um sie zu kaufen, und der Preis für Äpfel wird sofort in die Höhe schnellen.

Ähnlich verhält es sich, wenn es dem Unternehmen gut geht und jeder Aktien desselben Unternehmens kaufen möchte, dann wird es einen Mangel an Aktien geben, der den Aktienkurs eines Unternehmens in die Höhe schießen lässt, und das Gegenteil ist der Fall, wenn es zu viele Aktien gibt, aber niemand sie kaufen möchte; in diesem Fall wird der Aktienkurs abstürzen.

Es ist unmöglich (könnte man sagen), alle Angebots- und Nachfragedaten zu erhalten, die wir in unserem Modell verwenden können, also werden wir diesen Faktor in unserem Datensatz zurücklassen, aber ich glaube, dass jeder, der in der Lage ist, diese Daten genau zu erhalten, dem heiligen Gral einen Schritt näher gekommen ist


02: Unternehmensbezogene Faktoren


Alles, was innerhalb des Unternehmens geschieht, wirkt sich direkt auf den Aktienkurs aus. Wenn das Unternehmen mit erfolgreichen neuen Produkten wächst und höheren Einnahmen, geringeren Schulden und einem größeren Zustrom von Investoren ausweist, dann wird der Kurs eines Unternehmens zwangsläufig steigen, weil jeder Aktien eines solchen Unternehmens kaufen möchte, das von einem Höhepunkt zum nächsten schreitet.

Wenn ein Unternehmen jedoch Verluste verzeichnet, Produktausfälle hat und die Verschuldung zunimmt, dann würde die Mehrheit der Aktionäre die Aktien des Unternehmens abstoßen wollen, was den Aktienkurs senken würde.

Ein gutes Beispiel, um diesen Punkt zu verdeutlichen, sind Netflix und Apple,

Wir haben gesehen, wie Netflix innerhalb der ersten 3 Monate des Jahres 2022 über 200.000 Abonnenten verloren hat, weil die Preise für einige der Mitglieder erhöht wurden, und viele andere Situationen, die innerhalb des Unternehmens auftraten und direkt zu einem Rückgang des Aktienkurses von Netflix führten

Apple hingegen ist seit langem ein erfolgreiches Unternehmen, was auf erfolgreiche, neue Produkte, eine gute Führung im Unternehmen und andere positive Situationen innerhalb des Unternehmens zurückzuführen ist, die in den letzten Jahren zu einem steigenden Aktienkurs geführt haben.

Um die Gesundheit des Unternehmens zu bestimmen, werden wir eine Kennzahl verwenden, die als Kurs-Gewinn-Verhältnis (KGV) bezeichnet wird

Kurs-Gewinn-Verhältnis

Kurs-Gewinn-Verhältnis zur Bewertung eines Unternehmens, das den aktuellen Aktienkurs im Verhältnis zum Gewinn pro Aktie (earnings per share, EPS) misst. Das Kurs-Gewinn-Verhältnis (KGV, engl. Price-To-Earnings ration, PE) kann als Indikator dafür dienen, wie gesund ein Unternehmen ist. So sehen die Charts auf Basis der Aktienkurse und des KGV für Apple und Netflix aus

APPLE:

Diagramm von Apples Aktienkurs im Verhältnis zum Gewinn

Datenquelle: macrotrends.net


NETFLIX

Netflix-Aktienkurs im Vergleich zum Gewinnverhältnis

Datenquelle: macrotrends.net

Es scheint, dass das KGV vierteljährlich in einem Jahr berechnet wird, also in diesem Fall scheint es, dass das alles war, was die kostenlosen Datenquellen bieten konnten. Ich vermute, dass es mehr bezahlte Quellen gibt. Da wir für unsere Berechnungen in unseren Modellen die gleiche Anzahl von Zeilen in allen Spalten unseres Datensatzes benötigen, um effektiv arbeiten zu können, könnten wir davon ausgehen, dass unsere Daten einige Lücken aufweisen. Das sind die Daten für APPLEL:

Löcher im Preis-Gewinn-Verhältnis von Apple

Wenn die Daten in jedem Quartal eines Jahres berechnet werden, dann werden wir für den Rest des Quartals die gleichen Daten verwenden, die bis zum nächsten Quartal vorberechnet wurden:

duplizierte Daten des PE-Verhältnisses von Apple

Die gleichen Maßnahmen werden für NETFLIXdurchgeführt .


03: Zinssätze


Die Vorgänge bei der Federal Reserve Bank wirken sich direkt auf die Aktienkurse aus, da die Zentralbanken die Zinssätze in regelmäßigen Abständen ändern, um die Wirtschaft zu stabilisieren. Ein höherer Zinssatz bedeutet natürlich, dass die Unternehmen mehr für Kredite zahlen müssen, was zu geringeren Gewinnen führt und den Aktienkurs senkt. Umgekehrt bedeutet ein niedrigerer Zinssatz, dass die Unternehmen sich Geld von den Banken zu wesentlich geringeren Kosten leihen können, wodurch sie Geld sparen und einen höheren Gewinn erzielen.

> Die US-Notenbank hat kürzlich die Zinsen erhöht, um die Nachfrage zu drosseln und die Unternehmen zu Preissenkungen zu zwingen, was letztlich zu einem Rückgang der Inflation führt.

Die Grafik des Leitzinses der Fed von 2010 bis heute sieht wie folgt aus:

Fed Funds Zinssätze

04: Aktuelle Ereignisse


Niemand kann leugnen, dass die Covid-19-Pandemie Ende 2019 und 2020 einen sehr starken negativen Einfluss auf den Aktienmarkt hatte, ebenso wenig wie die Aufstände für Gleichberechtigung in den USA im selben Jahr.

Andere Ereignisse, die den Börsenkurs beeinflussen, sind Kriege und Terroranschläge.

All diese Ereignisse werden zu einem drastischen Rückgang der Aktienkurse führen und die Volatilität des Marktes beeinflussen.

Ich werde keine Daten zu diesem Faktor sammeln, denn es würde so viel Arbeit und weitere Modelle erfordern, um für diese Ereignisse zu trainieren, dass dies den Rahmen dessen sprengen würde, was wir in dieser Artikelserie bereits behandelt haben.


05: Inflation


Inflation ist der Rückgang der Kaufkraft einer bestimmten Währung im Laufe der Zeit. Eine quantitative Schätzung der Rate, mit der der Kaufkraftverlust eintritt, kann durch den Anstieg des durchschnittlichen Preisniveaus eines Warenkorbs ausgewählter Waren und Dienstleistungen in einer Volkswirtschaft über einen bestimmten Zeitraum wiedergegeben werden. Der Anstieg des allgemeinen Preisniveaus, der häufig als Prozentsatz ausgedrückt wird, bedeutet, dass man mit einer Währungseinheit effektiv weniger kaufen kann als in früheren Zeiträumen.

Lesen Sie hier mehr über Inflation https://www.investopedia.com/terms/i/inflation.asp

Im Grunde gibt es also zwei Arten von Inflation: Kerninflation und VPI (Verbraucherpreisindex, eng. CPI):

  • Kern VPI - ist alles außer Energie- und Lebensmittelpreisen
  • VPI - ist alles, was die Wirtschaft betrifft: Energie, Lebensmittelpreise, Bildung, Unterhaltung, usw. Alles, was im täglichen Leben der Menschen einer bestimmten Wirtschaft existiert.

Da die Inflation den Wert jedes verdienten Dollars verringert, kann es für den Markt schwierig sein, den aktuellen Wert der Unternehmen, aus denen sich die Marktindizes zusammensetzen, zu beurteilen. Darüber hinaus können sich höhere Preise für Materialien, Lagerbestände und Arbeitskräfte bei der Anpassung der Unternehmen auf die Erträge auswirken. Infolgedessen können die Aktienkurse schwanken, was zu Volatilität führt. 

Die gute Nachricht ist, dass sich eine straffere Geldpolitik der Fed zwar negativ auf festverzinsliche Anlagen auswirken kann, aber Aktien in der Vergangenheit in solchen Zyklen oft gut abgeschnitten haben.

ein Blick auf die Grafik des US-VPI seit 1970.

  US VPI-Diagramm


Sammeln wir nun alle erforderlichen Daten und speichern sie in einer CSV-Datei.

Beginnend mit APPLE:

Erfassen der Daten


Die Daten, die wir für unsere CSV-Datei sammeln werden, sind Kern-VPI, VPI, Fed's Fund's Zinssätze, EPS und KGV stehen uns alle zur Verfügung.

In unserem Datensatz fehlt nur noch eine Angabe, und das ist unsere abhängige Variable. Aber wir haben nur die Rohwerte der Aktienkurse. Erstellen wir daher ein Skript, das uns sagen kann, ob es in einem bestimmten Monat einen Börsencrash gab oder nicht.

In 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 )
        }
 }

Wenn Sie auf den ersten prev_high achten, werden Sie feststellen, dass ich ihm in erster Linie den Wert des vorherigen Preises gegeben habe, weil ich die Werte von Apple vom 1. Dezember 2009 anstelle des 1. Januar 2010 kopiert habe. Ich wollte einen Abstand haben, um den Absturz bei der ersten Berechnung zu erkennen, und indem ich diesen Monat hinzufügte, wurde es möglich. Aber wir ignorieren diesen Monat in unserem Ausgabedatensatz, weil wir ihn nicht mehr brauchen, deshalb liegt der vorherige Index out_binary[prev] innen, was eigentlich i-1 bedeutet, weil wir mit dem Index 1 beginnen.

Hier ist die Ausgabe, wenn wir die das binäre Array drucken

 CrashClassifyScript DATE 1/1/2010 TREND 1

 CrashClassifyScript DATE 2/1/2010 TREND 1

.........

 CrashClassifyScript DATE 4/1/2022 TREND 0

 CrashClassifyScript DATE 5/1/2022 TREND 0

Wenn wir alle Datenspalten einer csv-Datei in hinzufügen, wird eine csv-Datei erstellt, die wie folgt aussieht:

Überblick über den Apple-Datensatz

GROSSARTIG, Jetzt ist alles fertig und wir können mit etwas mehr Code arbeiten.

Wir alle wissen, dass sich hinter den Kulissen unseres logistischen Modells ein linearer Regressionsalgorithmus verbirgt, und bevor wir Daten in einem linearen Modell verwenden können, müssen wir prüfen, ob sie mit der unabhängigen Variable korrelieren. Wir prüfen das, indem wir die Methode corrcoeff aufrufen, die ich unserer LinearRegression Library hinzugefügt habe, die ich im vorherigen erstellt habe.

Innerhalb von 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;       

Das Ergebnis wird sicherlich sein:

Matrix-Mehrfachregression

TestScript Init, Anzahl der gewählten X-Spalten =5

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

TestScript Alle Daten Array-Größe 740 verbraucht 52 Byte im Speicher

TestScript Korrelationskoeffizienten

TestScript Unabhängige Var vs. Trend = 0.225

TestScript Unabhängige Var vs VPI = -0.079

TestScript Unabhängige Var vs Core VPI = -0.460

TestScript Unabhängige Var vs. EPS ($) = -0.743

TestScript Unabhängiger Var vs. KGV = -0,215

Es scheint, dass alle Daten, die ich gerade auf verschiedenen Plätzen gesammelt nicht mit dem Preis der Aktie korrelieren, trotz einer Menge Leute, die das online reklamieren, dass dies die Faktoren sind, die den Aktienmarkt beeinflussen. Ich verstehe, dass die Quellen vorweg einen Haftungsausschluss zeigen, dass es keinen klaren Indikator dafür gibt, wie die Märkte sich verhalten, aber die Zahlen eines linearen Modells zeigen eine ganz andere Geschichte, z.B. der VPI gegenüber dem Preis von Apple. Ich hatte hier eine sehr starke negative Korrelation erwartet, aber es scheint, dass die Korrelation zu schwach ist, um in einer linearen Regression verwendet zu werden, nur der Kern-VPI zeigt eine vielversprechende negative Korrelation von etwa -0,46 Die stärkste von allen ist der EPS (Gewinn pro Aktie), der eine negative Korrelation von etwa 0,743 zeigt, was zu -74,3% umgerechnet werden kann

Es ist sehr wichtig, die Daten in Python zu visualisieren und selbst zu sehen, ob wir etwas in den Zahlen übersehen haben oder ob unsere Berechnungen nicht gut gelaufen sind:

Visualisierung seaborn pair plot

Ausgabe

sns Appleaktien-Analyse

Ich denke, bis zu diesem Punkt ist es sehr klar, dass es nicht viel starke Beziehung zwischen den meisten der Daten gibt, die wir gesammelt haben, lassen Sie uns unsere Daten filtern,

Wir werden nur die drei unabhängigen Variablen verwenden, um unser Modell zu erstellen, und zwar 

  • Kern-VPI (korreliert mit etwa -46% bei einer Hälfte)
  • EPS (korreliert mit etwa -74,2% am besten mit allen Daten)
  • Und schließlich der FED-Fonds-Satz (korreliert mit etwa -33%, am wenigsten. Ich würde dies nicht empfehlen, wenn Sie ein ernsthaftes Modell erstellen wollen )

Okay, jetzt initialisieren wir unsere Bibliothek nur mit den gewünschten Spalten:

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

Für diejenigen, die die grundlegende Funktionsweise der logistischen Regression verpasst haben, sei auf diesen Artikel verwiesen.

Weitere Verbesserung der Bibliothek 

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

Logistische Modelle reagieren empfindlich auf fehlende Werte, und da es sich um ein klassifizierendes maschinelles Lernmodell handelt, behandelt es Null-Daten, die darauf hinweisen könnten, dass die Daten fehlen, als klassifizierte Klasse, es kann auch Nan-Werte und Zeichenketten als Null behandeln, je nachdem, wie wir die Dateien in MQL5 lesen, deshalb habe ich einige Verbesserungen an der Bibliothek vorgenommen.

Die Funktion zum Ersetzen der fehlenden Werte durch den Mittelwert und die Funktion zum Kodieren der Strings in Labels. 

Diese Funktionen sollten vor der Init-Funktion aufgerufen werden.

Jetzt erbt unsere logistische Bibliothek die Komponenten unserer MatrixRegression-Bibliothek, die wir im vorherigen erstellt haben

class CLogisticRegression: protected CMatrixRegression

Kommen wir nun zum guten Teil und sehen, wie gut unser Modell ist,

Aufruf der Bibliothek für logistische Regression

Der Ausdruck ist: 

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

Die Genauigkeit unseres Modells beträgt 70,45 % im Testdatensatz 😲 Mir verschlägt es hier die Sprache

Ich dachte, dass ich wegen des Datenrückstands, den ich früher hatte, nicht einmal die 50%-Marke erreichen konnte. Ich dachte, dass es an irgendeinem Punkt einen Fehler geben muss, bis ich dasselbe mit Python versuchte, um dasselbe Ergebnis zu erzielen.

mit Python getestete Modellgenauigkeit

B A M

Denken Sie daran, dass unsere abhängige Variable die Trendspalte ist, die wir mit unserem Skript zur Erkennung des Crashs zu Beginn dieses Artikels erfasst haben. Die Preisspalte wurde nur verwendet, um die Korrelationskoeffizienten für unsere linearen Modelle zu zeigen, da wir nicht die binären Werte 0 und 1 verwenden können, die den Trend nach unten bzw. nach oben anzeigen, um Korrelationen zu finden, sondern die realen Aktienkurse in diesem Fall

Konzentrieren wir uns jetzt auf NETFLIX

Hier sehen Sie, wie die Korrelationskoeffizienten für diesen Bruder aussehen,

        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

Es hat den Anschein, dass die meisten der unten besprochenen Faktoren einen positiven Einfluss auf NETFLIX haben, der einzige negative Faktor ist das Kurs-Gewinn-Verhältnis. Der stärkste Faktor ist der Gewinn pro Aktie mit einer Korrelation von etwa 92 % zum Aktienkurs, andere sind der Kern-VPI und der Verbraucherpreisindex:

  • EPS
  • Kern-VPI 
  • und VPI

Lassen Sie uns unsere Daten noch einmal visualisieren.

Netflix-Daten Auszählung

Auf NETFLIX sieht es viel besser aus als beim letzten Mal auf Apple.

Lange Rede kurzer Sinn:

   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;

Die Ausgabe: 

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

Trotz der Daten, die eine starke lineare Korrelation mit dem Aktienkurs aufwiesen, hat das Modell von NETFLIX eine um etwa 60% geringere Genauigkeit verglichen mit der Genauigkeit von APPLE mit 70%. Sie können selbst mit dem Rest des Datensatzes spielen und sehen, wie das Modell aussehen könnte.


Echtzeit-Börsentests


Um in der Lage zu sein, auf dem Live-Markt in unserem Expert Advisor zu testen, müssen wir einige Änderungen an unserer Hauptfunktion LogisticRegression vornehmen. Wir müssen die Funktion dazu bringen, die vorhergesagten Werte mit ihren jeweiligen Daten in einer CSV-Datei zu speichern, die wir im Strategietester verwenden werden, um die Signale darüber zu erhalten, wohin sich der Markt gemäß unserem Modell entwickeln wird.

So sammeln wir die Daten und speichern sie in einer csv-Datei:

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

Denken Sie daran, dass wir nur die Ergebnisse des Testdatensatzes sammeln.

Hier ist ein kurzer Überblick darüber, wie die Daten in einer csv-Datei gespeichert werden:

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      

Wenn Sie auf den Teil der Matrix geachtet haben, werden Sie feststellen, dass unser Modell ein guter Prädiktor für den Aufwärtstrend ist, Der TP (true positive hatte eine große Anzahl aller Matrixzeilen in der Matrix).

Echtzeit-Aktienkurstest EA

Der erste Schritt bei der Erstellung unseres EA ist das Sammeln von Daten aus unserer CSV-Datei, aber vorher wollen wir unseren Strategietester wissen lassen, dass wir diese Datei beim Testen verwenden werden.

#property tester_file "Predicted Apple Dataset.csv"

Nun noch ein kurzer Überblick über die Funktionen, die ich kodiert habe und die ich in der Funktion aufgerufen habe.

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

Diese Funktionen sind sehr gebräuchlich, wir haben sie in unserer Bibliothek oft verwendet, grundsätzlich sammeln wir Daten aus der ersten Spalte und speichern sie in einem Trend[]-Array, der gleiche Prozess für das dates[]-Array.

Als Nächstes müssen wir die Zeit, die wir aus einer csv-Datei gesammelt haben, in ein Standard-Zeitformat umwandeln, das in MQL5verstanden werden kann.

ConvertTimeToStandard();

Hier ist der Inhalt dieser Funktion:

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
       }  
 }

Das sind die Funktionen, die es meiner Meinung nach wert sind, erklärt zu werden, was in der Funktion Init() getan wurde.

Als Nächstes testen wir die Vorhersagen des Modells mit der Funktion , die die Säule unseres Expert Advisors darstellt:

    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
        }
  }

Der Hauptgrund dafür, dass ich mich dafür entschieden habe, das Modell an diesem speziellen Tag zu trainieren und mit dem Ereignis NewBar (neuer Balken) zu trainieren, ist die Reduzierung der Kosten für das Testen unserer Anwendung. Um diese Kosten weiter zu reduzieren, habe ich auch die Bedingung hart kodiert, dass der Strategietester gestoppt werden soll, sobald wir keinen Testdatensatz mehr haben.

Das war's. Siehe den unten verlinkten vollständigen Code. Jetzt ist es an der Zeit, das Modell im Strategietester zu testen.

APPLE Testergebnisse

Apple-Tester-Bericht

Grafik

Apple-Tester-Grafik

Netflix andererseits, Testbericht

Netflix Testbericht

Testdiagramm

Diagramm der Netflix Tests

Wie Sie sehen können, hatte das Apple-Modell eine Genauigkeit von etwa 70 %, und es hat bisher ein gutes Vorhersagemodell mit einem schönen Diagramm auf dem Strategietester im Vergleich zu seinem Rivalen NETFLIX erstellt.


Die Quintessenz

Das Gute an logistischen Modellen ist, dass sie einfach zu konstruieren und zu trainieren sind und dennoch eine ziemlich gute Arbeit bei der Klassifizierung unserer Daten leisten, obwohl die Suche nach den Daten, die in unserem Modell zu finden sind, etwas ist, das nicht als selbstverständlich angesehen werden sollte, da es zu den wichtigsten Schritten gehört, die bei einem Fehler zu einem ineffizienten Modell führen könnten.

Sie können immer noch weitere Verbesserungen an unserer Bibliothek vornehmen und die Daten erneut sammeln, denn ich glaube immer noch, dass die Art und Weise, wie ich die Daten gesammelt und in das Crashclassify-Skript eingeordnet habe, kein effektiver Weg ist, um den Absturz zu beobachten, jedenfalls ist das zum Lesen.

Github-Repository für diesen Artikel hier verlinkt > https://github.com/MegaJoctan/LogisticRegression-MQL5-and-python.



Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/10983

Beigefügte Dateien |
Files.zip (26.58 KB)
Lernen Sie, wie man ein Handelssystem mit dem OBV entwickelt Lernen Sie, wie man ein Handelssystem mit dem OBV entwickelt
Der neue Artikel aus unserer Serie über die Gestaltung eines Handelssystems auf der Grundlage der beliebtesten technischen Indikatoren betrachtet einen neuen technischen Indikator - den Money Flow Index (Geldflussindikator, MFI). Wir werden ihn im Detail kennenlernen und ein einfaches Handelssystem mit Hilfe von MQL5 entwickeln, um es in MetaTrader 5 auszuführen.
DoEasy. Steuerung (Teil 2): Arbeiten an der Klasse CPanel DoEasy. Steuerung (Teil 2): Arbeiten an der Klasse CPanel
Im aktuellen Artikel werde ich einige Fehler im Zusammenhang mit der Handhabung von grafischen Elementen beseitigen und die Entwicklung des CPanel-Steuerelements fortsetzen. Insbesondere werde ich die Methoden zur Einstellung der Parameter der Schriftart implementieren, die standardmäßig für alle Textobjekte des Panels verwendet wird.
Lernen Sie, wie man ein Handelssystem mit dem Volumen entwickelt Lernen Sie, wie man ein Handelssystem mit dem Volumen entwickelt
Hier ist ein neuer Artikel aus unserer Serie darüber, wie man ein Handelssystem basierend auf den beliebtesten technischen Indikatoren entwirft. Der aktuelle Artikel widmet sich dem Volumes-Indikator. Volumen als Konzept ist einer der sehr wichtigen Faktoren beim Handel an den Finanzmärkten, und wir müssen darauf achten. In diesem Artikel lernen wir, wie man ein einfaches Handelssystem nach dem Volumenindikator entwirft.
Erfahren Sie, wie Sie ein Handelssystem durch Accumulation/Distribution (AD) entwerfen Erfahren Sie, wie Sie ein Handelssystem durch Accumulation/Distribution (AD) entwerfen
Willkommen zu einem neuen Artikel aus unserer Serie über das Erlernen des Entwerfens von Handelssystemen auf der Grundlage der beliebtesten technischen Indikatoren. In diesem Artikel erfahren Sie mehr über einen neuen technischen Indikator, den Accumulation/Distribution Indikator, und darüber, wie Sie ein Handelssystem mit MQL5 entwerfen basierend auf einfachen AD-Handelsstrategien, um sie im MetaTrader 5 verwenden zu können.