"Uzman Danışmanlar İçin Özel Optimizasyon Kriterleri Oluşturma" makalesi için tartışma - sayfa 2

 
Karlson:

Kodun şu türde olduğunu mu söylüyorsunuz

if (bakiye < 3000) ExpertRemove();

çalışmıyor mu?

Çalışıyor. Zaten anladım. optimizasyonu kesiyor ama yine de sonuçları gösteriyor, bu yüzden çalışmadığını düşündüm.


Karlson:

Ama benim söylediğim bu değildi. Böyle bir bozulmanın (en azından daha önce çalıştı) sonunda genetiğin ayrılmasına yol açtığını.

Karlson: Öyle.

Ancak OnTester() sonuçlarını sıfırlarsanız veya yukarıdaki gibi yaparsanız (eksi değer -777 atayın), genetik gerçekten öngörülemeyen şekilde davranabilir, çünkü seçim sadece OnTester()'in geri dönüş değeri ile sonuçlar üzerinde gerçekleştirilir.

 
Gereksiz sonuçların rapordan nasıl kaldırılacağı sorusu devam ediyor.

MT4'te böyle bir şey vardı:

MT4


Geliştiriciler bu tür işlevleri tamamen kaldırdığından, kesinlikle MQL5 araçlarının yardımıyla yapılabilir.

Elbette her şey Excel'e kopyalanabilir, ancak yeni platformdan yararlanmak istiyorum.

Sınırlamaları çözdük - bunu ExpertRemove() ile yapabiliriz.

Raporda gereksiz sonuçları atlamaya ne dersiniz?

 
sigma7i:

Raporda gereksiz sonuçları atlamaya ne dersiniz?

Bunu standart raporda yapamazsınız ve yapmanız da gerekmez (ben buna karşıyım). Kendi raporunuzu oluşturun.

Artık optimizasyon aşamasında(https://www.mql5.com/tr/docs/optimization_frames) istediğiniz formatta bir rapor oluşturabilirsiniz.

Ve yakında (hoo-hoo) genetiği kendi başınıza yönetmeniz mümkün olacak.

 

Mükemmel.

Sinir Ağları ve Genetik Algoritmalar alanında vadeli işlemleri tahmin etmek için daha önce yaptığım çalışmalardan, makul ölçüde düz bir öz sermaye eğrisinin önemini fark ettim.

ve bunu dikkate almak için bazı rutinler yazdım. Bu gerçekten de bir tahmin sisteminin "sağlamlığının" bir ölçüsüdür.

 
Ve şimdi nihayet olasılıkları test etmeye ve keşfetmeye başladım. Ve kabul ediyorum. Yepyeni bir dünyanın kapıları açılıyor. Çok güçlü bir araç. Makale için tekrar teşekkürler
 

Pratik çalışma yapan bulgular.

Doğruluk modülü iyi bir başlangıçtır ancak eksiktir. Sıfır kârla çok iyi bir derece elde etmek mümkündür. Dolayısıyla kâr da denkleme dahil edilmelidir. Sadece toplam kârdan bir tür ölçü eklemek için

işe yaramıyor. Başlangıçta bazı kazançlar, ortada bazı düşüşler ve sonunda bazı daha iyi kazançlar elde ederek iyi bir değere sahip çok düz bir çizgi elde edebilirsiniz. Bu, iyi uyum sağlayan düz bir çizgi oluşturacak ve bir miktar kâr gösterecektir. Ancak aradığımız şey gerçekten bu değil.

Biz gerçekten iyi bir uyumla yukarı doğru yükselen bir regresyon çizgisi istiyoruz. Dolayısıyla, mümkün olduğunca az sapma gösteren bir regresyon doğrusu kullanma fikrini hayata geçirmek için yukarı doğru eğim katsayısının denkleme dahil edilmesi gerekmektedir. İşte bu

görmek istiyoruz. İyi uyum sağlayan yukarı doğru eğimli bir regresyon çizgisi. Bunu dahil etmek için bir girişimde bulunacağım. Öneri ve yardımlarınızı bekliyoruz :-)

 
Özel kriterin değeri, sonuç listesinde "standart" kriterle birlikte gösterilir. Özel kriterlerde 2 değer oluşturmak mümkün mü? Düzlük ve eğimi birleştirmenin iyi bir yolunu bulamadım
 

CSTS kodunu deniyorum.

Bu sonucu biraz garip buluyorum:


Sonuç Kar #İşlemler Frofit faktörü DrawDown Beklenen Ödeme Kurtarma Faktörü

0.58 1237 84 1.26 12.70 14.74 0.93

0.57 1598 90 1.38 8.69 17.36 1.76


İşte başka bir örnek

0.61 3175 123 1.33 21.04 25.82 1.48

0.60 4460 145 1.49 11.32 30.77 2.56

Tüm bakış açılarına göre ikinci hattın değerleri daha iyi!!! Ancak puan daha düşük

Çıkarabildiğim tek şey, birçok işlemde bir ceza olduğu. Ben olsam tam tersini yapardım.

Ve son bir nokta olarak. Bu konuyla ilgilenen tek bir kişi var gibi görünüyor. Ben.


Dahası var. Kodumda bir hata yaptım ve bekleyen siparişlerin temizlenmemesine neden oldu. Ayrıca 12 ay boyunca test süresi için yalnızca 5 sipariş verilmesiyle sonuçlandı. İyi bir kârla.

Bu, optimizasyon sonucunu gerçekten 100'ün üzerine çıkardı. Açıkça görülüyor ki "ortalama kazanç" değeri son derece yüksekti ve bu aşırı skorla sonuçlandı. Teknik olarak doğru ancak anlamsız

backtesting bağlamında. Bunun gibi uzun trendlerin temsil edici olması ne kadar olasıdır? Bu yüzden işlem sayısının bir şekilde denkleme dahil edilmesi gerektiğini düşündüm.

Biraz deneme yanılma ile kodu değiştirerek faydalı bulduğum sonuçlar üreten bir yönteme ulaştım.

değişiklikler:

// CSTS:
double tssf=real/teor;
if(tssf <= 0) return 0;

work = TesterStatistics( STAT_TRADES );
if( work <= 0) work = 1;
work = MathSqrt(work/4);

tssf = tssf * work;
if( tssf < 1 ) tssf = 0;
if(TesterStatistics(STAT_PROFIT) <= 0) tssf = 0;

return(tssf);

Orijinal yöntem muhtemelen çalışan bir sistemi değerlendirmek için iyidir, ancak temelde bir backtest çalışmasından parametreleri temel almak için işe yaramaz

Documentation on MQL5: Standard Constants, Enumerations and Structures / Trade Constants / Order Properties
  • www.mql5.com
Standard Constants, Enumerations and Structures / Trade Constants / Order Properties - Documentation on MQL5
 

İşte yine buradayım, bu evrendeki yalnız kurt :-)

Hesaplanan düz çizginin eğimini denkleme dahil etmeye çalışan Düzlük Özel Kriterini deniyorum. Bu haliyle size çok düşük bir kâr üzerinden çok yüksek bir derecelendirme verebilir. Sadece son kârı eklemek

gerçek eğimi denkleme ekleme girişiminde kodu aşağıda görüldüğü gibi değiştirdim.

Mükemmel bir çözüm değil ama görmek istediğim şeye daha yakın. Sonucu denge veya kar ile birlikte kullanmak bu kodla benim için iyi çalışıyor


//---------------------------------------------------------------------
// Optimizasyon sonucunun değerini alın:
//---------------------------------------------------------------------
double  TBalanceSlopeCriterion::GetCriterion()
  {
// Denge eğrisinin eğimini hesaplamaya çalışalım:
   double   current_slope=1000.0*this.balance_Ptr.CalcSlope();

// Eğer aşağı eğimli ise:
   if(current_slope<0.0)
     {
      return(-1.0);
     }

   double   temp=this.balance_Ptr.GetCurrentSKO();
   if(temp>0.0)
     {
      
   // return(this.scale/temp); //Bu sadece sonuçların düz bir çizgiden yukarıya doğru bakan bir çizgiye kadar herhangi bir şey olabilen düz bir çizgiye ne kadar iyi uyduğunu döndürür
      double temp2 = this.scale/temp;   // Ingvar ekledi
      
      return(temp2 * current_slope);    // Ingvar ekledi
      
     }

   return(0.0);
  }
 
ingvar_e:

İşte yine buradayım, bu evrendeki yalnız kurt :-)

Hesaplanan düz çizginin eğimini denkleme dahil etmeye çalışan Düzlük Özel Kriterini deniyorum. Bu haliyle size çok düşük bir kâr üzerinden çok yüksek bir derecelendirme verebilir. Sadece son kârı eklemek

gerçek eğimi denkleme ekleme girişiminde kodu aşağıda görüldüğü gibi değiştirdim.

Mükemmel bir çözüm değil ama görmek istediğim şeye daha yakın. Sonucu bakiye veya kâr ile birlikte kullanmak bu kodla benim için iyi çalışıyor


ingvar_e , o kadar da yalnız değilsin, bu alanı çok seviyorum ve evrimine şaşırdım, çünkü ben de bu düşünce çizgisine inanıyorum.

Örneğin, genetik algoritmalar için, iyi bir fitness algoritmasına sahip olmalısınız ve kesinlikle bu fitness ile uyumlu özel bir kriter oluşturmalısınız.

Denge eğrisinin eğimini hesaplamanın daha iyi bir yol olduğundan emin değilim, çünkü başka yollarımız da var, yine de bu fikirleri keşfetmek ve tartışmak için bana güvenin.