MetaTrader 5 herunterladen

Erstellung von Handelssystemen mittels Diskriminanzanalyse

20 April 2016, 13:40
ArtemGaleev
0
250

Einleitung

Eine der Schwerpunktaufgaben der technischen Analyse (TA) besteht in der Ermittlung der Richtung, in die sich der Markt in der allernächsten Zukunft bewegt. Aus Sicht der Statistik geht diese Aufgabe auf die Auswahl von Indikatoren zurück sowie auf die Bestimmung der Wert dieser Indikatoren, auf deren Grundlage die künftige Zustand des Marktes in zwei Kategorien aufgeteilt werden könnte: 1) eine Aufwärts- und 2) eine Abwärtsbewegung.

Eine der Möglichkeiten, um zu entscheiden, welche Indikatoren mit welchen Werten die Unterscheidung dieser Kategorien am besten ermöglichen, ist die DA. Mit anderen Worten bietet die DA die Möglichkeit zur Erstellung eines „Modells“, das auf der Grundlage der Indikatordaten vorhersagt, wohin sich der Markt bewegen wird.

Diese Analyse ist indes vergleichsweise schwierig und erfordert eine große Menge Eingangsdaten. Deshalb ist seine manuelle Verwendung bei der Marktanalyse recht umständlich. Glücklicherweise gibt es seit dem Erscheinen der Programmiersprache MQL5 und statistischer Computerprogramme die Möglichkeit der Automatisierung solcher Vorgänge wie der Datenerfassung und -aufbereitung sowie die Anwendung der DA auf diese.

In unserem Beitrag stellen wir ein Beispiel für die Erstellung eines Expert-Systems zur Erfassung von Marktdaten vor. Dieser Beitrag ist eine methodische Anleitung für den Einsatz der DA in dem Programm Statistica zur Erstellung eines Vorhersagemodells für den Devisenmarkt.



1. Diskriminanzanalyse - was ist das?

Bei der Diskriminanzanalyse (im Weiteren kurz DA) handelt es sich um ein Verfahren zur Mustererkennung. Neurale Netze können als ein Sonderfall der DA betrachtet werden. Die DA kommt in den meisten erfolgreichen, auf Mustererkennung beruhenden militärischen Systemen zum Einsatz.

Sie ermöglicht die Beantwortung der Frage, welche Variablen den Eingangsdatenstrom in Gruppen unterteilen (diskriminieren) und wie sie das tun.

Wir betrachten hier ein vereinfachtes Beispiel für den Einsatz der DA auf dem Devisenmarkt. Uns liegen anhand der Werte der Indikatoren Relative Strength Index (RSI), MACD und Relative Vigor Index (RVI) gewonnene Daten vor, und wir sollen ermitteln, in welche Richtung sich der Kurs bewegt. Mögliche Ergebnisse der Ausführung der DA sind:

a. Der Indikator RVI trägt zu der Vorhersage nichts bei. Wir schließen ihn kurzerhand aus der Analyse aus.

b. Die DA ergibt zwei Diskriminanzgleichungen:

  1. G1 = a1*RSI+b1*MACD+с1, die Gleichung für die Fälle mit aufsteigendem Kurs;
  2. G2 = a2*RSI+b2*MACD+с2, die Gleichung für die Fälle mit absteigendem Kurs.

Anhand der Berechnung von G1 und G2 am Anfang jedes Balkens sagen wir vorher, dass der Kurs steigt, wenn G1 > G2; während er bei G1 < G2 fällt.

Die DA kann sich bei der ersten Beschäftigung mit neuralen Netzen als hilfreich erweisen. Bei ihrer Verwendung erhalten wir Gleichungen, die denen vergleichbar sind, die für die Arbeit neuraler Netze berechnet werden. Das führt zu einem besseren Verständnis ihres inneren Aufbaus und lässt uns vorzeitig entscheiden, ob der Einsatz neuraler Netze in unseren Strategien sinnvoll ist.



2. Etappen der Diskriminanzanalyse (DA)

Bei der Ausführung der DA können mehrere Etappen unterschieden werden:

  1. Die Aufbereitung der Daten;
  2. die Auswahl der besten Variablen aus den aufbereiteten Daten;
  3. die Analyse des resultierenden Modell und dessen Überprüfung anhand von Prüfdaten;
  4. die Erstellung eines Modells auf der Grundlage von Diskriminanzgleichungen.

Die DA ist de facto in allen modernen Programmpaketen für die statistische Datenauswertung enthalten. Die verbreitetsten sind Statistica (von StatSoft) und SPSS (von IBM). Wir widmen uns im Weiteren der Anwendung der DA mithilfe des Programms Statistica. Die Bildschirmabbildungen beziehen sich auf die Fassung 8.0. Bei deren Vorgängerversionen sehen sie jedoch mehr oder weniger ähnlich aus. Es sei angemerkt, dass Statistica auch noch eine Reihe weiterer nützlicher Hilfsmittel für Börsen- und Devisenhändler enthält, darunter auch neurale Netze.



2.1. Die Aufbereitung der Daten

Die Erfassung der Daten ist abhängig von der gestellten Aufgabe. Wir wollen die Aufgabe folgendermaßen formulieren: Wir versuchen mithilfe von Indikatoren, die Bewegung des Kursdiagramms für den auf den letzten Balken mit bekannten Indikatorwerten folgenden Balken vorherzusagen. Zur Erfassung der Daten programmieren wir ein Expert-System (im Weiteren E-S) zur Speicherung der Indikatorwerte und Kursdaten in einer Datei.

Die Werte in der Datei sind kommagetrennt (CSV), und die Datei selbst hat folgenden Aufbau: Die Variablen sind spaltenweise angeordnet. das heißt: jede Spalte bezieht sich stets nur auf einen einzigen Indikator. Die Zeilen müssen die anschließenden Messungen (Fälle) enthalten, d. h. die Indikatorwerte für bestimmte Balken. Anders gesagt, in der waagerechten Kopfzeile der Tabelle stehen die Indikatoren, während die nachfolgenden Balken in senkrechter Richtung aufgeführt werden.

Die Tabelle muss eine Variable enthalten, anhand derer die Aufteilung in Gruppen erfolgt (die Gruppierungsvariable). In unserem Fall beruht diese Variable auf einer Änderung des Kurses in dem Balken, der auf den letzten Balken folgt, für den die Indikatorwerte ermittelt wurden. Die Gruppierungsvariable muss die Kennziffer der Gruppe beinhalten, zu der die Daten gehören, die in derselben Zeile stehen. Beispielsweise die 1 für Fälle, in denen der Kurs gestiegen ist, und 2 für die Fälle, in denen er fiel.

Die Indikatoren, deren Werte wir benötigen, sind:

Die Funktion OnInit() legt die Indikatoren (bezieht die Bezeichner für die Indikatoren) sowie die Datei MasterData.csv an und sorgt für die Aufzeichnung der Kopfzeilen der Datenspalten in Letzterer:

//+------------------------------------------------------------------+
//| 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);
  }

Die Ereignisverarbeitungsroutine OnTick() stellt das Auftreten neuer Balken fest und speichert die Daten in der entsprechenden Datei.

Die Kursbewegung bestimmen wir anhand des zuletzt gebildeten Balkens, die Indikatorwerte dagegen beziehen wir aus dem letzten diesem vorhergehenden Balken. Neben dem absoluten Indikatorwert müssen wir seinen Abstand zu dem vorhergehenden Wert speichern, um die Richtung seiner Änderung zu berechnen. Diese Variablen haben in unserem Beispiel Bezeichnungen mit dem Präfix „d“.

Für Indikatoren mit Signallinie speichern wir den Abstand zwischen der Haupt- und der Signallinie sowie deren Dynamik. Darüber hinaus speichern wir die Zeit des Auftretens des neuen Balkens sowie den entsprechenden Stundenwert. Das kann zur Filterung der Daten in Abhängigkeit von der Zeit von Nutzen sein.

Auf diese Weise berücksichtigen wir 37 Kennziffern zur Erstellung eines Modells zur Vorhersage der Kursbewegung.

//+------------------------------------------------------------------+
//| 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();
        }
     }

  }

Nach Aufrufen des Expert-Systems (E-S) wird in dem Verzeichnis terminal_data_directory/MQL5/Files die Datei MasterData.CSV angelegt. Nach dem Starten des E-S in dem Prüfprogramm wird es in dem Dateiverzeichnis des Ausgabegerätes terminal_data_directory/tester/Agent-127.0.0.1-3000/MQL5/Files abgelegt. Die resultierende Datei kann bereits in Statistica geladen werden.

Ein Beispiel für eine solche Datei befindet sich im Anhang in der Datei MasterData.CSV. Die Daten wurden mithilfe des Strategieprüfprogramms für die Zeit vom 1. August 2011 bis zum 1. Oktober 2011 für das Kürzel EURUSD H1 gesammelt.

Zum Herunterladen der Datei nach Statistica gehen wir wie folgt vor:

  • In Statistica wählen wir „Datei“ (File), klicken auf „Öffnen“ (Open) und wählen den Dateityp, „Data files“, aus und öffnen unsere Datei.
  • In dem Fenster „Text File Import Type“ lassen Sie „Delimited“ stehen und klicken Sie auf „OK“.
  • In dem aufklappenden Fenster aktivieren Sie die unterstrichenen Punkte.
  • In dem Feld „Decimal separator character“ muss unbedingt „Punkt“ angegeben werden unabhängig davon, ob er dort bereits vorhanden ist oder nicht.

Abbildung 1. Import der Datei nach Statistica

Abbildung 1. Import der Datei nach Statistica

Nach Anklicken von OK erhalten wir die Tabelle mit unseren Daten.

Abbildung 2. Datenbank in Statistica

Abbildung 2. Datenbank in Statistica

Jetzt legen wir die Gruppierungsvariable auf der Grundlage der Kursvariablen „Price“ an.

Wir legen anhand der Richtung der Kursentwicklung vier Gruppen an:

  1. mehr als 200 Punkte nach unten;
  2. weniger als 200 Punkte nach unten;
  3. weniger als 200 Punkte nach oben;
  4. mehr als 200 Punkte nach oben.

Um eine neue Variable hinzuzufügen, klicken Sie mit der rechten Maustaste auf die Kopfzeile der Spalte AC und wählen Sie „Variable hinzufügen“ (Add Variable).

Abbildung 3. Hinzufügen einer neuen Variablen

Abbildung 3. Hinzufügen einer neuen Variablen

Geben Sie in dem sich öffnenden Fenster für die neue Variable die Bezeichnung „Group“ an und fügen die Formel zur Übersetzung der Variablen „Price“ zu den Gruppenkennziffern hinzu.

Die Formel sieht folgendermaßen aus:

=iif(v3<=-200;1;0)+iif(v3<0 und v3>-200;2;0)+iif(v3>0 sowie v3<200;3;0)+iif(v3>=200;4;0)


Abbildung 4. Beschreibung der Variablen

Abbildung 4. Beschreibung der Variablen

Die Datei ist bereit zur Ausführung der Diskriminanzanalyse (DA). Eine Musterdatei befindet sich in der Anlage MasterData.STA.



2.2. Auswahl der besten Variablen

Rufen Sie die Diskriminanzanalyse (DA) auf: Statistik->Multivariate Untersuchungsverfahren->Diskriminanzanalyse (Statistics->Multivariate Exploratory Techniques->Discriminant Analysis).

Abbildung 5. Ausführen der Diskriminanzanalyse (DA)

Abbildung 5. Ausführen der Diskriminanzanalyse (DA)

Betätigen Sie in dem sich öffnenden Fenster die Schaltfläche „Variables“.

Wählen Sie im ersten Feld die Gruppierungsvariable aus und im zweiten alle Variablen, auf deren Grundlage die Gruppierung erfolgt.

In unserem Beispiel wurden im ersten Feld die Variable „Group“ und im zweiten alle mithilfe der Indikatoren gewonnenen Variablen sowie zusätzlich die Variable „Hour“ (die Stunde des Dateneingangs) ausgewählt.

Abbildung 6. Auswahl der Variablen

Abbildung 6. Auswahl der Variablen

Betätigen Sie die Fallauswahlschaltfläche „Select Cases“ (Abbildung 8). Es öffnet sich ein Fenster für die Auswahl der in der DA zu verwendenden Fälle (Datenzeilen). Aktivieren Sie die in der folgenden Bildschirmaufnahme angegebenen Punkte (Abbildung 7).

Für die Analyse geben wir lediglich die ersten 700 Fälle an. Die verbleibenden verwenden wir später zur Überprüfung des resultierenden Vorhersagemodells. Die Fallnummern werden mithilfe der Variablen V0 festgelegt. Nachdem wir die Fälle angegeben haben, wurde die Stichprobe der zu untersuchenden Daten für die DA festgelegt.

Anschließend klicken Sie auf OK.

Abbildung 7. Abgrenzung der Musterprobe

Abbildung 7. Abgrenzung der Musterprobe

Jetzt wählen wir die Gruppen aus, für die das Vorhersagemodell erstellt werden soll.

Wir widmen uns jetzt dem folgenden Aspekt: Eine der Schwachstellen der DA ist ihre Empfindlichkeit gegenüber Ausreißern unter den Daten. Seltene jedoch einschneidende Ereignisse, in unserem Fall Kurssprünge, können das ganze Modell verzerren. Zum Beispiel könnte es nach Bekanntwerden einer unerwarteten Neuigkeit auf dem Markt zu einer nur wenige Stunden dauernden heftigen Bewegung gekommen sein. In diesem Fall hätten die Werte der technischen Indikatoren keine große Bedeutung für die Vorhersage, wogegen sie für die DA überaus wichtig sind, da es zu einer starken Kursänderung gekommen ist. Deshalb wäre es ratsam, die Daten vor Ausführung der DA auf das Vorhandensein derartiger Ausreißer zu überprüfen.

In unserem Beispiel wählen wir, um Ausreißer auszuschließen, für die Analyse lediglich die Gruppen 2 und 3. Da es in den Gruppen 1 und 4 zu erheblichen Kursänderungen gekommen ist, können dort auch Ausreißer bei den Indikatorwerten vorliegen.

Betätigen Sie jetzt die Schaltfläche „Codes für die Gruppierungsvariable“ (Codes for grouping variable) (Abbildung 8). Geben Sie dort die Kennziffern der Gruppen an, für die die Analyse durchgeführt werden soll.

Abbildung 8. Auswahl der zu analysierenden Gruppen

Abbildung 8. Auswahl der zu analysierenden Gruppen 


Öffnen Sie den Punkt „Erweiterte Einstellungen“ (Advanced options). Dadurch erhalten Sie Zugang zu der schrittweisen Datenanalyse (Stepwise Analysis), auf die wir uns im weiteren Verlauf dieses Beitrages stützen werden.

Durch Anklicken von OK wird die DA gestartet.

Möglicherweise erscheint eine Meldung wie in der Abbildung unten. Das bedeutet, dass eine der gewählten Variablen überflüssig ist und in erheblichem Umfang durch andere Variablen bedingt ist, zum Beispiel als Summe zweier Variablen.

Für den Datenfluss von den Indikatoren ist das absolut möglich. Das Vorliegen derartiger Variablen beeinträchtigt die Qualität der Analyse. Sie müssen weg. Dazu müssen wir zu dem Fenster zur Auswahl der Variablen für die DA zurückkehren, die überzähligen Variablen bestimmen, indem wir sie nacheinander hinzufügen und anschließend die DA wiederholen.


Abbildung 9. Hinweis auf zu niedrigen Toleranzwert

Abbildung 9. Hinweis auf zu niedrigen Toleranzwert


Es öffnet sich das Fenster zur Auswahl der DA-Methode (Abbildung 10). Wählen Sie in der sich öffnenden Liste den Punkt „Schrittweise Analyse mit Aufnahme“ (Forward Stepwise) aus. Da die Indikatorwerte nur eine geringe Bedeutung für die Vorhersage haben, ist es besser, eine schrittweise Analyse der Variablen (Stepwise Analysis) zu verwenden. Dann wird auch das Modell zur Abgrenzung der Gruppen automatisch schrittweise angelegt.

Genauer gesagt werden bei jedem Schritt alle Variablen geprüft, um diejenige von ihnen zu ermitteln, die den größten Beitrag bei der Abgrenzung (Diskriminierung) zwischen den Gruppen leistet. Diese Variable wird in dem entsprechenden Schritt in das Modell aufgenommen, bevor der Übergang zum nächsten Schritt erfolgt. Auf diese Weise werden nacheinander die Variablen ausgewählt, die die Datenstichprobe am besten gegeneinander abgrenzen (diskriminieren).


Abbildung 10. Auswahl der Methode

Abbildung 10. Auswahl der Methode

Bei Anklicken von „OK“ öffnet sich ein Fenster mit der Meldung, dass die DA erfolgreich ausgeführt wurde.

Abbildung 11. DA-Ergebnisfenster

Abbildung 11. DA-Ergebnisfenster


Nach Anklicken von „Zusammenfassung: Variablen in dem Modell“ (Summary: Variables in the model) erscheint die Aufstellung der Variablen, die auf der Grundlage der schrittweisen Analyse in das Modell aufgenommen wurden. Diese Variablen Grenzen unsere Gruppen am besten voneinander ab. Dabei ist zu beachten, dass die Variablen, die die Gruppen mit einer Zuverlässigkeit von mehr als 95% (p<0,05) abgrenzen, in rot dargestellt sind. Die Zuverlässigkeit der Abgrenzung anhand der übrigen Variablen ist nicht so hoch. Die Verwendung von Variablen mit einer Abgrenzungszuverlässigkeit von weniger als 95% in dem Modell ist gleichwohl zulässig.

Andererseits besagt die „goldene Regel“ der Statistik, dass lediglich Variablen zu verwenden sind, deren Zuverlässigkeit bei über 95% liegt. Deshalb schließen wir all nicht in rot wiedergegebenen Variablen aus der Analyse aus. Es sind die Variablen: dBulls, Bulls, FrAMA und Hour. Dazu gehen wir zurück zu dem Fenster, in dem wir die „Schrittweise Analyse“ ausgewählt haben, und schließen die genannten Variablen in dem mithilfe der Schaltfläche „Variablen“ (Variables) geöffneten Fenster aus.

Anschließend wiederholen wir die Analyse. Durch erneute Betätigung der Schaltfläche „Zusammenfassung: Variablen in dem Modell“ (s.o.) sehen wir, dass drei weitere Variablen als nicht aussagekräftig genug gekennzeichnet sind. Dabei handelt es sich um: DeMarker, Stoch_s und AO. Diese Variablen werden ebenfalls aus der Analyse ausgeschlossen.

Wir erhalten ein Modell, das auf Variablen beruht, durch welche die Gruppen zuverlässig (p<0,01) gegeneinander abgegrenzt werden.


Abbildung 12. In das Modell eingehende Variablen

Abbildung 12. In das Modell eingehende Variablen


Somit sind in unserem Modell von 37 lediglich die sieben für die Vorhersage aussagekräftigsten übrig geblieben.

Diese Vorgehensweise ermöglicht die Auswahl der wesentlichen Kennziffern aus der technischen Analyse zur anschließenden Erstellung eigener Handelssysteme, darunter auch solcher, die sich neuraler Netze bedienen.

2.3. Analyse und Prüfung des resultierenden Modell mithilfe von Prüfdaten

Nach Ausführung der Diskriminanzanalyse (DA) haben wir ein Vorhersagemodell sowie das Ergebnis seiner Anwendung auf Musterdaten.

Zur Anzeige des Modells und des Erfolgs der Abgrenzung der Gruppen öffnen wir die Registerkarte „Klassifizierung“ (Classification):

Abbildung 13. Die Registerkarte Klassifizierung

Abbildung 13. Die Registerkarte Klassifizierung

Betätigen Sie die Schaltfläche „Klassifizierungsmatrix“ (Classification matrix), um sich die Tabelle mit den Ergebnissen der Anwendung des Modells auf die Musterdaten anzeigen zu lassen.

In den Zeilen wird die Istzahl der Fälle in jeder Gruppe angegeben. In den Spalten wird die anhand des Rechenmodells vermutete Anzahl der Fälle mit der jeweiligen Gruppenzugehörigkeit aufgeführt. Die Zellen mit korrekten Vorhersagen haben einen grünen Rahmen, die mit abweichenden einen roten.

In der ersten Spalte ist die Vorhersagegenauigkeit in % angegeben:

Abbildung 14. Klassifizierung der Musterdaten

Abbildung 14. Klassifizierung der Musterdaten

Die Vorhersagegenauigkeit (Total) unter Verwendung der Musterdaten lag bei 60%.

Wir überprüfen das Modell jetzt anhand der Prüfdaten. Dazu geben wir über die Auswahlschaltfläche „Select“ (Abbildung 13) v0>700 an, woraufhin das das Modell in dem Bereich der zur Erstellung des Modells nicht verwendeten Daten überprüft wird.

Das Ergebnis lautet wie folgt:


Abbildung 15. Klassifizierung der Prüfdaten

Abbildung 15. Klassifizierung der Prüfdaten

Die gesamte Genauigkeit der Vorhersagen bezüglich der Prüfstichprobe liegt ebenfalls bei 55 Prozent. Für den Devisenmarkt ist das ein recht guter Wert.



2.4. Anlegen eines Handels- oder Expert-Systems

Das Vorhersagemodell der Diskriminanzanalyse (DA) beruht auf einem System aus linearen Gleichungen, mit deren Hilfe die Zugehörigkeit der Indikatorwerte zu der einen oder anderen Gruppe berechnet wird.

Eine Beschreibung dieser Funktionen erhalten wir unter der Registerkarte „Klassifizierung“ (Classification) in dem Fenster mit den Ergebnissen der DA (Abbildung 13) durch Betätigung der Schaltfläche „Klassifizierungsfunktionen“ (Classification functions). Es öffnet sich ein Fenster mit einer Tabelle, die die Koeffizienten der Diskriminanzgleichungen enthält.

Abbildung 16. Diskriminanzgleichungen

Abbildung 16. Diskriminanzgleichungen

Anhand der Tabelle legen wir ein System aus zwei Gleichungen an:

Group2 = 157,17*AC - 465,64*Bears + 82,24*dBears - 0,006*dCCI + 761,06*dFrAMA + 2418,79*dMACDm + 0,01*dStoch_ms - 1,035
Group3 = 527,11*AC - 641,97*Bears + 271,21*dBears - 0,002*dCCI + 1483,47*dFrAMA - 726,16*dMACDm - 0,034*dStoch_ms - 1,353

Zur Verwendung dieses Modells müssen wir die Indikatorwerte in die Gleichungen einsetzen und den Gruppenwert „Group“ berechnen.

Die Vorhersage bezieht sich auf die Gruppe, bei der der Wert Group am höchsten ist. Gemäß unserem Beispiel lautet die Vorhersage bei Group2 > Group3, dass sich der Kursverlauf innerhalb der nächsten Stunde mit größter Wahrscheinlichkeit nach unten bewegen wird. Die gegenläufige Vorhersage gilt bei Group3 > Group2.

Es sei darauf hingewiesen, dass für unser Beispiel sowohl die Indikatorwerte als auch der analysierte Zeitraum recht willkürlich gewählt wurden. Doch selbst diese Daten haben ausgereicht, um die Möglichkeiten und die Leistungsfähigkeit der Diskriminanzanalyse zu veranschaulichen.



Fazit

Die Diskriminanzanalyse (DA) ist ein nützliches Hilfsmittel für den Einsatz im Devisenhandel. Sie kann zur Suche und Überprüfung der optimalen Variablenauswahl verwendet werden, um die beobachteten Indikatorwerte unterschiedlichen Vorhersagen zuzurechnen. Ebenso kann sie zur Erstellung von Vorhersagemodellen dienen.

Aus der DA resultierende Modelle können ohne nennenswerte Programmiererfahrung problemlos in Expert-Systeme integriert werden. Die DA selbst ist eigentlich recht einfach zu handhaben. Die vorgestellte schrittweise Vorgehensweise reicht vollkommen aus, um eine Analyse eigener Daten vorzunehmen.

Ausführlichere Informationen zur DA bietet der entsprechende Abschnitt in dem digitalen Lehrbuch.

Übersetzt aus dem Russischen von MetaQuotes Software Corp.
Originalartikel: https://www.mql5.com/ru/articles/335

Beigefügte Dateien |
masterdata.zip (662.43 KB)
da_demo.mq5 (12.36 KB)
Analyse der statistischen Eigenschaften von Indikatoren Analyse der statistischen Eigenschaften von Indikatoren

Die technische Analyse setzt weitgehend Indikatoren ein, die die Ausgangsnotierungen „klarer“ anzeigen, und so den Devisenhändlern die Analyse und Vorhersage von Kursentwicklungen auf den Finanzmärkten ermöglichen. Es dürfte offenkundig sein, dass die Verwendung von Indikatoren, wenn man es dabei bewenden lässt, sie auf Handelssysteme anzuwenden, wenig Sinn macht, solange die mit der Veränderung der Ausgangsnotierungen und der Zuverlässigkeit des erhaltenen Ergebnisses verbundenen Fragen unbeantwortet sind. In dem hier vorliegenden Beitrag werden wir zeigen, dass es ernstzunehmende Gründe für diese Schlussfolgerung gibt.

Zeitreihenvorhersage mittels exponentieller Glättung Zeitreihenvorhersage mittels exponentieller Glättung

Dieser Beitrag möchte dem Leser einige Modelle zur exponentiellen Glättung für kurzfristige Vorhersagen von Zeitreihen näher bringen. Darüber hinaus werden Fragen der Optimierung und Berechnung der Vorhersageergebnisse berührt sowie Beispiele für Programmskripte und Indikatoren vorgestellt. Dieser Artikel soll als erster Einstieg in die Grundsätze von Vorhersagen auf der Grundlage exponentieller Glättungsmodelle dienen.

Zeitreihenvorhersage mittels exponentieller Glättung (Fortsetzung) Zeitreihenvorhersage mittels exponentieller Glättung (Fortsetzung)

In diesem Beitrag wird versucht, einen bereits angelegten Indikator nachzubessern, außerdem wird kurz auf eine Methode zur Berechnung der Zuverlässigkeitsintervalle von Vorhersagen mittels Bootstrapping und Quantilen eingegangen. Als Ergebnis erhalten wir einen Vorhersageindikator und Skripte zur Berechnung der Vorhersagegenauigkeit.

Erstellen von Expert-Systemen mit dem Hilfsprogramm Expert Advisor Visual Wizard Erstellen von Expert-Systemen mit dem Hilfsprogramm Expert Advisor Visual Wizard

Das Hilfsprogramm Expert Advisor Visual Wizard für MetaTrader 5 bietet eine höchst verständliche intuitive grafische Umgebung mit einer umfangreichen Auswahl vorgefertigter Programmblöcke für den Handel, die die Erstellung automatischer Handelssysteme (hier: Expert-Systeme) zu einer Sache von Minuten machen. Die auf Anklicken, Ziehen und Ablegen (click, drag and drop) beruhende Arbeitsweise des Expert Advisor Visual Wizard ermöglicht die Erstellung grafischer Abbildungen von Handelsstrategien und -signalen wie bei der Arbeit mit Papier und Bleistift. Diese Handelsdiagramme werden automatisch von dem von Molanis entwickelten MQL5-Codegenerator analysiert und in einsatzbereite Expert-Systeme übersetzt. Die interaktive grafische Umgebung vereinfacht die Planung und beseitigt die Notwendigkeit des Schreibens von MQL5-Code.