English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
Alım Satım Sistemleri Geliştirmek İçin Diskriminant Analizini Kullanma

Alım Satım Sistemleri Geliştirmek İçin Diskriminant Analizini Kullanma

MetaTrader 5Ticaret sistemleri | 16 Aralık 2021, 16:02
44 0
ArtemGaleev
ArtemGaleev

Giriş

Teknik analizin başlıca görevlerinden biri, piyasanın yakın gelecekte gideceği yönü belirlemektir. İstatistiksel bir bakış açısından, piyasanın gelecekteki durumunu iki kategoriye ayırmanın mümkün olacağı göstergelerin seçilmesi ve değerlerinin belirlenmesi olarak özetlenebilir. 1) yukarı hareket, 2) aşağı hareket.

Diskriminant analizi, ne tür göstergelerin ve hangi değerlerin bu kategoriler arasında daha iyi ayrım yapılmasına izin verdiğine karar vermenin yollarından birini sunmaktadır. Başka deyişle, diskriminant analizi, göstergelerden alınan verilere dayanarak piyasa yönünü tahmin edecek bir modelin oluşturulmasına olanak tanır.

Bununla birlikte, bu gibi bir analiz büyük miktarda veri girdisi gerektirdiği için oldukça karmaşıktır. Bundan dolayı, piyasanın durumunu analiz etmek için bunun manuel olarak kullanılması oldukça zaman alıcıdır. Neyse ki MQL5 dilinin ve istatistiksel yazılımın ortaya çıkması, veri seçimini ve diskriminant analizinin hazırlanması ile uygulanmasını otomatikleştirmemize olanak sağlamıştır.

Bu makale, piyasadan veri toplamak için bir EA geliştirmeye bir örnek vermektedir. Statistica yazılımında FOREX piyasası için prognostik model oluşturmak amacıyla diskriminant analizinin uygulanmasına dair bir eğitim görevi görmektedir.


1. Diskriminant Analizi Nedir?

Diskriminant analizi (bundan böyle “DA” olarak anılacaktır), motif tanıma yöntemlerinden biridir. Sinir ağları, özel bir DA durumu olarak kabul edilebilir. DA, motif tanımaya dayalı başarılı savunma sistemlerinin çoğunluğunda kullanılmaktadır.

Hangi değişkenlerin gelen veri akışını gruplara böldüğünü (ayırdığını) belirlemeye ve böyle bir ayrım mekanizmasını görmeye olanak tanımaktadır.

DA’nın FOREX piyasası için kullanılmasının basitleştirilmiş bir örneğine göz atalım. Bağıl Güç Endeksi (RSI), MACD ve Bağıl Vigor Endeksi (RVI) göstergelerinden veri değerlerimiz var ve fiyat yönünü tahmin etmemiz gerekiyor. DA’nın bir sonucu olarak, aşağıdakileri elde edebiliriz.

a. RVI göstergesi, tahmine katkıda bulunmaz. Dolayısıyla bunu analizden çıkaralım.

b. DA, iki diskriminant denklemi üretti:

  1. G1 = a1*RSI+b1*MACD+с1, fiyatın yükseldiği durumlar için denklem;
  2. G2 = a2*RSI+b2*MACD+с2, fiyatın düştüğü durumlar için denklem;

Her bir çubuğun başında G1 ve G2’yi hesaplayarak, G1 > G2 ise fiyatın yükseleceğini; G1 < G2 ise fiyatın düşeceğini tahmin ediyoruz.

DA, sinir ağları ile ilk tanışmada faydalı olabilir. DA kullanırken, sinir ağlarının çalışması için hesaplananlara benzer denklemler elde ederiz. Bu, yapılarını daha iyi anlamaya ve stratejilerinizde sinir ağlarını kullanmaya değip değmeyeceğine önden karar vermeye yardımcı olmaktadır


2. Diskriminant Analizinin Aşamaları

Analiz birkaç aşamaya ayrılabilir.

  1. Veri hazırlama;
  2. Hazırlanan verilerden en iyi değişkenlerin seçilmesi;
  3. Test verilerini kullanarak ortaya çıkan modelin analiz ve test edilmesi;
  4. Diskriminant denklemlerine dayalı olarak modelin oluşturulması.

Diskriminant analizi, istatistiksel veri analizi için tasarlanmış neredeyse tüm modern yazılım paketlerinin bir parçasıdır. En bilinenleri, Statistica (StatSoft Inc.) ve SPSS (IBM Corporation)’dır. Statistica yazılımını kullanarak diskriminant analizinin uygulanmasını daha detaylı inceleyeceğiz. Verilen ekran görüntüleri, Statistica sürüm 8.0’dan alınmıştır. Bunlar, yazılımın önceki sürümlerinde aşağı yukarı aynı görünmektedir. Statistica’nın, sinir ağları dahil olmak üzere, yatırımcıya başka birçok faydalı araç sunduğu unutulmamalıdır.


2.1. Veri Hazırlama

Veri toplama, belirli bir mevcut göreve bağlıdır. Görevi şöyle tanımlayalım: Göstergeleri kullanarak bilinen gösterge değerlerine sahip çubuğu takip eden çubuktaki fiyat çizelgesinin yönünü tahmin etmek. Gösterge değerlerini ve fiyat verilerini bir dosyaya kaydetmek amacıyla, veri toplamak için bir EA geliştirilecektir.

Bu, aşağıdaki gibi bir yapıya sahip bir CSV dosyası olacaktır. Değişkenler, her sütunun belirli bir göstergeye karşılık geldiği sütunlar halinde düzenlenecektir. Satırlar ardışık ölçümleri (durumları), yani belirli çubuklar için gösterge değerlerini içermelidir. Başka bir deyişle, yatay tablo başlıkları göstergeleri içermektedir, dikey tablo başlıkları ise ardışık çubukları içermektedir.

Tabloda, gruplandırmanın yapılacağı bir değişken (gruplandırma değişkeni) olacaktır. Bizim durumumuzda, bu değişken, gösterge değerleri alınan çubuğu takip eden çubuktaki fiyat değişikliğine dayalı olacaktır. Gruplandırma değişkeni, verileri aynı satırda görüntülenen grubun sayısını içerecektir. Örneğin, fiyatın yükseldiği durumlar için 1 sayısı ve fiyatın düştüğü durumlar için 2 sayısı.

Aşağıdaki göstergelerin değerlerine ihtiyacımız olacak:

OnInit() fonksiyonu, göstergeleri (gösterge tanıtıcı değerlerini alır) ve sütun veri başlığını kaydettiği MasterData.csv dosyasını oluşturur:

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

OnTick() olay işleyicisi, yeni çubukları tanımlar ve verileri dosyaya kaydeder.

Fiyat davranışı tamamlanan son çubuktan belirlenecektir ve göstergelerin değerleri, son tamamlanan çubuktan önceki çubuktan alınacaktır. Mutlak gösterge değerinden ayrı olarak, değişimin yönünü görmek için mutlak ve önceki değer arasındaki farkı kaydetmemiz gerekir. Verilen örnekteki bu değişkenlerin isimleri, “d” ön ekine sahip olacaktır.

Sinyal çizgisi göstergeleri için, ana ve sinyal çizgisi arasındaki farkı ve dinamiklerini kaydetmek gerekir. Ayıca, yeni çubuğun zamanını ve ilgili saat değerini kaydedin. Bu, verileri zamana göre filtrelemek için pratik olabilir.

Bundan dolayı, fiyat hareketini tahmin etmek için bir tahmin modeli oluşturmak amacıyla 37 göstergeyi dikkate alacağız.

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

  }

EA’ya başladıktan sonra, MasterData.CSV dosyası terminal_data_directory/MQL5/Files içinde oluşturulacaktır. Sınama aracında EA’yı başlatırken, terminal_data_directory/tester/Agent-127.0.0.1-3000/MQL5/Files içinde bulunacaktır. Alınan dosya Statistica’da kullanılabilir.

Bu dosyanın bir örneği MasterData.CSV’de bulunabilir. Veriler, EURUSD H1 için 1 Ağustos 2011’den 1 Ekim 2011’e kadar toplanmıştır.

Dosyayı Statistica’da açmak için aşağıdakileri yapın.

  • Statistica’da Dosya > Aç menüsüne gidin, dosya türü: Veri dosyaları seçimi yapın ve dosyanızı açın.
  • Metin Dosyası İçe Aktarma Türü penceresinde Sınırlı olarak bırakın ve Tamam’a tıklayın.
  • Açılan pencerede altı çizili öğeleri etkinleştirin.
  • Ondalık ayırıcı karakter alanına, orada olup olmadığına bakmaksızın ondalık noktasını koymayı unutmayın.

Şekil 1. Dosyayı Statistica’ya içe aktarma

Şekil 1. Dosyayı Statistica’ya içe aktarma

Tamam’a tıklayın ve verilerimizi içeren tablo hazır.

Şekil 2. Statistica’da Veritabanı

Şekil 2. Statistica’da Veritabanı

Şimdi, Fiyat değişkenine dayalı olarak gruplandırma değişkenini oluşturun.

Fiyat davranışına bağlı olarak dört grup belirleyeceğiz:

  1. 200 puandan daha çok aşağıda;
  2. 200 puandan daha az aşağıda;
  3. 200 puandan daha az yukarıda;
  4. 200 puandan daha çok yukarıda.

Yeni bir değişken eklemek için, AC sütun başlığına sağ tıklayın ve Değişken Ekle seçeneğini seçin.

Şekil 3. Yeni bir değişken ekleme

Şekil 3. Yeni bir değişken ekleme

Açılan pencerede yeni değişken için “Grup” adını belirleyin ve Fiyat değişkeninin grup sayısına dönüştürülmesi için formülü ekleyin.

Formül aşağıdaki gibidir:

=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)


Şekil 4. Değişkenin açıklaması

Şekil 4. Değişkenin açıklaması

Dosya, diskriminant analizi için hazır. Bu dosyanın bir örneği MasterData.STA’da bulunabilir.


2.2. En İyi Değişkenlerin Seçimi

Diskriminant analizini çalıştırın (İstatistik->Çok Değişkenli Keşif Teknikleri->Diskriminant Analizi).

Şekil 5. Diskriminant analizinin çalıştırılması

Şekil 5. Diskriminant analizinin çalıştırılması

Açılan pencerede Değişkenler’e tıklayın.

Birinci alanda gruplandırma değişkenini ve ikinci alanda gruplandırmanın yapılacağı tüm değişkenleri seçin.

Bizim durumumuzda Grup değişkeni birinci alanda ve göstergelerden alınan tüm değişkenler ve ek değişken Saati (verinin alındığı saat) ikinci alanda belirtilir.

Şekil 6. Değişkenlerin seçimi

Şekil 6. Değişkenlerin seçimi

Durumları Seç düğmesine tıklayın (Şekil 8). Diskriminant analizinde kullanılacak durumların (veri satırları) seçimi için bir pencere açılacak. Öğeleri, aşağıdaki ekran görüntüsünde gösterildiği gibi etkinleştirin (Şekil 7).

Analiz için yalnızca ilk 700 durum kullanılacaktır. Kalanlar, ortaya çıkan prognostik modelin sınanması için daha sonra kullanılacaktır. Durumların sayıları, V0 değişkeni aracılığıyla ayarlanır. Durumları bu şekilde belirterek, DA için eğitim verilerinin bir örneğini belirliyoruz.

Sonra Tamam’a tıklayın.

Şekil 7. Eğitim örneğini tanımlama

Şekil 7. Eğitim örneğini tanımlama

Şimdi prognostik modelimizin oluşturulacağı grupları seçelim.

Dikkat etmemiz gereken bir nokta var. DA’nın zayıf noktalarından biri, veri aykırı değerlerine karşı hassasiyettir. Nadir görülen ancak etkili olan olaylar, bizim durumumuzda ani fiyat yükselişleri, modeli bozabilir. Örneğin, beklenmeyen bir haberin ardından piyasa birkaç saat süren önemli hareketlerle yanıt verdi. Teknik göstergelerin değerleri bu durumda tahminde küçük önem taşıyordu ancak belirgin bir fiyat değişimi olduğu için DA’da oldukça önemli olarak kabul edilecek. Bundan dolayı, DA’yı yürütmeden önce verinin aykırı değerler bakımından kontrol edilmesi tavsiye edilir.

Aykırı değerleri örneğimizden çıkarmak için, yalnızca 2. ve 3. grupları analiz edeceğiz. 1. ve 4. gruplarda önemli bir fiyat değişimi olduğu için, gösterge değerlerinde aykırı değerler olabilir.

Bu nedenle, Gruplandırma değişkeni için Kodlar öğesine tıklayın (Şekil 8). Ve analiz için grupların sayılarını belirtin.

Şekil 8. Analiz için grupların seçimi

Şekil 8. Analiz için grupların seçimi 


Gelişmiş Seçenekler’i etkinleştirin. Daha sonraki bir aşamada gerekli olacak adım adım analize izin verecektir.

DA’yı çalıştırmak için, Tamam’a tıklayın.

Aşağıdaki gibi bir mesaj çıkabilir. Bu, seçilen değişkenlerden birinin lüzumsuz olduğu ve esasen diğer değişkenlere bağlı olduğu anlamına gelir, örneğin, diğer iki değişkenin toplamıdır.

Bu, göstergelerden alınan veri akışı için son derece mümkündür. Bu gibi değişkenlerin varlığı, analizin kalitesini etkiler. Ve bunlar kaldırılacaktır. Bunu yapmak için, DA için değişken seçimi penceresine geri gidin ve lüzumsuz değişkenleri teker teker ekleyerek ve DA’yı tekrar tekrar yürüterek bunları tanımlayın.


Şekil 9. Düşük tolerans değeri mesajı

Şekil 9. Düşük tolerans değeri mesajı


Daha sonra DA yöntemi seçimi için bir pencere açılacak (Şekil 10). Açılır listeden Adım Adım İleri öğesini seçin. Göstergelerin değerleri çok az prognostik öneme sahip olduğu için, adım adım analizin kullanılması tercih edilir. Ve grup ayırma modeli, otomatik olarak adım adım oluşturulacaktır.

Spesifik olarak, her adımda, hangisinin gruplar arasında ayrım yapmaya en çok katkı sağlayacağını belirlemek için tüm değişkenler incelenecek ve değerlendirilecektir. Daha sonra o değişken modele dahil edilecek ve süreç yeniden başlatılacaktır. Veri örneği arasında en iyi şekilde ayrım yapan tüm değişkenler, belirtilen şekilde adım adım seçilecektir.


Şekil 10. Yöntem seçimi

Şekil 10. Yöntem seçimi

Tamam’a tıklayın ve DA’nın başarılı bir şekilde tamamlandığını bildiren bir pencere açılacak.

Şekil 11. DA sonuçları penceresi

Şekil 11. DA sonuçları penceresi


Özet: Modeldeki değişkenler’e tıklayarak, adım adım analizin ardından modele dahil edilen değişkenlerin listesine bakın. Bu değişkenler, gruplarımız arasında en iyi ayrımı yapar. %95’ten daha yüksek (p<0,05) bir ayrım doğruluğu üreten değişkenlerin kırmızı renkte görüntülendiğini unutmayın. Diğer değişkenlere göre ayrım doğruluğu daha düşüktür. Model, yalnızca en az %95 ayrım doğruluğu üreten değişkenleri içerecektir.

Ancak istatistiğin “altın kuralına” göre, yalnızca %95’ten fazla doğruluk üreten değişkenler kullanılacaktır. Bu nedenle, kırmızı renkte görüntülenmeyen tüm değişkenleri analizden çıkaracağız. Bunlar, dBulls, Bulls, FrAMA, Hour. Bu değişkenleri çıkarmak için, adım adım analizin seçildiği pencereye geri gidin ve Değişkenler’i seçtikten sonra açılacak pencerede bunları belirtin.

Analizi tekrarlayın. Özet: Modeldeki değişkenler’e tıklayarak, yine üç diğer değişkenin de artık önemsiz olarak göründüğünü göreceğiz. Bunlar DeMarker, Stoch_s, AO. Bunları da analizden çıkaracağız.

Bunun sonucunda, gruplar arasında doğru ayrım (p<0,01) üreten değişkenleri içeren bir modele sahip olacağız.


Şekil 12. Modele dahil olan değişkenler

Şekil 12. Modele dahil olan değişkenler


Böylelikle, örneğimizde 37 değişken arasından yalnızca yedisi tahmin için en önemli olarak bırakılmıştır.

Bu yaklaşım, sinir ağlarını kullananlar da dahil olmak üzere, özel alım satım sistemlerinin daha fazla geliştirilmesi için, önemli göstergelerin teknik analize dayanarak seçilmesine izin verir.


2.3. Test Verilerini Kullanarak Ortaya Çıkan Modelin Analiz ve Test Edilmesi

DA tamamlandıktan sonra, prognostik modeli ve bunun eğitim verilerine uygulanmasının sonuçlarını elde ettik.

Model ve grup ayrımı sonuçlarını görmek için, Sınıflandırma sekmesini açın.

Şekil 13. Sınıflandırma sekmesi

Şekil 13. Sınıflandırma sekmesi

Modelin eğitim verilerine uygulanmasının sonuçlarını içeren tabloyu görmek için Sınıflandırma matrisi’ne tıklayın.

Satırlar, gözlemlenen sınıflandırmaları gösterir. Sütunlar, hesaplanan modele göre tahmin edilen sınıflandırmaları içerir. Doğru tahminleri içeren hücreler yeşille işaretlenir ve yanlış tahminler kırmızı renkte görüntülenir.

Birinci sütun, tahmin doğruluğunu % olarak görüntüler.

Şekil 14. Eğitim verisi sınıflandırması

Şekil 14. Eğitim verisi sınıflandırması

Eğitim verilerinin kullanıldığı tahminin doğruluğunun (Toplam) %60 olduğu görüldü.

Test verilerini kullanarak modeli test edelim. Bunu yapmak için Seç öğesine tıklayın (Şekil 13) ve v0>700’i belirtin, sonrasında model, modeli oluşturmak için kullanılmayan veri aralığında kontrol edilecektir.

Aşağıdaki öğeleri göreceğiz:


Şekil 15. Test verisi sınıflandırması

Şekil 15. Test verisi sınıflandırması

Test örneğinin kullanıldığı tahminin genel doğruluğunun, %55'e ulaşarak kabaca aynı derecede olduğu görüldü. Bu, FOREX piyasası için oldukça iyi bir seviye.


2.4. Bir Alım Satım Sistemi Geliştirme

DA’daki prognostik model, doğrusal denklemler sistemine dayanmakta olup, göstergelerin değerleri buna göre bir grupta veya diğerinde sınıflandırılır.

Bu fonksiyonların açıklamalarını görmek için, DA sonuçları penceresindeki Sınıflandırma sekmesine (Şekil 13) gidin ve Sınıflandırma fonksiyonları öğesine tıklayın. Diskriminant denklemlerinin katsayılarını içeren bir tabloyu içeren bir pencere göreceksiniz.

Şekil 16. Diskriminant denklemleri

Şekil 16. Diskriminant denklemleri

Tablo verilerine dayanarak iki denklemli bir sistem geliştirelim:

Grup2 = 157.17*AC - 465.64*Bears + 82.24*dBears - 0.006*dCCI + 761.06*dFrAMA + 2418.79*dMACDm + 0.01*dStoch_ms - 1.035
Grup3 = 527.11*AC - 641.97*Bears + 271.21*dBears - 0.002*dCCI + 1483.47*dFrAMA - 726.16*dMACDm - 0.034*dStoch_ms - 1.353

Bu modeli kullanmak için, gösterge değerlerini denklemlere girin ve Grup değerini hesaplayın.

Tahmin, Grup değeri daha yüksek olan grup hakkında olacaktır. Örneğimize göre, Grup2 değeri Grup3 değerinden daha yüksekse, önümüzdeki bir saat içinde fiyat çizelgesinin yüksek ihtimalle aşağı yönlü hareket edeceği tahmin edilir. Grup3 değerinin Grup2 değerinden daha büyük olduğu bir durumda, tahmin tam tersi olacaktır.

Örneğimizdeki gösterge değerlerinin ve periyodun oldukça rastgele bir şekilde seçildiği unutulmamalıdır. Ancak, bu veri miktarı bile DA’nın potansiyelini ve gücünü göstermek için yeterliydi.


Sonuç

Diskriminant analizi, FOREX piyasasına uygulandığı şekliyle kullanışlı bir araçtır. Gözlemlenen gösterge değerlerini farklı tahminlerde sınıflandırmaya olanak tanıyan en uygun değişken kümesini araştırmak ve kontrol etmek için kullanılabilir. Prognostik modeller oluşturmak için de kullanılabilir.

Diskriminant analizi sonucunda oluşturulan modeller, büyük bir geliştirme deneyimi gerektirmeyen EA’lara kolaylıkla entegre edilebilir. Ayrıca diskriminant analizi, kendi içinde oldukça kolay bir kullanıma sahiptir. Adım adım verilen yukarıdaki eğitim, kendi verilerinizi analiz etmeniz için yeterli olacaktır.

elektronik kitapçığının ilgili kısmında, diskriminant analizi hakkında daha fazla bilgi bulabilirsiniz.


MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/335

Ekli dosyalar |
masterdata.zip (662.43 KB)
da_demo.mq5 (12.36 KB)
Üssel Düzeltme Kullanarak Zaman Serisi Tahmini (devamı) Üssel Düzeltme Kullanarak Zaman Serisi Tahmini (devamı)
Bu makale, daha önce oluşturulan göstergeyi yükseltmeyi amaçlamaktadır ve bootstrap ve kuantilleri kullanarak tahmin güven aralıklarını hesaplamak için bir yönteme kısaca değinmektedir. Sonuç olarak tahmin doğruluğunun tahmini için kullanılacak tahmin göstergesini ve komut dosyalarını alacağız.
Göstergelerin İstatistiksel Parametrelerini Analiz Etme Göstergelerin İstatistiksel Parametrelerini Analiz Etme
Teknik analiz, temel fiyatları "daha net" gösteren göstergeleri yaygın olarak kullanır ve yatırımcıların analiz yapmasını ve piyasa fiyatları hareketlerini tahmin etmesine izin verir. İlk verilen fiyat dönüşümü ve elde edilen sonuç güvenilirliği ile ilgili sorunları çözemediğimiz sürece, göstergeleri bırakın kullanmayı, ticaret sistemlerinin oluşturulmasında uygulamaya koymanın bile bir anlamı olmadığı oldukça açıktır. Bu yazıda böyle bir sonuca ulaşmanın altında ciddi nedenler yattığını göstereceğiz.
Uzman Danışman Görsel Sihirbazı’nı Kullanarak Uzman Danışmanlar Oluşturma Uzman Danışman Görsel Sihirbazı’nı Kullanarak Uzman Danışmanlar Oluşturma
MetaTrader 5 için Uzman Danışman Görsel Sihirbazı, dakikalar içinde Uzman Danışmanlar tasarlamanıza olanak tanıyan kapsamlı bir önceden tanımlanmış alım satım blokları seti ile son derece kolay anlaşılır bir grafik ortamı sağlar. Uzman Danışman Görsel Sihirbazı'nın tıkla, sürükle ve bırak yaklaşımı, kalem ve kağıtla yaptığınız gibi forex alım satım stratejilerinin ve sinyallerinin görsel temsillerini oluşturmanıza imkan verir. Bu alım satım diyagramları, bunları kullanıma hazır Uzman Danışmanlara dönüştüren Molanis’ MQL5 kod oluşturucusu tarafından otomatik olarak analiz edilir. İnteraktif grafik ortamı tasarım sürecini kolaylaştırır ve MQL5 kodu yazma ihtiyacını ortadan kaldırır.
Üssel Düzeltme Kullanarak Zaman Serisi Tahmini Üssel Düzeltme Kullanarak Zaman Serisi Tahmini
Makale, okuyucuyu zaman serilerinin kısa vadeli tahmini için kullanılan üssel düzeltme modellerine aşina hale getirir. Buna ek olarak, tahmin sonuçlarının optimizasyonu ve tahmini ile ilgili konulara değinir ve komut dosyalarına ve göstergelere birkaç örnek sunar. Bu makale, üssel düzeltme modelleri temelinde tahmin ilkeleri ile ilk tanışma olarak yararlı olacaktır.