Kitaran hayat cBot
Dalam artikel ini dan video yang menyertainya, kami menerangkan struktur kod dan menjelaskan logik di sebalik peristiwa dan kitaran hayat cBot cTrader.
Sebagai peringatan, anda boleh mengakses cBot anda dalam aplikasi Algo di cTrader. Untuk membuat cBot baharu, hanya klik butang cBot Baharu atau pilih pilihan ini dalam menu lungsur yang ditunjukkan di bawah.

Tafsirkan templat asas
Selepas membuat cBot baharu, anda sepatutnya melihat struktur asas berikut dalam tetingkap penyunting kod.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | |
Perhatikan bahawa hanya terdapat tiga peristiwa yang dipaparkan dalam templat asas; peristiwa ini dikendalikan oleh kaedah OnStart(), OnTick() dan OnStop(). Kami akan menambah dua kaedah tambahan (OnBar() dan OnException()) dan menjelaskan cara ia berfungsi kemudian; pertama, kami akan membincangkan kaedah OnStart().
Gunakan kaedah OnStart()
Kaedah OnStart() dicetuskan apabila cBot mula-mula bermula. Ia digunakan untuk memulakan sebarang pemboleh ubah yang anda rancang untuk digunakan dalam cBot anda, termasuk penunjuk, pembilang, pengendali peristiwa atau pemasa.
Nota
Templat kod awal sudah termasuk kenyataan kod untuk mencetak mesej ke log apabila cBot bermula. Seperti yang anda lihat, cBot kami mempunyai parameter Message, dan kaedah OnStart() menghantar nilai parameter ini kepada kaedah Print().
Kita boleh menunjukkan bagaimana kaedah OnStart() berfungsi dengan hanya memulakan tika cBot dalam aplikasi Dagangan dan membuka tab Log untuk melihat hasilnya.

Kita juga boleh menghentikan cBot pada bila-bila masa, menukar nilai parameter Message dalam tab Parameter, dan memulakan semula tika kita. Pada permulaan, mesej baharu kita masih akan dicetak ke log.


Gunakan kaedah OnTick()
Kaedah OnTick() dicetuskan setiap kali harga bidaan atau tawaran simbol berubah. Di dalam kaedah ini, anda biasanya boleh mengaturcarakan syarat kemasukan dan keluar posisi serta sebarang fungsi tambahan lain yang anda perlukan untuk dijalankan apabila tik data baharu tiba.
Kami akan menambah kod berikut pada kaedah OnTick() supaya ia mencetak mesej ke log.
1 | |
Seperti yang anda lihat di bawah, cBot kami kini mencetak harga bidaan dan tawaran ke log pada setiap perubahan harga.

Gunakan kaedah OnBar()
Kaedah OnBar() tidak termasuk dalam templat kod cBot lalai jadi kami akan menambah cebisan kod berikut untuk menambahnya.
1 2 3 4 | |
Kaedah OnBar() dicetuskan setiap kali bar atau lilin baharu dilukis pada carta yang cBot dilampirkan. Sama seperti kaedah OnTick(), anda boleh menggunakan kaedah OnBar() untuk mengaturcarakan syarat kemasukan dan keluar posisi serta sebarang logik lain yang perlu dilaksanakan pada pembentukan setiap bar baharu.
Bagaimana kaedah OnBar() dicetuskan
Jika anda mempunyai carta H1, bar baharu dibentuk setiap jam, bermakna kaedah OnBar() akan dipanggil sekali sejam. Jika anda mempunyai carta m1, kaedah yang sama akan dipanggil sekali seminit.
Kaedah OnBar() kami akan mencetak "OnBar" pada setiap bar/lilin baharu. Untuk menunjukkan bagaimana ia berfungsi, kami akan melampirkan cBot kami pada carta m1 dan melihat lognya.

Gunakan kaedah OnStop()
Kaedah OnStop() dipanggil apabila cBot berhenti sama ada oleh pengguna atau melalui kod. Apabila ini berlaku, sebarang kod di dalam kaedah OnStop() dilaksanakan. Ini boleh digunakan untuk melakukan operasi terakhir, seperti menutup posisi.
Kami akan menambah kod berikut pada kaedah OnStop() kami - seperti biasa, cBot kami akan mencetak nilai parameter Message apabila ia dihentikan.
1 | |
Dalam tangkapan skrin di bawah, kami melancarkan dan menghentikan tika cBot kami untuk menunjukkan bagaimana ia berfungsi.

Gunakan kaedah OnException()
Kaedah OnException() memberikan toleransi kesalahan dengan menangkap pengecualian yang tidak dikendalikan, membolehkan anda memutuskan cara untuk mengendalikannya. Ia tidak termasuk dalam templat kod lalai jadi kami akan menambahnya sendiri menggunakan cebisan berikut.
1 2 3 4 | |
Untuk mencetuskan kaedah OnException(), kami akan menulis beberapa kod untuk menangkap pengecualian yang berlaku apabila kami cuba mengakses maklumat tentang dagangan yang tidak lagi wujud. Kami akan menambah kod di bawah pada kaedah OnStart().
1 | |
Kod yang telah kami tulis dalam kaedah OnStart() akan melaksanakan pesanan pasaran dengan parameter boleh konfigurasi berikut.
- Jenis dagangan akan menjadi pesanan beli.
- Dagangan akan dilaksanakan untuk simbol semasa untuk carta yang cBot dilampirkan.
- Volum pesanan akan menjadi 1,000 unit.
- Label unik yang dilampirkan pada pesanan akan menjadi "my label".
Kami juga akan menambah kod berikut pada kaedah OnTick().
1 2 3 | |
Kod yang telah kami tulis dalam kaedah OnTick() akan mencari posisi yang dibuka dalam kaedah OnStart() menggunakan nama label "my label".
Jika posisi ditemui dengan label yang sama, ia kemudian akan mencetak ke log ID posisi dagangan terbuka. Ia juga akan mencetak mesej lain yang dipanggil "Message below" sebagai baris kod seterusnya yang dilaksanakan.
Apabila cBot kami dilancarkan dan kaedah OnTick() dipanggil dan pesanan ditemui, cBot akan mencetak ID pesanan ke log dan, selepas ID pesanan, ia akan mencetak mesej "Message below".

Seperti yang anda lihat, tiada pengecualian timbul dan cBot kami melakukan tugasnya dengan sempurna.
Sekarang, bagaimanapun, kami akan menutup posisi yang dibuka oleh cBot secara manual dan membuat perubahan kecil pada kod supaya pengecualian pasti berlaku. Dalam kaedah OnStart(), kami akan menukar label pesanan kepada "cTrader". Dalam kaedah OnTick(), kita akan mengulas keluar syarat yang memeriksa jika terdapat posisi dengan label "my label".
Berikut ialah kod akhir cBot kita - perhatikan bahawa kod ini akan sentiasa mencetuskan pengecualian.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | |
Kita akan menjalankan cBot sekali lagi dan lihat apa yang berlaku.

Apa yang berlaku ialah pesanan pasaran baharu telah dibuat apabila cBot bermula. Label yang dilampirkan pada pesanan ini ialah "cTrader". Dalam kaedah OnTick(), kod cuba mendapatkan posisi dengan label "my label" dan kerana kita telah mengulas keluar baris kod dengan syarat tersebut. Ia kemudian cuba mencetak ID posisi ke dalam log.
Ini menyebabkan ralat pengecualian yang biasanya akan menghentikan cBot dalam versi cTrader sebelumnya, tetapi dengan kaedah OnException() yang baharu, kita kini boleh menangkap dan mengendalikan ralat ini. cBot akan terus berjalan dan kita boleh mencatat ralat tersebut supaya ia boleh diperbaiki.
Ringkasan
Kitaran hayat cBot terdiri daripada beberapa peristiwa utama yang boleh anda kendalikan melalui kaedah OnStart(), OnTick(), OnStop(), OnBar() dan OnException(). Dengan menyesuaikan cara cBot anda bertindak balas terhadap peristiwa utama, anda boleh memastikan algoritma anda berkelakuan tepat seperti yang dijangkakan.