Ana içeriğe geç

Optimizasyon için özel uygunluk fonksiyonları

cBot optimizasyonu, bir cBot'u canlı işlem için dağıtmadan önce mümkün olan en iyi parametre değerlerini belirleme sürecidir. cTrader'da, kârları maksimize etme veya net varlık düşüşünü minimize etme gibi geniş bir yelpazedeki yerleşik kriterlere göre cBot'ları optimize edebilirsiniz. Ancak, bir cBot'a özel performans kriterleri uygulamak isterseniz faydalı olabilecek kendi optimizasyon uygunluk fonksiyonlarınızı da yazabilirsiniz. Bu makalede ve ilgili videosunda, özel uygunluk fonksiyonlarının nasıl çalıştığını tartışıyoruz.

Bu makalenin, yerleşik kriterler kullanılarak yapılan cBot optimizasyonu sürecini kapsamadığını unutmayın.

Özel uygunluk fonksiyonlarını tanımla

Özel bir uygunluk fonksiyonu, yalnızca GetFitness() metodunun bir geçersiz kılınmasıdır.

1
2
3
4
protected override double GetFitness(GetFitnessArgs args)
{

}

Geçersiz kılma, özel bir uygunluk fonksiyonu olarak sayılması için GetFitness args türünde tek bir argümanı kabul etmelidir.

Özel bir uygunluk fonksiyonu yaz

GetFitness() metodu bir double döndürmesi gerektiğinden, metodun gövdesi bu türde bir değerle sonuçlanan bir hesaplama içermelidir.

Örneğin, bir cBot tarafından yapılan kazançlı işlemlerin toplam sayısının karesini alan ve ardından bu değeri zarar eden işlemlerin toplam değerine bölen basit bir özel uygunluk fonksiyonu yazabiliriz. Bu şekilde, kazançlı işlemlere daha fazla ağırlık verir ve bir anlamda optimize edilmiş cBot'un bazı riskli hamleler yapmasına izin veririz.

Uygunluk fonksiyonumuz şöyle görünürdü.

1
2
3
4
protected override double GetFitness(GetFitnessArgs args)
{
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}

Bu noktada, istediğimiz herhangi bir cBot'a geçersiz kılmayı ekleyebilir, ardından kaydedip derleyebiliriz.

Optimizasyonda özel bir uygunluk fonksiyonu kullan

Fonksiyonumuzu ekledikten sonra, seçtiğimiz cBot'un bir örneğini eklememiz ve ardından Geriye Dönük Test sekmesine geçmemiz gerekiyor. Özel fonksiyonumuzu kullanarak optimizasyon yapmak için yapmamız gereken tek şey Optimizasyon kriterleri bölümünü açmak ve Özel seçeneğini seçmektir. Ardından, optimizasyonu her zamanki gibi çalıştırabiliriz.

Optimizasyon sırasında, cBot'un kazançlı işlemlerin sayısının karesi ile zarar eden işlemlerin sayısı arasındaki oranı maksimize ettiği geçişlere daha yüksek uygunluk puanları atanacaktır.

Özel uygunluk fonksiyonunu değiştir

Ayrıca özel fonksiyonumuza geri dönüp aşağıdaki gibi değiştirebiliriz.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
protected override double GetFitness(GetFitnessArgs args)
{
    if (args.TotalTrades > 20)
    {
        return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
    }
    else
    {
        return double.MinValue;
    }
}

Bu fonksiyon hala önceki algoritmayı takip eder, ancak özel hesaplamayı yalnızca bir cBot tarafından 20'den fazla işlem yapıldıysa uygular. Diğer tüm durumlarda, fonksiyon mümkün olan en düşük double değerini döndürür. Teorik olarak, bu, istatistiksel sapma olasılığını azaltarak sonuçları iyileştirmelidir.

Botu yeniden derler ve optimizasyonu tekrar çalıştırırsak, cBot tarafından yapılan toplam işlem sayısının düşüklüğü nedeniyle birkaç geçişin çok düşük bir uygunluk puanı aldığını görmeliyiz.

Son olarak, aktif işlemi teşvik ederken net varlık düşüşünü minimize etmek istiyoruz.

1
2
3
4
5
6
7
8
if (args.TotalTrades > 20 && args.MaxEquityDrawdownPercentages < 50)
{
    return Math.Pow(args.WinningTrades, 2) / args.LosingTrades;
}
else
{
    return double.MinValue;
}

Optimizasyonu tekrar çalıştırırsak, işlem stratejimiz göz önüne alındığında mümkün olan en iyi geçişleri görmeliyiz.

Özel uygunluk fonksiyonları, işlem yapmaya yönelik benzersiz yaklaşımınıza uygun mümkün olan en iyi parametre değerlerini belirlemek için mükemmel bir araç sağlar.