Mengoptimumkan cBot¶
Perintah optimize mencari pelbagai nilai parameter cBot untuk menemukan gabungan yang mendapat skor tinggi berdasarkan kriteria pilihan anda. Perintah ini menjalankan carian genetik atau carian grid yang sama seperti dalam aplikasi desktop cTrader, tetapi dikawal melalui terminal menggunakan fail JSON yang mengandungi tetapan parameter. Perintah ini ialah versi pengoptimuman bagi perintah ujian belakang.
Skop ¶
Perintah optimize mengoptimumkan parameter cBot. Indikator dan plugin diurus melalui perintah masing-masing (indicator calculate, indicator history, create, build) dan tidak termasuk dalam pengoptimuman.
Prasyarat ¶
- cTrader CLI telah dipasang dan anda boleh log masuk.
- cBot telah dieksport sebagai fail
.algodan dibina untuk .NET 8. - Sediakan fail parameter yang menentukan parameter yang akan diterokai.
Nota
Perintah optimize hanya tersedia dalam edisi cTrader CLI yang dijalankan secara setempat. Perintah ini tidak tersedia dalam binaan dalaman atau awan.
Perintah optimize ¶
ctrader-cli optimize <path-to-algo-file> --params=<path-to-params-file> [options]
Argumen pertama ialah laluan ke fail .algo. Pilihan --params wajib dinyatakan. Tempoh masa asas mesti ditentukan melalui --timeframe atau fail parameter. Jika tiada satu pun yang menentukannya, perintah akan berhenti dengan ralat.
Pilihan pengoptimuman ¶
Hanya --params diperlukan. Pilihan tambahan yang lazim digunakan dalam contoh di bawah ialah --timeframe, --method, --criteria, --optres dan --passes-dir.
Beberapa pilihan berikut wajar diketahui sebelum anda menjalankan perintah:
--method–genetic(lalai) ataugrid. Pilihgridapabila gabungan parameter sedikit dan anda mahu menguji semuanya. Pilihgeneticapabila gabungannya banyak dan carian berpandu lebih pantas.--cores– bilangan proses pekerja selari yang menjalankan bahagian ujian belakang bagi setiap pas pengoptimuman. Setiap proses pekerja menggunakan satu utas CPU, jadi bilangan utas yang digunakan adalah lebih kurang sama dengan nilai yang anda tetapkan. Nilai yang diterima ialah nombor bulat 1 atau lebih. Nilai lalainya ialah separuh daripada bilangan pemproses ditambah satu. Kurangkan nilai ini pada VPS kecil supaya sumber masih tersedia untuk tugas lain, atau tingkatkannya pada mesin khusus untuk mengagihkan carian genetik merentas lebih banyak utas.--auto-select-best– memilih pas terbaik secara automatik apabila pengoptimuman selesai, supaya fail.cbotsetdengan tetapan paling berkesan sedia digunakan tanpa langkah tambahan.
Nota
Perintah optimize menggunakan --timeframe, bukannya --period. Perintah run dan backtest masih menggunakan --period. Jika --period diberikan kepada optimize, pilihan itu ditolak sebagai pilihan yang tidak dikenali.
Fail parameter ¶
Fail yang ditentukan melalui --params ialah objek JSON yang mengandungi tatasusunan parameters. Strukturnya sama dengan fail yang dieksport melalui antara muka pengoptimuman aplikasi desktop cTrader. Oleh itu, fail yang dieksport dari aplikasi desktop boleh digunakan terus.
{
"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"] }
]
}
Peraturan medan ¶
- Medan
Namewajib diisi dan mesti sepadan dengan nama sifat cBot. Jalankanctrader-cli metadata <path-to-algo>untuk melihat nama sifat yang tersedia. Jika sesuatu nama tidak ditemukan dalam metadata cBot, perkara itu direkodkan dalam log dan parameternya dilangkau. Pengoptimuman diteruskan menggunakan parameter yang selebihnya. - Apabila
Optimizeditetapkan kepadatrue, parameter itu disertakan dalam carian. Apabila ditetapkan kepadafalse, parameter itu dikekalkan pada nilai tetap. - Parameter berbentuk julat, seperti integer dan nombor titik terapung ketepatan ganda dua, memerlukan
Min,MaxdanStepjika nilainya hendak diterokai. - Parameter yang menggunakan nilai diskret, seperti enumerasi dan simbol, memerlukan tatasusunan
Valuesyang tidak kosong jika nilainya hendak diterokai. - Medan
ParameterTypeadalah pilihan. Jika medan ini ditinggalkan, jenis parameter ditentukan daripada metadata cBot dengan memadankanName.
Menetapkan satu nilai tetap bagi parameter ¶
Untuk mengekalkan sesuatu parameter pada nilai tetap, sertakannya bersama Optimize: false dan Value yang sepadan:
{ "Name": "MAType", "Value": "1", "Optimize": false },
{ "Name": "FastPeriods", "Value": "5", "Optimize": false }
Amaran
Tetapan dalam fail parameter menjadi rujukan utama. Sebelum menggunakan fail itu, cTrader CLI menetapkan semula semua parameter supaya hanya parameter yang anda senaraikan dengan Optimize: true akan diterokai. Parameter yang tidak disenaraikan langsung dalam fail akan kekal pada nilai lalainya, walaupun cBot menetapkan parameter itu untuk dioptimumkan secara lalai. Senaraikan parameter dengan Optimize: true untuk menyertakannya dalam pengoptimuman.
Mengoptimumkan tempoh masa utama ¶
Perintah optimize boleh meneroka pelbagai tempoh masa utama selain parameter cBot. Tempoh masa utama boleh diperoleh daripada dua sumber, dengan --timeframe diberi keutamaan.
--timeframe <tf>– satu nilai menetapkan tempoh masa utama sebagai nilai tetap, manakala beberapa nilai yang dipisahkan dengan koma membolehkan pelbagai tempoh masa diterokai.- Fail parameter – fail yang dieksport daripada aplikasi desktop sudah mengandungi parameter tempoh masa sintetik untuk tujuan ini.
Tempoh masa asas bagi data ialah nilai tunggal yang ditentukan, nilai tetap atau tempoh masa paling singkat antara nilai yang diterokai.
Keserasian tempoh masa dan mod data ¶
Nilai tempoh masa utama yang diterokai atau ditetapkan mesti boleh dimuatkan di bawah --data-mode yang dipilih.
| Mod data | Nilai tempoh masa utama yang sah |
|---|---|
open | Tempoh masa daripada jenis yang sama dan merupakan gandaan tepat tanpa baki bagi tempoh masa terpendek yang dipilih. |
m1 atau m1-csv | Mana-mana tempoh masa berasaskan masa; jenis yang bukan berasaskan masa, seperti Renko dan bar julat, akan ditolak. |
ticks | Mana-mana tempoh masa selain tempoh masa tersuai. |
Nota
Gabungan yang tidak sah menghentikan perintah sebelum data dimuatkan dan menyenaraikan nilai yang menyebabkan kegagalan.
Kriteria ¶
Setiap entri dalam --criteria memasangkan indeks prestasi dengan arah max atau min, contohnya NetProfit:max. Jadual di bawah menyenaraikan semua nama indeks yang disokong serta perkara yang diukur.
| Indeks | Perkara yang diukur |
|---|---|
NetProfit | Untung atau rugi akhir dalam mata wang akaun |
ProfitFactor | Keuntungan kasar dibahagikan dengan kerugian kasar |
MaxEquityDrawdownPercentages | Penurunan peratusan terbesar dalam ekuiti dari puncak ke paras terendah |
MaxBalanceDrawdownPercentages | Penurunan peratusan terbesar dalam baki dari puncak ke paras terendah |
MaxEquityDrawdown | Penurunan mutlak terbesar dalam ekuiti, dalam mata wang akaun |
MaxBalanceDrawdown | Penurunan mutlak terbesar dalam baki, dalam mata wang akaun |
WinningTrades | Bilangan dagangan yang ditutup dengan keuntungan |
LosingTrades | Bilangan dagangan yang ditutup dengan kerugian |
TotalTrades | Jumlah keseluruhan dagangan yang ditutup |
AverageTrade | Keuntungan bersih dibahagikan dengan bilangan dagangan yang ditutup |
Untuk memaksimumkan keuntungan bersih sambil meminimumkan penurunan maksimum dalam ekuiti:
--criteria="NetProfit:max,MaxEquityDrawdownPercentages:min"
Untuk menentukan pemeringkatan tersuai, gunakan --fitness sebagai ganti. Kaedah GetFitness pada cBot mengembalikan skor, dan pengoptimuman mengekalkan pas dengan skor yang dikembalikan paling tinggi. --fitness dan --criteria tidak boleh digunakan serentak. Nyatakan satu sahaja.
Pilihan konteks ujian ¶
optimize menggunakan semula pilihan konteks ujian daripada backtest. Jadual di bawah menyenaraikan pilihan yang diterima oleh CLI semasa, fungsi setiap pilihan dan perbezaan antara kedua-dua perintah apabila berkaitan.
| Pilihan | Tujuan | Ketersediaan |
|---|---|---|
--account | Nombor akaun dagangan. | Kedua-duanya |
--symbol | Simbol yang hendak diuji. | Kedua-duanya |
--start | Tarikh dan masa mula bagi julat ujian. | Kedua-duanya |
--end | Tarikh dan masa tamat bagi julat ujian. | Kedua-duanya |
--balance | Baki permulaan untuk simulasi. | Kedua-duanya |
--data-mode | open, m1, m1-csv, tick-csv atau ticks. | Kedua-duanya |
--data-file | Laluan ke fail CSV bagi m1-csv atau tick-csv. | Kedua-duanya |
--commission | Amaun komisen bagi setiap dagangan. | Kedua-duanya |
--spread | Spread dalam pip. | Kedua-duanya |
--precise-conversion | Gunakan penukaran tepat bagi pasangan mata wang silang. | Kedua-duanya |
--timeframe | Tempoh masa asas untuk penerokaan parameter. | optimize sahaja |
--period | Tempoh masa asas untuk ujian. | backtest sahaja |
--report | Laluan untuk menyimpan laporan HTML. | backtest sahaja |
--report-json | Laluan untuk menyimpan laporan JSON. | backtest sahaja |
Nota
Pilihan laporan tidak terpakai pada optimize. Sebaliknya, 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
Hasil keluaran ¶
Semasa berjalan, optimize memaparkan kemajuan secara berterusan dalam terminal:
Progress | Loading EURUSD, h1 | 42.00 % |
Progress | Optimization | 37.50 % |
- Ringkasan – apabila selesai, cTrader CLI memaparkan ringkasan dalam terminal, termasuk jumlah pas keseluruhan, masa yang diambil serta pas terbaik berserta statistiknya.
- Fail hasil – apabila anda menentukan
--optres, cTrader CLI menyimpan hasil penuh dalam fail JSON.optresyang menyenaraikan setiap pas. Fail ini menggunakan format yang sama seperti hasil pengoptimuman aplikasi desktop, jadi fail tersebut boleh dibuka atau diimport melalui antara muka pengoptimuman aplikasi desktop. - Laporan bagi setiap pas – apabila anda menentukan
--passes-dir, cTrader CLI menyimpan fail laporan setiap pas dalam direktori tersebut. Setiap pas mempunyai subfolder yang mengandungi fail.html,.txt,.jsondan.cbotset. Fail.cbotsetmenunjukkan nilai parameter tepat yang digunakan dalam pas berkenaan.
Jika anda tidak menentukan --optres mahupun --passes-dir, pengoptimuman selesai dan hanya ringkasan dipaparkan.
Nota
Perintah optimize tidak menghasilkan laporan HTML gabungan. Walau bagaimanapun, fail HTML bagi setiap pas masih akan disimpan dalam --passes-dir jika anda menentukan pilihan tersebut.
Menyemak sama ada pengoptimuman digunakan dengan betul ¶
Selepas pelaksanaan, pastikan penerokaan parameter berjalan seperti yang anda rancangkan.
- Buka fail
.cbotsetbagi salah satu pas dalam--passes-dirdan semak bahawa parameter yang dioptimumkan berubah antara pas, manakala parameter yang ditetapkan atau ditinggalkan kekal pada nilai tetap. - Jika anda meneroka pelbagai tempoh masa, semak nilai
Chart.Perioddalam fail.cbotsetbagi setiap pas. Nilai itu sepatutnya sepadan dengan tempoh masa yang anda pilih. - Buka fail
.optresatau import fail tersebut ke antara muka pengoptimuman aplikasi desktop untuk menyemak konfigurasi dan semua pas secara bersama.
Semakan kesahihan dan ralat lazim ¶
Setiap baris dalam jadual di bawah menunjukkan gejala, kemungkinan punca, kod keluar yang dikembalikan oleh cTrader CLI apabila ralat berlaku dan tindakan seterusnya. cTrader CLI mengembalikan kod keluar bukan sifar bagi setiap kegagalan semakan kesahihan. Oleh itu, skrip boleh berhenti apabila ralat pertama berlaku tanpa perlu menganalisis mesej.
Kod keluar dalam jadual merujuk kepada nilai yang dikembalikan oleh cTrader CLI kepada shell. Nombor kod khusus tidak diterbitkan. Oleh itu, non-zero bermaksud perintah gagal tanpa kod berasingan, manakala unknown bermaksud kegagalan dalaman yang memerlukan anda bertukar binaan atau menghubungi sokongan.
| Gejala | Kemungkinan punca | Kod keluar | Tindakan seterusnya |
|---|---|---|---|
Ralat semakan kesahihan: --params tiada | Fail parameter JSON tidak diberikan. | bukan sifar | Nyatakan --params=<path>. |
| Ralat semakan kesahihan: tempoh masa tidak dikenali | Nilai --timeframe tidak sepadan dengan mana-mana pengecam yang dikenali. | bukan sifar | Jalankan ctrader-cli periods dan gunakan salah satu pengecam yang disenaraikan. |
| Ralat semakan kesahihan: tempoh masa utama tidak sah | Nilai tempoh masa tidak boleh dimuatkan di bawah --data-mode yang dipilih. | bukan sifar | Pilih tempoh masa atau --data-mode yang lain. |
| Ralat semakan kesahihan: pasangan kriteria berformat salah | Nama indeks salah atau arah bukan max atau min. | bukan sifar | Gunakan salah satu nama indeks yang disokong bersama max atau min. |
| Ralat semakan kesahihan: indeks kriteria tidak dikenali | Nama yang ditentukan dalam --criteria tiada dalam senarai indeks yang disokong. | bukan sifar | Gunakan salah satu nama indeks yang disenaraikan dalam bahagian Criteria. |
Ralat semakan kesahihan: nilai --method tidak dikenali | Nilai --method bukan genetic atau grid. | bukan sifar | Gunakan --method=genetic (lalai) atau --method=grid. |
--fitness dan --criteria ditentukan serentak | Kedua-dua pilihan ini tidak boleh digunakan bersama. | bukan sifar | Nyatakan --fitness atau --criteria, bukan kedua-duanya. |
optimize tidak tersedia | Binaan CLI yang digunakan ialah edisi dalaman atau awan. | tidak diketahui | Tukar kepada edisi setempat untuk pengguna. |