MetaQuotes Language 4 dan 5 adalah alat untuk mengembangkan aplikasi untuk Terminal MetaTrader Klien berdasarkan platform keluarga MetaTrader generasi keempat dan kelima. Bahasa-bahasa ini memberi pengguna alat untuk mengembangkan strategi trading otomatis sisi klien.
Artikel tersebut mencakup topik-topik berikut:
Saya telah menyiapkan untuk Anda tutorial terperinci tentang pemrograman MetaTrader MQL4 vs MQL5. Setelah membaca artikel ini, Anda akan memahami apa itu MQL, perbedaan antara dua versi bahasa terbaru, dan cara menggunakannya. Di sini Anda akan menemukan instruksi rinci dengan gambar-gambar tentang bagaimana menulis sebuah expert advisor. Ayo mulai!
Apa itu MQL4 dan MQL5?
Dalam banyak hal, bahasa MQL4 dan MQL5 sangat mirip. Oleh karena itu, kami akan berbicara secara terpisah tentang perbedaannya, tetapi untuk saat ini kami akan setuju untuk memanggil keduanya MQL dalam bentuk tunggal dan tanpa menentukan versinya.
MQL adalah bahasa pemrograman yang dibangun di dalam platform MetaTrader. Lingkungan pengembangan MetaQuotes Language Editor digunakan untuk menulis robot trading Anda sendiri, indikator atau aplikasi lain di MQL, serta untuk mengkompilasi dan men-debugnya. Lingkungan ini disediakan dengan Terminal MetaTrader Klien bersama dengan semua informasi referensi.
Jika Anda pernah berinvestasi pada aset tertentu minimal satu kali, mungkin Anda baru saja membeli dolar untuk disimpan di bank, maka Anda paham bahwa investasi membutuhkan kendali yang tiada henti. Saya yakin Anda telah bertanya pada diri sendiri pertanyaan seperti ini lebih dari sekali:
- Apakah sudah waktunya untuk keluar dari trading saat harga berada di puncaknya?
- Bagaimana cara menentukan apakah harga suatu aset akan terus naik atau pasar akan berbalik?
- Mungkin saat ini sinyal palsu diterima dan tidak perlu mengambil resiko dan terburu-buru untuk membuka posisi?
Anda perlu mengikuti pasar dan membuat keputusan trading tepat waktu. Dianjurkan untuk melakukan ini siang dan malam di sesi yang paling aktif. Ketika pekerjaan dilakukan dengan beberapa aset pada saat yang sama, situasinya menjadi semakin parah.
MQL memungkinkan Anda menerapkan strategi atau algoritme trading apa pun dalam bentuk program komputer. Kemudian program ini diluncurkan dan terus berjalan di workstation di Terminal MetaTrader Klien. Selain itu, set pengiriman mencakup sejumlah robot trading, indikator, dan skrip dari pengembang platform dalam bentuk kode sumber, yang sangat memudahkan pengembangan bahasa dan teknik yang melekat padanya. Juga MQL disediakan dengan informasi referensi online dan offline yang terperinci. Ada komunitas besar seputar bahasa ini.
Katakanlah Anda telah menemukan beberapa indikator keren atau algoritme trading pintar yang ingin Anda gunakan dalam pekerjaan Anda atau mungkin Anda ingin menganalisis pasar menggunakan neural network? Tidak ada batasan. Dengan MQL, Anda dapat menerapkan ide apa pun dalam bentuk indikator, expert advisor, atau aplikasi lain, mengompilasi, men-debug, memeriksa data historis di penguji strategi - semua tanpa melibatkan risiko finansial dan menggunakannya secara aktif dalam trading.
Mari kita rangkum! MQL memecahkan masalah menulis utilitas untuk memantau keadaan akun trading, menghitung indikator dan level, menerima sinyal trading dan menentukan titik masuk dan keluar dari pasar. Alat bahasa memungkinkan robot atau indikator trading untuk mengatur pertukaran informasi dengan server jarak jauh menggunakan protokol TCP, termasuk enkripsi TLS atau protokol HTTP. Anda dapat mengirim data melalui FTP serta pemberitahuan push ke klien seluler MetaTrader atau ke email pengguna. Setelah program yang ditulis dengan baik dan di-debug akan berfungsi hingga Anda memutuskan untuk membuat perubahan atau menggantinya sepenuhnya dengan yang lain. Yang perlu Anda perhatikan hanyalah kontrol umum.
Kisah di balik Bahasa MQL4 dan MQL5
MQL muncul sebagai hasil dari pengembangan evolusioner platform. Ini adalah alat untuk pengelolaan otomatis akun trading di MetaTrader. Saya tidak akan membahas poin ini secara mendetail, tetapi membahasnya secara dangkal.
- MetaQuotes merilis Bahasa MetaQuotes bersama dengan platform MetaTrader, yang sebelumnya adalah aplikasi FXCharts. MQL berkembang ke versi kedua bersama dengan pembaruan MetaTrader 3. Di sini MetaQuotes meluncurkan API, yang diberikan kepada klien sebagai lapisan tambahan antara MetaTrader Klien dan MetaTrader Server.
- Rilis platform generasi keempat berlangsung pada tanggal 1 Juli 2005. Bersamaan dengan itu, MQL4 juga dirilis. Kompatibilitas mundur dengan versi bahasa sebelumnya telah hilang. MetaQuotes juga berhenti mendukung API terminal klien, tetapi memperluas kemampuan bahasanya sendiri dan menyediakan cara untuk mengintegrasikan pustaka DLL khusus ke dalam aplikasi MQL. API tetap tersedia hanya untuk broker di tingkat server, administrasi dan manajemen.
Pada bulan Juni 2010, setelah banyak rilis, MetaTrader 5 diluncurkan. MetaQuotes mendesain ulang logika trading, menghapus sebagian besar batasan yang diberlakukan oleh struktur internal platform. Namun hingga saat ini MT5 belum bersaing dengan generasi keempat dalam hal popularitas.
Pada bulan Februari 2014, MQL4 diperbarui bersama dengan 600 build terminal klien MT4. MetaQuotes menyempurnakan bahasanya, memperkenalkan sebagian besar fitur dari MQL5 dan pada saat yang sama mempercepatnya ke level penerus.
Fitur bahasa pemrograman MQL4 dan MQL5
MQL digunakan untuk membuat strategi trading otomatis. Kode MQL awalnya diinterpretasikan ke dalam kode C++, yang kemudian dikompilasi menjadi kode yang dapat dieksekusi yang bekerja di dalam terminal sebagai pustaka dinamis yang disertakan. Jika kita menggambar paralel dengan pendahulunya, maka itu akan mirip dengan menyertakan pustaka DLL dalam kode yang dapat dieksekusi dari program utama. Pendekatan ini berkontribusi pada kemudahan pengembangan dan ambang rendah untuk masuk ke bidang trading otomatis. Bahasa ini populer di kalangan trader, meskipun spesialisasi dan ketergantungan bahasanya sempit pada platform.
MetaQuotes menjaga penggunanya dan menyediakan semua aplikasi mereka dengan informasi bantuan yang terperinci. Referensi untuk pemrograman MQL4 dan MQL5 disertakan dengan MetaEditor dalam beberapa bahasa dalam bentuk file HTM. Oleh karena itu, Anda selalu memiliki panduan mendetail dengan contoh kode tentang cara mengimplementasikan perilaku yang diperlukan.
Komunitas besar trader dan pemrogram telah terbentuk seputar MQL. Ada alat untuk memfasilitasi komunikasi antara programmer dan trader. Lapisan aplikasi siap pakai telah terbentuk untuk menyederhanakan proses trading. Ada pasar untuk bertukar aplikasi secara berbayar atau gratis yang tersedia di mql5.com. Terminal trading mengintegrasikan toko aplikasi, basis kode, artikel, dan sinyal dari trader lain. Toko aplikasi menawarkan ratusan solusi berbayar dan gratis seperti indikator, advisor, skrip, dan semua jenis utilitas. Ini dalam kasus lebih mudah untuk membeli program yang sudah jadi daripada untuk "menemukan kembali roda".
Jika Anda telah dengan tegas memutuskan untuk menguasai MQL sendiri dan terjun ke dunia pembuatan aplikasi Anda sendiri, Anda dapat menggunakan artikel ini untuk mempelajari tentang masalah yang dihadapi pemula saat mengambil langkah pertama ke arah ini. Pembaca mahir tidak mungkin mempelajari sesuatu yang baru dari teks di bawah ini.
Developer memberikan dukungan informasi kepada komunitas MQL dengan rutin menerbitkan tutorial berupa artikel tentang berbagai topik dari dunia trading. Penulis artikel mempertimbangkan teknik pemrograman baru, termasuk pembuatan neural network, analisis dan solusi masalah dan batasan bahasa, analisis dan pengujian strategi trading, pencarian dan implementasi algoritma baru.
MQL Wizard menawarkan 8 opsi untuk MQL4 dan 10 opsi untuk MQL5. Berikut adalah tangkapan layar dari file wizard untuk kedua versi bahasa tersebut.
Mari pertimbangkan yang paling populer:
- Expert Advisor / Robot trading;
- Indikator;
- Script;
- Include file library (.mqh)
Setelah kompilasi, aplikasi ini dalam bentuk kode yang dapat dieksekusi ditempatkan di direktori yang sesuai dari Terminal MetaTrader Klien (File -> Open Data Folder): Expert, Indikator, Skrip, dll. Kemudian, setelah inisialisasi pada grafik, mereka diluncurkan sebagai tanggapan atas peristiwa yang dihasilkan oleh Terminal MetaTrader Klien selama operasi. Events adalah pemicu untuk meluncurkan program khusus dan memungkinkan Anda melacak inisialisasi dan deinisialisasi, penerimaan kutipan baru, peristiwa khusus pada diagram, dan banyak lagi.
Selain itu, sekarang dimungkinkan untuk membuat aplikasi dengan Python. Karenanya, alat Python telah tersedia di terminal trading.
Penangan kejadian berikut dijelaskan dalam Referensi MQL4.
Di MQL5, jumlah penangan telah ditingkatkan dibandingkan dengan generasi sebelumnya. Sekarang daftarnya terlihat sebagai berikut:
Kemudian daftar acara telah diperluas. Dan sekarang tampilannya sebagai berikut:
Robot trading atau Expert Advisor
Dalam komunitas trader, ini juga disebut sebagai Expert. Expert Advisor dilampirkan pada grafik di Terminal MetaTrader Klien dan bekerja terus-menerus selama terminal trading berjalan dan koneksi ke server trading tersedia. Expert Advisor digunakan untuk benar-benar menerapkan strategi trading apa pun, mengontrol status akun, melakukan operasi trading dalam kondisi tertentu, dan mengelola objek grafis. Setiap kali robot trading menerima centang baru untuk suatu instrumen, ia mulai bekerja membuka trading. Expert Advisor juga dapat diluncurkan untuk menanggapi sejumlah peristiwa lain: OnTimer, OnChartEvent, OnTesterTimer, dll.
Expert Advisor digunakan untuk membuat antarmuka pengguna. Robot, serta indikator, memiliki akses ke objek grafis.
Di bawah ini adalah kode untuk robot trading sederhana. Setelah setiap tanda centang baru pada simbol pada grafik di mana EA bekerja, penawaran pasar diperiksa. Jika sudah ada trading untuk beberapa simbol, EA menunggu hingga simbol ditutup. Jika tidak ada trading, maka satu dibuka ke arah yang berlawanan dengan kesepakatan sebelumnya. Parameter EA: volume, stop loss dan level take profit diatur oleh pengguna. Pada saat peluncuran pertama, ini akan membuka posisi buy pada beberapa mata uang. Setelah ditutup, yang berikutnya akan menjadi trading sell, lalu buy lagi, dan seterusnya. Dalam kasus percobaan gagal untuk membuka kesepakatan, EA menulis pesan kesalahan ke log dan tertidur selama 60 detik, kemudian percobaan diulang. EA tidak memeriksa keakuratan parameter yang dimasukkan oleh pengguna, oleh karena itu, pantau aspek ini dengan cermat. Berikut beberapa potensi masalah yang langsung terlihat:
- Kemampuan trading keseluruhan tidak dicentang. Ini dapat dinonaktifkan oleh pengguna di terminal atau secara khusus untuk advisor ini. Server trading mungkin juga memiliki batasan pada trading otomatis.
- Volume mungkin kurang dari yang lebih kecil atau lebih besar dari yang lebih besar, dan mungkin tidak cocok jika server memiliki batasan pada langkah volume. Misalnya, pengguna memasukkan 0.23 lot, dan server memiliki perubahan minimum 0.05 lot. Akibatnya, kesepakatan tidak akan dibuka dan fungsi OrderSend akan mengembalikan kesalahan.
- Level stop untuk trading juga tidak diperiksa keakuratannya. Mereka mungkin tidak sesuai dengan nilai minimum / maksimum yang diizinkan atau mungkin tidak sesuai dengan batas yang ditentukan oleh level pembekuan.
Kode paling sederhana yang dapat digunakan sebagai template untuk mengimplementasikan solusi skala besar.
Kode ini mengkompilasi dan berjalan di MetaQuotes Language Editor 5 build 2375 pada 31 Maret 2020.
Indikator
Indikator digunakan untuk menampilkan informasi tentang data harga yang dikonversi dalam beberapa cara. Semua jenis osilator, garis tren, fraktal semuanya adalah indikator. Indikator memiliki akses ke alat grafik. Ada 6 dari mereka di MQL4, sedangkan di MQL5 jumlahnya adalah 18. Misalnya, Moving Average menampilkan beberapa nilai average dan / atau dihaluskan untuk periode harga di masa lalu dan secara tidak langsung menunjukkan arah harga di masa depan untuk suatu instrumen. Ia bekerja di grafik sepanjang waktu. Indikator diperbarui dan dihitung ulang setiap kali tanda centang diterima untuk instrumen pada bagan tempat indikator bekerja, atau saat peristiwa diterima dari pengguna.
Satu atau beberapa buffer dikaitkan dengan indikator apa pun di dalam Terminal MetaTrader Klien, tempat data numerik ditempatkan. MQL4 menyediakan 32 buffer untuk satu indikator, sedangkan di MQL5 memungkinkan Anda untuk mengoperasikan 512 buffer.
Di bawah ini adalah contoh kode sumber indikator bearish, yang disediakan oleh pengembang platform bersama dengan MetaTrader4.
Script
Pengembang menggunakan skrip untuk membuat algoritme yang tidak memerlukan pemrosesan data waktu nyata. Misalnya, untuk mengunduh data statistik atau mengeluarkan informasi debug. Skrip dieksekusi satu kali saat dilampirkan ke bagan apa pun oleh acara OnStart. Ini adalah satu-satunya yang dapat diproses oleh skrip.
Gambar di bawah ini menunjukkan kode script untuk menutup semua order pasar di akun tersebut. Skrip akan memproses semua pesanan, apa pun diagram simbol tempat skrip diluncurkan. Dalam kasus ini, pending order akan diabaikan.
Hasil dari menjalankan skrip ini akan menjadi output berikut ke log MetaTrader:
Diperlukan lebih banyak upaya untuk mengajarkan skrip ini untuk memproses pending order secara terpisah di MQL4. Pertama, mari buat Properti agar skrip dapat menampilkan jendela dengan data masukan. Selanjutnya, tambahkan Enum yang berisi 3 opsi untuk menutup transaksi dengan skrip: hanya market order, hanya pending order, atau semua transaksi yang ada di akun saat ini. Kemudian kami menambahkan sebuah array untuk menyimpan tiket pending order dan mengisinya sesuai di loop For pertama. Sekarang tinggal memproses opsi penutupan transaksi yang dipilih oleh pengguna.
Hasilnya, kami mendapat skrip seperti ini, yang tidak hanya menutup semua trading tetapi juga mempertimbangkan pilihan pengguna.
Include library files (.mqh)
Ini digunakan, seperti namanya, untuk dimasukkan ke dalam jenis program lain untuk Terminal MetaTrader Klien. Pengembang berpengalaman memiliki seperangkat alat mereka sendiri yang dapat digunakan kembali berkali-kali dalam berbagai aplikasi.
Di Editor Bahasa MetaQuotes, Anda hanya perlu menentukan jalur ke file header yang disertakan relatif terhadap lokasi file tempat penyertaan dilakukan. Saat menyusun program, MetaEditor akan menemukan file ini dan menyertakan kode darinya alih-alih arahan #include. Sekarang semua kode library dapat digunakan dalam aplikasi.
Demikian pula, programmer C dan C++ menggunakan kembali kode dengan menyertakan file header dalam proyek mereka dan menautkan dengan binari.
Contoh di bawah ini menyajikan interpretasi yang paling sederhana dari larik dinamis alias std :: vector dari pustaka C++ standar. Kode ini mengkompilasi dan bekerja dengan versi MetaEditor: 5.00 build 2375 31 Maret 2020.
Jenis data dan sintaks bahasa MQL4 dan MQL5
Tipe data dan sintaks bahasa diwarisi dari C++. Sebelum dikompilasi, kode MQL akan diproses sebelumnya dan diinterpretasikan ke dalam kode C++ yang sesuai, oleh karena itu, konstruksi bahasa yang valid di pendahulunya kemungkinan besar akan dikompilasi dan akan berfungsi di MQL. Seorang programmer yang akrab dengan C, C++ atau C# dapat dengan mudah mengetahui cara menulis kode MQL.
Tipe data
Tipe data fundamental berikut ini ada di MQL:
- Boolean values;
- Single dan double-precision floating-point numbers;
- Integers, juga single dan double precision, signed dan unsigned;
- Char untuk menyimpan character data;
- Enum enumerations, tetapi enum class tidak didukung;
- Structures, classes dan class templates.
Pada saat yang sama, ada dukungan tambahan untuk warna, string, dan waktu sebagai tipe bawaan, yang, tentu saja, agak menyederhanakan kehidupan pengembang. Bekerja dengan tipe ini diatur dalam gaya C menggunakan fungsi global. Perilaku string MQL pada dasarnya berbeda dari keluarga template std :: string untuk C++ 03. Jangan membingungkan mereka.
Sintaks bahasa MetaQuotes
MQL memiliki sintaks yang mirip dengan C++. Semantik pendahulu standar C++ 03 telah ditransfer ke MQL dengan sedikit perubahan. Saat ini, MQL sesuai dengan standar C++ 03 dalam hal kapabilitas.
Perbedaan utama antara MQL dan C++ adalah semantik pointer yang berbeda. Jika di C++ itu adalah alamat virtual tempat data berada, maka di MQL itu adalah deskriptor, analog dari deskriptor standar POSIX, pengenal numerik, semacam pembungkus di atas pointer mentah, yang dengannya objek dibuat dalam memori dinamis dan terkait dengan pengenal ini ada. Operator panah "->" tidak didukung untuk penunjuk MQL, dereferensi dilakukan menggunakan operator titik ".". Deskriptor, seperti penunjuk, harus dihapus setelah program selesai. Namun, jika Anda lupa untuk menghancurkan objek yang dirujuk pegangan ini, runtime akan melakukannya untuk Anda saat program dideinisialisasi.
Bahasa MQL tidak memiliki konsep variabel sementara dan pergerakan data. Meneruskan variabel dengan referensi dan nilai berbeda dari C++ dan diimplementasikan di MQL dengan caranya sendiri. Objek kompleks atau kelas khusus apa pun akan diteruskan ke fungsi dengan referensi apakah Anda menggunakan operator Ampersand atau tidak.
Ada sejumlah batasan pada leluhur. Anda tidak dapat menulis fungsi dan templat dengan sejumlah variabel argumen. Tapi, yang luar biasa, sejumlah fungsi built-in seperti iCustom (yang akan kita analisis nanti di artikel ini), printf, StringFormat, PrintFormat mengambil sejumlah variabel argumen. Paradoks!
Bekerja dengan data dan referensi objek berbeda dalam beberapa aspek dibandingkan dengan C++, tetapi semuanya mudah dihilangkan menggunakan pesan dari compiler. Ada perbedaan dalam signatures copy constructor dan copy assignment operator karena semantik yang berbeda dari variabel yang lewat dengan referensi. Selain itu, tidak ada semantik pemindahan untuk memindahkan variabel dan instance objek di MQL.
Perbedaan antara kode MQL4 dan MQL5
Perbedaan antara bahasa MQL generasi keempat dan kelima disebabkan oleh perbedaan antara platform MetaTrader4 dan MetaTrader5 itu sendiri. Perlu dicatat bahwa sejak rilis 600 MT4 build, hanya versi kelima dari MetaQuotes Language Editor yang digunakan untuk menulis dan mengkompilasi program di MQL4 dan MQL5. Secara khusus, bahasa beroperasi dengan cara yang berbeda dengan operasi trading, karena platform kelima memiliki lebih banyak mode trading dan konsep pesanan, kesepakatan, dan posisi dipisahkan.
Sekarang untuk mengirim permintaan hanya fungsi OrderSend yang digunakan, berbeda dengan versi keempat, di mana fungsi terpisah digunakan untuk mengatur modifikasi atau menghapus pesanan.
| MQL4 | MQL5 |
Timeframe | 9 (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) |
Drawing style | 6 DRAW_NONE DRAW_LINE DRAW_SECTION DRAW_HISTOGRAM DRAW_ARROW DRAW_ZIGZAG Dengan build 600, jumlahnya 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 peluncuran berdasarkan peristiwa | OnStart OnDeinit OnTick OnCalculate OnTimer OnChartEvent OnTester
| OnInit OnStart OnDeinit OnTick OnCalculate OnTimer OnTrade OnTradeTransaction OnBookEvent OnChartEvent OnTester OnTesterInit OnTesterDeinit OnTesterPass |
Trading | OrderSend OrderModify OrderDelete Perilaku tersebut ditentukan oleh sekumpulan parameter terpisah untuk setiap fungsi. Ini mempersulit penulisan dan program debugging. | OrderSend Satu fungsi untuk semua operasi. Perilaku yang diperlukan ditentukan dalam struktur MqlTradeRequest. Responsnya dikembalikan ke struktur MqlTradeResult. Lebih mudah untuk mendesain perilaku, menguji hasilnya, dan men-debug program. |
Penyangga data indikator | 32 | 512 |
Indikator bawaan | Kuantitas: 30 | Kuantitas: 38 Indikator dibuat menggunakan pegangan. Jumlah salinan dan pemakaian memori telah dikurangi. |
Mode Trading | Hedging | Netting Hedging Stock |
Alat grafis OpenCL dan DirectX | No | Ya |
Generasi robot trading | No | Iya. Pada saat yang sama, Anda dapat menentukan modul sinyal khusus. |
Jadi, ada beberapa perbedaan, tapi memang ada. Setelah pembaruan di build 600, MQL4 berbeda dari MQL5 hanya di bagian di mana satu platform berbeda dari yang lain. Blog LiteFinance sudah memiliki artikel yang ditujukan untuk membandingkan MetaTrader 4 dan MetaTrader 5, yang sangat saya sarankan untuk dibaca jika Anda ingin memperdalam pengetahuan Anda tentang topik ini.
Pemrograman indikator MQL4: Cara menulis Expert Advisor di MQL4 atau MQL5
Sebelum Anda mulai menulis Expert Advisor, Anda perlu memahami bahwa Anda harus sudah memiliki strategi trading. Baru setelah itu Anda dapat mulai mewujudkan ide tersebut dalam bentuk algoritme formal. Kode itu sendiri hanya menyediakan alat bahasa untuk implementasi ide tertentu.
Jadi, hal pertama yang Anda butuhkan adalah strategi trading yang berfungsi. Pertanyaan untuk mengembangkan ini berada di luar cakupan artikel ini, jadi mari kita ambil sesuatu yang sederhana sebagai contoh. Mari kita asumsikan yang berikut ini. Selama periode aktivitas rendah dari instrumen "di flat", adalah mungkin untuk membuka transaksi dalam arah yang berlawanan dengan level batas kecil. Ini akan memungkinkan Anda untuk take profit dari pergerakan pasar kecil yang sideways dan menghasilkan keuntungan.
Kami akan menulis Expert Advisor yang akan mengotomatiskan pembukaan trading secara manual dan mengontrol batasnya dan akan meluncurkannya di akun trading selama periode flat.
Awalnya, prosedurnya sama terlepas dari versi bahasanya. Untuk menulis program di MQL, Anda perlu menginstal Terminal MetaTrader Klien, yang paket pengirimannya termasuk MetaEditor. Sekarang kita dapat meluncurkan MetaEditor langsung dari direktori kerja terminal, atau melalui menu utama di terminal trading: Alat dan kemudian Editor Bahasa MetaQuotes (F4). Di jendela MetaEditor di menu utama, klik File -> New. Hal yang sama dilakukan setelah mengklik New di menu grafis.
Cara membuat robot trading MQL4
Di Wizard aplikasi MQL4 EA builder pilih Expert Advisor (template) dan klik Next.
Selanjutnya, masukkan parameter yang menyediakan antarmuka bagi pengguna untuk berinteraksi dengan program, dan konfirmasi dengan mengklik OK. Di sini kami menambahkan:
- Tool untuk trading
- Pilihan direction untuk kesepakatan pertama yang akan dibuka robot. Untuk saat ini, ini adalah tipe integer, tetapi nanti kami akan memperbaiki kodenya sehingga hanya Buy atau Sell yang dapat dipilih.
MetaEditor secara otomatis akan menyertakan event handler OnTick dalam kode. Selebihnya Anda harus memilih sendiri. Seperti yang Anda lihat, kami juga memiliki akses ke OnTimer, yang dipanggil setiap kali dengan frekuensi yang disetel untuk pengatur waktu dan OnChartEvent, yang akan dipanggil sebagai respons terhadap tindakan pengguna dengan grafik. Di sini Anda dapat melihat bahwa lebih banyak penangan tersedia untuk MQL5.
Pergi lebih jauh dan pilih event handlers dalam test mode. Di MQL5 Anda dapat memilih lebih banyak event dalam test mode, dan karenanya, lebih banyak handler tersedia untuk mereka.
Selama dua langkah sebelumnya, saya membiarkan semua opsi kosong. Semua logika kita akan dieksekusi dengan fungsi OnTick. Ini dipanggil setiap kali tanda centang baru untuk simbol tiba.
Setelah mengklik tombol Selesai, MetaEditor akan membuat template untuk Expert Advisor di masa mendatang dengan nama dan parameter yang ditentukan. Event handler yang dipilih juga akan dimasukkan dalam kode. Saya tidak akan membahas masing-masing secara rinci. Semua informasi yang diperlukan tentang ini ada di panduan referensi.
Kode ini sudah dapat dikompilasi dan dijalankan di terminal trading. Tapi tidak akan terjadi apa-apa. Kami memiliki variabel input, tetapi kami belum menggunakannya. Fungsi OnInit selalu memberi tahu terminal tentang inisialisasi yang berhasil, sedangkan OnTick dan OnDeinit tidak berisi instruksi apa pun.
Mari mulai menulis kodenya.
Ayo bersih-bersih dulu. Hapus spasi ekstra dan persingkat komentar menjadi satu baris. Kemudian kami mendefinisikan enumTradeCmd (baris 11-14) untuk menunjukkan arah trading pertama dengan cara yang alami daripada angka. Kemudian ubah jenis input variabel FirstTradeDirection dari int ke TradeCmd (20). Langkah selanjutnya adalah membuat Arah variabel global statis dengan tipe TradeCmd untuk memperhitungkan arah kesepakatan sebelumnya dan mengubahnya menjadi sebaliknya untuk yang berikutnya.
Pada awalnya, saya lupa menambahkan variabel untuk volume transaksi, stop-loss, dan level take-profit di wizard. Kami menambahkannya sekarang dengan kata kunci input dan mereka dengan pengaturan eksternal lainnya.
Mari beralih ke fungsi OnTick. Kami menganalisis ketersediaan transaksi terbuka. Untuk melakukan ini, kami mengulangi semua trading terbuka menggunakan siklus sederhana dalam kisaran [0, TotalTrades). Kami memeriksa satu per satu bahwa simbol transaksi yang dipilih cocok dengan yang ditentukan di InputSymbol. Setelah setidaknya ada satu kesepakatan seperti itu, tidak ada yang perlu dilakukan. Dan kita keluar dari fungsi OnTick lebih cepat dari jadwal dengan Return (baris 29-35). Tunggu peluncuran berikutnya.
Jika tidak, Anda perlu membuka kesepakatan. Mari merujuk ke dokumentasi MQL4 untuk menggunakan fungsi OrderSend dengan benar, dengan bantuannya kami akan mengirimkan permintaan ke server trading. Deklarasi tersebut terlihat seperti ini:
Mari pertimbangkan parameter secara berurutan:
- Symbol. Kami sudah memilikinya, tetapi kami tidak memeriksa kebenaran dengan cara apa pun dan hanya mengandalkan masukan yang benar dari pengguna.
- CMD. Untuk ini, kami menggunakan variabel Direction global static.
- Volume. Ditentukan oleh pengguna. Sekali lagi, perlu untuk memeriksa nilai yang dimasukkan untuk batasan: langkah minimum, maksimum dan minimum perubahan volume.
- Price. Ask apakah kita buy, Bid jika kita sell.
- Slippage. Dalam kasus kami, itu tidak terlalu penting. Setel menjadi 2 pips.
- Stoploss. Sekali lagi, itu tergantung pada arah transaksi. Seharusnya kurang dari harga pembukaan jika kita buy, dan lebih dari harga pembukaan jika kita sell.
- Takeprofit. Seperti halnya stop loss, itu tergantung pada arah trading.
4 parameter lainnya dengan nilai default belum menarik bagi kami. Akibatnya, untuk membuka kesepakatan kita memiliki: InputVolume (yaitu volume), Direction (yaitu arah kesepakatan), InputSymbol (yaitu simbol), mengatur Slippage ke 1 poin. Apa yang perlu kita hitung tergantung pada Direction: price (yaitu harga terbuka), sl (yaitu stop loss) dan tp (yaitu take profit). Jika kita buy, maka harganya Ask, Stop loss lebih rendah dari harga saat ini, Take profit lebih tinggi, sebaliknya, jika kita sell, maka harganya Bid, Stop loss lebih tinggi dari harga saat ini, dan Take profit lebih rendah . Kami juga membutuhkan 2 variabel tambahan. Yang pertama adalah untuk mengubah tingkat batas dari titik ke titik nilai nominal yang merupakan nilai minimum dimana harga untuk simbol dapat berubah. Yang kedua adalah untuk normalisasi nilai dengan digit floating point yang merupakan jumlah digit signifikan di bagian pecahan dari harga.
Ubah ini menjadi MQL.
Kami langsung melanjutkan untuk membuka kesepakatan. Kami mengatur ulang variabel sistem _LastError dengan fungsi bawaan ResetLastError. Kami mengirim permintaan menggunakan OrderSend, dan menulis hasilnya ke variabel result. Ada dua opsi untuk pengembangan acara:
- Transaksi telah berhasil dibuka jika hasilnya mengandung nilai yang lebih besar dari nol, ticker kesepakatan. Jadi, kita perlu mengubah nilai Arah untuk membuka transaksi ke arah yang berlawanan di lain waktu.
- Jika hasil mengandung nilai negatif, maka kesepakatan tidak dibuka. Anda perlu memeriksa kesalahan terakhir menggunakan GetLastError, menganalisisnya dan melakukan sesuatu: coba lagi, tertidur sebentar, keluarkan informasi debug ke log, dll. Demi kesederhanaan, saya menampilkan nilai kesalahan terakhir ke catatan.
Mari kita lihat.
Jadi, kami telah menulis beberapa lusin baris kode dan robot trading sudah siap. Saya akui bahwa ini belum terlalu berfungsi, tetapi dapat berfungsi sebagai contoh yang sangat baik dari fakta bahwa menulis kode tidak memerlukan banyak pengetahuan dan upaya yang signifikan.
Berikut ini daftar lengkapnya, jika Anda membutuhkannya.
Kami menyusun kode dan meluncurkan Expert Advisor di terminal trading.
Cara membuat Expert Advisor di MQL5
Di sini MQL5 memiliki keunggulan yang tak terbantahkan dibandingkan MQL4. Anda dapat membuat robot trading untuk versi kelima dalam beberapa klik tanpa benar-benar menulis satu baris kode pun.
Di MetaEditor, klik New dan pilih Expert Advisor (generate) di application wizard.
Beri nama Expert Advisor kami MQL5_Generated_Robot. Secara opsional, kami menunjukkan penulis dan situs web atau profilnya. Tambahkan parameter advisor, jika perlu: simbol dan time frame untuk trading. Mengklik dua kali mengaktifkan parameter, mengklik nama atau nilai variabel memungkinkan Anda mengubah default yang diusulkan. Anda dapat mengatur simbol apa pun yang Anda inginkan. Saya mendefinisikannya sebagai yang sekarang, pada grafik di mana EA akan bekerja. Saya menetapkan time frame di M15 untuk meningkatkan kemungkinan sinyal trading.
Ayo lanjutkan. Sekarang kita perlu memilih sinyal dan pengaturannya. Di sini Anda dapat berimprovisasi dan mencoba berbagai kombinasi sinyal yang disarankan oleh pengembang. Sinyal ini akan menghasilkan peristiwa bagi pakar untuk membuat kesepakatan.
Anda dapat menambahkan custom signals ke bagian ini, termasuk sinyal dari pemantauan di mql5.com. Opsi berikut disediakan dengan platform secara default:
Saya memilih "Trading at the intersection of two averages" dan menetapkan periode sama dengan 21 dan 55. Tidak diinginkan untuk memilih periode yang terlalu pendek jika Anda perlu mengurangi jumlah positif palsu. Kami meninggalkan simbol saat ini. Misalnya, kami akan memperdagangkan EURJPY dan menerima sinyal dari moving average yang diterapkan pada data harga EURJPY yang sama. Pilih simbol yang berbeda di sini jika strategi Anda melibatkan trading instrumen tergantung pada perilaku orang lain. Saya juga menyetel time frame di M15.
Confirm. Kami melihat bahwa sinyal telah ditambahkan untuk simbol dan time frame saat ini, yang akan menghasilkan peristiwa untuk EA.
Pindah ke mode Trailing Stop. Di sini saya telah memilih batas ukuran tetap. Saya juga menetapkan stop loss pada 150 poin dan take profit pada 200 poin.
Selanjutnya, kita dapat memilih satu dari lima mode pengelolaan uang untuk akun trading. Trading tersedia dengan:
- Fixed trade volume;
- Fixed margin;
- Fixed risk;
- Minimal volume trading yang diizinkan;
- Volume trading yang optimal.
Saya menyelesaikan trading dengan risiko tetap sebesar 1% dari dana di akun.
Klik Done dan dapatkan untung! Kami telah membuat Expert Advisor tanpa menulis satu baris kode pun.
Mari kita lihat lebih dekat dan lakukan analisis kecil terhadap sumbernya.
Head of the table and attributes - semuanya familiar. Kemudian masuklah library modules. Expert adalah robot kami. MACross adalah generator sinyal untuk penyeberangan Moving Average, TrailingFixedPips adalah modul kontrol level batas, MoneyFixedRisk adalah modul manajemen risiko. Kemudian pengaturan yang menyertakan variabel input yang menentukan antarmuka untuk berinteraksi dengan aplikasi. Ini terlihat familiar, bukan? Tentu saja! Kami menyiapkannya di Wizard Pembuatan Expert Advisor. Di masa mendatang, nilai default dapat diubah di sini.
Selanjutnya, variabel global otomatis jenis CExpert dideklarasikan, yang diinisialisasi dengan nilai default. Untuk sebuah objek, ini berarti konstruktor default telah dipanggil. Dalam tubuh OnInit, EA diinisialisasi, sinyal dan filter dibuat dan diinisialisasi dengan nilai yang ditentukan dalam pengaturan. Di bawah ini adalah kode dari mana saya menghapus semua pemeriksaan hasil inisialisasi untuk sukses dan deskriptor validitas untuk mengurangi jumlah kode secara visual.
Di bawah ini Anda dapat melihat fungsi OnDeinit, OnTick, OnTimer, OnTrade. Masing-masing hanya memanggil metode kelas CExpert yang sesuai.
Jika Anda melihat lebih dekat, di navigator di sebelah kiri di folder Include -> Experts, Anda dapat melihat sinyal dan modul yang tersedia di generator. Karenanya, Anda dapat menambahkan beberapa solusi khusus ke generator dan membuatnya untuk kebutuhan apa pun dengan beberapa klik.
Mari kita coba mengkompilasi kode. 0 errors dan 0 warnings berhasil. Untuk meluncurkan strategi testing tekan Ctrl dan F5 secara bersamaan atau klik tombol di menu grafis di bagian atas.
Kontrol ditransfer ke Terminal MetaTrader Klien di pengaturan strategi tester. Kemudian kami memilih file untuk menguji dan mengkonfigurasi parameter lainnya: simbol, time frame, kedalaman riwayat, saldo dan leverage akun trading, dll. Ada banyak pengaturan, dan untuk masing-masing, ada deskripsi di file referensi. Untuk informasi rinci tentang pengaturan dan mode pengujian dan fokus pada tester, tekan F1.
Untuk memulai, tekan Start di sudut kanan bawah tester dan, jika pengujian terjadi tanpa pengoptimalan, Anda dapat memilih visualization mode untuk strategi Anda.
Para pengembang dengan senang hati memberikan deskripsi untuk setiap modul dan sinyal bawaan di https://www.mql5.com/en/docs/standardlibrary/expertclasses. Jangan ragu untuk merujuk ke dokumentasi untuk memperluas pengetahuan Anda tentang pertanyaan tersebut.
Pro dan Kontra bahasa MQL4 dan MQL5
Kelemahan utama terletak pada tujuan bahasa-bahasa ini. Bahasa Querying MetaQuotes adalah bahasa untuk menulis aplikasi hanya untuk MetaTrader. Mungkin untuk mengkompilasi dan men-debug kode MQL hanya di lingkungan MetaEditor. Hanya Terminal Klien MetaTrader yang dapat meluncurkan program untuk dieksekusi. Tidak ada manajemen memori manual. Anda masih memilih untuk membuat variabel di stack atau dalam cakupan dinamis, tetapi dalam kedua kasus tersebut, Anda tidak memiliki akses ke alamat virtualnya.
Dia memiliki lebih banyak kebaikan. Ambang masuk (threshold) rendah, terutama jika Anda sudah memiliki pengalaman dalam mengembangkan bahasa yang diketik secara statis. Performa tinggi di level C dan C++. Dukungan untuk gaya object-oriented programming: encapsulation dan extensibility, inheritance, polymorphism dan virtual methods of classes. Dimungkinkan untuk membuat template untuk kelas dan fungsi, yaitu polimorfisme parametrik. Semua ini memungkinkan kode untuk digunakan kembali berkali-kali. Infrastruktur gratis termasuk terminal trading, lingkungan pengembangan, penguji strategi, termasuk library.
Konversi MQL4 ke MQL5
Mari kita pertimbangkan transformasi memperbarui program dari satu versi ke versi lain menggunakan contoh robot, yang sebelumnya disajikan dalam artikel ini di bagian tentang kemampuan bahasa. Untuk melakukan ini, buat Expert Advisor kosong di MetaEditor 5 dan salin kode sumber Expert Advisor MQL4_Example_EA ke dalamnya. Anda tidak akan dapat mengkompilasi kode ini tanpa perubahan, banyak kesalahan akan terjadi saat mencoba.
Pada awalnya, hampir tidak ada yang berubah, kecuali beberapa poin:
- Hapus #property strict dari arahan preprocessor, jadi masuk akal saat menyusun kode MQL4.
- Transfer pembuatan variabel statis Direction di atas fungsi inisialisasi EA untuk menginisialisasinya di OnInit dengan cara khusus, tergantung pada posisi yang tersedia. Di masa mendatang, ini akan memungkinkan untuk mengubah pengaturan EA di tengah proses trading.
Perhatikan bahwa sekarang lebih mudah untuk memilih kesepakatan untuk simbol apa pun di MQL5 menggunakan fungsi PositionSelect bawaan, tanpa harus mencari melalui semua transaksi terbuka.
Mari kita pertimbangkan sepenuhnya fungsi OnTick. Kami menggunakan PositionSelect untuk memeriksa posisi terbuka untuk sebuah simbol. Jika tidak ada, masuklah ke dalam tubuh if dan bersiaplah untuk mengirim permintaan untuk membuka kesepakatan. MQL5 dengan ramah memberi kita struktur MqlTradeRequest untuk membuat permintaan, sebagai lawan dari sekumpulan parameter di MQL4. Sekarang saya tidak akan mempertimbangkan setiap bidangnya secara terpisah. Izinkan saya mencatat bahwa seperti di MQL4, kami memiliki 4 dari 7 parameter yang diperlukan: simbol trading, volume, arah, dan deviasi dari harga yang diminta. Kami menghitung tiga sisanya (harga pembukaan, stop loss dan take profit) tergantung pada arah transaksi. Kami mengisi struktur secara berurutan. Sekarang tidak perlu menormalkan angka floating-point, jadi tidak perlu variabel digit.
Mengirim permintaan dalam versi terbaru bahasa terlihat jauh lebih ringkas. Semua informasi tentang hasil menjalankan fungsi OrderSend sekarang dikembalikan kepada kami di MqlTradeResult.
Saya berakhir dengan kode berikut setelah debugging dan serangkaian tes. Ukurannya tidak berubah, meskipun kami membuat perubahan dalam logika yang membutuhkan tindakan tambahan pada tahap inisialisasi di OnInit.
Mari kita rangkum. Upgrade aplikasi dari MQL4 ke MQL5 itu mudah. Jika Anda memiliki pengetahuan dasar tentang MQL, tidak akan sulit untuk melakukannya sendiri.
Selanjutnya, saya secara khusus memilih untuk Anda sejumlah pertanyaan MQL paling umum dan mencoba menjawabnya secara singkat dan menyeluruh.
FAQ MQL4 dan MQL5
Bahasa MetaQuotes adalah bahasa pemrograman tingkat tinggi yang digunakan untuk menulis aplikasi ke platform trading MetaTrader dengan sedikit pengetikan statis dengan sintaks yang sangat mirip dengan pendahulu C++. MetaQuotes Language mengimplementasikan konsep multi-paradigma. Selama penulisan kode, Anda dapat menggunakan pendekatan berorientasi objek, fungsional, prosedural, atau campuran. OOP mendukung encapsulation, inheritance dan polymorphism. Template fungsi dan kelas tersedia. Sayangnya, tidak mungkin menggunakan metaprogramming dengan komputasi waktu kompilasi.
Untuk menulis program di MQL, Anda perlu menginstal Terminal MetaTrader Klien. Paket pengirimannya mencakup lingkungan untuk mengembangkan aplikasi di MQL yang disebut MetaEditor. Kami meluncurkannya menggunakan menu Tools ->MetaQuotes Language Editor (F4). Sekarang kita siap untuk menulis program MQL pertama kita.
Hasil dari menjalankan program seperti itu di terminal trading adalah sebagai berikut:
Mq4 adalah file teks sederhana. Ekstensi ini memungkinkan sistem operasi untuk secara otomatis mengasosiasikan file itu sendiri dengan lingkungan pengembangan MetaEditor. File ex4 adalah file yang dapat dijalankan yang tidak dapat dibaca sebagai teks, dan yang berisi data dalam kode biner.
Selama kompilasi, kode program mq4 diubah menjadi kode ex4 yang bisa dijalankan. Transformasi ini sederhana dan sangat sering terjadi saat membuat program. Inilah yang dilakukan oleh kompilator.
Proses sebaliknya adalah dekompilasi (pembongkaran) dari kode ex4 yang dapat dieksekusi menjadi kode teks mq4 jarang terjadi dan seringkali tidak memiliki dasar hukum. Proyek sumber terbuka umumnya menyediakan kode sumber bagi siapa saja yang setuju dengan aturan distribusi, transformasi, dan penggunaannya. Proyek lainnya melindungi semua perkembangannya dengan undang-undang hak cipta. Tidak ada alat standar untuk melakukan dekompilasi.
Bagaimana jika Anda benar-benar perlu mengubah kode yang dapat dieksekusi dari file ex4 menjadi kode program? Berikut adalah beberapa jawaban untuk pertanyaan ini, yang disusun dalam rangka meningkatkan kompleksitas implementasi:
- Hubungi pembuat program dan cari tahu ketentuan untuk mendapatkan kode.
- Cari programmer yang dapat mengimplementasikan logika dalam program ex4 Anda dan bernegosiasi dengannya.
- Pelajari MQL dan tulis program Anda sendiri yang setara dengan program yang Anda miliki di ex4. Jalan ini tidak mudah, tetapi hanya itu yang akan memperluas kemungkinan Anda tidak seperti yang lain.
- Lakukan dekompilasi sendiri atau dengan bantuan seseorang. Harap perhatikan kewajiban yang diberikan oleh undang-undang hak cipta.
File mq4 dan mq5 adalah file teks sederhana yang berisi kode MQL dalam bentuk teks. Jika Anda tidak ingin membagikan kode sumber Anda sendiri, hal termudah untuk dilakukan dalam situasi ini adalah tidak mendistribusikan file dalam format ini.
Cara sederhana untuk melindungi kode Anda adalah dengan mendistribusikannya dalam format ex4 (ex5). Berkas dalam format ini dibuat oleh MetaEditor saat mengompilasi kode mq4 (mq5). Sesuai dengan aturan bahasa, instruksi dalam teks diubah menjadi kode biner yang dapat dieksekusi, yang dieksekusi oleh terminal saat Anda menambahkan advisor, skrip, atau indikator ke grafik.
Membongkar kode yang dapat dieksekusi kembali ke aslinya bukanlah tugas yang sepele, yang membantu melindungi kode sumber Anda. Bagaimanapun, ketika mendekompilasi menjadi kode sumber, nama variabel yang berarti dari kode Anda akan hilang, dan akan jauh lebih sulit untuk memahami logika program.
Bahasa MetaQuotes adalah bahasa pemrograman OOP tingkat tinggi dengan sedikit pengetikan statis, diwarisi dari C++. MQL5 adalah pengembangan logis dari bahasa MQL4, yang dirilis bersama dengan platform MetaTrader 5. Kemudian, hal itu berdampak signifikan pada pengembangan MQL4 dan berkontribusi pada pembaruannya.
Di MQL5 terdapat alat untuk menghasilkan Expert Advisor, yang memungkinkan Anda sepenuhnya mengabaikan kebutuhan untuk menulis kode dengan tangan. Dalam beberapa klik, Anda akan menerima robot trading bersama dengan kode sumbernya. Menyiapkannya untuk trading dilakukan menggunakan sinyal. Kontrol keadaan akun trading didasarkan pada risiko dan strategi manajemen uang yang disediakan dengan terminal trading.
Mengunduh indikator tidak berbeda dengan mengunduh file lain ke komputer Anda. Ini harus dilakukan di komputer, karena MQL hanya dapat digunakan dengan Terminal MetaTrader Klien versi desktop. Buka direktori kerja terminal (File -> Open Data Folder). Selanjutnya, buka direktori MQL/indicators dan tempel indikator yang dimuat di sini. Setelah Anda memulai ulang terminal, indikator akan tersedia di Navigator. Yang harus Anda lakukan adalah memindahkannya ke grafik dan menyesuaikan parameter input.
Faktanya, semua program MQL4 atau MQL5 dibuat menggunakan versi kelima dari Editor Bahasa MetaQuotes. Ada kompatibilitas mundur antara versi mayor dan minor dari bahasa tersebut. Satu-satunya batasan dalam hal ini adalah Server MetaQuotes itu sendiri. Beberapa fungsi dan struktur hilang di versi keempat platform. Logika pemrosesan operasi trading di versi kelima server telah diubah sebagian. Ada juga perbedaan dalam struktur internal indikator. Pada versi keempat, tidak lebih dari delapan buffer indikator yang dapat digunakan. Di MetaTrader 5, jumlah buffer telah ditingkatkan menjadi 21.
Fungsi iCustom bawaan memungkinkan Anda menggunakan sinyal dari indikator untuk mengimplementasikan logika trading di dalam EA. Jika Anda memiliki indikator Anda sendiri dan Anda ingin menghasilkan sinyal trading di advisor untuk melakukan operasi trading, Anda perlu menggunakan iCustom untuk ini. Yuk simak dokumentasinya. Di sini Anda dapat melihat definisi MQL4 berikut:
Definisi MQL5:Pada dasarnya, fungsinya melakukan hal yang sama, meskipun tanda tangannya berbeda di bahasa versi keempat dan kelima Mari kita lihat lebih dekat masing-masing parameternya:
- String symbol line. Itu adalah simbol yang akan dihitung.
- Timeframe. Di MQL4 ini adalah tipe integer int, di MQL5 juga merupakan integer tetapi enum yang berisi enumerasi timeframe.
- String parameter name. Anda harus meneruskan jalur ke indikator ke dalamnya (jika, misalnya, terletak di direktori lain) dan juga nama indikator bersama dengan ekstensi yang ingin kita hitung. Selanjutnya, parameter yang dibutuhkan diteruskan untuk indikator yang ingin kita gunakan.
- Daftar parameter untuk indikator yang akan diluncurkan oleh fungsi iCustom. Jumlahnya bergantung pada berapa banyak argumen yang diperlukan untuk mendapatkan nilai yang diperlukan dari indikator Anda. Masuk akal bahwa fungsi tersebut mengambil sejumlah variabel parameter. Misalnya, untuk Alligator (sudah termasuk dalam paket instalasi Terminal MetaTrader Klien):
Atau, misalnya, untuk Ichimoku itu akan menjadi beberapa variabel lain:
Jadi, dalam kasus pertama, Anda harus meneruskan 6 parameter ke fungsi untuk mendapatkan nilai yang benar, dan 3 di parameter kedua. - Ada dua parameter lagi di MQL4 versi keempat. Yang pertama adalah mode integer yang menunjukkan indeks garis indikator dan digunakan oleh runtime untuk pengindeksan internal buffer data.
- Pergeseran bilangan bulat berikutnya menunjukkan pergeseran indikator ke depan atau ke belakang di sepanjang garis waktu.
MQL adalah pewaris bahasa C++, di mana server trading MetaTrader dan semua aplikasi terkait, termasuk Terminal Klien dan Editor Bahasa, ditulis. Sayangnya, jika kita membandingkan MQL dengan pendahulunya, jelas bahwa bahasa tersebut berkembang dengan jeda. Saat ini, kapabilitas MQL sesuai dengan standar C++ 2003. Perlu dicatat bahwa MQL adalah bahasa yang cukup kuat dan dapat memenuhi 99% kebutuhan pemrogram dan pengembang saat ini.
Sekilas, kode program di versi 4 dan 5 sedikit berbeda, tetapi masih ada perbedaan. Pada versi kelima, semua makro dari versi keempat telah diganti dengan pencacahan.
Model acara untuk meluncurkan aplikasi kustom telah diperluas. Sederet penangan peristiwa seperti OnTrade, OnTradeTransaction, OnTesterInit, OnTesterDeinit, OnTesterPass telah muncul. Perilaku OnTick dan OnTimer yang salah dalam mode penguji strategi telah diperbaiki. Fungsi OnTimer sekarang dapat berjalan dengan laju sampling pengatur waktu 1000 kali lebih tinggi daripada di MQL4. Sekali per mikrodetik dibandingkan dengan milidetik.
MQL5 telah mengubah logika untuk mengirim perintah trading dan mekanisme untuk menanggapinya. Beberapa fungsi perdagangan di MQL4 telah digabungkan menjadi satu dengan mode operasi berbeda yang disebut OrderSend. Proses trading sendiri di MetaTrader 5 mulai berbeda dengan trading di platform keempat. Modus posisi netting diperkenalkan di samping fungsi yang memungkinkan transaksi lindung nilai. Selain pesanan MT4, posisi dan trading telah muncul. Bahasa tersebut sekarang memiliki fungsi OrderSendAsync untuk mengirim permintaan ke server trading dalam mode asynchronous.
Semua makro MQL4 di MQL5 telah diganti dengan enumeration, sehingga compiler sekarang menunjukkan konversi tipe implisit ke pengembang.
MetaTrader 5 memungkinkan Anda untuk bekerja dengan 21 kerangka waktu standar dibandingkan dengan 9 kerangka waktu di MetaTrader 4. Indikator di MQL5 menerima lebih banyak buffer pada grafik.
Mengubah MQL4 menjadi MQL5 adalah tugas yang sepele bagi programmer pemula, tetapi ini akan membutuhkan perhatian dan kesabaran Anda. Kompiler akan menunjukkan kepada Anda sebagian besar hal yang tidak kompatibel dengan MQL5 sendiri.
Perhatian harus diberikan untuk memproses pesanan trading dan mengirimkannya ke server.
Di MQL4, permintaan trading diimplementasikan menggunakan fungsi OrderSend dan satu set parameter untuk itu. Modifikasi order dan penghapusan pending order diimplementasikan oleh fungsi terpisah. Hasil kueri ditentukan oleh nilai Boolean yang dikembalikan di akhir fungsi. Analisis hasil dikurangi untuk menentukan kode pengembalian server menggunakan fungsi GetLastError.
MQL5 memiliki struktur MqlTradeRequest khusus untuk mengirim perintah trading ke server. Anda perlu mengisinya dengan jenis operasi dan jenis pesanan yang sesuai. Untuk mendapatkan hasilnya, Anda perlu mendeklarasikan dan meneruskan instance struktur MqlTradeResult dengan referensi saat memanggil OrderSend untuk menerima respons dari server, menggabungkan parameter berbeda yang sebelumnya diteruskan saat memanggil OrderSend ke dalam satu struktur MqlTradeRequest dan mengirim ke server. Kami menganalisis struktur MqlTradeResult yang diterima sebagai tanggapan. Semua informasi yang diperlukan akan tersedia dalam tanggapan dari server.
Berikan perhatian khusus pada pengendali event dalam kode Anda. MQL5 memiliki OnTesterTick, OnTesterTimer, OnBookEvent sebagai tambahan. Berbagai aplikasi diluncurkan sebagai tanggapan atas peristiwa dari terminal trading.
Untuk para ahli:
- OnInit, OnDeinit, OnTimer, OnTick, OnChartEvent, OnTester
Untuk indikator:
- OnInit, OnDeinit, OnTimer, OnCalculate, OnChartEvent, OnTester
Untuk skrip:
- OnStart (handler ini tidak dapat digunakan dalam indikator dan skrip).
Tidak ada fasilitas peluncuran untuk libraries yang disertakan, karena mereka digunakan secara eksklusif dalam proyek besar lainnya.
Perbedaan lainnya adalah bahwa variabel standar Ask, Bid, serta array Open [], High [], Low [], Close [], Volume [], Time [] tidak ada di MQL5. Oleh karena itu, kode program harus dikoreksi agar dapat memperoleh data ini secara independen menggunakan fungsi bawaan untuk mengakses rangkaian waktu CopyRates, CopyOpen, CopyHigh, dll. Deklarasikan array dinamis dan masukkan data ke dalamnya. Fungsi yang memberikan hasil akan menangani pengubahan ukuran arraynya sendiri.
P.S. Apakah kamu menyukai artikel saya? Bagikan di jaringan social media: itu akan menjadi "terimakasih" terbaik :)
Link yang bermanfaat:
- Saya merekomendasikan mencoba untuk trading dengan broker yang handal disini. Sistem memungkinkan untuk anda trading sendiri atau copy trader yang sukses dari seluruh belahan dunia.
- Gunakan kode promo BLOG saya untuk mendapatkan bonus deposit 50% di platform LiteFinance. Cukup masukkan kode ini di kolo, yang sesuai saat deposit akun trading Anda.
- Channel Telegram dengan analitis berkualitas tinggi, ulasan forex, artikel pelatihan dan banyak hal lain yang bermanfaat untuk trader https://t.me/forex_hari_ini_trading_blog
Grafik harga EURJPY dalam mode real time

Konten artikel ini mencerminkan pendapat penulis dan tidak mencerminkan posisi resmi broker LiteFinance. Materi yang dipublikasikan di halaman ini disediakan hanya untuk tujuan informasi dan tidak boleh dianggap sebagai penyediaan saran investasi untuk tujuan Arahan 2014/65/UE.
Menurut undang-undang hak cipta, artikel ini dianggap sebagai kekayaan intelektual, yang mencakup larangan menyalin dan mendistribusikannya tanpa izin.