Lewati ke isi

Mengoptimalkan cBot

Perintah optimize menelusuri berbagai nilai parameter cBot untuk menemukan kombinasi yang memberikan hasil terbaik berdasarkan kriteria pilihan Anda. Perintah ini menjalankan pencarian genetik atau pencarian grid yang sama seperti aplikasi desktop cTrader, tetapi melalui terminal dan file JSON yang berisi pengaturan parameter. Perintah ini merupakan padanan perintah backtesting yang khusus digunakan untuk optimasi.

Cakupan

Perintah optimize mengoptimalkan parameter cBot. Indikator dan plugin dikelola melalui perintah masing-masing (indicator calculate, indicator history, create, build) dan tidak termasuk dalam optimasi.

Prasyarat

  • cTrader CLI sudah diinstal dan Anda dapat login.
  • cBot telah diekspor sebagai file .algo dan dikompilasi untuk .NET 8.
  • Tersedia file parameter yang menentukan parameter mana yang akan ditelusuri.

Catatan

Perintah optimize hanya tersedia dalam edisi lokal cTrader CLI. Perintah ini tidak tersedia dalam versi internal atau cloud.

Perintah optimize

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

Argumen pertama adalah jalur ke file .algo. Opsi --params wajib disertakan. Rentang waktu dasar harus ditentukan melalui --timeframe atau file parameter. Jika tidak ditentukan melalui salah satu dari keduanya, perintah akan berhenti dengan pesan kesalahan.

Opsi optimasi

Hanya opsi --params yang wajib disertakan. Opsi tambahan yang umum digunakan dalam contoh di bawah ini adalah --timeframe, --method, --criteria, --optres, dan --passes-dir.

Ada beberapa opsi yang perlu dipahami sebelum menjalankan perintah:

  • --method – genetic (default) atau grid. Pilih grid jika jumlah kombinasi parameter sedikit dan Anda ingin menguji semuanya. Jika jumlahnya banyak dan pencarian terarah lebih cepat, pilih genetic.
  • --cores – jumlah worker paralel yang menjalankan tahap backtesting untuk setiap proses optimasi secara bersamaan. Setiap worker menggunakan satu thread CPU. Jadi, jumlah thread yang digunakan kira-kira sama dengan nilai yang Anda tentukan. Nilai yang diterima adalah bilangan bulat 1 atau lebih. Secara default, nilainya adalah setengah jumlah prosesor ditambah satu. Kurangi nilainya pada VPS kecil agar tersedia sumber daya untuk pekerjaan lain, atau tingkatkan pada mesin khusus untuk membagi pencarian genetik ke lebih banyak thread.
  • --auto-select-best – otomatis memilih proses dengan hasil terbaik saat optimasi selesai, sehingga file .cbotset dengan pengaturan terbaik siap digunakan tanpa langkah tambahan.

Catatan

Perintah optimize menggunakan --timeframe, bukan --period. Perintah run dan backtest tetap menggunakan --period. Jika --period diberikan ke optimize, opsi ini ditolak karena tidak dikenal.

File parameter

File yang ditentukan melalui --params berupa objek JSON yang berisi array parameters. Strukturnya sama seperti file yang diekspor dari antarmuka optimasi aplikasi desktop cTrader, sehingga file ekspor dari aplikasi desktop dapat langsung digunakan.

{
  "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"] }
  ]
}

Aturan field

  • Name wajib diisi dan harus sama dengan nama properti cBot. Jalankan ctrader-cli metadata <path-to-algo> untuk melihat nama properti yang tersedia. Nama yang tidak ditemukan dalam metadata cBot akan dicatat dalam log dan dilewati. Optimasi tetap berjalan menggunakan parameter lainnya.
  • Jika Optimize diatur ke true, parameter tersebut disertakan dalam pencarian. Jika diatur ke false, nilainya dipertahankan tetap.
  • Parameter berupa rentang, seperti bilangan bulat dan bilangan floating-point presisi ganda, memerlukan Min, Max, dan Step jika nilainya akan ditelusuri.
  • Parameter dengan pilihan nilai, seperti enumerasi dan simbol, memerlukan array Values yang tidak kosong jika nilainya akan ditelusuri.
  • ParameterType bersifat opsional. Jika tidak diisi, jenis parameter ditentukan dari metadata cBot dengan mencocokkan Name.

Menetapkan satu nilai tetap untuk parameter

Untuk mempertahankan nilai parameter, sertakan parameter tersebut dengan Optimize: false dan Value yang sesuai:

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

Peringatan

File parameter menjadi acuan utama. Sebelum menerapkan file tersebut, cTrader CLI mengatur ulang setiap parameter sehingga hanya parameter yang tercantum dengan Optimize: true yang akan ditelusuri. Parameter yang tidak tercantum sama sekali dalam file akan tetap menggunakan nilai default, meskipun secara default parameter tersebut diatur untuk dioptimalkan dalam cBot. Sertakan parameter dengan Optimize: true agar masuk dalam optimasi.

Mengoptimalkan rentang waktu utama

Perintah optimize dapat menelusuri berbagai rentang waktu utama selain parameter cBot. Rentang waktu utama dapat berasal dari dua sumber, dengan --timeframe memiliki prioritas.

  • --timeframe <tf> – satu nilai menetapkan rentang waktu utama secara tetap; beberapa nilai yang dipisahkan koma akan ditelusuri dalam optimasi.
  • File parameter – file yang diekspor dari aplikasi desktop sudah mencakup parameter rentang waktu sintetis untuk keperluan ini.

Rentang waktu dasar data adalah nilai tunggal yang ditentukan, nilai yang ditetapkan tetap, atau rentang waktu terkecil dari nilai yang ditelusuri.

Kompatibilitas rentang waktu dan mode data

Nilai rentang waktu utama yang ditelusuri atau ditetapkan tetap harus dapat dimuat dengan --data-mode yang dipilih.

Mode data Nilai rentang waktu utama yang valid
open Rentang waktu dengan jenis yang sama dan merupakan kelipatan bulat tepat dari rentang waktu terkecil yang dipilih.
m1 atau m1-csv Semua rentang waktu berbasis waktu; jenis yang tidak berbasis waktu, seperti Renko dan range bar, ditolak.
ticks Semua rentang waktu kecuali rentang waktu kustom.

Catatan

Kombinasi yang tidak valid menghentikan perintah sebelum data dimuat dan menampilkan nilai penyebab kegagalan.

Kriteria

Setiap entri --criteria memasangkan indeks kinerja dengan arah max atau min, misalnya NetProfit:max. Tabel berikut mencantumkan semua nama indeks yang didukung beserta hal yang diukurnya.

Indeks Yang diukur
NetProfit Laba atau rugi akhir dalam mata uang akun
ProfitFactor Laba kotor dibagi rugi kotor
MaxEquityDrawdownPercentages Penurunan persentase terbesar pada ekuitas dari puncak ke titik terendah
MaxBalanceDrawdownPercentages Penurunan persentase terbesar pada saldo dari puncak ke titik terendah
MaxEquityDrawdown Penurunan absolut terbesar pada ekuitas, dalam mata uang akun
MaxBalanceDrawdown Penurunan absolut terbesar pada saldo, dalam mata uang akun
WinningTrades Jumlah transaksi yang ditutup dengan laba
LosingTrades Jumlah transaksi yang ditutup dengan rugi
TotalTrades Jumlah total transaksi yang ditutup
AverageTrade Laba bersih dibagi jumlah transaksi yang ditutup

Untuk memaksimalkan laba bersih sekaligus meminimalkan penurunan ekuitas maksimum:

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

Untuk membuat pemeringkatan kustom, gunakan --fitness sebagai gantinya. Metode GetFitness milik cBot mengembalikan skor, lalu optimasi mempertahankan proses dengan nilai pengembalian tertinggi. --fitness dan --criteria tidak dapat digunakan bersamaan. Tentukan salah satu saja.

Opsi konteks pengujian

optimize menggunakan kembali opsi konteks pengujian dari backtest. Tabel berikut mencantumkan opsi yang diterima CLI saat ini, fungsi masing-masing, dan perbedaan kedua perintah jika relevan.

Opsi Tujuan Ketersediaan
--account Nomor akun trading. Keduanya
--symbol Simbol yang akan diuji. Keduanya
--start Tanggal dan waktu mulai periode pengujian. Keduanya
--end Tanggal dan waktu berakhirnya periode pengujian. Keduanya
--balance Saldo awal untuk simulasi. Keduanya
--data-mode open, m1, m1-csv, tick-csv, atau ticks. Keduanya
--data-file Jalur ke file CSV untuk m1-csv atau tick-csv. Keduanya
--commission Jumlah komisi per transaksi. Keduanya
--spread Spread dalam pip. Keduanya
--precise-conversion Menggunakan konversi yang akurat untuk pasangan mata uang silang. Keduanya
--timeframe Rentang waktu dasar untuk penelusuran parameter. Hanya optimize
--period Rentang waktu dasar untuk menjalankan pengujian. Hanya backtest
--report Jalur untuk menyimpan laporan HTML. Hanya backtest
--report-json Jalur untuk menyimpan laporan JSON. Hanya backtest

Catatan

Opsi laporan tidak berlaku untuk optimize. Sebagai gantinya, simpan hasil menggunakan --optres dan --passes-dir.

Contoh

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

Keluaran

Selama dijalankan, optimize terus menampilkan progres di terminal:

Progress | Loading EURUSD, h1 | 42.00 % |
Progress | Optimization | 37.50 % |
  • Ringkasan – setelah selesai, cTrader CLI menampilkan ringkasan di terminal yang mencakup jumlah total proses optimasi, waktu yang berlalu, dan proses terbaik beserta statistiknya.
  • File hasil – jika Anda menentukan --optres, cTrader CLI menyimpan seluruh hasil sebagai file JSON .optres yang mencantumkan setiap proses. Format file ini sama dengan hasil optimasi aplikasi desktop, sehingga dapat dibuka atau diimpor melalui antarmuka optimasi aplikasi desktop.
  • Laporan per proses – jika Anda menentukan --passes-dir, cTrader CLI menyimpan file laporan setiap proses optimasi di direktori tersebut. Setiap proses memiliki subfolder berisi file .html, .txt, .json, dan .cbotset. File .cbotset menunjukkan nilai parameter yang tepat untuk proses tersebut.

Jika --optres maupun --passes-dir tidak ditentukan, optimasi selesai dan hanya ringkasannya yang ditampilkan.

Catatan

Perintah optimize tidak menghasilkan laporan HTML gabungan. Namun, file HTML untuk setiap proses tetap disimpan dalam --passes-dir jika opsi tersebut ditentukan.

Memastikan optimasi diterapkan dengan benar

Setelah selesai, pastikan penelusuran parameter berjalan sesuai rencana.

  1. Buka file .cbotset untuk salah satu proses dalam --passes-dir. Pastikan parameter yang dioptimalkan berubah antarproses, sedangkan parameter yang ditetapkan tetap atau tidak dicantumkan tidak berubah.
  2. Jika Anda menelusuri beberapa rentang waktu, periksa nilai Chart.Period dalam file .cbotset setiap proses. Nilainya harus sesuai dengan rentang waktu yang Anda pilih.
  3. Buka file .optres atau impor ke antarmuka optimasi aplikasi desktop untuk meninjau konfigurasi dan seluruh proses secara bersamaan.

Validasi dan kesalahan umum

Setiap baris pada tabel di bawah ini menunjukkan gejala, kemungkinan penyebab, kode keluar yang dikembalikan cTrader CLI saat terjadi kegagalan, dan langkah penanganannya. cTrader CLI mengembalikan kode keluar bukan nol untuk setiap kegagalan validasi. Dengan demikian, skrip dapat berhenti pada kesalahan pertama tanpa harus mengurai pesannya.

Kode keluar dalam tabel adalah nilai yang dikembalikan cTrader CLI ke shell. Angka kode spesifik tidak dipublikasikan. Karena itu, non-zero berarti perintah gagal tanpa kode tersendiri, sedangkan unknown berarti kegagalan internal sehingga langkah selanjutnya adalah beralih ke build lain atau menghubungi dukungan.

Gejala Kemungkinan penyebab Kode keluar Langkah selanjutnya
Kesalahan validasi: --params tidak ada File parameter JSON tidak diberikan. bukan nol Tentukan --params=<path>.
Kesalahan validasi: rentang waktu tidak dikenal Nilai --timeframe bukan pengenal yang dikenal. bukan nol Jalankan ctrader-cli periods dan gunakan salah satu pengenal yang tercantum.
Kesalahan validasi: rentang waktu utama tidak valid Nilai rentang waktu tidak dapat dimuat menggunakan --data-mode yang dipilih. bukan nol Pilih rentang waktu atau --data-mode lain.
Kesalahan validasi: pasangan kriteria tidak sesuai format Nama indeks salah, atau arah bukan max maupun min. bukan nol Gunakan salah satu nama indeks yang didukung dengan max atau min.
Kesalahan validasi: indeks kriteria tidak dikenal Nama yang diberikan pada --criteria tidak ada dalam daftar indeks yang didukung. bukan nol Gunakan salah satu nama indeks yang tertera pada bagian Criteria.
Kesalahan validasi: nilai --method tidak dikenal Nilai --method bukan genetic atau grid. bukan nol Gunakan --method=genetic (default) atau --method=grid.
--fitness dan --criteria diberikan bersamaan Kedua opsi tersebut tidak dapat digunakan bersamaan. bukan nol Tentukan --fitness atau --criteria, bukan keduanya.
optimize tidak tersedia CLI yang digunakan adalah edisi internal atau cloud. tidak diketahui Beralihlah ke edisi lokal untuk pengguna.