Ciri khas program yang dimaksudkan untuk operasi di terminal klien MetaTrader 4 adalah kerja mereka dengan maklumat yang sentiasa dikemas kini dalam masa nyata. Dalam bahasa MQL4, keanehan ini ditunjukkan dalam bentuk tiga fungsi khas: init (), start (), dan deinit ().
Fungsi khas berfungsi dengan nama-nama yang telah ditetapkan init (), start () dan deinit (), masing-masing mempunyai sifat istimewanya sendiri.
Ciri-ciri fungsi khas
Fungsi init () khas
Ciri khas fungsi khas () adalah pelaksanaannya pada inisialisasi program. Jika suatu program mengandungi perihalan fungsi init khas (), ia akan dipanggil (dan dilaksanakan) pada masa ini program bermula.
Sekiranya tiada fungsi khas () init dalam suatu program, tiada tindakan akan dilakukan pada permulaan program.
Dalam EAs, init () dipanggil (dan dilaksanakan) selepas terminal pelanggan dimulakan dan memuat naik data bersejarah, selepas menukar keselamatan dan / atau tempoh carta, selepas penggumpalan program di MetaEditor, selepas menukar parameter input dari tetingkap persediaan EA , dan selepas menukar akaun.
Dalam skrip, init () juga dipanggil (dan dilaksanakan) dengan segera selepas ia dilampirkan pada carta.Dalam indikator adat, init () dipanggil (dan dilaksanakan) dengan segera selepas terminal klien dimulakan, selepas menukar keselamatan dan / atau tempoh carta, selepas pengompilasi program di MetaEditor, dan setelah mengubah parameter input dari tetingkap persediaan penunjuk adat.
Fungsi permulaan khas () / start()
Ciri-ciri yang berbeza dari fungsi permulaan khas () berbeza bergantung pada jenis program yang boleh dijalankan.Dalam EA, mulakan () dipanggil (dan dilaksanakan) sebaik sahaja tanda semak baru muncul. Sekiranya tanda baru telah muncul semasa pelaksanaan permulaan (), tanda ini akan diabaikan, yang bermula () tidak akan dipanggil untuk pelaksanaan apabila tanda semacam itu datang. Semua petikan yang diterima semasa pelaksanaan permulaan () akan diabaikan. Permulaan permulaan () untuk pelaksanaan dijalankan oleh terminal pelanggan sahaja, dengan syarat sesi operasi sebelumnya telah selesai, kawalan telah dikembalikan kepada terminal klien, dan mula () sedang menunggu tanda semak baru.Kemungkinan untuk memanggil dan melaksanakan permulaan () dipengaruhi oleh keadaan “Dayakan / melumpuhkan EA” butang. Sekiranya butang ini berada dalam keadaan melumpuhkan EA, terminal pelanggan tidak akan memanggil untuk memulakan pelaksanaan () tanpa mengira sama ada petikan baru datang atau tidak. Walau bagaimanapun, mengubah keadaan butang dari diaktifkan ke kurang upaya tidak menamatkan sesi operasi semasa mula ().Terminal klien tidak memanggil permulaan () jika tetingkap sifat EA dibuka. Tingkap hartanah EA boleh dibuka hanya apabila mula () sedang menunggu tanda semak baru. Tingkap ini tidak boleh dibuka semasa sesi pelaksanaan fungsi mula EA ().Dalam skrip, mulakan () dipanggil (dan dilaksanakan) sekali sahaja, sejurus selepas permulaan program init ().Dalam indikator adat, mula () dipanggil (dan dilaksanakan) dengan segera selepas tanda centang yang baru muncul, segera setelah dilampirkan pada carta, apabila menukar saiz tetingkap keselamatan, apabila beralih dari satu keselamatan ke yang lain, apabila memulakan terminal klien semasa sesi sebelumnya penunjuk telah dilampirkan pada carta), dan selepas menukar simbol dan tempoh carta semasa tanpa mengira hakikat sama ada petikan baru datang atau tidak.Penamatan pelaksanaan sesi permulaan semasa () untuk semua jenis program boleh dilakukan apabila program dikeluarkan dari carta, apabila tempoh keselamatan dan / atau carta diubah, apabila akaun diubah atau carta ditutup dan hasil penamatan operasi terminal pelanggan. Jika permulaan () dilaksanakan semasa perintah penutupan, masa yang tersedia untuk terminal untuk menyelesaikan pelaksanaan fungsi adalah 2.5 saat. Sekiranya selepas perintah shutdown start () terus operasinya lebih dari had masa yang dinyatakan, ia akan ditamatkan secara paksa oleh terminal klien.
Fungsi deinit khas ()
Fungsi yang berbeza fungsi deinit khas () adalah pelaksanaannya pada penamatan program (deinitialization). Jika program mengandungi perihalan deinit (), ia akan dipanggil (dan dilaksanakan) pada penutupan program. Jika suatu program tidak mengandungi deinit (), tiada tindakan akan dilakukan pada shutdown program.Terminal pelanggan memanggil deinit () pada penutupan terminal, apabila tetingkap keselamatan ditutup, sebelum menukar keselamatan dan / atau menukar tempoh carta, pada pemulihan kompilasi program yang berjaya dalam MetaEditor, apabila menukar parameter input, dan apabila akaun berubah.Dalam EA dan skrip, penutupan program dengan panggilan yang diperlukan deinit () mungkin berlaku ketika melampirkan pada carta sebuah program baru jenis yang sama yang menggantikan yang sebelumnya.Dalam indikator adat, deinit () tidak dilaksanakan apabila penunjuk baru dilampirkan pada carta. Beberapa penunjuk boleh beroperasi pada tetingkap keselamatan, sebab itu penunjuk penunjuk baru pada carta tidak menyebabkan penutupan penunjuk lain dengan panggilan deinit ().Masa pelaksanaan deinit () adalah terhad kepada 2.5 saat. Jika kod fungsi deinit khas () dilaksanakan lebih lama, terminal klien akan secara paksa menghentikan pelaksanaan fungsi deinit () khas dan operasi program.
Keperluan untuk fungsi khas
Fungsi khas init () dan deinit () boleh absen dalam suatu program. Perintah penerangan fungsi khas dalam sesuatu program tidak penting. Fungsi khas boleh dipanggil dari mana-mana bahagian program mengikut perintah umum panggilan fungsi.Fungsi khas mungkin mempunyai parameter.
Walau bagaimanapun, apabila fungsi ini dipanggil oleh terminal pelanggan, tiada parameter akan dihantar dari luar, hanya nilai lalai yang akan digunakan.Fungsi khas init () dan deinit () mesti menamatkan operasi mereka dengan cepat dan tidak dapat dijalankan ke jalan kitaran yang cuba memulakan keseluruhan operasi sebelum memanggil fungsi start ().
Perintah menggunakan fungsi khas
Pemaju telah membentangkan anda dengan alat yang sangat mudah: apabila program bermula, init () dilaksanakan; selepas itu, kerja utama dilakukan dengan memulakan (); dan, apabila pengguna menyelesaikan tugasnya, deinit () akan dimulakan sebelum penutupan program.
Kod utama sesuatu program mesti terkandung dalam permulaan (). Semua operator, fungsi terbina dalam dan adat panggilan, dan semua pengiraan yang perlu dilakukan dalam fungsi ini. Pada masa yang sama, seseorang mesti memahami dengan betul peranan fungsi tersuai. Perihalan fungsi tersuai terletak di luar perihalan fungsi khas, tetapi jika fungsi tersuai dipanggil untuk pelaksanaan, fungsi khas tidak menamatkan operasinya. Ini bermakna kawalan diserahkan kepada fungsi tersuai untuk beberapa waktu, tetapi fungsi tersuai itu sendiri beroperasi dalam fungsi khas yang memanggilnya.
Oleh itu, dalam proses pelaksanaan program, fungsi khas sentiasa berfungsi (mengikut sifat mereka sendiri), dan fungsi tersuai dilaksanakan apabila dipanggil oleh fungsi khas.Jika anda tidak akan menggunakan mana-mana fungsi khas, anda boleh memilih untuk tidak menggunakannya dalam program.
Dalam kes sedemikian, terminal pelanggan tidak akan memanggilnya. Program yang benar-benar biasa adalah satu yang mengandungi semua tiga fungsi istimewa. Satu program yang tidak mempunyai init () atau deinit (), atau salah satu dari fungsi ini, juga dianggap normal.
Sekiranya tiada fungsi khas digunakan dalam program, program ini tidak akan dilaksanakan. Terminal pelanggan hanya memanggil fungsi istimewa mengikut sifat mereka. Fungsi kustom tidak dipanggil oleh terminal klien. Itulah sebabnya jika program tidak mengandungi fungsi khas sama sekali (dan hanya mengandungi fungsi tersuai), ia tidak akan dipanggil untuk pelaksanaan.
Ia tidak disyorkan untuk memanggil permulaan () dari init () atau untuk melaksanakan operasi perdagangan dari init (), kerana semasa nilai permulaan parameter persekitaran maklumat mungkin tidak siap (maklumat mengenai carta, harga pasaran dan sebagainya).Pelaksanaan program dan Contoh pelaksanaan mengandungi beberapa contoh praktikal yang akan membantu anda melihat beberapa sifat fungsi khas.