Ana içeriğe geç

Bir cBot'u optimize etme

optimize komutu, seçtiğiniz ölçütlere göre en iyi sonuçları veren kombinasyonları bulmak için bir cBot'un farklı parametre değerlerini tarar. Bu komut, cTrader masaüstü uygulamasındaki genetik arama veya ızgara aramasını terminal üzerinden, parametre ayarlarını içeren bir JSON dosyası kullanarak gerçekleştirir. Optimizasyon için geriye dönük test komutunun karşılığıdır.

Kapsam

optimize komutu cBot parametrelerini optimize eder. Göstergelerin ve eklentilerin kendi komutları vardır (indicator calculate, indicator history, create, build). Bunlar optimizasyona dahil değildir.

Ön koşullar

  • cTrader CLI yüklenmiş olmalı ve oturum açabiliyor olmalısınız.
  • cBot, .algo dosyası olarak dışa aktarılmış ve .NET 8 için derlenmiş olmalıdır.
  • Hangi parametrelerin değiştirileceğini belirleyen bir parametre dosyası.

Not

optimize komutu yalnızca cTrader CLI'ın yerel sürümünde kullanılabilir. Dahili veya bulut sürümlerinde bulunmaz.

optimize komutu

ctrader-cli optimize <path-to-algo-file> --params=<path-to-params-file> [options]

İlk bağımsız değişken, .algo dosyasının yoludur. --params seçeneği zorunludur. Temel zaman aralığı --timeframe ile veya parametre dosyasında tanımlanmalıdır. Hiçbirinde tanımlanmamışsa komut hata vererek durur.

Optimizasyon seçenekleri

Zorunlu olan tek seçenek --params seçeneğidir. Aşağıdaki örneklerde kullanılan yaygın isteğe bağlı seçenekler --timeframe, --method, --criteria, --optres ve --passes-dir seçenekleridir.

Başlamadan önce bazı seçenekleri bilmenizde fayda var:

  • --method – genetic (varsayılan) veya grid. Parametre kombinasyonlarının sayısı azsa ve hepsini test etmek istiyorsanız grid seçin. Çok sayıda kombinasyon varsa ve yönlendirmeli arama daha hızlı olacaksa genetic seçin.
  • --cores – her optimizasyon denemesinin geriye dönük testini çalıştıran paralel işçi süreçlerinin sayısı. Her işçi süreci bir CPU iş parçacığı kullanır. Bu nedenle optimizasyon yaklaşık olarak belirtilen değer kadar iş parçacığı kullanır. 1 ve üzerindeki tam sayılar kabul edilir. Varsayılan değer, işlemci sayısının yarısına bir eklenerek hesaplanır. Küçük bir VPS'de diğer görevlere kaynak bırakmak için bu değeri azaltın. Ayrılmış bir makinede ise genetik aramayı daha fazla iş parçacığına dağıtmak için artırabilirsiniz.
  • --auto-select-best – optimizasyon sonunda en iyi denemeyi otomatik olarak seçer. Böylece en yüksek performansı sağlayan parametreleri içeren .cbotset dosyası başka bir işlem yapmadan hazır olur.

Not

optimize komutu --period yerine --timeframe kullanır. run ve backtest komutları ise --period kullanmaya devam eder. optimize komutuna --period verilirse bilinmeyen seçenek olarak reddedilir.

Parametre dosyası

--params ile belirtilen dosya, parameters dizisini içeren bir JSON nesnesidir. Bu dosyanın yapısı, cTrader masaüstü uygulamasının optimizasyon arayüzünden dışa aktarılan dosyayla aynıdır. Dolayısıyla masaüstü uygulamasından dışa aktardığınız dosyayı doğrudan kullanabilirsiniz.

{
  "parameters": [
    { "Name": "SlowPeriods",  "Optimize": true, "Min": "5",  "Max": "50", "Step": "5" },
    { "Name": "StopLossPips", "Optimize": true, "Min": "10", "Max": "60", "Step": "5" },
    { "Name": "MAType",       "Optimize": true, "Values": ["0", "1", "2"] },
    { "Name": "MySymbol",     "Optimize": true, "Values": ["EURUSD", "GBPUSD"] }
  ]
}

Alan kuralları

  • Name alanı zorunludur ve bir cBot özelliğinin adıyla eşleşmelidir. Kullanılabilir özellik adlarını görmek için ctrader-cli metadata <path-to-algo> komutunu çalıştırın. Bir ad cBot meta verilerinde bulunmazsa bu durum günlüğe kaydedilir ve ilgili parametre atlanır. Optimizasyon diğer parametrelerle devam eder.
  • Optimize değeri true olduğunda parametre taramaya dahil edilir. false olduğunda parametre sabit tutulur.
  • Tam sayı ve kayan noktalı sayı gibi aralık tabanlı parametrelerin taranabilmesi için Min, Max ve Step alanları gerekir.
  • Numaralandırmalar ve semboller gibi ayrık değerli parametrelerin taranabilmesi için boş olmayan bir Values dizisi gerekir.
  • ParameterType alanı isteğe bağlıdır. Bu alan yoksa tür, Name ile eşleştirilen cBot meta verilerinden belirlenir.

Bir parametreyi tek bir değere sabitleme

Bir parametrenin değerini sabit tutmak için parametreyi Optimize: false ve ilgili Value değeriyle ekleyin:

{ "Name": "MAType",      "Value": "1", "Optimize": false },
{ "Name": "FastPeriods", "Value": "5", "Optimize": false }

Uyarı

Parametre dosyası esas alınır. cTrader CLI dosyayı uygulamadan önce tüm parametreleri sıfırlar. Bu nedenle yalnızca Optimize: true olarak belirtilen parametreler taranır. Dosyada hiç yer almayan parametre, cBot'ta varsayılan olarak optimize edilecek şekilde ayarlanmış olsa bile varsayılan değerini korur. Bir parametreyi optimizasyona dahil etmek için Optimize: true ile ekleyin.

Ana zaman aralığını optimize etme

optimize komutu, cBot parametrelerinin yanı sıra farklı ana zaman aralıklarını da tarayabilir. Ana zaman aralığı iki kaynaktan belirlenebilir. Bunlardan --timeframe önceliklidir.

  • --timeframe <tf> – tek bir değer ana zaman aralığını sabitler; virgülle ayrılmış birden fazla değer ise farklı zaman aralıklarının taranmasını sağlar.
  • Parametre dosyası – masaüstü uygulamasından dışa aktarılan dosyada bu amaçla kullanılan özel bir yapay zaman aralığı parametresi zaten bulunur.

Veriler için temel zaman aralığı, belirtilen tek değere, sabit değere veya taranan zaman aralıklarından en küçüğüne karşılık gelir.

Zaman aralıkları ile veri modlarının uyumluluğu

Taranan veya sabitlenen ana zaman aralıkları seçilen --data-mode ile uyumlu olmalıdır.

Veri modu Geçerli ana zaman aralıkları
open Aynı türde olan ve seçilen en küçük zaman aralığının tam katı olan zaman aralıkları.
m1 veya m1-csv Zamana dayalı tüm zaman aralıkları. Renko veya aralık çubukları gibi zamana dayalı olmayan türler reddedilir.
ticks Özel olmayan tüm zaman aralıkları.

Not

Geçersiz bir kombinasyon, veriler yüklenmeden önce komutun durmasına neden olur ve hataya yol açan değerler gösterilir.

Ölçütler

--criteria içindeki her öğe, bir performans göstergesini max veya min yönüyle eşleştirir. Örneğin NetProfit:max. Aşağıdaki tabloda desteklenen tüm performans ölçütlerinin adları ve neyi ölçtükleri açıklanır.

Performans ölçütü Ölçtüğü değer
NetProfit Hesap para birimi cinsinden nihai net kâr veya zarar
ProfitFactor Brüt kârın brüt zarara bölümü
MaxEquityDrawdownPercentages Net varlığın tepe noktasından dip noktasına en büyük yüzdesel düşüşü
MaxBalanceDrawdownPercentages Bakiyenin tepe noktasından dip noktasına en büyük yüzdesel düşüşü
MaxEquityDrawdown Hesap para birimi cinsinden net varlıktaki en büyük mutlak düşüş
MaxBalanceDrawdown Hesap para birimi cinsinden bakiyedeki en büyük mutlak düşüş
WinningTrades Kârla kapatılan işlem sayısı
LosingTrades Zararla kapatılan işlem sayısı
TotalTrades Toplam kapatılan işlem sayısı
AverageTrade Net kârın kapatılan işlem sayısına bölümü

Net kârı en üst düzeye çıkarırken net varlıktaki en büyük düşüşü en aza indirmek için:

--criteria="NetProfit:max,MaxEquityDrawdownPercentages:min"

Kendi sıralama yönteminizi tanımlamak istiyorsanız bunun yerine --fitness kullanın. cBot'un GetFitness yöntemi bir puan döndürür. Optimizasyon en yüksek puana sahip denemeleri tutar. --fitness ve --criteria birlikte kullanılamaz. Yalnızca birini belirtin.

Test ortamı seçenekleri

optimize, backtest komutunun test ortamı seçeneklerini kullanır. Aşağıdaki tabloda mevcut CLI sürümünün kabul ettiği seçenekler, bunların işlevleri ve gerektiğinde iki komut arasındaki farklar gösterilir.

Seçenek İşlev Kullanılabilirlik
--account İşlem hesabı numarası. Her ikisinde
--symbol Test edilecek sembol. Her ikisinde
--start Test döneminin başlangıç tarihi ve saati. Her ikisinde
--end Test döneminin bitiş tarihi ve saati. Her ikisinde
--balance Simülasyonun başlangıç bakiyesi. Her ikisinde
--data-mode open, m1, m1-csv, tick-csv veya ticks. Her ikisinde
--data-file m1-csv veya tick-csv için CSV dosyasının yolu. Her ikisinde
--commission İşlem başına komisyon tutarı. Her ikisinde
--spread Pip cinsinden spread. Her ikisinde
--precise-conversion Farklı döviz çiftleri arasında hassas dönüştürme kullanma. Her ikisinde
--timeframe Parametre taramasının temel zaman aralığı. Yalnızca optimize
--period Çalıştırma için temel zaman aralığı. Yalnızca backtest
--report HTML raporunun kaydedileceği yol. Yalnızca backtest
--report-json JSON raporunun kaydedileceği yol. Yalnızca backtest

Not

Rapor seçenekleri optimize için geçerli değildir. Sonuçları kaydetmek için bunun yerine --optres ve --passes-dir kullanın.

Örnek

ctrader-cli optimize "C:/test/Sample Trend cBot.algo" \
  --params=C:/test/optimize-params.json \
  --account=1234567 --symbol=EURUSD --timeframe=h1,h2 \
  --start="01/01/2025" --end="01/02/2025" \
  --balance=100000 --data-mode=open --commission=30 --spread=2 \
  --method=grid \
  --criteria="NetProfit:max,MaxEquityDrawdownPercentages:min" \
  --auto-select-best \
  --optres=C:/test/result.optres \
  --passes-dir=C:/test/result-passes \
  --ctid=letstrade --pwd-file=C:/test/password.pwd

Çıktı

optimize, çalışırken ilerleme durumunu terminalde sürekli gösterir:

Progress | Loading EURUSD, h1 | 42.00 % |
Progress | Optimization | 37.50 % |
  • Özet – optimizasyon tamamlandığında cTrader CLI, toplam deneme sayısını, geçen süreyi ve en iyi denemenin istatistiklerini içeren bir özeti terminalde gösterir.
  • Sonuç dosyası – --optres belirtilirse cTrader CLI, tüm denemelerin listelendiği .optres uzantılı bir JSON dosyasına sonuçların tamamını yazar. Bu dosya, masaüstü uygulamasının optimizasyon sonuçlarıyla aynı biçimdedir. Dolayısıyla dosyayı masaüstü uygulamasının optimizasyon arayüzünde açabilir veya içe aktarabilirsiniz.
  • Deneme raporları – --passes-dir belirtilirse cTrader CLI, her denemenin rapor dosyalarını bu dizine kaydeder. Her deneme için .html, .txt, .json ve .cbotset dosyalarını içeren bir alt klasör oluşturulur. .cbotset dosyası, ilgili denemede kullanılan parametrelerin tam değerlerini gösterir.

--optres ve --passes-dir seçeneklerinden hiçbiri belirtilmezse optimizasyon tamamlandığında yalnızca özet gösterilir.

Not

optimize komutu genel bir HTML raporu oluşturmaz. Ancak bu seçenek belirtilirse her denemenin HTML dosyaları --passes-dir içinde kaydedilir.

Optimizasyonun doğru uygulandığını doğrulama

Çalıştırma sonrasında parametrelerin planladığınız şekilde tarandığını kontrol edin.

  1. --passes-dir içindeki denemelerden birine ait .cbotset dosyasını açın. Optimize edilen parametrelerin denemeler arasında değiştiğini, sabitlenen veya dosyada yer almayan parametrelerin ise değişmediğini doğrulayın.
  2. Farklı zaman aralıklarını taradıysanız her denemenin .cbotset dosyasındaki Chart.Period değerini kontrol edin. Bu değer, seçtiğiniz zaman aralıklarından biriyle eşleşmelidir.
  3. Yapılandırmayı ve tüm denemeleri birlikte incelemek için .optres dosyasını açın veya masaüstü uygulamasının optimizasyon arayüzüne içe aktarın.

Doğrulama ve yaygın hatalar

Aşağıdaki tablonun her satırında bir hata belirtisi, olası nedeni, cTrader CLI'ın hata durumunda döndürdüğü çıkış kodu ve yapılması gereken işlem bulunur. cTrader CLI tüm doğrulama hatalarında sıfırdan farklı bir çıkış kodu döndürür. Böylece betik, hata mesajını yorumlamadan ilk hatada durabilir.

Tablodaki çıkış kodu, cTrader CLI'ın kabuğa döndürdüğü değerdir. Kesin sayısal çıkış kodları yayımlanmamıştır. Bu nedenle non-zero, kendine özgü bir kod belirtilmeyen hatayı; unknown ise sürüm değiştirmeyi veya destek ekibiyle iletişime geçmeyi gerektiren dahili hatayı ifade eder.

Belirti Olası neden Çıkış kodu Yapılması gereken
Doğrulama hatası: --params eksik JSON parametre dosyası belirtilmedi. sıfırdan farklı --params=<path> belirtin.
Doğrulama hatası: bilinmeyen zaman aralığı --timeframe değeri tanınan hiçbir tanımlayıcıyla eşleşmiyor. sıfırdan farklı ctrader-cli periods komutunu çalıştırın ve listelenen tanımlayıcılardan birini kullanın.
Doğrulama hatası: geçersiz ana zaman aralığı Bir zaman aralığı seçilen --data-mode ile uyumlu değil. sıfırdan farklı Başka bir zaman aralığı veya --data-mode seçin.
Doğrulama hatası: hatalı biçimlendirilmiş ölçüt çiftleri Bir performans ölçütünün adı yanlış veya yönü max ya da min değil. sıfırdan farklı Desteklenen performans ölçütü adlarından birini max veya min ile kullanın.
Doğrulama hatası: bilinmeyen ölçüt --criteria içinde belirtilen ad desteklenen performans ölçütleri listesinde bulunmuyor. sıfırdan farklı Criteria bölümünde listelenen ölçüt adlarından birini kullanın.
Doğrulama hatası: --method için bilinmeyen değer --method değeri genetic veya grid değil. sıfırdan farklı --method=genetic (varsayılan) veya --method=grid kullanın.
--fitness ve --criteria birlikte belirtilmiş Bu iki seçenek birlikte kullanılamaz. sıfırdan farklı --fitness veya --criteria belirtin; ikisini birden belirtmeyin.
optimize kullanılamıyor CLI'ın dahili veya bulut sürümü kullanılıyor. bilinmiyor Kullanıcılara sunulan yerel sürüme geçin.