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,
.algodosyası 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) veyagrid. Parametre kombinasyonlarının sayısı azsa ve hepsini test etmek istiyorsanızgridseçin. Çok sayıda kombinasyon varsa ve yönlendirmeli arama daha hızlı olacaksageneticseç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.cbotsetdosyası 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ı ¶
Namealanı zorunludur ve bir cBot özelliğinin adıyla eşleşmelidir. Kullanılabilir özellik adlarını görmek içinctrader-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.Optimizedeğeritrueolduğunda parametre taramaya dahil edilir.falseolduğunda parametre sabit tutulur.- Tam sayı ve kayan noktalı sayı gibi aralık tabanlı parametrelerin taranabilmesi için
Min,MaxveStepalanları gerekir. - Numaralandırmalar ve semboller gibi ayrık değerli parametrelerin taranabilmesi için boş olmayan bir
Valuesdizisi gerekir. ParameterTypealanı isteğe bağlıdır. Bu alan yoksa tür,Nameile 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ı –
--optresbelirtilirse cTrader CLI, tüm denemelerin listelendiği.optresuzantı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-dirbelirtilirse cTrader CLI, her denemenin rapor dosyalarını bu dizine kaydeder. Her deneme için.html,.txt,.jsonve.cbotsetdosyalarını içeren bir alt klasör oluşturulur..cbotsetdosyası, 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.
--passes-diriçindeki denemelerden birine ait.cbotsetdosyası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.- Farklı zaman aralıklarını taradıysanız her denemenin
.cbotsetdosyasındakiChart.Perioddeğerini kontrol edin. Bu değer, seçtiğiniz zaman aralıklarından biriyle eşleşmelidir. - Yapılandırmayı ve tüm denemeleri birlikte incelemek için
.optresdosyası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. |