Ticarette makine öğrenimi: teori, pratik, ticaret ve daha fazlası - sayfa 7

 
Dr.Tüccar :

Teşekkürler, denedim. Tahmin edicileri seçmek için çok şey yaptığınız görülebilir, çünkü nöron onlardan kolayca öğrendi ve sonucu test veri setine de kaydetti.

Aşağıdaki sonuçlar, R1.F3 ile ilgili eğitime ilişkindir.

1) Rattle'dan komik bir sonuç çıktı. Standart konfigürasyonlu HH, eğitim/doğrulama/test hataları gösterdi - %30/29/%33. R2.F3'te hata - %35. Ancak tüm bunlar sadece iyi bir durum, aslında, farklı bir konfigürasyonda, kolayca eksik veya fazla eğitilmiş olabilir, burada sadece şanslı.

2) Sonra kontrolsüz öğrenme, 200 gizli nöron ile basit bir kaba yaklaşım benimsedim, ağ, sonuç gelişmeyi durdurana kadar eğitildi. Eğitme/doğrulama/test etme/R2.F3 hataları - %2/%30/%27/%45. Bu anlaşılabilir, ağ yeniden eğitildi.

3) Kontrollü öğrenme. Bu, ağaçlardan farklıdır, ancak bir nöronla, onu yeniden eğitmemek için bunu her zaman yapmalısınız. Buradaki nokta, bazen eğitimi duraklatmak ve tren/doğrulama/test sonuçlarını kontrol etmektir. Sonuçları kontrol etmek için altın kuralı bilmiyorum, ancak tamamen normal bir yaklaşım, tren veri kümesi üzerinde eğitim almak, ardından doğrulama ve test veri kümelerindeki hatalara bakmak, doğrulama/test hataları azalmayı bıraktığında eğitimi durdurmaktır. Bu, yeniden eğitime karşı bir tür garanti verir. Tüm bu süreç boyunca R2.F3 kullanılamaz olarak kabul edilir ve üzerindeki test ancak eğitimin bitiminden sonra yapılır. Bu durumda tren/doğrulama/test etme/R2.F3 hataları %27/30/31/37'dir. Burada yine aşırı antrenman gözlemleniyor, ancak küçük. Eğitim sürecini daha önce durdurmak mümkündü, tren hatası belirgin şekilde daha az doğrulama / test hatası haline geldikten sonra, ancak bu zaten tahmin ediyor ... yardımcı olabilir, ancak yapamadı.

"R1.F1" üç değere sahip bir hedef değişkene sahip, Rattle bunu bir nöronla yapamaz ve R'de kendi kodunuzu yazmanız gerekiyor, bu veri setini kaçırdım.

"R1.F4" "R1.F5" "R1.F6", Rattle'daki nöronda 4 hatanın tümü için yaklaşık olarak aynı sonuçları verdi, bana öyle geliyor ki bir nöronla yeterli bir yaklaşım da yaklaşık olarak aynı sonuçları verecektir, ben onlarla daha fazla çalışmadı.

Orman ve ada için benzer sayılara sahibim.

Ve şimdi, "koyunumuza" dönersek - keyfi bir tahminciler listesinden gürültü nasıl atılır? 170'ten 27 tahmincimi seçen bazı deneysel algoritmam var. Ayrıca, diğer insanların tahmin edicilerini analiz etmek için kullandım ve ayrıca başarılı bir şekilde. Bu deneyime dayanarak, algoritmalarında değişkenlerin "önemini" kullanan tüm R yöntemlerinin, tahmin ediciler kümesini gürültüden temizleyemeyeceğini savunuyorum.

Tüm şube okuyucularına sesleniyorum: Kaynak veriler RData veya işlem gerektirmeyen bir Excel dosyası şeklinde sunuluyorsa uygun bir analiz yapmaya hazırım.

Ayrıca.

Ekte, ilk öngörücü kümesini gürültüden temizleme sorununu çözdüğü ve çok daha yüksek kalitede bir dizi makale ekliyorum. Maalesef şu anda denemek için zamanım yok. Belki biri deneyip sonucu yazar?

 
San Sanych Fomenko :

Ekte, ilk öngörücü kümesini gürültüden temizleme sorununu çözdüğü ve çok daha yüksek kalitede bir dizi makale ekliyorum. Maalesef şu anda denemek için zamanım yok. Belki biri deneyip sonucu yazar?

Teşekkürler, belgeye baktım ama ihtiyacım olanı bulamadım. Modelimi M15-H4 yeniden dağıtımında bir yerde Forex için eğitmeye çalışıyorum. Sadece son çubuğun verilerini almam benim için yeterli değil, aynı anda düzinelerce çubuk almam ve model girişleri için birbiri ardına uzun bir diziye koymam gerekiyor. Örneğin (open_bar1, close_bar1, hh_bar1, open_bar2, close_bar2, hh_bar2, open_bar3, close_bar3, hh_bar3,...). Bir seçim yöntemi bana ikinci çubuğun zamanını kaldırmam gerektiğini söylerse, bu bana yardımcı olmaz, yöntem, örneğin, tüm zaman verilerinin kaldırılabileceğini söylemelidir (endeks 3,6,9... ).

ALL_cod.RData dosyanızda Rat_DF1'i eğitim için de (istenilen hedefi belirterek) ve ardından doğrulama için Rat_DF2 ve Rat_DF3'ü kullanabileceğinizi doğru anladım. İlgilenenler için R kodumu ekledim, hata kontrolü ile sinir ağı eğitimi uyguluyor. Farklı bir hedef değişken seçmek için, otomatik düzeltme dosyasındaki "Short_Long.75"'i "Short_Long.35", "Flet_Long", "Short_Flet", "Flet_In"den bir şeyle değiştirebilirsiniz. Bu nedenle, farklı veri kümelerini değiştirmekten daha uygundur.

Dosyalar:
 
Dr.Tüccar :
Modelimi M15-H4 yeniden dağıtımında bir yerde Forex için eğitmeye çalışıyorum. Sadece son çubuğun verilerini almam benim için yeterli değil, aynı anda düzinelerce çubuk almam ve model girişleri için birbiri ardına uzun bir diziye koymam gerekiyor. Örneğin (open_bar1, close_bar1, hh_bar1, open_bar2, close_bar2, hh_bar2, open_bar3, close_bar3, hh_bar3,...). Bir seçim yöntemi bana ikinci çubuğun zamanını kaldırmam gerektiğini söylerse, bu bana yardımcı olmaz, yöntem, örneğin, tüm zaman verilerinin kaldırılabileceğini söylemelidir (endeks 3,6,9... ).

mmm Seans piyasaları farklı çalıştığı için zaman verilerine ihtiyaç duyulabilir.

Forex özelliklerime bakın:

> names(sampleA)

  [1] "lag_diff_2"        "lag_diff_3"        "lag_diff_4"        "lag_diff_6"        "lag_diff_8"        "lag_diff_11"       "lag_diff_16"     

  [8] "lag_diff_23"       "lag_diff_32"       "lag_diff_45"       "lag_diff_64"       "lag_diff_91"       "lag_diff_128"      "lag_diff_181"    

 [15] "lag_diff_256"      "lag_diff_362"      "lag_diff_512"      "lag_diff_724"      "lag_mean_diff_2"   "lag_mean_diff_3"   "lag_mean_diff_4" 

 [22] "lag_mean_diff_6"   "lag_mean_diff_8"   "lag_mean_diff_11"  "lag_mean_diff_16"  "lag_mean_diff_23"  "lag_mean_diff_32"  "lag_mean_diff_45"

 [29] "lag_mean_diff_64"  "lag_mean_diff_91"  "lag_mean_diff_128" "lag_mean_diff_181" "lag_mean_diff_256" "lag_mean_diff_362" "lag_mean_diff_512"

[36] "lag_mean_diff_724" "lag_max_diff_2"    "lag_max_diff_3"    "lag_max_diff_4"    "lag_max_diff_6"    "lag_max_diff_8"    "lag_max_diff_11" 

 [43] "lag_max_diff_16"   "lag_max_diff_23"   "lag_max_diff_32"   "lag_max_diff_45"   "lag_max_diff_64"   "lag_max_diff_91"   "lag_max_diff_128"

 [50] "lag_max_diff_181"  "lag_max_diff_256"  "lag_max_diff_362"  "lag_max_diff_512"  "lag_max_diff_724"  "lag_min_diff_2"    "lag_min_diff_3"  

 [57] "lag_min_diff_4"    "lag_min_diff_6"    "lag_min_diff_8"    "lag_min_diff_11"   "lag_min_diff_16"   "lag_min_diff_23"   "lag_min_diff_32" 

 [64] "lag_min_diff_45"   "lag_min_diff_64"   "lag_min_diff_91"   "lag_min_diff_128"  "lag_min_diff_181"  "lag_min_diff_256"  "lag_min_diff_362"

 [71] "lag_min_diff_512"  "lag_min_diff_724"  "lag_sd_2"          "lag_sd_3"          "lag_sd_4"          "lag_sd_6"          "lag_sd_8"        

 [78] "lag_sd_11"         "lag_sd_16"         "lag_sd_23"         "lag_sd_32"         "lag_sd_45"         "lag_sd_64"         "lag_sd_91"       

 [85] "lag_sd_128"        "lag_sd_181"        "lag_sd_256"        "lag_sd_362"        "lag_sd_512"        "lag_sd_724"        "lag_range_2"     

 [92] "lag_range_3"       "lag_range_4"       "lag_range_6"       "lag_range_8"       "lag_range_11"      "lag_range_16"      "lag_range_23"    

 [99] "lag_range_32"      "lag_range_45"      "lag_range_64"      "lag_range_91"      "lag_range_128"     "lag_range_181"     "lag_range_256"   

[106] "lag_range_362"     "lag_range_512"     "lag_range_724"     "symbol"            "month"             "day"               "week_day"        

[113] "hour"              "minute"            "future_lag_2"      "future_lag_3"      "future_lag_4"      "future_lag_6"      "future_lag_8"    

[120] "future_lag_11"     "future_lag_16"     "future_lag_23"     "future_lag_32"     "future_lag_45"     "future_lag_64"     "future_lag_91"   

[127] "future_lag_128"    "future_lag_181"    "future_lag_256"    "future_lag_362"    "future_lag_512"    "future_lag_724"

Hareketli ortalamalardan , en yüksek ve en düşük değerlerden ve penceredeki fiyat aralığından veri alıyorum. Ve zaman, günler ve hatta aylar)

Algoritmalarım aslında 114 tahmin ediciden 10'unu hatta 5'ini bırakabilir.Bu normaldir. Bu tür verilerde, PREDICTORS arasında güçlü bir korelasyon vardır ve bu nedenle güçlü bir fazlalık vardır.

 

Bilgilendirici özellikleri seçme yöntemimden kısaca bahsedeceğim. Kod ektedir.

Sorunun iki yönü vardır - alt kümelerin nasıl seçileceği ve çıktı değişkeninin seçilen tahmin edicilerinin uygunluğunun nasıl ölçüleceği.

İlk soru. Bunu, Simüle Edilmiş Tavlama kullanarak tahmin edici kombinasyonlarının stokastik sayımıyla çözüyorum. Sonuç olarak genetik ve deterministik olmayan gradyan inişi ile benzer. Avantajı, yerel minimumlardan seçilmesi ve doğada var olma ilkesine göre çalışmasıdır. Hatanın pürüzsüz olmayan bir yüzeyi ile çalışabilir, ancak burada her şey şartlı.

Birçok görev için, yöntemin savunucuları, örneğin, genetikten daha iyi olduğunu düşünüyor. Neredeyse standart olarak R'de bir paket aracılığıyla uygulanır. İşin püf noktası, bunun sürekli veriler için olması ve tahmin indekslerim var, bu yüzden toplam tahmin edici sayısı uzunluğunda sürekli bir vektör yapıyorum ve belirli bir eşik herhangi bir skaler tarafından kırıldığında, tahmin indeksi bire dönüşüyor.

İkinci soru daha da inceliklidir. Fitness fonksiyonu.

Bir tahmin edicinin (ve bir dizi tahmin edicinin) çıktıyı etkilediği nasıl ölçülür. İlişki doğrusal olmayabilir. Standart regresyon, bazı doğrusal olmayan problemlerde çok şey karıştırabilir. Aynı zamanda, kara kutu eğitiminden ve yerleşik önem tahmincisini kullanmaktan bahsetmiyorum. Ben ayrı bir yöntemden bahsediyorum.

Bağımlılığın çok karmaşık olabileceği ve yine etkileşimleri, fazlalıkları, doğrusal olmamayı içerdiği anlaşılmalıdır. Bütün bunlar hem kategorik verilere hem de sayısallara uygulanabilir.

Bilgi Teorisinden onlar için iyi araçlar olduğu için kategorik verileri seçtim. Basitçe söylemek gerekirse: bir giriş ve bir çıkış var. Çıkış durumu, girdiye en azından biraz bağlıysa (olasılıkla), bağımlıdırlar. Böyle bir şey var - karşılıklı bilgi. Ölçüyor.

Şimdi daha derine. VI, sonlu boyutta bir örnek üzerinde gözlemlenen bir dağılım üzerinde bir şey ölçer. Bu elbette bir nokta tahminidir.

Bu nedenle, bağımsız bir girdi-çıktı çifti durumunda bilginin istatistiksel sınırlarının tahmin edilmesi gerekmektedir. Bu, sayısal yöntemlerle kendi kendine yazılan bir işlevle yapılır.

Daha da derin. İki veya daha fazla tahmincimiz varsa - onlarla ne yapmalı?

İlk olarak, kendileri bağlanabilirler ve ne kadar güçlü bağlanırlarsa, kümelerindeki fazlalık o kadar büyük olur. Bu fazlalık sözde ile ölçülür. çoklu bilgi. Ancak çoklu bilgi aynı zamanda numune üzerinde bir nokta tahminidir. Bunun için dağılım niceliği, kendi kendine yazılan başka bir fonksiyon aracılığıyla sayısal olarak da hesaplanır.

İkinci olarak, yordayıcı kategorilerinin düzeylerinin sayısı o kadar fazla olabilir (diyelim ki 2 ^ 15), bu düzeylerdeki bağımlılık hakkında hiçbir şey söylenemez. Seviye başına çok az gözlem var.

Ve son olarak, tüm bunlar yapıldığında ve bir araya getirildiğinde, önceden belirlenmiş bir istatistiksel anlamlılığa sahip rastgele bir örnek boyutunda, keyfi sayıda tahmin ediciye ve çıktıya keyfi bir tür bağımlılığı ölçme fırsatını elde ederiz. Bilgi Teorisinden temel işlevlerin kendisi paketten alınmıştır.

Bütün bunlar ekteki dosyada. Tabii ki, 100 gram olmadan bunu anlamak kolay değil. Ayrıca ticaret kurallarının oluşturulması ve bunların doğrulanması için eksiksiz bir kod bulunmaktadır. Hepsi bilgileriniz ve derinleşmeniz için.

Temel olarak, sonuç genellikle:

[1] "1.69%"

> final_vector <- c((sao$par >= threshold), T)

> names(sampleA)[final_vector]

 [1] "lag_diff_23"      "lag_diff_45"      "lag_mean_diff_2"  "lag_mean_diff_8"  "lag_max_diff_11"  "lag_max_diff_181" "lag_min_diff_3"   "lag_min_diff_724"

 [9] "lag_sd_724"       "lag_range_32"     "symbol" "future_lag_181"  

Bir buçuk günlük çalışmadan ve on binlerce tahmin edici kombinasyonu arasında sıralamadan sonra, fonksiyon uygunluk fonksiyonunun değerini verir - bu, tahmin ediciler setinde fazlalık için cezalandırılan önemli karşılıklı bilgidir. Ve tahmin edicilerin kendileri.

Bütün bunlar, tekrar ediyorum, kategoriktir ve insan tarafından okunabilir kurallar oluşturmanıza izin verir. Bulunan düzenliliğin yorumlanmasını sağlar.

Burada, örneğin, yukarıda tam determinizmin %1.7'sine sahibim (ki bu Forex için fena değil) ve birlikte 0.1 güven düzeyinde önemli olan bir grup girdi (deneyimi böyle kurdum) durumu belirler çıktı (ikili). Yani forex verilerinde net bilgiler var. Soru deneysel olarak kanıtlanmıştır.

Bundan sonra, doğrulama sırasında karlılığı değerlendirebilir ve ticaret sistemini kodlayabilirsiniz.

Alexey

 
Dr.Tüccar :


ALL_cod.RData dosyanızda Rat_DF1'i eğitim için de (istenilen hedefi belirterek) ve ardından doğrulama için Rat_DF2 ve Rat_DF3'ü kullanabileceğinizi doğru anladım. İlgilenenler için R kodumu ekledim, hata kontrolü ile sinir ağı eğitimi uyguluyor. Farklı bir hedef değişken seçmek için, otomatik düzeltme dosyasındaki "Short_Long.75"'i "Short_Long.35", "Flet_Long", "Short_Flet", "Flet_In"den bir şeyle değiştirebilirsiniz. Bu nedenle, farklı veri kümelerini değiştirmekten daha uygundur.

Evet. Çıngırakta kolaylık sağlamak içindir.

Bir nüans daha.

Tüm hedef değişkenler iki 33'ten türetilir: 33(35) ve 33(25). Ve burada sizinkini yansıtan çok hoş olmayan bir nüans var.

Hedef değişken, 33 koluna karşılık gelen 0'lar ve 1'ler dizisidir. Ama biz HER ZAMAN 33 kolun tek bir elemanını tahmin ederiz, kolun kendisini değil. Bu nedenle trendleri tahmin ettiğimizi söylemek yanlış olur. Bir trend unsurunun tahmin edildiğini söylemek doğrudur. Ve trendin tahmin edilen tüm unsurlarını toplarsanız, trend büyük olasılıkla çalışmayacaktır.

 

feature_selector_modeller.zip için teşekkürler, inceleyeceğim.

San Sanych Fomenko :

Tüm şube okuyucularına sesleniyorum: Kaynak veriler RData veya işlem gerektirmeyen bir Excel dosyası şeklinde sunuluyorsa uygun bir analiz yapmaya hazırım.

Bir dosya ekledim, bu forex'ten bir veri seti. Eğitim ve doğrulama için iki veri kümesiyle RData içinde. Fiziksel olarak, iki veri kümesindeki veriler birbirini takip eder, sadece modeli test etme kolaylığı için iki dosyaya ayrılır. Model bu veri setinde eğitilebilir, tahmin edicileri manuel olarak eledim ve nöronu eğittim, sonuç olarak doğrulama veri setindeki minimum hata %46 idi, bu gerçekten karlı değil. Hata %40'ın altına düşerse gerçek kârı düşünebilirsiniz. Bu dosyadan tahmin edicileri ayıklamaya çalışın lütfen.

San Sanych Fomenko :

Hedef değişken, 33 koluna karşılık gelen 0'lar ve 1'ler dizisidir. Ama biz HER ZAMAN 33 kolun tek bir elemanını tahmin ederiz, kolun kendisini değil. Bu nedenle trendleri tahmin ettiğimizi söylemek yanlış olur. Bir trend unsurunun tahmin edildiğini söylemek doğrudur. Ve trendin tahmin edilen tüm unsurlarını toplarsanız, büyük olasılıkla trend çalışmayacaktır.

Farklı hedef değişkenler denedim. Bir yandan, bir çubuk ilerideki fiyatı tahmin edebilirsiniz ve ardından hedef değişken, bir sonraki çubuğun fiyatının yükselmesine veya düşmesine bağlı olarak 1 veya 0 olacaktır. Küçük zaman dilimlerinde herhangi bir sonuç elde edemedim, görünüşe göre kapanış fiyatı üzerlerinde oldukça rastgele bir sayı. Ancak H1 ve üzerinde zaten bazı olumlu sonuçlar var.

Başka bir seçenek de zikzak veya diğer eğilim göstergeleridir . Onunla bazı olumlu sonuçlar aldım, ancak nöron sonucunun filtreden geçmesi şartıyla. Örneğin, son çubuklar için sonuçların ortalamasını alın veya sonuçları yalnızca bazı eşik değerlerinin üzerinde kullanın. Bütün bunların uygulanmaması gerektiğini düşünüyorum, kesin hesaplamalardan çok falcılık var. Sorun şu ki, modelin sadece sonraki 10-20 barı satın almak için sinyal vermesi gerekiyor ve bazen aralarında sat sinyali veriyor. Bu durumda, işlem tersine çevrilir, komisyon ve spread ödenir ve bu, trend başına birkaç kez devam eder. Bu nedenle, ya yüksek doğruluk elde etmeniz ya da sadece bir çubuk için böyle bir çevirme olmaması için sonucu yumuşatmanız gerekir. Yani evet dediğiniz gibi sadece trend unsuru tahmin ediliyor ve bu tarz unsurlardan trend eklemek pek başarılı olmuyor.

Dosyalar:
set56.RData.zip  525 kb
 
Dr.Tüccar :


Farklı hedef değişkenler denedim. Bir yandan, bir çubuk ilerideki fiyatı tahmin edebilirsiniz ve ardından hedef değişken, bir sonraki çubuğun fiyatının yükselmesine veya düşmesine bağlı olarak 1 veya 0 olacaktır. Küçük zaman dilimlerinde herhangi bir sonuç elde edemedim, görünüşe göre kapanış fiyatı üzerlerinde oldukça rastgele bir sayı. Ancak H1 ve üzerinde zaten bazı olumlu sonuçlar var.


Sonuçlarım sürekli olarak tam tersi. Birkaç dakika ilerideki (bir saate kadar) fiyat hareketini %55 doğrulukla (Ask to Ask) kolayca tahmin edebiliyorum. 23 dakika için en iyi sonuç. Bu, doğrulama örneklerine ilişkin ikili bir sınıflandırmadır.

Ve tahmin ufku arttıkça, doğruluk 12 saat ileride yavaşça %51'e düşer. Ve bu bağımlılık tarih boyunca var olmuştur. Ancak kar elde etmek için doğruluk daha da yüksek olmalıdır (Sor - Bid mesafesini aşın).

Daha sonra tartışacağız.

 
Dr.Tüccar :

feature_selector_modeller.zip için teşekkürler, inceleyeceğim.

Bir dosya ekledim, bu forex'ten bir veri seti. Eğitim ve doğrulama için iki veri kümesiyle RData içinde. Fiziksel olarak, iki veri kümesindeki veriler birbirini takip eder, sadece modeli test etme kolaylığı için iki dosyaya ayrılır. Model bu veri setinde eğitilebilir, tahmin edicileri manuel olarak eledim ve nöronu eğittim, sonuç olarak doğrulama veri setindeki minimum hata %46 idi, bu gerçekten karlı değil. Hata %40'ın altına düşerse gerçek kârı düşünebilirsiniz. Bu dosyadan tahmin edicileri ayıklamaya çalışın lütfen.


Tek bir tahmin edici bulamadım - tüm gürültü. Hedef değişkeniniz için tahmin edicilerinizin tahmin gücü yoktur. Bazı ipuçları 54,55,56. Onlardan bir şeyler çıkarmak mümkün olabilir... Yani bence her şey çöpe atılabilir.
 
Tamam, teşekkürler, başka kaynak verilere bakacağım.
 
Dr.Tüccar :
Tamam, teşekkürler, başka kaynak verilere bakacağım.

Beklemek. Verilerinizi bağımlılıklar için de çalıştıracağım.

Başlamadan önce bir soru. Verileriniz bir satırdaki tüm çubukları içeriyor mu, yoksa örneklemeden önce çubuklarda bir incelme mi oldu?