Langkau tajuk talian

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 .algo dan 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) atau grid. Pilih grid apabila gabungan parameter sedikit dan anda mahu menguji semuanya. Pilih genetic apabila 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 .cbotset dengan 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 Name wajib diisi dan mesti sepadan dengan nama sifat cBot. Jalankan ctrader-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 Optimize ditetapkan kepada true, parameter itu disertakan dalam carian. Apabila ditetapkan kepada false, parameter itu dikekalkan pada nilai tetap.
  • Parameter berbentuk julat, seperti integer dan nombor titik terapung ketepatan ganda dua, memerlukan Min, Max dan Step jika nilainya hendak diterokai.
  • Parameter yang menggunakan nilai diskret, seperti enumerasi dan simbol, memerlukan tatasusunan Values yang tidak kosong jika nilainya hendak diterokai.
  • Medan ParameterType adalah pilihan. Jika medan ini ditinggalkan, jenis parameter ditentukan daripada metadata cBot dengan memadankan Name.

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 .optres yang 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, .json dan .cbotset. Fail .cbotset menunjukkan 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.

  1. Buka fail .cbotset bagi salah satu pas dalam --passes-dir dan semak bahawa parameter yang dioptimumkan berubah antara pas, manakala parameter yang ditetapkan atau ditinggalkan kekal pada nilai tetap.
  2. Jika anda meneroka pelbagai tempoh masa, semak nilai Chart.Period dalam fail .cbotset bagi setiap pas. Nilai itu sepatutnya sepadan dengan tempoh masa yang anda pilih.
  3. Buka fail .optres atau 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.