MetaQuotes Language 4 dan 5 adalah alat untuk membangunkan aplikasi bagi Terminal Klien MetaTrader berdasarkan platform keluarga generasi MetaTrader keempat dan kelima. Bahasa-bahasa ini menyediakan pengguna dengan alat-alat untuk membangunkan strategi perdagangan automatik di pihak klien.

Artikel ini merangkumi subjek berikut:


Saya telah sediakan satu tutorial terperinci tentang pengaturcaraan MetaTrader MQL4 lwn MQL5. Selepas membaca artikel ini, anda akan memahami perbezaan antara dua versi terkini bahasa tersebut dan cara menggunakannya. Dalam artikel ini, anda akan menemui arahan terperinci berserta gambar tentang cara untuk menulis penasihat pakar. Mari mulakan!

Apa itu MQL4 dan MQL5?

Dalam banyak cara, bahasa MQL4 dan MQL5 adalah sangat serupa. Oleh itu, kita akan bincangkan secara berasingan tentang perbezaannya, tetapi, buat masa sekarang, kita setuju untuk memanggilnya MQL tanpa menentukan versinya.

MQL ialah bahasa pengaturcaraan yang dibina dalam platform MetaTrader. Persekitaran pembangunan MetaQuotes Language Editor digunakan untuk menulis robot perdagangan, penunjuk atau aplikasi sendiri dalam MQL, serta untuk menyusun dan menyahpepijat. Persekitaran ini dibekalkan dengan Terminal MetaTrader Client berserta semua maklumat rujukan.

LiteFinance: Apa itu MQL4 dan MQL5?

Jika anda telah melabur dalam aset tertentu sekurang-kurangnya sekali, mungkin anda hanya membeli dolar untuk menyimpannya di dalam bank, kemudian anda faham yang pelaburan memerlukan kawalan tanpa henti. Saya yakin yang anda telah bertanya sendiri soalan-soalan ini lebih daripada sekali: 

  • Adakah masa sudah tiba untuk keluar perdagangan semasa harga di puncaknya?
  • Bagaimana cara untuk menentukan sama ada harga aset akan terus naik atau pasaran akan berbalik?
  • Mungkin isyarat palsu diterima kali ini dan tidak perlu ambil risiko serta bersegera untuk membuka kedudukan?

Anda perlu mengikut pasaran dan membuat keputusan perdagangan tepat pada masanya. Anda dinasihatkan untuk bertindak sedemikian pagi dan petang dalam sesi yang paling aktif. Apabila perdagangan dilaksanakan dengan beberapa aset pada masa yang sama, situasi menjadi semakin teruk.

MQL membenarkan anda melaksanakan sebarang strategi perdagangan atau algoritma dalam bentuk program komputer. Kemudian, program ini dilancarkan dan sentiasa dijalankan pada stesen kerja dalam Terminal Klien MetaTrader. Selain itu, penghantaran set termasuk beberapa robot perdagangan, penunjuk dan skrip daripada pembangun platform dalam bentuk kod sumber banyak membantu pembangunan bahasa dan teknik yang ada padanya. Selain itu, MQL disediakan dengan maklumat rujukan dalam talian dan luar talian yang terperinci. Terdapat komuniti yang besar di sekitar bahasa.

Katakan anda ingin menggunakan beberapa penunjuk hebat atau algoritma perdagangan pintar yang ingin anda gunakan dalam perdagangan atau mungkin anda mahu menganalisis pasaran rangkaian neural? Tiada batasan. Dengan MQL, anda boleh melaksanakan sebarang idea dalam bentuk penunjuk, pakar atau aplikasi lain, menggabungkan, menghapuskan, menyemak data sejarah dalam penguji strategi itu sendiri – semuanya tanpa melibatkan risiko kewangan dan gunakannya dengan aktif dalam perdagangan.

LiteFinance: Apa itu MQL4 dan MQL5?

Mari kita simpulkan! MQL menyelesaikan masalah menulis utiliti untuk memantau keadaan akaun perdagangan, mengira penunjuk dan paras, menerima isyarat perdagangan dan menentukan titik masuk dan keluar daripada pasaran. Alat bahasa membolehkan robot perdagangan atau penunjuk menyusun pertukaran maklumat dengan pelayan jauh menggunakan protokol TCP, termasuk penyulitan TLS atau protokol HTTP. Menghantar data menggunakan FTP serta pemberitahuan tolak ke klien mudah alih MetaTrader atau e-mel pengguna juga boleh dilakukan. Program yang ditulis dengan baik dan diyahpepijat (Debugged) akan berfungsi sehingga anda memutuskan untuk membuat perubahan atau menukarnya dengan yang lain. Anda hanya perlu ambil tahu tentang kawalan umum.

Kisah di sebalik Bahasa MQL4 dan MQL5

MQL wujud sebagai hasil daripada pembangunan evolusi platform. Ia merupakan alat untuk pengurusan automatik akaun perdagangan dalam MetaTrader. Saya tidak akan terangkan perkara ini secara terperinci, tetapi secara ringkas. 

  • MetaQuotes mengeluarkan MetaQuotes Language bersama dengan platform MetaTrader yang sebelum ini adalah aplikasi FXCharts. MQL berkembang menjadi versi kedua bersama-sama dengan kemas kini MetaTrader 3. Di sini MetaQuotes memperkenalkan API yang disediakan kepada klien sebagai lapisan tambahan antara MetaTrader Client dan MetaTrader Server.
  • Pengeluaran generasi keempat platform berlaku pada 1 Julai 2005. Bersama dengannya, MQL4 dikeluarkan. Keserasian ke belakang dengan versi bahasa sebelum ini telah hilang. MetaQuotes juga berhenti menyokong API terminal klien, tetapi mengembangkan keupayaan bahasa itu sendiri dan menyediakan cara untuk menyepadukan koleksi DLL tersuai ke dalam aplikasi MQL. API masih kekal tersedia untuk broker sahaja di peringkat pelayan, pentadbiran dan pengurusan.

Pada Jun 2010, selepas keluaran yang banyak, MetaTrader 5 telah dilancarkan. MetaQuotes mencipta semula perdagangan, logik, membuang kebanyakan sekatan yang dikenakan oleh struktur dalaman platform. Tetapi sehingga sekarang, MT5 tidak bersaing dengan generasi keempat dari segi populariti.

Pada Februari 2014, MQL4 telah dikemas kini berserta dengan 600 binaan terminal klien MT4. MetaQuotes menambah baik bahasa, memperkenalkan kebanyakan ciri daripada MQL5 dan pada masa yang sama, mempercepatkannya kepada tahap pengganti.

Ciri-ciri bahasa pengaturcaraan MQL4 dan MQL5

MQL digunakan untuk mencipta strategi perdagangan automatik. Kod MQL pada awalnya ditafsirkan dalam kod C++ yang kemudiannya disusun kepada kod boleh laku yang berfungsi dalam terminal sebagai koleksi dinamik terangkum. Jika kita menggariskannya dengan versi terdahulu, maka ia serupa dengan merangkumkan koleksi DLL dalam kod boleh laku program utama. Pendekatan ini menyumbang kepada pembangunan yang mudah dan ambang rendah untuk kemasukan ke dalam bidang perdagangan automatik. Bahasa ini popular di kalangan pedagang, meskipun pengkhususan dan kebergantungan bahasanya yang kecil pada platform. 

MetaQuotes memudahkan penggunanya dan menyediakan semua aplikasinya dengan maklumat bantuan yang terperinci. Rujukan untuk pengaturcaraan MQL4 dan MQL5 dibekalkan dengan MetaEditor dalam beberapa bahasa dalam bentuk fail HTM. Oleh itu, anda akan mendapat bimbingan terperinci dengan contoh-contoh kod untuk cara melaksanakan tingkah laku yang diperlukan.

Komuniti pedagang dan pengatur cara yang besar telah terbentuk di sekitar MQL. Terdapat alat untuk membantu komunikasi antara pengatur cara dan pedagang. Lapisan aplikasi tersedia sudah dibentuk untuk memudahkan proses perdagangan. Wujud pasaran untuk menukar aplikasi secara berbayar atau percuma yang boleh didapati di mql5.com. Terminal perdagangan menggabungkan kedai aplikasi, pangkalan kod, artikel dan isyarat daripada pedagang-pedagang lain. Kedai aplikasi menawarkan beratus-ratus penyelesaian berbayar dan percuma seperti penunjuk, penasihat, skrip dan semua jenis utiliti. Ini dalam kes ia lebih mudah untuk membeli program yang sudah tersedia berbanding “mencipta semula roda”. 

Jika anda sudah bertegas untuk menguasai MQL secara sendiri dan menyelami dunia penciptaan aplikasi, anda boleh gunakan artikel ini untuk belajar tentang masalah-masalah yang dihadapi pedagang baharu semasa mengambil langkah pertama dalam arah ini. Pedagang yang sudah mahir mungkin tidak mempelajari sesuatu yang baharu daripada teks di bawah. 

Pembangun menyediakan maklumat sokongan kepada komuniti MQL secara kerap dengan menerbitkan tutorial dalam bentuk artikel mengenai pelbagai tajuk daripada dunia perdagangan. Penulis artikel mempertimbangkan teknik-teknik pengaturcaraan yang baharu, termasuk penciptaan rangkaian neural, analisis dan penyelesaian masalah dan batasan bahasa, analisis dan pengujian strategi perdagangan, carian dan pelaksanaan algoritma baharu. 

MQL Wizard menawarkan 8 pilihan untuk MQL4 dan 10 pilihan untuk MQL5. Berikut adalah syot layar bestari fail untuk kedua-dua versi bahasa.

LiteFinance: Ciri-ciri bahasa pengaturcaraan MQL4 dan MQL5

LiteFinance: Ciri-ciri bahasa pengaturcaraan MQL4 dan MQL5

Mari kita pertimbangkan pilihan yang paling popular:

  • Expert Advisor/Robot perdagangan;
  • Penunjuk;
  • Skrip;
  • Termasuk koleksi fail (.mqh).

Selepas penyusunan, aplikasi ini dalam bentuk kod boleh laku diletakkan dalam direktori sesuai MetaTrader Client Terminal (File -> Open Data Folder): Pakar, Penunjuk, Skrip, dll. kemudian, selepas carta dimulakan, ia dilancarkan sebagai tindak balas kepada peristiwa yang dijana oleh MetaTrader Client Terminal semasa operasi. Peristiwa adalah pencetus untuk melancarkan program tersuai dan membolehkan anda menjejak pengawalan dan ‘deinitialization’, penerimaan sebut harga baharu, peristiwa tersuai pada carta dan banyak lagi.

Sebagai tambahan, anda kini boleh mencipta aplikasi dalam Python. Oleh itu, alat Python boleh didapati dalam terminal perdagangan.

Pengendali peristiwa berikut diterangkan dalam MQL4 Reference. 

LiteFinance: Ciri-ciri bahasa pengaturcaraan MQL4 dan MQL5

Dalam MQL5, bilangan pengendali telah bertambah berbanding generasi sebelumnya. Sekarang, senarai kelihatan seperti berikut:

LiteFinance: Ciri-ciri bahasa pengaturcaraan MQL4 dan MQL5

Senarai peristiwa itu kemudiannya telah dikembangkan. Dan ia kelihatan seperti berikut:

LiteFinance: Ciri-ciri bahasa pengaturcaraan MQL4 dan MQL5

Robot perdagangan atau Expert Advisor

Dalam komuniti pedagang, ia juga dirujuk sebagai Pakar. Penasihat Pakar diletakkan pada carta dalam MetaTrader Client Terminal dan terus berfungsi selama terminal perdagangan berjalan dan sambungan ke pelayan pedagang tersedia. Penasihat Pakar digunakan untuk melaksanakan sepenuhnya mana-mana strategi perdagangan, mengawal status akaun, menjalankan operasi perdagangan di bawah keadaan-keadaan tertentu dan mengurus objek grafik. Setiap kali robot perdagangan menerima tik baharu untuk instrumen, ia mula bekerja dengan membuka perdagangan. Penasihat Pakar juga boleh dilancarkan sebagai tindak balas kepada beberapa peristiwa lain: OnTimer, OnChartEvent, OnTesterTimer, dll.

Penasihat Pakar digunakan untuk mencipta antara muka pengguna. Robot serta indikator mempunyai akses ke objek grafik. 

Berikut ialah kod untuk robot perdagangan yang ringkas. Selepas setiap tik baharu pada simbol carta di mana EA digunakan, urus niaga pasaran disemak. Jika perdagangan sudah ada untuk beberapa simbol, EA menunggu untuk ia ditutup. Jika tiada perdagangan, maka satu perdagangan dibuka dalam arah bertentangan dengan urus niaga sebelumnya. Parameter EA: paras volum, henti rugi dan ambil untung ditetapkan oleh pengguna. Pada masa pelancaran pertamanya, ia akan membuka kedudukan panjang pada beberapa mata wang. Selepas ia ditutup, kedudukan seterusnya ialah perdagangan pendek, kemudian perdagangan panjang dan seterusnya. Sekiranya usaha tidak berjaya untuk membuka urus niaga, EA menulis mesej ralat dalam log dan tidur selama 60 saat, kemudian cubaan diulang semula. EA tidak menyemak parameter yang dimasukkan oleh pengguna untuk ketepatan, dengan itu, pantau aspek ini dengan teliti. Berikut adalah beberapa masalah yang dapat dilihat dengan serta-merta:

  • Keupayaan perdagangan keseluruhan tidak diperiksa. Ia boleh dilumpuhkan oleh pengguna dalam terminal atau secara khusus untuk penasihat ini. Pelayan perdagangan juga mungkin mempunyai sekatan pada perdagangan automatik.
  • Volum mungkin kurang daripada yang lebih kecil atau lebih besar daripada yang lebih besar dan mungkin tidak sesuai jika pelayan mempunyai had pada langkah volum. Sebagai contoh, pengguna memasukkan 0.23 lot, dan pelayan mempunyai perubahan minimum 0.05 lot. Hasilnya, urus niaga tidak akan dibuka dan fungsi OrderSend akan menjadi ralat.
  • Paras henti untuk perdagangan juga tidak diperiksa untuk ketepatan. Ia mungkin tidak sesuai dalam nilai minimum/maksimum yang dibenarkan atau mungkin tidak sesuai dalam had yang telah ditetapkan oleh paras beku. 

Kod paling ringkas yang boleh digunakan sebagai templat untuk melaksanakan penyelesaian berskala besar.

Kod ini disusun dan dilancarkan dalam MetaQuotes Language Editor 5 binaan 2375 pada 31 Mac 2020. 

LiteFinance: Robot perdagangan atau Expert Advisor

Penunjuk

Penunjuk digunakan untuk memaparkan maklumat tentang data harga yang ditukar dalam cara lain. Semua jenis pengayun, garis trend, fraktal adalah penunjuk. Penunjuk mempunyai akses ke alat grafik. Ada 6 daripadanya dalam MQL4, manakala dalam MQL5 bilangannya ialah 18. Sebagai contoh, Purata Bergerak memaparkan beberapa nilai harga purata dan/atau licin (smooth) untuk tempoh harga sebelum ini dan secara tidak langsung menunjukkan arah akan datang bagi harga instrumen. Ia berkesan untuk carta pada setiap masa. Penunjuk dikemas kini dan dikira semula pada setiap kali tik diterima untuk instrumen dalam carta di mana indikator digunakan, atau apabila peristiwa diterima daripada pengguna.

Satu atau beberapa penampan (buffer) dikaitkan dengan penunjuk dalam MetaTrader Client Terminal, di mana data angka diletakkan. MQL4 menyediakan 32 penampan untuk satu penunjuk, manakala dalam MQL5, ia membenarkan anda untuk mengoperasikan 512 penampan.

Berikut adalah contoh kod sumber bagi penunjuk Bear yang disediakan oleh pembangun platform bersama-sama dengan MetaTrader4.

LiteFinance: Penunjuk

Skrip

Pembangun menggunakan skrip untuk mencipta algoritma yang tidak memerlukan pemprosesan data masa nyata. Sebagai contoh, untuk memuat turun data statistik atau maklumat nyahpepijat output. Skrip dilaksanakan sebaik digunakan pada mana-mana carta oleh peristiwa OnStart. Ia satu-satunya yang boleh diproses oleh skrip.

Gambar di bawah menunjukkan kod skrip untuk menutup semua pesanan pasaran dalam akaun. Skrip akan memproses semua pesanan, tanpa mengira carta simbol ia dilancarkan. Dalam kes ini, pesanan belum selesai diabaikan. 

LiteFinance: Skrip

Keputusan melancarkan skrip ini adalah output berikut kepada log MetaTrader:

LiteFinance: Skrip

Ia memerlukan usaha yang lebih untuk mengajar skrip ini memproses pesanan belum selesai secara berasingan dalam MQL4. Pertama sekali, cipta Property supaya skrip boleh menunjukkan tetingkap dengan data input. Kemudian, tambah Enum yang mengandungi 3 pilihan untuk menutup urus niaga dengan skrip: hanya pesanan pasaran, pesanan belum selesai atau semua urus niaga pada akaun pada waktu tersebut. Kemudian, kita masukkan tatasusunan untuk menyimpan tiket pesanan belum selesai dan mengisi sewajarnya pada For loop pertama. Sekarang yang tinggal adalah memproses pilihan menutup urus niaga yang dipilih oleh pengguna.

Hasilnya, kita mendapat skrip seperti ini yang bukan sahaja menutup semua perdagangan, tetapi mengambil kira pilihan pengguna.

LiteFinance: Skrip

Termasuk koleksi fail (.mqh)

Seperti namanya, ia digunakan untuk perangkuman dalam jenis program lain untuk MetaTrader Client Terminal. Pembangun yang mahir mempunyai set alat mereka sendiri yang boleh digunakan semula banyak kali dalam pelbagai aplikasi.

Dalam MetaQuotes Language Editor, anda hanya perlu menetapkan laluan ke fail pengepala yang disertakan yang relatif kepada lokasi fail di mana perangkuman tersebut dibuat. Apabila menyusun program, MetaEditor akan mencari fail ini dan menyertakan kod daripadanya berbanding direktif  #include. Sekarang, semua kod koleksi boleh digunakan dalam aplikasi.

Serupa juga, pengatur cara C dan C++ menggunakan semula kod dengan menyertakan fail pengepala dalam projek mereka dan memautkannya dengan binari.

Contoh di bawah menunjukkan interpretasi paling ringkas bagi tatasusunan dinamik atau std::vector daripada koleksi C ++ standard. Kod ini menyusun dan boleh digunakan dengan versi MetaEditor: 5.00 binaan 2375 31 Mac 2020.

LiteFinance: Termasuk koleksi fail (.mqh)

Jenis data dan sintaksis bahasa MQL4 dan MQL5

Jenis data dan sintaks bahasa diwarisi daripada C++. Sebelum penyusunan, kod MQL diproses terlebih dahulu dan ditafsirkan ke dalam kod C++ yang sepadan, dengan itu, pembinaan bahasa yang sah dalam pewaris berkemungkinan besar akan disusun dan boleh digunakan dalam MQL. Pengatur cara yang biasa dengan C, C++ atau C# boleh mempelajari dengan mudah cara untuk menulis kod MQL

Jenis data

Jenis data fundamental yang berikut wujud dalam MQL:

  • Nilai Boolean;
  • Nombor titik apung ketepatan tunggal dan berganda;
  • Integer, juga ketetapan tunggal dan berganda, ditandatangani dan tidak ditandatangani;
  • Char untuk menyimpan data karakter;
  • Penghitungan enum, tetapi kelas enum tidak disokong;
  • Struktur, kelas dan templat kelas.

Pada masa yang sama, terdapat sokongan tambahan untuk warna, rentetan (string) dan tarikh masa seperti jenis terbina dalam yang sudah tentu memudahkan hidup pembangun. Bekerja dengan jenis-jenis ini telah diatur dalam gaya C menggunakan fungsi global. Tingkah laku rentetan MQL berbeza secara asas daripada keluarga std::string bagi templat C++03. Jangan keliru.

LiteFinance: Jenis data

Sintaks bahasa MetaQuotes

MQL mempunyai sintaks yang serupa dengan C++. Semantik standard C++03 telah dipindahkan ke MQL dengan perubahan kecil. Baru-baru ini, MQL mematuhi standard C++03 dari segi keupayaan.

Perbezaan utama antara MQL dan C++ ialah semantik penunjuk. Jika dalam C++ ia adalah alamat maya di mana data disimpan, MQL pula ialah pemerihal, analog pemerihal standard POSIX, pengecam angka, sejenis pembalut pada penunjuk mentah di mana objek dicipta dalam memori dinamik dan dikaitkan dengan pengecam ini wujud. Pengendali anak panah “->” tidak disokong untuk penunjuk MQL, dereferencing dilakukan menggunakan pengendali titik “.”. Pemerihal seperti penunjuk mesti dipadam selepas program tamat. Akan tetapi, jika anda lupa untuk menghapuskan objek yang dirujuk oleh pengendali ini, waktu jalan akan melakukannya untuk anda apabila program ‘deinitialized.’

Bahasa MQL kekurangan konsep pemboleh ubah sementara dan pergerakan data. Meluluskan pemboleh ubah mengikut rujukan dan nilai berbeza daripada C++ dan dilaksanakan dalam MQL dalam cara tersendiri. Sebarang objek kompleks atau kelas tersuai akan diserahkan kepada fungsi dengan merujuk sama ada anda menggunakan pengendali Ampersand atau tidak. 

Terdapat beberapa sekatan pada versi terdahulu. Anda tidak boleh menulis fungsi dan templat dengan bilangan argumen yang berubah-ubah. Tetapi, perkara luar biasa ialah beberapa fungsi terbina dalam seperti iCustom (kita akan kaji kemudian dalam artikel ini), printf, StringFormat, PrintFormat menggunakan bilangan argumen yang berubah-ubah. Paradoks!

Bekerja dengan data dan rujukan objek berbeza dalam beberapa aspek untuk C++, tetapi semuanya boleh dihapuskan dengan mudah menggunakan mesej daripada penyusun. Terdapat perbezaan dalam tandatangan pembangun salinan dan pengendali tugasan salinan disebabkan semantik berbeza bagi pemboleh ubah penghuluran mengikut rujukan. Selain itu, tiada semantik pergerakan untuk pemboleh ubah bergerak dan tika objek dalam MQL.

Perbezaan antara kod MQL4 dan MQL5

Perbezaan antara generasi keempat dan kelima bahasa MQL adalah disebabkan perbezaan antara platform MetaTrader4 dan MetaTrader5 itu sendiri. Ia perlu diketahui bahawa sejak binaan 600 MT4 dikeluarkan, hanya versi kelima MetaQuotes Language Editor digunakan untuk menulis dan menyusun program dalam MQL4 dan MQL5. Secara khusus, bahasa beroperasi dalam cara berbeza dengan operasi perdagangan disebabkan platform kelima mempunyai lebih banyak mod perdagangan dan konsep pesanan, urus niaga dan kedudukan adalah diasingkan.

Kini, untuk menghantar permintaan, hanya fungsi OrderSend digunakan, berbeza dengan versi keempat, di mana fungsi berbeza digunakan untuk menetapkan pengubahsuaian atau memadam pesanan.

 MQL4MQL5
Rangka masa9 (M1, M5, M15, M30, H1, H4, D, W, MN)21 (M1, M2, M3, M4, M5, M6, M10, M12, M15, M20, M30, H1, H2, H3, H4, H6, H8, H12, D1, W1, MN1)
Gaya lukisan

6

DRAW_NONE

DRAW_LINE

DRAW_SECTION

DRAW_HISTOGRAM

DRAW_ARROW

DRAW_ZIGZAG

Dengan binaan 600, nombor telah menjadi konsisten dengan versi kelima    

18

DRAW_NONE

DRAW_LINE

DRAW_SECTION

DRAW_HISTOGRAM

DRAW_HISTOGRAM2

DRAW_ARROW

DRAW_ZIGZAG

DRAW_FILLING

DRAW_BARS

DRAW_CANDLES

DRAW_COLOR_LINE

DRAW_COLOR_SECTION

DRAW_COLOR_HISTOGRAM

DRAW_COLOR_HISTOGRAM2

DRAW_COLOR_ARROW

DRAW_COLOR_ZIGZAG

DRAW_COLOR_BARS

DRAW_COLOR_CANDLES

Model pelancaran dipacu peristiwa     

OnInit

OnStart

OnDeinit

OnTick

OnCalculate

OnTimer

OnChartEvent

OnTester

 

OnInit

OnStart

OnDeinit

OnTick

OnCalculate

OnTimer

OnTrade

OnTradeTransaction

OnBookEvent

OnChartEvent

OnTester

OnTesterInit

OnTesterDeinit

OnTesterPass

Perdagangan

OrderSend

OrderModify

OrderDelete

Tingkah laku ditetapkan oleh set parameter berasingan bagi setiap fungsi. Ia merumitkan program tulisan dan debugging.

OrderSend

Satu fungsi untuk semua operasi. Tingkah laku yang diperlukan ditetapkan dalam struktur MqlTradeRequest. Tindak balas dikembalikan ke struktur MqlTradeResult. Ia lebih mudah untuk mereka bentuk tingkah laku, menguji keputusan dan menyahpepijat program.

Penampan data penunjuk32512
Penunjuk terbina dalamKuantiti: 30

Kuantiti: 38

Penunjuk dicipta menggunakan pengendali. Bilangan salinan dan penggunaan memori telah dikurangkan.
Mod Perdagangan    Lindung Nilai

Netting

Lindung Nilai

Saham

Alat grafik OpenCL dan DirectX TidakYa
Generasi robot perdagangan    TidakYa. Pada masa yang sama, anda boleh tetapkan modul isyarat tersuai.

Jadi, terdapat beberapa perbezaan, tetapi ia wujud. Selepas kemas kini dalam binaan 600, MQL4 berbeza dengan MQL5 hanya dalam bahagian di mana satu platform berbeza daripada yang lain. Blog LiteFinance sudah mempunyai artikel khusus mengenai perbandingan antara MetaTrader 4 dan MetaTrader 5 yang saya sangat sarankan untuk dibaca jika anda ingin meluaskan pengetahuan anda berkenaan tajuk ini.

Pengaturcaraan penunjuk MQL4: Cara menulis Penasihat Pakar dalam MQL4 atau MQL5

Sebelum anda mula menulis Penasihat Pakar, anda perlu faham yang anda mestilah mempunyai strategi perdagangan. Hanya dengan itu, anda boleh merealisasikan idea tersebut dalam bentuk algoritma rasmi. Kod itu sendiri hanya menyediakan alat bahasa untuk pelaksanaan idea tertentu.

Jadi, perkara pertama yang anda perlukan ialah mencipta strategi perdagangan. Persoalan untuk membangunkan strategi ini berada di luar skop artikel ini, jadi mari kita ambil sesuatu yang mudah sebagai satu contoh. Mari kita andaikan yang berikut. Semasa tempoh aktiviti rendah instrumen pada “mendatar”, anda boleh membuka urus niaga dalam arah bertentangan dengan paras had yang kecil. Ini akan membolehkan anda memanfaatkan pergerakan pasaran sisi yang kecil dan mengaut keuntungan.

Kita akan tulis Penasihat Pakar yang akan mengautomatikkan pembukaan manual perdagangan dan kawalan terhadap hadnya dan akan melancarkannya dalam akaun perdagangan semasa tempoh mendatar. 

Pada awalnya, prosedur adalah sama tanpa mengira versi bahasa. Untuk menulis program dalam MQL, anda perlu memasang MetaTrader Client Terminal, pakej penghantaran yang melibatkan MetaEditor. Sekarang, kita boleh lancarkan MetaEditor secara langsung daripada direktori perdagangan terminal: Tools dan kemudian MetaQuotes Language Editor (F4). Dalam tetingkap MetaEditor pada menu utama, klik File -> New. Perkara sama selesai selepas mengklik New dalam menu grafik.

Cara mencipta robot perdagangan MQL4

Dalam Wizard aplikasi pembina MQL4 EA, pilih Penasihat Pakar (templat) dan klik Seterusnya.

LiteFinance: Cara mencipta robot perdagangan MQL4

Kemudian, masukkan parameter yang menyediakan pengguna dengan antara muka untuk berinteraksi dengan program, dan sahkan dengan mengklik OK. Di sini kita tambah:

  1. Alat untuk perdagangan
  2. Pilihan arah untuk urus niaga pertama yang akan dibuka oleh robot. Sekarang, ini adalah jenis integer, tetapi kemudian kita akan betulkan kod supaya hanya Beli atau Jual yang boleh dipilih.

LiteFinance: Cara mencipta robot perdagangan MQL4

MetaEditor akan menyertakan secara automatik pengendali peristiwa OnTick dalam kod. Selebihnya anda perlu pilih sendiri. Seperti yang anda boleh lihat, kami juga mempunyai akses ke OnTimer yang dipanggil setiap kali dengan kekerapan ditetapkan untuk pemasa dan OnChartEvent yang akan dipanggil sebagai tindak balas kepada tindakan pengguna pada carta. Di sini, anda boleh lihat yang lebih banyak pengendali disediakan untuk MQL5.

LiteFinance: Cara mencipta robot perdagangan MQL4

Pergi lebih lanjut dan pilih pengendali peristiwa dalam mod uji. Dalam MQL5, anda boleh memilih lebih banyak peristiwa dalam mod penguji dan dengan itu, lebih banyak pengendali disediakan untuknya. 

LiteFinance: Cara mencipta robot perdagangan MQL4

Semasa dua langkah sebelumnya, saya biarkan semua pilihan tidak dipilih. Semua logik kita akan dilaksanakan dengan fungsi OnTick. Ia dipanggil pada setiap kali tik baharu untuk simbol tiba.

Selepas mengklik butang Finish, MetaEditor akan mencipta templat untuk Penasihat Pakar akan datang dengan nama dan parameter tertentu. Pengendali peristiwa terpilih juga akan disertakan dalam kod. Saya tidak akan bincangkan setiap satunya secara terperinci. Semua maklumat yang penting mengenai perkara ini boleh ditemui dalam panduan rujukan. 

LiteFinance: Cara mencipta robot perdagangan MQL4

Kod ini boleh disusun dan dijalankan dalam terminal perdagangan. Tetapi, tiada perkara yang akan berlaku. Kita mempunyai pemboleh ubah input, tetapi kita tidak lagi menggunakannya. Fungsi OnInit sentiasa memaklumkan terminal tentang pemulaan yang berjaya, manakala OnTick dan OnDeinit tidak mengandungi sebarang arahan. 

Mari mulakan dengan menulis kod.

Mari bersihkan dahulu. Buang ruang tambahan dan pendekkan komen kepada satu barisan. Kemudian kita tentukan enum TradeCmd (baris 11-14) untuk menunjukkan arah bagi perdagangan pertama dalam cara semula jadi berbanding nombor. Kemudian, tukar jenis input bagi pemboleh ubah FirstTradeDirection daripada int kepada TradeCmd (20). Langkah seterusnya ialah mencipta pemboleh ubah global statik Direction dengan jenis TradeCmd untuk mengambil kira arah urus niaga sebelumnya dan menukarnya kepada yang bertentangan untuk yang seterusnya. 

Di permulaan, saya lupa untuk menambah pemboleh ubah bagi volum urus niaga, paras henti rugi dan ambil untung dalam wizard. Kita tambahkannya sekarang dengan kata kunci input dengan tetapan luar yang selebihnya.

LiteFinance: Cara mencipta robot perdagangan MQL4

Mari kita lihat fungsi OnTick. Kita analisis ketersediaan urus niaga yang terbuka. Untuk berbuat demikian, kita ulang semula semua perdagangan terbuka menggunakan kitaran mudah dalam julat [0, TotalTrades). Kita semak satu demi satu agar simbol urus niaga yang terpilih sepadan dengan simbol yang ditetapkan dalam InputSymbol. Sebaik sahaja sekurang-kurangnya satu urus niaga tersebut ada, tiada perkara lain yang perlu dilakukan. Dan kita keluar fungsi OnTick lebih awal daripada jadual dengan Return (baris 29-35). Tunggu untuk pelancaran seterusnya.

LiteFinance: Cara mencipta robot perdagangan MQL4

Jika tidak, anda perlu membuka urus niaga. Mari rujuk kepada dokumentasi MQL4 untuk menggunakan fungsi OrderSend dalam cara yang betul dengan bantuan di mana kita akan hantar permintaan ke pelayan pedagang. Pengumuman tersebut kelihatan seperti ini:

LiteFinance: Cara mencipta robot perdagangan MQL4

Mari kita pertimbangkan parameter mengikut susunan:

  1. Simbol. Simbol sudah ada, tetapi kita tidak menyemak ketepatannya dalam apa-apa cara dan hanya bergantung pada input tepat daripada pengguna.
  2. CMD. Untuk ini, kita gunakan pemboleh ubah statik global Arah. 
  3. Volum. Ditentukan oleh pengguna. Sekali lagi, ia perlu untuk menyemak nilai yang dimasukkan untuk had: minimum, maksimum  dan langkah minimum untuk perubahan volum.
  4. Harga. Tawar jika kita membeli, Bida jika kita menjual.
  5. Gelinciran. Dalam kes kita, ia tidak begitu penting. Tetapkannya kepada 2 pip.
  6. Henti rugi. Sekali lagi, ia bergantung kepada arah transaksi. Ia hendaklah kurang daripada harga pembukaan jika kita membeli, dan lebih daripada harga pembukaan jika kita menjual.
  7. Ambil untung. Seperti henti rugi, ia bergantung kepada arah perdagangan.

4 parameter lain dengan nilai lalai tidak penting bagi kita lagi. Hasilnya, untuk membuka urus niaga, kita mempunyai: InputVolume (cth. volum), Direction (cth. arah urus niaga), InputSymbol (cth. simbol), tetapkan gelinciran kepada 1 titik. Apa yang kita perlu kira bergantung pada Direction: price (cth. harga buka), sl (cth. henti rugi) dan tp (cth. ambil untung). Jika kita beli, maka harga ialah Tawar, Henti rugi lebih rendah daripada harga semasa, Ambil untung lebih tinggi, sebaliknya, jika kita jual, maka harga ialah Bida, Henti rugi lebih tinggi berbanding harga semasa dan Ambil untung lebih rendah. Kita juga perlukan 2 pemboleh ubah tambahan. Pemboleh ubah pertama ialah menukar paras had daripada titik kepada titik nilai nominal, iaitu nilai minimum di mana sebut harga untuk simbol boleh berubah. Pemboleh ubah kedua ialah untuk normalisasi nilai dengan titik apung digit yang merupakan bilangan digit ketara dalam bahagian pecahan sebut harga.

Tukar ini kepada MQL.

LiteFinance: Cara mencipta robot perdagangan MQL4

Kita teruskan kepada membuka urus niaga. Kita tetapkan semula pemboleh ubah sistem _LastError dengan fungsi terbina dalam ResetLastError. Kita hantar permintaan menggunakan OrderSend, dan tulis keputusan ke dalam pemboleh ubah result. Terdapat dua pilihan untuk pembentukan peristiwa:

  1. Urus niaga telah berjaya dibuka jika result mengandungi nilai yang lebih besar daripada sifar, urus niaga ticker. Jadi, kita perlu mengubah nilai Arah untuk membuka urus niaga dalam arah bertentangan pada waktu akan datang.
  2. Jika result mengandungi nilai negatif, maka urus niaga tidak dibuka. Anda perlu menyemak ralat terakhir menggunakan GetLastError, buat analisis dan lakukan sesuatu: cuba lagi, tidur sebentar, output maklumat nyahpepijat ke dalam log, dll. Untuk mudah, saya output nilai ralat terakhir kepada log.

Mari kita lihat.

LiteFinance: Cara mencipta robot perdagangan MQL4

Jadi, kita telah menulis beberapa dozen garis kod dan robot perdagangan sudah tersedia. Saya akui yang ia belum lagi berfungsi, tetapi ia boleh bertindak sebagai contoh terbaik bagi hakikat yang kod tulisan tidak memerlukan banyak pengetahuan dan usaha yang ketara.

Berikut ialah senarai lengkap, sekiranya anda perlukannya.

LiteFinance: Cara mencipta robot perdagangan MQL4

Kami susun kod dan lancarkan Penasihat Pakar dalam terminal perdagangan.

Cara mencipta Penasihat Pakar dalam MQL5

Di sini MQL5 mempunyai kelebihan yang tidak dapat disangkal berbanding MQL4. Anda boleh mencipta robot perdagangan untuk versi kelima dalam beberapa klik tanpa perlu menulis baris kod tunggal.

Dalam MetaEditor, klik New dan pilih Expert Advisor (hasilkan) dalam bestari (wizard) aplikasi.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Mari namakan Expert Advisor MQL5_Generated_Robot. Secara pilihan, kami tunjukkan penulis dan laman webnya atau profil. Tambah parameter penasihat, jika perlu: simbol dan rangka masa untuk perdagangan. Klik dua kali mengaktifkan parameter, mengklik nama atau nilai pemboleh ubah membolehkan anda mengubah nilai lalai yang dicadangkan. Anda boleh tetapkan apa-apa simbol yang anda mahu. Saya tentukan sebagai semasa dalam carta di mana EA akan berfungsi. Saya tetapkan rangka masa pada M15 untuk meningkatkan kebarangkalian isyarat perdagangan. 

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Mari teruskan. Sekarang kita perlu memilih isyarat dan tetapan untuknya. Di sini anda boleh memperbaiki dan mencuba kombinasi isyarat yang dicadangkan oleh pembangun. Isyarat-isyarat ini akan menghasilkan peristiwa untuk pakar membuat urus niaga. 

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Anda boleh menambah isyarat tersuai ke bahagian ini, termasuk isyarat daripada pemantauan pada mql5.com. Pilihan berikut disediakan dengan platform secara lalai:

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Saya pilih “Trading at the intersection of two averages” dan menetapkan tempoh sama dengan 21 dan 55. Ia tidak begitu diingini untuk memilih tempoh yang sangat pendek jika anda perlu mengurangkan nombor positif palsu. Kita biarkan simbol semasa. Sebagai contoh, kita akan berdagang EURJPY dan terima isyarat daripada purata bergerak kepada data harga EURJPY yang sama. Pilih simbol berbeza di sini jika strategi anda melibatkan instrumen yang bergantung pada tingkah laku yang lain. Saya juga tetapkan rangka masa pada M15.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Sah. Kita lihat isyarat telah ditambah untuk simbol dan rangka masa semasa yang akan menghasilkan peristiwa untuk EA.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Pergi ke mod Trailing Stop. Di sini, saya telah pilih had saiz yang terhad. Saya juga tetapkan henti rugi pada 150 mata dan ambil untung pada 200 mata.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Seterusnya, kita boleh pilih satu daripada lima mod pengurusan wang untuk akaun perdagangan. Perdagangan disediakan dengan:

  • Volum perdagangan tetap;
  • Margin tetap;
  • Risiko tetap;
  • Volum perdagangan dibenarkan yang minimum;
  • Volum perdagangan optimum.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Saya selesaikan perdagangan dengan risiko tetap 1% daripada dana dalam akaun.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Klik Done dan kaut keuntungan! Kita telah mencipta Penasihat Pakar tanpa menulis baris kod tunggal.

Mari kita lihat lebih dekat dan jalankan analisis yang kecil untuk sumber.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Kepala jadual dan atribut – semuanya seperti sudah dikenali. Kemudian, terdapat rangkuman modul koleksi. Pakar ialah robot kita. MACross ialah penjana isyarat untuk lintasan Moving Average, TrailingFixedPips ialah modul kawalan paras had, MoneyFixedRisk ialah modul pengurusan risiko. Kemudian, tetapan yang melibatkan pemboleh ubah input yang menetapkan antara muka untuk berinteraksi dengan aplikasi. Ia kelihatan biasa bukan? Sudah tentu! Kita telah tetapkannya dalam Expert Advisor Generation Wizard. Pada masa akan datang, nilai lalai boleh diubah di sini.

Seterusnya, pemboleh ubah global automatik bagi jenis CExpert telah diisytiharkan yang dimulakan dengan nilai lalai. Bagi objek, ini bermaksud yang pembina lalai telah dipanggil. Dalam OnInit, EA dimulakan, isyarat dan penapis telah dicipta dan dimulakan dengan nilai-nilai yang ditetapkan dalam tetapan. Berikut ialah kod di mana saya membuang semua tanda keputusan pemulaan untuk kejayaan dan pemerihal bagi kesahihan untuk mengurangkan jumlah kod secara visual.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Di bawah, anda boleh lihat fungsi OnDeinit, OnTick, OnTimer, OnTrade. Setiap daripada satu memanggil kaedah sepadan kelas CExpert.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Jika anda lihat dengan lebih dekat, dalam penavigasi di bahagian kiri dalam folder Include -> Experts, anda boleh lihat isyarat dan modul yang tersedia dalam penghasil. Oleh itu, anda boleh tambah beberapa penyelesaian tertentu dalam penjana dan mencipta beberapa daripadanya untuk sebarang keperluan dalam beberapa klik.

Mari cuba susun kod. 0 ralat dan 0 amaran ialah kejayaan. Untuk melancarkan mod ujian strategi, tekan Ctrl dan F5 secara serentak atau klik butang dalam menu grafik di bahagian atas.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Kawalan dipindahkan ke MetaTrader Client Terminal dalam tetapan penguji strategi. Kemudian, kita pilih fail untuk menguji dan mengkonfigurasi parameter selebihnya: simbol, rangka masa, kedalaman sejarah, baki dan leveraj akaun perdagangan, dll. Terdapat banyak tetapan, untuk setiap satu daripadanya, terdapat keterangan dalam fail rujukan. Untuk maklumat lanjut mengenai tetapan dan mod ujian, fokus kepada penguji dan tekan F1.

LiteFinance: Cara mencipta Penasihat Pakar dalam MQL5

Untuk mula, tekan Start di sudut kanan bawah penguji dan jika ujian berlaku tanpa pengoptimuman, maka anda boleh memilih mod visualisasi untuk strategi anda.

Pembangun telah menyediakan keterangan bagi setiap modul terbina dalam dan isyarat pada https://www.mql5.com/en/docs/standardlibrary/expertclasses. Jangan teragak-agak untuk merujuk dokumentasi bagi meluaskan pengetahuan anda.

Kelebihan dan Kekurangan Bahasa MQL4 dan MQL5

Kelemahan utama terletak pada tujuan bahasa-bahasa ini. MetaQuotes Querying Language ialah bahasa untuk menulis aplikasi hanya untuk MetaTrader. Kod MQL hanya boleh disusun dan dinyahpepijat dalam persekitaran MetaEditor. Hanya MetaTrader Client Terminal boleh melancarkan program untuk pelaksanaan. Tiada pengurusan memori manual. Anda masih boleh memilih untuk mencipta pemboleh ubah daripada awal atau dalam skop dinamik, tapi dalam kedua-dua kes, anda tidak mempunyai akses ke alamat maya miliknya. 

Ia mempunyai lebih banyak merit. Ambang kemasukan yang rendah, terutamanya jika anda sudah mempunyai pengalaman dalam membangunkan bahasa penjenisan secara statik. Prestasi tinggi pada peringkat C dan C++. Sokongan untuk gaya pengaturcaraan berorientasikan objek: pengkapsulan dan kebolehpanjangan, warisan, polimorfisme dan kaedah maya kelas. Templat untuk kelas dan fungsi boleh dibuat, iaitu polimorfisme parametrik. Semua ini membolehkan kod digunakan semula secara banyak kali. Infrastruktur percuma termasuk terminal perdagangan, persekitaran pembangunan, penguji strategi, termasuk koleksi.

Penukaran MQL4 kepada MQL5

Mari kita pertimbangkan transformasi kemas kini program daripada satu versi kepada versi lain menggunakan contoh robot yang sebelum ini diterangkan dalam artikel ini di bahagian keupayaan bahasa. Untuk melakukan ini, cipta Penasihat Pakar kosong di MetaEditor 5 dan salin kod sumber MQL4_Example_EA Expert Advisor ke dalamnya. Anda tidak akan dapat menyusun kod ini tanpa perubahan, banyak ralat akan berlaku semasa mencuba.

Pada mulanya, hampir tiada perkara yang berubah, kecuali untuk beberapa perkara:

  1. Buang #property strict daripada direktif prapemproses, jadi ia masuk akal apabila menyusun kod MQL4.
  2. Pindahkan ciptaan pemboleh ubah statik Arah di atas fungsi pemulaan EA untuk memulakannya dalam OnInit dalam cara khas, bergantung pada kedudukan yang sesuai. Pada masa akan datang, ini akan membolehkan tetapan EA diubah di tengah-tengah proses perdagangan. 

Ambil maklum bahasa kini ia lebih mudah untuk memilih urus niaga bagi mana-mana simbol dalam MQL5 menggunakan fungsi PositionSelect terbina dalam tanpa perlu mencari semua urus niaga terbuka.

LiteFinance: Penukaran MQL4 kepada MQL5

Mari kita pertimbangkan sepenuhnya fungsi OnTick. Kita gunakan PositionSelect untuk memeriksa kedudukan terbuka bagi simbol. Jika tiada, pergi ke dalam if dan bersedia untuk menghantar permintaan bagi membuka urus niaga. MQL5 menyediakan kepada kita struktur MqlTradeRequest kerana mencipta permintaan, berbanding sekelompok parameter dalam MQL4. Sekarang saya tidak akan pertimbangkan setiap bidangnya secara berasingan. Biar saya nyatakan sama seperti dalam MQL4, kita mempunyai 4 daripada 7 parameter yang diperlukan: simbol perdagangan, arah dan sisihan daripada harga yang diminta. Kita mengira baki tiga lagi (harga pembukaan, henti rugi dan ambil untung) bergantung pada arah transaksi. Kita isi struktur mengikut susunan. Sekarang tiada keperluan untuk menormalkan nombor titik apung, jadi tidak perlu pemboleh ubah digit.

Hantar permintaan dalam versi terkini bahasa kelihatan lebih ringkas tapi padat. Semua maklumat tentang keputusan pelaksanaan fungsi OrderSend kini dikembalikan kepada kita dalam MqlTradeResult.

LiteFinance: Penukaran MQL4 kepada MQL5

Saya berakhir dengan kod berikut selepas menyahpepijat dan beberapa siri ujian. Saiz tidak berubah walaupun kita telah membuat perubahan dalam logik yang memerlukan tindakan tambahan di peringkat pemulaan dalam OnInit.

LiteFinance: Penukaran MQL4 kepada MQL5

Mari kita simpulkan. Menaik taraf aplikasi MQL4 kepada MQL5 itu mudah. Jika anda mempunyai pengetahuan asas MQL, ia tidak sukar untuk melakukannya sendiri.

Selanjutnya, saya telah pilih secara khusus beberapa soalan lazim MQL dan cuba menjawabnya secara ringkas dan terperinci.

SOALAN LAZIM MQL4 dan MQL5

MetaQuotes Language ialah bahasa pengaturcaraan peringkat tinggi yang digunakan untuk menulis aplikasi ke dalam platform perdagangan MetaTrader dengan penjenisan lemah statik berserta sintaks yang serupa dengan versi terdahulu C++. MetaQuotes Language melaksanakan konsep multiparadigma. Semasa penulisan kod, anda boleh menggunakan pendekatan berorientasikan objek, berfungsi, prosedur atau campur. OOP menyokong pengkapsulan, warisan dan polimorfisme. Fungsi dan templat kelas boleh didapati. Malangnya, metapengaturcaraan adalah tidak boleh dengan pengiraan masa kompil.

Untuk menulis program dalam MQL, anda perlu memasang MetaTrader Client Terminal. Pakej penghantarannya termasuk persekitaran untuk membangunkan aplikasi dalam MQL yang dipanggil MetaEditor. Kita melancarkannya menggunakan menu utama Tools -> MetaQuotes Language Editor (F4). Sekarang, kita bersedia untuk menulis program MQL pertama kita.

LiteFinance: SOALAN LAZIM MQL4 dan MQL5Keputusan menjalankan program tersebut dalam terminal perdagangan adalah output berikut:

LiteFinance: SOALAN LAZIM MQL4 dan MQL5

Mq4 ialah fail teks ringkas. Sambungan ini membolehkan sistem operasi mengaitkan fail itu sendiri secara automatik dengan persekitaran pembangunan MetaEditor. Fail ex4 ialah fail boleh laku yang tidak boleh dibaca sebagai teks dan mengandungi data dalam kod binari.

Semasa penyusunan, kod program mq4 ditukar kepada kod ex4 boleh laku. Transformasi ini mudah dan berlaku dengan kerap semasa mencipta program. Inilah perkara sebenar yang dibuat oleh penyusun.

Proses berbalik ialah nyahkompilasi (nyahhimpun) kod ex4 boleh laku kepada kod teks mq4, ia jarang berlaku dan selalunya tidak mempunyai asas undang-undang. Projek sumber terbuka biasanya menyediakan kod sumber kepada sesiapa yang bersetuju dengan peraturan pengedaran, transformasi dan penggunaan mereka. Projek selebihnya melindungi semua pembangunannya dengan undang-undang hak cipta. Tiada alat standard untuk melaksanakan nyahkompilasi.

Bagaimana jika anda benar-benar perlu menukar kod boleh laku fail ex4 kepada kod program? Berikut adalah beberapa jawapan untuk soalan ini, disusun mengikut turutan kerumitan pelaksanaan:

  1. Hubungi penulis program dan ketahui keadaan-keadaan untuk mendapatkan kod.
  2. Cari pengatur cara yang boleh melaksanakan logik dalam program ex4 anda dan berunding dengannya.
  3. Belajar MQL dan tulis program sendiri serupa dengan yang anda miliki dalam bentuk ex4. Laluan ini tidak mudah, ia hanya meluaskan kemungkinan anda.
  4. Jalankan nyahkompilasi sendiri atau dengan bantuan seseorang. Sila berwaspada dengan liabiliti yang disediakan oleh undang-undang hak cipta.

Fail mq4 dan mq5 ialah fail teks ringkas yang mengandungi kod MQL dalam bentuk teks. Jika anda tidak mahu berkongsi kod sumber milik anda sendiri, perkara paling mudah untuk dilakukan dalam situasi ini ialah tidak mengagihkan fail dalam format ini.

Cara mudah untuk melindungi kod anda ialah mengedarnya dalam format ex4 (ex5). Fail dalam format ini dihasilkan oleh MetaEditor apabila menyusun kod mq4 (mq5). Selaras dengan peraturan bahasa, arahan dalam teks ditukar kepada kod binari boleh laku yang dilaksanakan oleh terminal apabila anda menambah penasihat, skrip atau penunjuk ke dalam carta.

Nyahhimpun kod boleh laku kembali kepada asal bukanlah tugas mudah yang membantu melindungi kod sumber anda. Dalam apa-apa kes, apabila nyahhimpun kepada kod sumber, nama pemboleh ubah kod anda yang berharga akan hilang dan ia akan menjadi lebih sukar untuk memahami logik program.

MetaQuotes Language ialah program pengaturcaraan OOP peringkat tinggi dengan penjenisan statik yang lemah, diwarisi daripada C++. MQL5 ialah pembangunan logik bahasa MQL4 yang telah dikeluarkan bersama-sama dengan platform MetaTrader 5. Kemudian, ia mempunyai kesan signifikan kepada pembangunan MQL4 dan menyumbang kepada kemas kininya.

Dalam MQL5, tiada alat untuk menghasilkan Penasihat Pakar yang menjadikannya boleh untuk mengabaikan sepenuhnya keperluan untuk menulis kod secara bertulis. Dalam beberapa klik, anda akan menerima robot perdagangan berserta kod sumber. Menetapkannya untuk perdagangan adalah dilakukan menggunakan isyarat. Kawalan keadaan akaun perdagangan adalah berdasarkan strategi pengurusan risiko dan wang yang dibekalkan dengan terminal perdagangan.

Memuat turun penunjuk tidak begitu berbeza daripada memuat turun sebarang fail lain ke komputer anda. Ini mesti dilakukan pada komputer kerana MQL hanya boleh digunakan dengan versi komputer MetaTrader Client Terminal. Buka direktori kerja terminal (File -> Open Data Folder). Seterusnya, pergi ke direktori MQL/penunjuk dan tampal penunjuk yang telah dimuatkan di sini. Selepas anda memulakan semula terminal, penunjuk akan tersedia dalam Navigator. Perkara yang anda perlu lakukan ialah memindahkannya ke carta dan melaraskan parameter input.

Hakikatnya, semua program MQL4 atau MQL5 dicipta menggunakan versi kelima MetaQuotes Language Editor. Terdapat keserasian ke belakang antara versi utama dan kecil bahasa. Satu-satunya had dalam kes ini ialah MetaQuotes Server itu sendiri. Beberapa fungsi dan struktur tiada dalam versi keempat platform. Logik pemprosesan operasi perdagangan dalam versi kelima pelayan telah diubah separuh. Terdapat juga perbezaan dalam struktur dalam penunjuk. Dalam versi keempat, tidak lebih daripada lapan penampan penunjuk yang boleh digunakan. Dalam MetaTrader 5, bilangan penampan telah bertambah kepada 21.

Fungsi terbina dalam iCustom membenarkan anda menggunakan isyarat daripada penunjuk untuk melaksanakan logik perdagangan dalam EA. Jika anda mempunyai penunjuk sendiri dan mahu menghasilkan isyarat perdagangan dalam penasihat untuk menjalankan operasi perdagangan, anda perlu menggunakan iCustom untuk perkara ini. Mari kita lihat dokumentasi. Di sini, anda boleh melihat definisi MQL4 yang berikut:

LiteFinance: SOALAN LAZIM MQL4 dan MQL5

Definisi MQL5:



Secara umum, ia berfungsi melakukan perkara yang sama, walaupun fungsi utama berbeza dalam versi keempat dan kelima bahasa. Mari lihat lebih dekat pada setiap parameter:
  1. Baris simbol rentetan. Simbol yang akan dikira.
  2. Rangka masa. Dalam MQL4, ia adalah jenis integer int, dalam MQL5 ia juga adalah integer, tetapi enum yang mengandungi penghitungan rangka masa.
  3. Nama parameter rentetan. Anda perlu melalui laluan ke penunjuknya (jika, contohnya, ia berada di direktori lain) dan juga nama penunjuk berserta sambungan yang kita ingin kira. Seterusnya, parameter yang diperlukan adalah lulus untuk penunjuk yang kita ingin gunakan.
  4. Senarai parameter untuk penunjuk yang akan dilancarkan oleh fungsi iCustom. Bilangannya bergantung pada bilangan argumen yang diperlukan untuk mendapatkan nilai yang diperlukan daripada penunjuk anda. Ia wajar yang fungsi mengambil bilangan parameter yang berbeza-beza. Sebagai contoh, untuk Alligator (ia disertakan dalam pakej pemasangan MetaTrader Client Terminal):

    LiteFinance: SOALAN LAZIM MQL4 dan MQL5



    Atau, sebagai contoh, untuk Ichimoku ia adalah beberapa set pemboleh ubah yang lain:



    LiteFinance: SOALAN LAZIM MQL4 dan MQL5



    Oleh itu, dalam kes pertama, anda akan perlu meluluskan 6 parameter kepada fungsi untuk mendapatkan nilai yang betul dan 3 untuk kes kedua.

  5. Terdapat dua lagi parameter dalam MQL4 versi keempat. Pertama ialah mod integer yang menandakan indeks garis penunjuk dan digunakan oleh masa jalan untuk pengindeksan dalaman penampan data.
  6. Peralihan integer seterusnya menandakan peralihan hadapan atau belakang penunjuk di sekitar garis masa.

MQL adalah waris bahasa C++ di mana pelayan perdagangan MetaTrader dan semua aplikasi yang berkaitan termasuk Client Terminal dan Language Editor ditulis. Malangnya, jika kita bandingkan MQL dengan versi sebelumnya, jelas bahawa bahasa berkembang dengan kelewatan. Pada masa ini, keupayaan MQL sepadan dengan standard 2003 C++. Ia berbaloi untuk menyatakan yang MQL adalah bahasa yang agak berkuasa dan ia boleh meliputi 99% keperluan semasa pengatur cara dan pembangun.

Pada sekali imbas, kod program dalam versi 4 dan 5 berbeza sedikit, tetapi masih ada kelainannya. Dalam versi kelima, semua makro daripada versi keempat telah digantikan dengan penghitungan.

Model peristiwa untuk melancarkan aplikasi tersuai telah dikembangkan. Sebaris pengendali peristiwa seperti OnTrade, OnTradeTransaction, OnTesterInit, OnTesterDeinit, OnTesterPass telah muncul. Tingkah laku OnTick dan OnTimer yang tidak betul dalam penguji strategi telah diperbaiki. Kini fungsi OnTimer boleh dijalankan dengan kadar pensampelan pemasa 1000 kali lebih tinggi daripada MQL4. Sekali setiap mikrosaat berbanding milisaat.

MQL5 telah menukar logik untuk menghantar pesanan perdagangan dan mekanisme untuk bertindak balas padanya. Beberapa fungsi perdagangan dalam MQL4 telah digabungkan kepada satu dengan mod operasi berbeza yang dipanggil OrderSend. Proses perdagangan itu sendiri dalam MetaTrader 5 mula berbeza daripada perdagangan pada platform keempat. Mod netting kedudukan telah diperkenalkan sebagai tambahan kepada fungsi yang membenarkan transaksi lindung nilai. Selain daripada pesanan MT4, kedudukan dan perdagangan telah muncul. Kini bahasa mempunyai fungsi OrderSendAsync untuk menghantar permintaan ke pelayan perdagangan dalam mod tak segerak.

Semua makro MQL4 dalam MQL5 telah digantikan dengan penghitungan, jadi penyusun menunjukkan penukaran jenis tersirat kepada pembangun.

MetaTrader 5 membenarkan anda berdagang dengan 21 rangka masa standard berbanding 9 rangka masa dalam MetaTrader 4. Penunjuk dalam MQL5 menerima bilangan besar penampan pada carta.

Menukar MQL4 kepada MQL5 adalah tugas remeh untuk pengatur cara baharu, tetapi ia akan memerlukan perhatian dan kesabaran anda. Penyusun akan menunjukkan sendiri kepada anda perkara yang paling tidak serasi dengan MQL5.

Perhatian perlu diberi kepada pemprosesan pesanan perdagangan dan menghantarnya kepada pelayan.

Dalam MQL4, permintaan perdagangan dilaksanakan menggunakan fungsi OrderSend dan set parameternya. Pengubahsuaian pesanan dan pemadaman pesanan belum selesai dilaksanakan oleh fungsi berbeza. Hasil pertanyaan ditentukan oleh nilai Boolean yang dikembalikan di akhir fungsi. Analisis keputusan dikurangkan untuk menentukan kod pulangan pelayan menggunakan fungsi GetLastError.

MQL5 mempunyai struktur khusus MqlTradeRequest untuk menghantar pesanan perdagangan ke pelayan. Anda perlu mengisinya dengan jenis operasi dan pesanan yang sesuai. Untuk mendapatkan hasil, anda perlu mengisytiharkan dan meluluskan tika struktur MqlTradeResult mengikut rujukan apabila memanggil OrderSend untuk menerima maklum balas daripada pelayan, gabungkan parameter berbeza yang sebelum ini diluluskan apabila memanggil OrderSend ke struktur tunggal MqlTradeRequest dan hantar ke pelayan. Kita analisis struktur MqlTradeResult yang diterima sebagai maklum balas. Semua maklumat yang perlu akan tersedia dalam maklum balas daripada pelayan.

Beri perhatian khusus kepada pengendali peristiwa dalam kod anda. MQL5 mempunyai OnTesterTick, OnTesterTimer, OnBookEvent sebagai tambahan. Aplikasi pelbagai dilancarkan sebagai tindak balas kepada peristiwa daripada terminal perdagangan.

Untuk yang pakar:

  • OnInit
  • OnDeinit
  • OnTimer
  • OnTick
  • OnChartEvent
  • OnTester

Untuk penunjuk:

  • OnInit
  • OnDeinit
  • OnTimer
  • OnCalculate
  • OnChartEvent
  • OnTester

Untuk skrip:

  • OnStart (pengendali ini tidak boleh digunakan dalam penunjuk dan skrip).


Tiada kemudahan pelancaran untuk koleksi yang disertakan kerana ia digunakan secara eksklusif dalam projek besar yang lain.

Satu lagi perbezaan ialah pemboleh ubah pratentu Tawar, Bida serta tatasusunan Open [], High [], Low [], Close [], Volume [], Time [] tiada dalam MQL5. Oleh itu, kod program mesti dibetulkan untuk mendapatkan data ini secara tersendiri menggunakan fungsi terbina dalam untuk mengakses siri masa CopyRates, CopyOpen, CopyHigh, dll. Isytiharkan tatasusunan dinamik dan dapatkan data ke dalamnya. Fungsi yang menyediakan keputusan akan menjaga pensaizan semula tatasusunan dengan sendirinya.


P.S. Adakah anda suka artikel saya? Kongsikan di laman sosial: itu menjadi "penghargaan" yang terbaik :)

Pautan link:

  • Saya mencadangkan untuk berdagang dengan broker yang dipercayai di sini. Sistem membenarkan anda berdagang sendiri atau menyalin pedagang yang berjaya dari seluruh dunia.
  • Gunakan kod promo BLOG untuk mendapatkan bonus deposit 50% di platform LiteFinance. Hanya masukkan kod ini di ruang yang disediakan semasa membuat deposit ke akaun perdagangan anda.
  • Channel Telegram dengan analisis berkualiti tinggi, ulasan Forex, artikel latihan dan perkara lain yang berguna untuk pedagang https://t.me/forex_hari_ini_malaysia
Bahasa Metaquotes MQL4 lwn MQL5: perbezaan & tutorial pengaturcaraan

Kandungan artikel ini mencerminkan pendapat penulis dan tidak semestinya mencerminkan pendirian rasmi broker LiteFinance. Bahan yang diterbitkan di halaman ini disediakan untuk tujuan maklumat sahaja dan tidak boleh dianggap sebagai penyediaan nasihat pelaburan untuk tujuan Arahan 2014/65/EU.
Menurut undang-undang hak cipta, artikel ini dianggap sebagai harta intelek, termasuk larangan menyalin dan mengedarkannya tanpa kebenaran.

Rate artikel ini:
{{value}} ( {{count}} {{title}} )
Mula berdagang
Ikuti kami dalam rangkaian sosial!
Live Chat
Tinggalkan maklumbalas
Live Chat