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
.algodan 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) ataugrid. Pilihgridjika jumlah kombinasi parameter sedikit dan Anda ingin menguji semuanya. Jika jumlahnya banyak dan pencarian terarah lebih cepat, pilihgenetic.--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.cbotsetdengan 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 ¶
Namewajib diisi dan harus sama dengan nama properti cBot. Jalankanctrader-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
Optimizediatur ketrue, parameter tersebut disertakan dalam pencarian. Jika diatur kefalse, nilainya dipertahankan tetap. - Parameter berupa rentang, seperti bilangan bulat dan bilangan floating-point presisi ganda, memerlukan
Min,Max, danStepjika nilainya akan ditelusuri. - Parameter dengan pilihan nilai, seperti enumerasi dan simbol, memerlukan array
Valuesyang tidak kosong jika nilainya akan ditelusuri. ParameterTypebersifat opsional. Jika tidak diisi, jenis parameter ditentukan dari metadata cBot dengan mencocokkanName.
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.optresyang 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.cbotsetmenunjukkan 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.
- Buka file
.cbotsetuntuk salah satu proses dalam--passes-dir. Pastikan parameter yang dioptimalkan berubah antarproses, sedangkan parameter yang ditetapkan tetap atau tidak dicantumkan tidak berubah. - Jika Anda menelusuri beberapa rentang waktu, periksa nilai
Chart.Perioddalam file.cbotsetsetiap proses. Nilainya harus sesuai dengan rentang waktu yang Anda pilih. - Buka file
.optresatau 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. |