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

 
Alexey Burnakov :
  • Modelleri maksimum PV'ye göre seçmeye çalışacağım (şimdi MO'ya göre seçiyorum). Yani, modelin kalitesini değerlendirme işlevini değiştireceğim. Hz....

Modelin kalitesini değerlendirmek için doğru seçilmiş bir fonksiyon çok önemlidir, çünkü aradığımız ve maksimize etmeye çalıştığımız şey, sonunda elde edeceğiz. Modelin doğruluğunu kullanırsanız, modelin her zaman en fazla sayıda örnek içeren sınıfı döndürdüğü yerel bir maksimuma kolayca kaydırabilirsiniz. Dengesiz sınıflarla eğitim verileri için F-skoru veya Cohen'in Kappa'sı daha iyidir. Ancak onlarla bile sorun yaşadım, çünkü çubuk başına fiyat artışı farklı olabilir ve olumlu bir değerlendirme ile bile eksi ile sonuçlanabilir - kazanan esnaf sayısı kaybetmekten daha fazla olacaktır, ancak Aynı zamanda, birkaç kaybetme işleminde büyük, yeri doldurulamaz kayıplar olabilir. Alım satım simülasyonu ve modelin alım satım sonuçlarına göre değerlendirilmesi doğru karar, size katılıyorum, ben de yakın zamanda bunu yapmaya başladım. Küçük bir düşüş ile karlılık gereklidir, bu da modelin değerlendirilmesinde bu kavramların kullanılması gerektiği anlamına gelir.

MO bana pek iyi bir seçim değil gibi geliyor, çünkü önemli olan düşüş hesaba katılmadı. MT5'in sahip olduğu EA değerlendirme özelliklerinden en çok Recovery Factor ve Sharpe oranını beğendim.
Geri Kazanım Faktörü - nihai karı, tüm zaman için maksimum düşüşe bölün. Oldukça basit ama etkili.
Sharpe Ratio - İnternette kelimelerde çok fazla açıklama var, ancak çok fazla formül bulamadım. MT4 için böyle bir kod var, bence onu R'ye taşıyıp denemeye değer.

 double GetSharpeRatioFromHistory( double riskFreeYearlyIncome = 0.01 ){
   double profitsArray[];
   int profitsArraySize = 0 ;
   
   double profitsAvg = 0.0 ;
   int profitsAvgCount = 0 ;
   
   int ordersHistoryTotal = OrdersHistoryTotal ();
   if (ordersHistoryTotal == 0 ){
       return 0.0 ;
   }
   for ( int i= 0 ; i<ordersHistoryTotal; i++){
       if ( OrderSelect (i, SELECT_BY_POS , MODE_HISTORY )){
         if (( OrderSymbol () == _Symbol ) && ( OrderMagicNumber () == magic)){
             double profitForTrade = ( OrderProfit () + OrderCommission () + OrderSwap ());
             double seconds = double ( OrderCloseTime () - OrderOpenTime ());
             double riskFreeRate = riskFreeYearlyIncome / double ( 365 * 24 * 60 * 60 ) * seconds;
             double tradeResult = profitForTrade - riskFreeRate;
            
            profitsArraySize = ArrayResize (profitsArray, profitsArraySize+ 1 );
             if (profitsArraySize> 0 ){
               profitsArray[profitsArraySize- 1 ] = tradeResult;
            }
            
            profitsAvg += tradeResult;
            profitsAvgCount++;
         }
      }
   }
   
   if (profitsArraySize == 0 ){
       return 0.0 ;
   }
   
   profitsAvg /= double (profitsAvgCount);
   
   double stdDev = 0.0 ;
   for ( int i= 0 ; i<profitsArraySize; i++){
      stdDev += ((profitsArray[i]-profitsAvg)*(profitsArray[i]-profitsAvg)/ double (profitsArraySize));
   }
   
   if (stdDev == 0.0 ){
       return 0.0 ;
   }

   return profitsAvg/stdDev;
}

parametre riskFreeYearlyIncome - risksiz bir yatırım için yıllık kar (bir bankada mevduat), örnekte %1'dir. Sharpe Ratio, stratejinin böyle bir yatırımdan ne kadar daha iyi olduğunu değerlendirir.
double saniye = double(OrderCloseTime() - OrderOpenTime()) - işlemin zamana göre saniye cinsinden ne kadar süreyle açıldığı. Çubuklar üzerinde işlem yapmak için bu, sırasıyla bir çubuktaki saniye sayısıdır.

 
Dr.Tüccar :

1) Modelin kalitesini değerlendirmek için doğru seçilmiş bir fonksiyon çok önemlidir, çünkü aradığımız ve maksimize etmeye çalıştığımız şeyi sonunda elde edeceğiz.

2) Ancak onlarla bile sorun yaşadım, çünkü çubuk başına fiyat artışı farklı olabilir ve olumlu bir değerlendirme ile bile eksi ile sonuçlanabilir - kazanan esnaf sayısı kaybetmekten daha fazla olacaktır, ancak aynı zamanda, birkaç kaybeden esnafın büyük, yeri doldurulamaz kayıpları olabilir.

3) Alım satım simülasyonu ve modelin alım satım sonuçlarına göre değerlendirilmesi doğru karar, size katılıyorum, ben de yakın zamanda bunu yapmaya başladım. Küçük bir düşüş ile karlılık gereklidir, bu da modelin değerlendirilmesinde bu kavramların kullanılması gerektiği anlamına gelir.

4)

MO bana pek iyi bir seçim değil gibi geliyor, çünkü önemli olan düşüş hesaba katılmadı. MT5'in sahip olduğu EA değerlendirme özelliklerinden en çok Recovery Factor ve Sharpe oranını beğendim.
Geri Kazanım Faktörü - nihai karı, tüm zaman için maksimum düşüşe bölün. Oldukça basit ama etkili.
Sharpe Ratio - İnternette kelimelerde çok fazla açıklama var, ancak çok fazla formül bulamadım. MT4 için böyle bir kod var, bence onu R'ye taşıyıp denemeye değer.


1) Kesinlikle

2) aynen.

3) evet, değerlendirmedeki başlangıç noktası yanlılığından kurtulmaya yardımcı olur.

4) PV, kurtarma faktörüdür. Ona büyük saygım var. Değerlendirme fonksiyonuna yazacağım, kolay.

Sharpe tarafından. Her şey basit! Açıklarım.

a) Ticaret sonuçlarının vektörünü puan olarak aldınız, değil mi?

b) YENİDEN YATIRIM ile ticareti simüle etmek ve puan vektörünü mevduatın yüzde artışlarının bir vektörüne dönüştürmek gereklidir. Misal. 100.000 dolarla başlıyoruz. 0.1 lotu ile işlem yapıyoruz ve 0.001 (on puan) alıyoruz. Lot başına 10 dolar. Bu, bu değerin 10 / 100.000'e dönüştüğü anlamına gelir ve lot büyüklüğündeki büyüme veya azalma dikkate alınarak böyle devam eder.

c) Elde edilen yüzde artış vektörüne göre şunları dikkate alıyoruz: ortalama, standart sapma.

d) yılda belirli bir risksiz gelir getiriyoruz (% 3) - sayı koşullu bir sayıdır, küçük bir sayıdır.

e) İşlemlerinizi ortalama yıllık getiriye dönüştürmeniz veya yıllık risksiz getiriyi işlem başına ortalama getiriye ayırmanız gerekir. Tamamlandı.

e) (işlem başına ortalama getiriniz (dönem için) - risksiz getiri) / standart sapma

Henüz bir R kodum yok. Ancak böyle bir fonksiyon yazmak zor olmamalı.

 

Finansal piyasalarda her şey yeniden eğitiliyor! Söyledikleri bile yeniden eğitilmez, orada yeniden eğitilir.

Sağlam doğrusal regresyon, daha az ölçüde yeniden eğitir, ancak o kadar kötü bir eğitim kalitesi verir ki, yeni verilere tahminde bulunmak berbattır.

 
Alexey Burnakov :

En başından beri, fiyat artışlarını sınıflandırma fikriniz benden tamamen duygusal bir ret ile karşılandı. Eğilimleri tahmin edersek, ZZ'ye bakarız ve açıktır: işte bir sınıf ve işte başka bir sınıf. Fiyat artış grafiğine bakarsanız, bu sıfır civarında kaotik bir seğirmedir. Burada açıkça görülebilen sınıflar nerede?

Bunlar tamamen istatistikte büyük önem verdiğim duygular - matematik olmadan her şey açık ve açık olmalıdır.

Ayrıca ARIMA-ARCH aparatı uzun yıllardır finans piyasalarındaki fiyat artışları için geliştirilmiş ve oldukça iyi çalışmaktadır. Bu operanın Hirst'ü hesaba katan modelleri bile var. En iyi sınıflandırma nedir?

Sınıflandırma kalıplardır - aramayı otomatikleştirdiğimiz ve gözle açıkça görülebilen bir sınıfı öngören "baş ve omuzlar". Sınıflandırma yardımıyla bir örüntü buluyoruz (örneğin bir ağaç şeklinde) ve “bu örüntüden sonra büyüme olacak. Hedef değişkeni doğru formüle edersek öyle olur. 100 pip Bu” diyoruz. bana çok daha doğru bir hedef değişken gibi görünüyor.

Çözüm. Hedef değişkenle başlamalısın, her zaman olduğu gibi, hedef bizim her şeyimiz, yanlış hedefler bataklığa yol açar

 
San Sanych Fomenko :

En başından beri, fiyat artışlarını sınıflandırma fikriniz benden tamamen duygusal bir ret ile karşılandı. Eğilimleri tahmin edersek, ZZ'ye bakarız ve açıktır: işte bir sınıf ve işte başka bir sınıf. Fiyat artış grafiğine bakarsanız, bu sıfır civarında kaotik bir seğirmedir. Burada açıkça görülebilen sınıflar nerede?

Bunlar tamamen istatistikte büyük önem verdiğim duygular - matematik olmadan her şey açık ve açık olmalıdır.

Ayrıca ARIMA-ARCH aparatı uzun yıllardır finans piyasalarındaki fiyat artışları için geliştirilmiş ve oldukça iyi çalışmaktadır. Bu operada Hirst'i hesaba katan modeller bile var. En iyi sınıflandırma nedir?

Sınıflandırma kalıplardır - aramayı otomatikleştirdiğimiz ve gözle açıkça görülebilen bir sınıfı öngören "baş ve omuzlar". Sınıflandırma yardımı ile bir örüntü buluyoruz (örneğin bir ağaç şeklinde) ve “bu örüntüden sonra büyüme olacak. Hedef değişkeni doğru formüle edersek öyle olur. 100 pip Bu bana çok daha doğru bir hedef değişken gibi görünüyor.

Çözüm. Hedef değişkenle başlamalısın, her zaman olduğu gibi, hedef bizim her şeyimiz, yanlış hedefler bataklığa yol açar

Bunun duygusal olarak nesi yanlış bilmiyorum. Bu seçeneklerden biridir. Mumun rengi de denir.

Kârlı bir sistem kurma aşamasından önce regresyon ve sınıflandırma görevlerinin bir hedef olduğunu hatırlatalım.

Ayrıca, sadece bir büyüme işareti değil, aynı zamanda büyük bir modül ile büyümeyi öngördüğüm sonucuna vardım. Yani, yalnızca büyümeyi değil, yalnızca sistemin güçlü bir büyüme öngördüğü yerde giriş satın alın. Ayrıca hücre ile. Resmi olarak, makine gerilemeyi öğrenir. Sonra çıkışını güçlü bir yükseliş, güçlü bir düşüş, kanalda sallanma olarak yorumluyorum.

Bu, gelecekteki 100 piplik bir ilerlemeyi tahmin etmeye çok yakın. Sadece ben kendim böyle bir hedefin resmileştirilmesini nasıl gördüğünüzü anlamıyorum. Büyüme ne anlama geliyor ve büyümeden önce 90 puanlık bir düşüş olduysa ve bu büyüme ancak bir hafta sonra elde edildiyse?

Ufukta 9 saatlik, yaklaşık 20 puanlık güçlü bir büyüme var. Saat 9'dan sonra işlem kapatılır.

Ve aslında şu anda sınıfı hiç tahmin etmiyorum (büyüme / düşüş / sarkan / güçlü büyüme). Aslında, eğitim aşamasında değerlendirmesi ticaretin beklenen değeri ile ölçülen bir sistem inşa ediyorum. Yani, sınıflandırma doğruluğu düşük olabilir (benim için %53), ancak doğru yönde vurmak, vurmamaktan biraz daha büyük bir artış sağlar. Problemin formülasyonundaki farkı hissediyor musunuz? Sınıflandırma doğruluğu, ticaret karlılığı ile ilişkilidir ancak tamamen örtüşmez.

 

Bu arada, modelin kalitesini değerlendirmenin bir fonksiyonu olarak kurtarma faktörü de tek taraflıdır. 10 işlem ve 1 kaybeden işlem veya 500 işlem ve 10 kaybeden işlem alabilirim. İkinci durumda, EF daha düşük olabilir ve kâr 50 kat daha fazladır.

Alternatif olarak, toplam karı alabilir ve bundan maksimum düşüşü çıkarabilirsiniz. Burada en azından kar maksimize edilecektir.

Veya geleneksel kâr faktörü: toplam kâr / toplam zarar.

 
Alexey Burnakov :

İkinci durumda, EF daha düşük olabilir ve kâr 50 kat daha fazladır.

Her şey almaya hazır olduğunuz riskle ilgili. Örneğin, iki sinyal vardır: ilki, maksimum %10'luk bir düşüşle yılda %100 kar getirir. İkinci sinyal - %40'lık bir düşüşle yılda %300 kar getiriyor. Yani, kâr açısından, ikinci sinyal önde.
Ancak PV'yi hesaplarsanız, ilk sinyal lider olacaktır ve bu doğrudur, çünkü ilk sinyalin işlem boyutunu (lot olarak) dört kat artırabilirsiniz, bu da aynı düşüşü verecektir. ikinci sinyal, ancak daha büyük bir kârla. Veya hesap bakiyesinin büyük bir yüzdesini riske atmak istemiyorsanız, ikinci sinyalin lotlarının boyutunu 4 kat azaltabilirsiniz, bu da bakiyenin istenen %10'luk riskini, ancak kâr riskini verecektir. ayrıca ilk sinyale kıyasla daha az olacaktır

Yani, stratejiye göre bir ticaret planı aşağıdaki gibi olabilir: İleriye dönük bir strateji kullanarak ticaret yaparken mümkün olan maksimum düşüşü belirleyin; bu düşüşün hesap bakiyesi için izin verdiğiniz değerden kaç kat fazla/eksik olduğunu hesaplayın; parti büyüklüğünü hesaplayın, böylece bu sayılar birleşir.
PV kullanmak, ticarete başlamadan önce tüm riskleri hesaplayacağınız ve uygun lot büyüklüğünü belirleyeceğiniz anlamına gelir. Ticaret yaparken stratejinin düşüşü ne kadar küçükse, kullanabileceğiniz işlemlerin boyutu o kadar büyük olur.

 
Alexey Burnakov :

Veya geleneksel kâr faktörü: toplam kâr / toplam zarar.

IMHO, daha kabul edilebilir:

TS_evaluation_criteria = toplam_kâr_işlemleri / (kâr_işlemlerinin toplamı + zarar_kayıp_işlemlerinin toplamı)

sabit bir lot ile ticarete tabidir.

Bu durumda, kriter 0,5'ten yüksekse, TS nihai karı gösterdi, aksi takdirde - bir kayıp.

Kriterin avantajı, katı bir şekilde normalize edilmiş olması ve değerinin 0'dan 1.0'a kadar olan aralığın ötesine geçememesidir.

Düşüşler, TS'nin nihai karına rağmen, bu kriterin değeri üzerinde olumsuz etkiye sahiptir, yani. olumsuz bir faktör olarak kabul edilmektedir.

 
Yuri Reshetov :

IMHO, daha kabul edilebilir:

TS_evaluation_criteria = toplam_kâr_işlemleri / (kâr_işlemlerinin toplamı + zarar_kayıp_işlemlerinin toplamı)

sabit bir lot ile ticarete tabidir.

Bu durumda, kriter 0,5'ten yüksekse, TS nihai karı gösterdi, aksi takdirde - bir kayıp.

Kriterin avantajı, katı bir şekilde normalize edilmiş olması ve değerinin 0'dan 1.0'a kadar olan aralığın ötesine geçememesidir.

Düşüşler, TS'nin nihai karına rağmen, bu kriterin değeri üzerinde olumsuz etkiye sahiptir, yani. olumsuz bir faktör olarak kabul edilmektedir.

"sum_of_losing_trades" - Açıklığa kavuşturacağım, mutlak değeri kastediyorum. Teşekkür ederim, daha önce bu kadar normalleştirilmiş bir kriter görmemiştim.
 
Yuri Reshetov :

IMHO, daha kabul edilebilir:

TS_evaluation_criteria = toplam_kâr_işlemleri / (kâr_işlemlerinin toplamı + zarar_kayıp_işlemlerinin toplamı)

sabit bir lot ile ticarete tabidir.

Bu durumda, kriter 0,5'ten yüksekse, TS nihai karı gösterdi, aksi takdirde - bir kayıp.

Kriterin avantajı, katı bir şekilde normalize edilmiş olması ve değerinin 0'dan 1.0'a kadar olan aralığın ötesine geçememesidir.

Düşüşler, TS'nin nihai karına rağmen, bu kriterin değeri üzerinde olumsuz etkiye sahiptir, yani. olumsuz bir faktör olarak kabul edilmektedir.

Ve eğer birkaç işlemde ana kar ortaya çıkacak ve diğer binlerce küçük kayıp olacaksa? - buz değil gibi.