Alım Satım Sistemleri Geliştirmek İçin Diskriminant Analizini Kullanma
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:
- G1 = a1*RSI+b1*MACD+с1, fiyatın yükseldiği durumlar için denklem;
- 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.
- Veri hazırlama;
- Hazırlanan verilerden en iyi değişkenlerin seçilmesi;
- Test verilerini kullanarak ortaya çıkan modelin analiz ve test edilmesi;
- 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:
- Hızlandırıcı Osilatör;
- Ayıların Gücü;
- Boğaların Gücü;
- Harika Osilatör;
- Emtia Kanalı Endeksi;
- DeMarker;
- Fraktal Uyarlanır Hareketli Ortalama;
- MACD;
- Bağıl Güç Endeksi;
- Bağıl Vigor Endeksi;
- Stokastik;
- Williams Yüzde Aralığı.
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
Tamam’a tıklayın ve verilerimizi içeren tablo hazır.
Ş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:
- 200 puandan daha çok aşağıda;
- 200 puandan daha az aşağıda;
- 200 puandan daha az yukarıda;
- 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
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ı
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ı
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
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
Ş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
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ı
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
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
Ö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
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
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ı
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ı
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
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
- Ücretsiz ticaret uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz