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

 
Michael Marchukajtes :
Hayır arkadaşlar sistem birleşti, göstermenin bile bir anlamı yok.

Belki de üçlü sınıflandırıcının mantığını değiştirdiği konusunda sizi uyarmayı unuttuğum için mi?

İkili mantık için mantık aynı kalır: çıkış değeri sıfırdan küçükse, bu örnekte 0 gibidir. Daha fazlaysa, örnekte 1 gibidir.

Ve üçlü if çıktısı: seçimde 1 olarak 1, seçimde 0 olarak 0, jPrediction'da "-" olarak -1.

 


ilgi için 8 modelden oluşan bir komite oluşturdu ve 4000 işlem dizisi (5,5 yıllık ticaret) doğrulaması üzerine modellendi. Bu, işlemlerin başlangıç noktalarına uyum sağlamadan olası mevduat büyümesi aralığı hakkında bir fikir edinmek için bir Monte Carlo simülasyonudur (bu, strateji test cihazında bir çalışma sağlar). Burada doğrulamada MO 0.00026 puandır. Alt miktar açıkçası sıfırın üzerinde, almak istediğim de buydu.

Sonraki, bu seriler için kurtarma faktörünün dağılımının bir analizi olacaktır.

kurtarma faktörü bu şekilde dağıtılır. Medyan 3.7, bir tür hedef değerdir (plan). Alt kantil de iyidir.

Geriye 80 eğitim örneğinin daha eğitim çalışmasını beklemek ve komiteyi büyütmek kalıyor.

 
Yuri Reshetov :

Belki de üçlü sınıflandırıcının mantığını değiştirdiği konusunda sizi uyarmayı unuttuğum için mi?

İkili mantık için mantık aynı kalır: çıkış değeri sıfırdan küçükse, bu örnekte 0 gibidir. Daha fazlaysa, örnekte 1 gibidir.

Ve üçlü if çıktısı: seçimde 1 olarak 1, seçimde 0 olarak 0, jPrediction'da "-" olarak -1.

Bunu anlamadım, bununla her şey yolunda .... İşte mesele farklı. Gerçek şu ki, Optimize Edici çıktı hakkında bilgi içeren verileri bulmak için çok iyidir. Veriler %80'in üzerinde genelleme ile bulunduğunda. Daha sonra bu veriler, diğer ağ topolojilerinde başarıyla kullanılabilir ve eğitimin sonucu, yeniden eğitim vb. olmadan en üstte olacaktır. Bu, optimize ediciyi doğrudan ticarette kullanmak istemeyenler içindir. Benim durumumda, çıkışı sınıflandırmak için kullanılan verilerin tamamen başarılı olmadığı ortaya çıktı, bu nedenle Cuma günü alım satım işleminin sonucu istediğimizden biraz farklı çıktı. Bununla birlikte, kasvetli olmadım ve modeli art arda oluştururken giriş ve çıkışta çöp durumuna yol açmayan başka bir öngörücü seti buldum ....... neyse, işte kullanmak için birkaç öneri sınıflandırıcı, aracınızı akıllı bir sinyal olarak filtreler (tahmin edilmez).

1. Ayrı ayrı al ve sat sinyalleri. Önceki değerlerin verilerini kullanırsanız ve böyle bir bölüm verilerin sırasını bozarsa, tahmin edicilerden biri bir sinyalin işareti olmalıdır. Al=1, Sat=-1 Yani, tahmin edicilerden biri sinyalin yönü olacaktır.

2. Tahminler bir şekilde tahmin sistemine bağlı olmalıdır. Bu Zscore sinyaline sahibim, Kelli sinyali, Sinyal sırası (sistem tersine çevrilemez, bu nedenle bir yönde arka arkaya birkaç sinyal olabilir). Genel olarak, bir şekilde sistemle ilgili olan bilgiler. Hatta momentumu alabilirsin, MT4 optimizer'de ayrı ayrı test döneminde kar sağlayan bir parametre aldım , sistemin sinyalleri üzerinde işlem yaptım. Yani momentum, eğitim alanındaki vb. sistemin sinyalleri için optimize edilmiştir.

3. Çıkış. Bu en önemli kısım çünkü 100 piplik kâr çıkışım %50 genelleme verdi ve 10 pip olarak değişti ve genelleme %65'e çıktı. bu, çıktının yeterli olması gerektiğini gösterir. Demark TS'de bunu yapmak oldukça zordur. genellikle manuel olarak bakmanız gerekir çünkü bu durumda yaklaşımın resmileştirilmesi işe yaramaz ....... Ve eğitim alanında sinyallerde hata yapmak daha iyidir, ancak aynı zamanda bir model alın yüksek düzeyde bir genelleme ile. Diyelim ki eğitimde sinyal 100 pip kazandı, ancak yine de 0 olarak işaretledik, çünkü piyasa sinyalin ters tarafına yatkındı. Yani, genelleme seviyesini artırmak ve böylece TS'nin gelecekte daha iyi çalışmasını sağlamak için kasten TS'nin kaybetmesine izin verdik. Sonuçta, çıktımız ideal, peki, biraz ideal değil, doğru olmasına izin verin ....

4. Tahminlerinizde CME işlem hacimlerini kullanın. Bu gerçekten işe yarıyor ve modelin genelleme düzeyini ÖNEMLİ OLARAK artırıyor ...... Delta kümesinden alıyorum, yani şöyle bir şey .....

 
Alexey Burnakov :

Bu, işlemlerin başlangıç noktalarına uyum sağlamadan olası mevduat büyümesi aralığı hakkında bir fikir edinmek için bir Monte Carlo simülasyonudur (bu, strateji test cihazında bir çalışma sağlar).

Umarım işlemlerin başlangıç noktalarını nasıl hareket ettirirseniz taşıyın hepsi öğrenme sürecinden sonradır. Örneğin, modeli Ocak ve Mart 2015 verileriyle eğittiyseniz (Şubat verilerini kaldırarak), bu veriler eğitim örneğinde olmasa da son doğrulamayı Şubat ayında yapmamalısınız, bu tür sonuçlar güvenilmez olacaktır. Doğrulama, model parametrelerini seçmek için eğitim veya çapraz doğrulama sırasında model tarafından kullanılabilecek tüm tarihlerden sonra, ancak Nisan 2015'ten itibaren başlatırsanız, gerçek ticarette beklenen yeterli bir sonucu gösterecektir.

Verilerinizle ilgili ikinci denemem (regresyon [0;0.5;1]'e yuvarlanır) benim için tatmin edici bir şekilde sonuçlanmadı. Model ve genetik, "ticaret yapma" sabit sınıfına sahip varyantı tekrar seçti.
Görünüşe göre, üç sınıfı tahmin etmek için bir nöronun 3 çıktısı olması gerekir, aksi takdirde üç sınıfı seviyeli bir çıktıya sığdıramaz. Ya da hemen "ticaret yapmayın" sınıfını kaldırıp iki tane bırakıp onlarla çalışmak zorunda kaldım.

Ön testte en azından bir şeyi bir şekilde kontrol etmek için, genetik tarafından seçilen tahmin edicilerin bir listesini aldım, üzerlerinde bir nöron eğittim (her şey doğru, üç çıkışlı ve girişte faktör var) çapraz doğrulamalı şapka aracılığıyla (yöntem = "tekrarlanancv") . Öyle olduğu ortaya çıktı, eğitim verilerinde bile doğruluk sadece% 40.
Doğrulama dosyasının çıktı olarak sınıflara değil, gerçek sayılara sahip olduğunu şimdi fark ettim. Onları tüm olumlu olanlar için +1 ve tüm olumsuz olanlar için -1 olarak değiştirdim.
Ardından, ön test için iki doğruluk elde ettim:
1) modelin tahmin=0 ile işlem yapmaması gerektiği göz önüne alındığında, anlaşma açılmayacağı ve nihai istatistikleri etkilemeyeceği için doğru sonucun önemi yoktur. Bu durumda, -1 ve 1 tahminleri zamanın %51'inde doğrudur (tahmin=0 olduğu tüm örnekler göz ardı edilir).
2) tüm tahminleri alın, tüm doğru sonuçlarla karşılaştırın. Bu durumda, doğruluk = %14, rastgeleden bile daha kötü.

Alım satım emülatörünüzde model alım satımının sonucunun ne olacağını merak ediyorum, lütfen grafiği yukarıdaki gibi yapar mısınız, ancak eklediğim modelle alım satım yapar mısınız?
RData dosyası çok büyük çıktı, forum hemen kabul etmedi. İki winrar arşivi oluşturdum ve bunları ayrı ayrı zip arşivlerine koydum. Her iki zip arşivini de çıkarmanız, ardından ilk rar arşivini açmanız, verileri çıkarmanız gerekir, ikinci rar arşivi kendi kendine alacaktır, asıl şey aynı klasörde olmalarıdır.
Veya ekteki r betiğini çalıştırabilirsiniz, seçilen tahmin edicilerin bir listesini içerir ve onlarla bir model oluşturur. Gönderdiğiniz orijinal csv dosyasına sahip olmanız gerekir, kullanılır.
Aynı script, bir ekten RData açıldıktan sonra çalıştırılabilir, script yeni bir tane oluşturmak yerine hazır bir model alacaktır, kodda bir tahmin ve doğruluk değerlendirmesi örneği var. Ön test için daha önce gönderdiğiniz RData dosyasına ihtiyacınız var.

Geçmişteki hatalar göz önüne alındığında, üçüncü denemeye başlıyorum.

 
Dr.Tüccar :

1) modelin tahmin=0 ile işlem yapmaması gerektiği göz önüne alındığında, anlaşma açılmayacağı ve nihai istatistikleri etkilemeyeceği için doğru sonucun önemi yoktur. Bu durumda, -1 ve 1 tahminleri zamanın %51'inde doğrudur (tahmin=0 olduğu tüm örnekler göz ardı edilir).

Yanlış cevap için -2 puan verdim, cevap yok için -1, doğru cevap için 1. Cevaplar için alınan puanların oranı bir yönde değiştirilebilir, ancak ağın olmaması önemlidir. boşuna boşuna, bu yüzden "kaçınmak" için cezalandırmanız gerekiyor.

Her biri 1 sinyal veren, -1 (veya 0) sinyal vermeyen iki ağdan oluşan bir komite, sinyaller çelişiyorsa, son sinyal 0'dır. Böylece ağlardan gelen sinyaller ortak bir sinyale indirgenmiştir [-1 , 0, 1].

 

Dr.Tüccar :

Umarım işlemlerin başlangıç noktalarını nasıl hareket ettirirseniz taşıyın hepsi öğrenme sürecinden sonradır. Örneğin, modeli Ocak ve Mart 2015 verileriyle eğittiyseniz (Şubat verilerini kaldırarak), bu veriler eğitim örneğinde olmasa da son doğrulamayı Şubat ayında yapmamalısınız, bu tür sonuçlar güvenilmez olacaktır. Doğrulama, model parametrelerini seçmek için eğitim veya çapraz doğrulama sırasında model tarafından kullanılabilecek tüm tarihlerden sonra, ancak Nisan 2015'ten itibaren başlatırsanız, gerçek ticarette beklenen yeterli bir sonucu gösterecektir.


Evet, elbette, kesinlikle emin olabilirsiniz. Bu sadece doğrulama. Sadece işlem dizileri, büyük hacimli gözlemlerden rastgele bir örneklem bazında hazırlanır. Ticaret eğrisinin nerede olabileceğini anlamak için Monte Carlo'ya ihtiyaç vardır. İşlemlerin birkaç dakika boyunca bir yönde veya başka bir yönde kayması kendi eğrilerini oluşturur. MT test cihazında bir eğri görüyorum - bir uygulama. Her hesaplamada bir rasgele sayı üreteci olan bir koşul oluşturur ve rasgele bir sayı ile açarsam, strateji test cihazını 500 kez çalıştırabilir ve aynı eğrileri elde edebilirim. Ancak MT'de uzun olacak. Ve 30 saniyeye ihtiyacım var.

Ardından, komitede bir danışman yaptığımda, doğrulamayı strateji test cihazında çalıştıracağım. Eğri bir fana sığmalıdır ve kurtarma faktörü ile beklenen değerin benzersiz bir değerini elde edeceğim. Ancak tek seferde sonuç çıkarmak mümkün değildir. İstenmeyen.

 
Dr.Tüccar :


Alım satım emülatörünüzde model alım satımının sonucunun ne olacağını merak ediyorum, lütfen grafiği yukarıdaki gibi yapar mısınız, ancak eklediğim modelle alım satım yapar mısınız?
RData dosyasının çok büyük olduğu ortaya çıktı, forum hemen kabul etmedi. İki winrar arşivi oluşturdum ve bunları ayrı ayrı zip arşivlerine koydum. Her iki zip arşivini de çıkarmanız, ardından ilk rar arşivini açmanız, verileri çıkarmanız gerekir, ikinci rar arşivi kendi kendine alacaktır, asıl şey aynı klasörde olmalarıdır.
Veya ekli r betiğini çalıştırabilirsiniz, seçilen tahmin edicilerin bir listesini içerir ve onlarla bir model oluşturur. Gönderdiğiniz orijinal csv dosyasına sahip olmanız gerekir, kullanılır.
Aynı script, bir ekten RData açıldıktan sonra çalıştırılabilir, script yeni bir tane oluşturmak yerine hazır bir model alacaktır, kodda bir tahmin ve doğruluk değerlendirmesi örneği var. Ön test için daha önce gönderdiğiniz RData dosyasına ihtiyacınız var.

Geçmişteki hatalar göz önüne alındığında, üçüncü denemeye başlıyorum.

Ve hangi modeli öğreniyorsun, Sinir ağı ?

Bunu daha sonra yapmaya çalışayım. Modelim tüm çekirdeklerde günün her saatinde öğreniyor.

Genel olarak, takdir ettiğinizi düşündüm. Sadece referans olarak verdiğim doğrulama dosyasında modelin tahminlerini değiştirin. Bunlar +1 / -1 / 0 yönleri olmalıdır.Yeni bir tahmin sütunu olacak. Tahmin sütununu hedef sütunla çarpın. 0.0001 yayılımı çıkarın. Model çıktısının 0 olduğu girişleri kaldırın. Cumsum işlevini alın:

plot(cumsum(your_data$trades_simulated_after_spread), type = 'l')

 mean(your_data$trades_simulated_after_spread)

Kabaca, bu, tüm gözlemler ve bir MO sayısı genelinde bir ticaret tablosu olacaktır. Basit.

 
Alexey Burnakov :

Ne modeli öğreniyorsun, sinir ağı mı?

...

Tahmin sütununu hedef sütunla çarpın

Evet, bir sinir ağı öğreniyorum, nnet paketi. Bu durumda, modeli birkaç model parametresi seçen şapka işareti kullanarak eğitiyorum.

RData dosyanızdaki sonuçların olduğu sütuna tekrar baktım, şimdi bunun fiyatlarda bir artış olduğunu hemen gördüm. Geçen sefer bunun bir çeşit olasılık olduğunu düşünmüştüm.
Fiyat artışını hedef değişkende saklama şekliniz hoşuma gitti, gerekirse bunları kolayca eğitim için sınıflara dönüştürebilir veya kârı hesaplayabilirsiniz. ben de bunu yapacağım.

Her şeyi anladım, açıklama için teşekkürler, karı hesapladım, spread'i hesaba kattım, bir grafik çizdim. Kötü, MO = -2.052423e-05, yavaş ama sabit tahliye.

Yayılma gelince, sadece 4 durumda dikkate alınmalıdır:
1, 2) Son çubuk için tahmin = 0; yeni bir çubuk için tahmin = -1 veya 1. Yeni bir pozisyon açma.
3) Son çubuk için tahmin = -1; yeni bir çubuk için tahmin = 1. Ters, eski pozisyon kapatılır, yenisi açılır.
4) Son çubuk için tahmin = 1; yeni çubuk tahmini = -1. Ters, eski pozisyon kapanır, yenisi açılır.
Diğer tüm durumlarda, ya önceki pozisyon önceki çubuktan kalır ya da eski pozisyon basitçe kapatılır veya hiç pozisyon yoktur. Bütün bunlar bir yayılma gerektirmez.

(Daha açık olmak gerekirse, alış anlaşmaları alış+spread'de açılır ve alışta kapatılır. Satış anlaşmaları tam tersine alışta açılır ve alış+spread'de kapanır. Teklif, genellikle terminalde gösterilen fiyattır. Ancak kolaylık sağlamak için, sabit bir yayılma ile, herhangi bir yeni pozisyon açarken sadece bir kez dikkate almak yeterlidir, daha kolaydır)

Tüm bunlar, yeni bir çubukta hemen aynı yönde yeniden açacağı pozisyonu kapatmaması için danışmanda dikkate alınmalıdır. Bir keresinde böyle bir hata yaptım, komisyoncudan indirim alacağımı düşündüm. Ancak bu durumda indirim işlemlerinin sıklığı işe yaramaz, her şey daha da kötüleşir.

 
Dr.Tüccar :

Evet, bir sinir ağı öğreniyorum, nnet paketi. Bu durumda, modeli birkaç model parametresi seçen şapka işareti kullanarak eğitiyorum.

RData dosyanızdaki sonuçların olduğu sütuna tekrar baktım, şimdi bunun fiyatlarda bir artış olduğunu hemen gördüm. Geçen sefer bunun bir çeşit olasılık olduğunu düşünmüştüm.
Fiyat artışını hedef değişkende saklama şekliniz hoşuma gitti, gerekirse bunları kolayca eğitim için sınıflara dönüştürebilir veya kârı hesaplayabilirsiniz. ben de bunu yapacağım.

Her şeyi anladım, açıklama için teşekkürler, karı hesapladım, spread'i hesaba kattım, bir grafik çizdim. Kötü, MO = -2.052423e-05, yavaş ama sabit tahliye.

Yayılma gelince, sadece 4 durumda dikkate alınmalıdır:
1, 2) Son çubuk için tahmin = 0; yeni bir çubuk için tahmin = -1 veya 1. Yeni bir pozisyon açma.
3) Son çubuk için tahmin = -1; yeni bir çubuk için tahmin = 1. Ters, eski pozisyon kapatılır, yenisi açılır.
4) Son çubuk için tahmin = 1; yeni çubuk tahmini = -1. Darbe, eski pozisyon kapandı, yenisi açıldı.
Diğer tüm durumlarda, ya önceki pozisyon önceki çubuktan kalır ya da eski pozisyon basitçe kapatılır veya hiç pozisyon yoktur. Bütün bunlar bir yayılma gerektirmez.

(Daha açık olmak gerekirse, alış anlaşmaları alış+spread'de açılır ve alışta kapatılır. Satış anlaşmaları tam tersine alışta açılır ve alış+spread'de kapanır. Teklif, genellikle terminalde gösterilen fiyattır. Ancak kolaylık sağlamak için, sabit bir yayılma ile, herhangi bir yeni pozisyon açarken sadece bir kez dikkate almak yeterlidir, daha kolaydır)

Tüm bunlar, yeni bir çubukta hemen aynı yönde yeniden açacağı pozisyonu kapatmaması için danışmanda dikkate alınmalıdır. Bir keresinde böyle bir hata yaptım, komisyoncudan indirim alacağımı düşündüm. Ancak bu durumda indirim işlemlerinin sıklığı işe yaramaz, her şey daha da kötüleşir.

sırayla.

MO - 0.00002. Bu zaten bir yayılmadan daha fazlası. Yani model gürültüden bir şeyler öğrenmiştir ancak tahmin gücü yeterli değildir.

İkinci. çapraz doğrulama ile şapka. Verilerin hangi bölümünün belirli bir kata kayacağını bir şekilde belirlediniz mi? Varsayılan olarak CV'yi (tekrarlanan CV) seçerseniz, model test için rastgele seçilmiş gözlemleri alacaktır. Zaman serisi durumunda en iyi seçenek değil.

Ardından, ticaret simülasyonu. Sadece belirli bir dakika içinde açılıp kapanmak için bir sinyalim var. Ve sonra yapmak daha da zor olabilir. Bu nedenle, her işlem için spreadi dikkate aldığımda pozitif bir MO'ya sahibim. Ve elde etmek gerçek.

Çapraz doğrulama ile uğraşın. caret, zaman serisinin belirli bölümlerini kıvrımlara dahil etmek için dizin kümeleri oluşturma yeteneğini içerir.

Ve nöronların yanı sıra başka birçok yöntem var. Bugün için en iyilerinden biri GBM veya XGBOOST'tur. paketler denir. Şimdiye kadar ilkini seçtim. Severim.

 

"repeatedcv" yöntemini trainControl'de varsayılan bölmeyle kullandım. Son zamanlarda, çapraz doğrulama kodunu kendim yazdım, çapraz doğrulamayı sadece rastgele alınan çubuklarla ve sıralı olarak boşluksuz alınan parçalarla denedim. Ön testte herhangi bir fark görmedim, her iki durumda da yaklaşık olarak aynı sonucu verdi. Eğitim / çapraz doğrulama için verileri %50 / %50 olarak böldüm, belki de bu oranda artık önemli değil.
Bunu caret ile deneyecek...

Yakın zamanda yayınladığınız o makalede, karşılaştırmalı olarak, güçlendirilmiş ağaçların Platt yöntemiyle (bunun gibi bir şey) önde olduğunu hatırlıyorum. Google'da bu yöntemle ilgili bulduğum her şey - modelin çıktısını sigmoid'e aktarmanız ve sonucunu almanız gerekiyor. gbm veya xgboost bunu yapabilir mi? Bu yaklaşım, bir ormandan, bir nörondan ve ikinci sırada yer alan bazı "torbalı ağaçlardan" daha iyi görünüyor.