MQL adalah bahasa skrip yang sangat mudah. Penyahpepijatan MQL, malangnya, tidak mudah sama sekali. Orang yang mengkompilasi MetaEditor yang MetaQuotes membekalkan hanya tidak mengandungi alat-alat yang canggih yang paling programmer biasa dengan menggunakan.
Masalah nyahpepijat MQL
Visual Studio dan Ides canggih lain (persekitaran pembangunan bersepadu) mengandungi beberapa ciri-ciri yang menjadikan ia mudah untuk debug kod manakala pengaturcara menulis ia. Contoh yang paling besar ini adalah mata break. Satu titik rehat adalah titik di mana kod pengkompil memberitahu komputer untuk berhenti menjalankan program ini apabila ia tiba pada garis tertentu kod.
Pertimbangkan contoh di mana trailing stop menetapkan berhenti secara tidak betul. Naluri semula jadi bagi kebanyakan pengaturcara akan berjalan penasihat pakar pada visual ujian kembali, kemudian masukkan mata break pada baris kod tidak lama selepas pengiraan trailing stop. Mata break menghentikan kod, membolehkan pengaturcara sejawat di dalam otak perisian untuk melihat apa yang difikirkan pada masa ia membuat keputusan. Kelebihan utama dalam Visual Studio adalah bahawa nilai semua pembolehubah yang jelas kelihatan. Ia adalah mungkin untuk berjalan melalui langkah program demi langkah. Apabila salah satu langkah yang tidak mengikut peraturan yang dikehendaki, perubahan yang diperlukan biasanya jelas. MetaQuotes bersyukur termasuk memecahkan mata dalam MQL5. Mereka tidak terdapat di MQL4.
Kurangnya sokongan INTELLISENSE penuh menjejaskan kelajuan pengaturcaraan saya lebih daripada apa-apa. INTELLISENSE mengesan penggunaan perkataan-perkataan seperti Terpelihara OrderSelect() atau ObjectGet(). The MetaEditor termasuk INTELLISENSE asas, tetapi ia tidak mempunyai butiran halus yang membuatnya begitu mudah dalam Visual Studio.
Saya sudah biasa dengan pengaturcaraan dalam C # di mana saya boleh menaip beberapa huruf pertama pembolehubah atau kelas, kemudian IDE mengisi selebihnya. Apabila saya menaip “Saya” dalam C # dan tekan bar ruang, Saya tahu bahawa pilihan messageBox akan muncul (dengan andaian bahawa saya mengisytiharkan ruang nama yang sesuai). The MetaEditor menyediakan senarai calon-calon untuk perkataan Terpelihara. Pengaturcara mesti kemudian pilih pilihan sama ada dengan tetikus atau tekan masukkan.
Saya tahu ia kelihatan remeh untuk menghendaki menekan masuk bukan bar ruang, tetapi berfikir tentang berapa kali kod resuses perkataan Terpelihara sama atau pembolehubah. The tekanan kekunci tambahan benar-benar menambah sehingga banyak usul yang tidak perlu menaip. Itulah ganda benar untuk berumur tiga puluh tahun yang sudah memakai pendakap pergelangan tangan untuk sakit terowong carpal.
Kelemahan terbesar MetaEditor ini adalah bahawa ia tidak mengesan nama-nama pembolehubah. Kita sering menulis penasihat pakar yang mengandungi beberapa ribu baris kod. Penjejakan nama puluhan pembolehubah menimbulkan cabaran sendiri. Apabila jenis alat sandi dalam set yang sama dengan nama-nama pembolehubah berulang kali, ia akan lebih baik untuk hanya menaip tiga huruf pertama dan beralih. Salin dan tampal mungkin memberikan alternatif yang baik. Masalahnya ialah bahawa pembolehubah biasanya kumpulan bersama-sama. Anda tidak boleh menyimpan 5 salinan dan tampal item yang berbeza boleh didapati.
The MetaEditor membolehkan fungsi untuk kembali jenis yang tidak sah. Fungsi diisytiharkan sebagai double boleh kembali rentetan, integer atau apa-apa pun. Orang yang mengkompilasi MQL4 tidak mengesan sama ada atau tidak ini adalah sah. Ia meninggalkan ia sehingga programmer untuk menemui jenis yang tidak sah semasa ujian masa nyata. Pengawasan ini adalah mimpi ngeri bagi pengaturcara tidak sengaja yang tersilap kembali yang salah.
Ini adalah duanya adalah terpakai benar apabila fungsi dua kali tersilap dipulangkan kepada pembolehubah integer. MQL4 tidak menghalang dua haram untuk int acuan. Lebih buruk lagi, penasihat pakar yang terus berjalan dengan 0 nilai untuk interger dan bukannya membuang pengecualian atau kesilapan mesej. Saya tidak boleh mengira berapa jam yang saya telah sia-sia mengesan pembolehubah yang kelihatan sempurna, hanya untuk menyedari bahawa saya mengisytiharkan jenis data yang salah. Ini biasanya berlaku apabila saya secara autopilot, berdebar-debar daripada kod. Apa yang kelihatan berkesan pada masa yang biasanya kos beberapa jam rambut menarik kekecewaan.
Teknik-teknik nyahpepijat MQL
Yang Pengaturcara MQL pada kakitangan di sini biasanya mengambil jalan keluar dengan mana-mana teknik berikut. Anda mungkin mendapati bahawa menggunakan mereka dalam gabungan membantu meningkatkan proses debugging yang lebih.
Debug ralat pengkompil
Yang ini boleh menjadi yang paling mengecewakan. The MetaEditor cuba membayangkan yang garis kod menyebabkan kesilapan Penyusunan. Aku berkata percubaan kerana ia menjadi salah ia lebih kerap daripada ia menjadi betul. Tidak ada yang lebih menjengkelkan daripada melihat garis sempurna yang sah kod yang bendera penyusun sebagai bermasalah.
Saya hampir selalu mengambil jalan keluar dengan mengulas keluar bahagian yang semakin besar sehingga kod ralat yang hilang. Saya mulakan dengan mengulas keluar satu baris kod. Jika ia tidak berfungsi, maka saya komentar pada sepuluh baris. Jika ia tidak berfungsi, Saya mungkin mengulas fungsi keseluruhan atau bahagian-bahagian kod. Apabila pengkompil akhirnya berjalan dengan betul, anda tahu bahawa bahagian terakhir mengulas keluar kod mengandungi pepijat.
Seterusnya, anda menarik balik. Mula membuat bersalah seksyen mengulas keluar yang lebih kecil dan lebih kecil sehingga ralat muncul semula. Sekarang, anda telah akhirnya menumpukan perhatian kepada sumber sebenar masalah ini.
Debug dalam masa sebenar atau pada backtester yang
Kaedah pilihan saya adalah debugging mengulas kebanyakan maklumat keputusan yang berkaitan ke skrin, yang dilakukan dengan menggunakan Komen() fungsi. Saya kemudian berjalan backtester visual, menonton bagaimana data itu berkelakuan dengan berhubung dengan maklumat visual.
Pada skrin komen dasarnya juri-rigged mata break. Mengawal bagaimana dan apabila mereka hadir membolehkan pengaturcara untuk melangkah melalui kod untuk mendedahkan isu ini. Satu-satunya perbezaan adalah bahawa komen tidak tegas menghalang kod dari berjalan. Teks yang muncul adalah sangat kecil. Selain daripada itu, Saya benar-benar seperti yang hakikat bahawa ia begitu teguh. Fungsi komen sentiasa bekerja tanpa suatu halangan, menjadikannya rakan terbaik seorang programmer yang yang debugging kod.
Mengambil screenshot mengambil ini ke tahap yang seterusnya. Setiap kali pelanggan bertanya soalan mengenai mengapa penasihat pakar berkelakuan cara yang tertentu, jawapan yang paling mudah datang dengan tangkapan skrin. Mengulas perkara rehat tiruan biasanya memberi jawapan peluru bukti – pengaturcara dan pelanggan dapat melihat apa yang EA berfikir pada waktu itu ia membuat keputusan. MQL4 menawarkan WindowScreenShot yang() fungsi untuk melakukan ini.
The EA yang kita memprogramkan sentiasa mengambil screenshot semasa tindakan kritikal, seperti yang memasuki perdagangan atau menyesuaikan keadaan keluar. Matlamatnya adalah untuk menyediakan rekod visual setiap keputusan dengan mata untuk menjawab soalan tentang masa depan tingkah laku.
Template default kami termasuk yang benar / palsu pembolehubah dipanggil WriteScreenshots. Peniaga mengawal sama ada mereka mahu mengganggu dengan ciri debugging ini atau tidak. Kelemahan hanya untuk itu adalah bahawa setiap tindakan yang dicatatkan makan kira-kira sebesar 50 KB ruang cakera keras.
Fail log mewakili pilihan debugging akhir. Kelemahan utama adalah bahawa mereka begitu hodoh dan sukar untuk membaca. Saya hampir sentiasa lebih suka screenshot atas sebab ini.
Namun begitu, fail log yang mempunyai tempat mereka. Cara utama untuk menggunakan mereka adalah sebagai penangkap ralat. Setiap kali proses yang pergi serba salah kerana masalah dengan MetaTrader sama ada sendiri atau dengan transaksi broker, fail log adalah tempat yang paling mudah untuk menangkapnya.
Debugging fail MQL adalah kemahiran yang mengambil masa seketika untuk belajar. Alat yang ada pengaturcara adalah jauh berbeza daripada yang tersedia kepada bahasa tahap tinggi. Setelah anda mendapatkan digunakan untuk bekerja dengan alat-alat yang lebih mudah dalam MetaEditor dan MetaTrader, proses pembersihan bug biasanya mendapat lebih mudah.