Our professional Customer Supports waiting for you! Contact now
Everyday: 09:00am - 10:00pm
By Invezto in Trading Insight on 24 Nov, 2025

MQL5 untuk Programmer MQL4: Panduan Migrasi Penuh Sarkasme (yang Sebenarnya Anda Butuhkan)

Panduan Migrasi MQL4 ke MQL5

MQL5 untuk Programmer MQL4: Panduan Migrasi Penuh Sarkasme (yang Sebenarnya Anda Butuhkan)

Ah, Anda di sini. Selamat datang, wahai programmer MQL4 veteran. Anda adalah masternya `init()`, `start()`, dan `deinit()`. Anda bisa membuat Expert Advisor (EA) sambil tidur. Anda hafal di luar kepala cara kerja `OrderSend()` dan `OrderSelect()` di antara ribuan order *hedging* yang berantakan. Anda adalah raja di dunia MetaTrader 4.

Lalu, suatu hari, Anda iseng membuka MetaTrader 5. Anda buka MetaEditor-nya. Anda menekan F1 untuk melihat dokumentasi. Dan... Anda tidak mengerti apa-apa. Semuanya terasa salah. Semuanya terasa... bengkak dan rumit.

"Ini kan cuma MQL4 + 1?" pikir Anda naif. "Harusnya cuma upgrade, kan?"

SALAH.

Jika MQL4 adalah obeng dan tang yang praktis, MQL5 adalah bengkel perakitan pabrik BMW yang penuh robot. Keduanya sama-sama "alat", tapi skala dan filosofinya berbeda total. Ini bukan *upgrade*. Ini adalah *transplantasi otak*.

Artikel ini adalah pemandu wisata sinis Anda untuk menyeberangi jurang neraka antara MQL4 dan MQL5. Kami tidak akan menahan-nahan. Ini akan menyakitkan, tapi perlu. Bersiaplah, karena ilusi Anda tentang "upgrade sederhana" akan kami hancurkan sekarang.

H2: Selamat Datang di Dunia Baru (yang Tidak Anda Minta)

Perbedaan fundamental pertama yang harus Anda terima adalah: MQL4 adalah bahasa skrip prosedural. MQL5 adalah bahasa *full-blown* Object-Oriented Programming (OOP).

Apa bedanya?

  • MQL4 (Prosedural): Anda menulis daftar perintah. "Hei komputer, ambil data ini. Lalu hitung ini. Lalu, jika A > B, kirim order. Selesai." Anda menulis seperti resep masakan, langkah demi langkah.
  • MQL5 (OOP): Anda tidak menulis resep. Anda *menciptakan* "Koki" (objek). "Koki" ini punya "Properti" (misal: nama, keahlian) dan "Metode" (misal: `masakNasiGoreng()`, `buatKopi()`). Anda tidak peduli *bagaimana* dia masak nasi goreng; Anda cukup panggil `Koki.masakNasiGoreng()`.

 

Kenapa ini penting? Karena MQL5 *memaksa* Anda berpikir seperti ini. Seluruh Standard Library-nya (Pustaka Standar) dibangun di atas konsep ini. Anda tidak bisa lagi seenaknya memanggil fungsi. Anda harus *membuat instance dari sebuah class* dulu. Ini adalah sumber 90% frustrasi awal Anda.

H2: Duka Cita #1: Kematian Tiga Serangkai 'init', 'deinit', dan 'start'

Hal pertama yang Anda sadari adalah fungsi-fungsi kesayangan Anda... HILANG. Lenyap. Tidak ada lagi.

Di MQL4, hidup itu sederhana:

  • init(): Dijalankan sekali saat EA di-load.
  • deinit(): Dijalankan sekali saat EA di-unload.
  • start(): Dijalankan setiap *tick* baru. (Untuk indikator, namanya start() juga, tapi perilakunya beda. Ah, masa-masa indah yang membingungkan).

 

Di MQL5, MetaQuotes memutuskan bahwa tiga fungsi tidak cukup. Kita, rupanya, butuh selusin fungsi (atau lebih) yang disebut Event Handlers.

H3: Selamat Datang di Pesta Event Handler

Alih-alih tiga fungsi tadi, sekarang Anda punya *spesialisasi*:

  • OnInit(): Ini adalah init() Anda yang lama. Tempat Anda inisialisasi variabel.
  • OnDeinit(const int reason): Ini adalah deinit() Anda, tapi sekarang lebih pintar. Dia memberi tahu Anda *alasan* kenapa EA di-unload (misal: Anda hapus manual, ganti *timeframe*, dll).
  • OnTick(): Ini adalah start() Anda untuk Expert Advisors (EA). Dijalankan setiap *tick*.
  • OnCalculate(...): Ini adalah start() Anda untuk Indikator. JANGAN salah pakai. Ini *hanya* untuk indikator.
  • OnTimer(): Fungsi yang dipanggil berdasarkan *timer* yang Anda set. Ya, sekarang MQL5 punya *built-in timer* yang waras, tidak perlu *sleep-loop* bodoh lagi.
  • OnTrade(): Fungsi yang dipanggil ketika ada *trade event* (order terisi, diubah, dihapus).
  • OnTester(): Fungsi yang dipanggil di akhir *backtest*. Sangat berguna.
  • ...dan masih banyak lagi (OnChartEvent, OnBookEvent, dll).

Kenapa ini menyebalkan? Karena kode MQL4 Anda tidak bisa langsung di-*paste*. Anda harus memecah fungsi start() Anda dan menaruh kodenya di tempat yang benar. Kenapa ini (sebenarnya) bagus? Karena kode Anda jadi jauh lebih rapi, terstruktur, dan efisien. EA Anda tidak perlu mengecek order setiap *tick* jika dia bisa bereaksi terhadap *trade event* via OnTrade(). Tapi ya, tetap saja menyebalkan di awal.

H2: Duka Cita #2: Monster Bernama OOP dan Standard Library

Seperti yang saya bilang, MQL5 itu OOP. Dan MetaQuotes dengan "baik hatinya" menyediakan Standard Library (CStandardLibrary) untuk membantu Anda. Ini adalah sekumpulan *class* yang sudah jadi untuk melakukan tugas-tugas umum.

Masalahnya? Ini seperti Anda minta dibelikan sepeda, tapi malah dikasih bongkahan komponen-komponennya dan disuruh rakit sendiri.

Contoh paling menyakitkan: Trading.

Di MQL4, untuk *entry* posisi, Anda cukup: OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "My EA", 12345, 0, clrGreen); Satu baris. Jelek, banyak angka, tapi berhasil.

Di MQL5... oh boy... bersiaplah.

  1. Anda harus #include <Trade/Trade.mqh>.
  2. Anda harus membuat *instance* dari class CTrade. Misal: CTrade trade;
  3. Anda harus mengisi struktur MqlTradeRequest (permintaan) dan MqlTradeResult (hasil).
  4. ...atau cara gampangnya, Anda pakai *method* dari CTrade: trade.Buy(0.1, NULL, _Symbol, Ask, Ask+100*_Point, Ask-100*_Point, "Komentar");

 

Kelihatannya lebih bersih, kan? Tapi ini adalah *tipuan*. Di baliknya, class CTrade itu melakukan puluhan cek yang Anda tidak sadari. Ini adalah *black box*. Dan jika Anda tidak suka *black box* (seperti kebanyakan *coder* MQL4), Anda harus belajar membuat *request* trading Anda sendiri, yang mana 10x lebih rumit daripada OrderSend() yang lama.

H2: Duka Cita #3: "Order" vs "Position" – Alasan Utama EA Anda Meledak

Inilah. Ini dia. Ini adalah Pembunuh EA #1. Jika Anda hanya ingat satu hal dari artikel ini, ingatlah ini.

MetaTrader 4 menggunakan sistem "Hedging".

MetaTrader 5 (secara default) menggunakan sistem "Netting".

Apa bedanya?

H3: Cara Berpikir MQL4 (Hedging / Akuntansi Berbasis Order)

Di MQL4, setiap OrderSend() menciptakan "tiket" order yang unik.

  • Anda BUY 0.1 lot EURUSD (Tiket #1).
  • Anda BUY 0.1 lot EURUSD lagi (Tiket #2).
  • Anda SELL 0.5 lot EURUSD (Tiket #3).

Sekarang, di akun Anda ada TIGA order terpisah. Anda bisa tutup Tiket #1 dan membiarkan #2 dan #3 tetap terbuka. Logika EA *Martingale* dan *Grid* Anda bergantung pada ini.

H3: Cara Berpikir MQL5 (Netting / Akuntansi Berbasis Posisi)

Di MQL5 (Netting), hanya ada SATU posisi agregat per simbol.

  • Anda BUY 0.1 lot EURUSD. Posisi Anda: LONG 0.1 lot.
  • Anda BUY 0.1 lot EURUSD lagi. Posisi Anda: LONG 0.2 lot (posisi lama di-avg).
  • Anda SELL 0.5 lot EURUSD. Posisi Anda: SHORT 0.3 lot (posisinya *dibalik*!).

 

Lihat masalahnya? SEMUA logika EA MQL4 Anda yang mengandalkan `OrderSelect()`, `OrdersTotal()`, dan me-manage tiket individual, langsung HANCUR LEBUR. Tidak bisa dipakai. Sampah.

"Tapi, tapi," kata Anda, "Broker saya sekarang menawarkan 'Hedging Account' di MT5!"

Benar. MetaQuotes akhirnya menyerah dan menambahkan mode *hedging* ke MT5. Tapi... (dan ini "tapi" yang besar), cara Anda *coding* untuk itu TETAP BEDA.

  • OrdersTotal() hilang. Gantinya PositionsTotal().
  • OrderSelect() hilang. Gantinya PositionSelect() atau HistoryOrderSelect().
  • OrderClose() hilang. Untuk menutup posisi, Anda harus mengirim order baru dengan arah berlawanan.
  • Konsep "Order" dan "Position" dan "Deal" sekarang dipisah. Order adalah *permintaan* ke server. Deal adalah *hasil eksekusi* dari order. Position adalah *hasil agregat* dari semua deal. Pusing? Bagus. Itu tandanya Anda mulai paham.

 

H2: Duka Cita #4: Indikator yang Tiba-tiba Jadi Rumit

Oh, Anda pikir cuma *coder* EA yang menderita? Selamat datang, *coder* indikator!

Di MQL4, Anda punya satu fungsi start(). Anda punya *array* seperti Open[], High[], Low[], Close[]. Anda punya SetIndexBuffer(). Hidup gampang.

Di MQL5, Anda punya OnCalculate(). Dan MQL5 memberi Anda DUA versi OnCalculate() yang berbeda, hanya untuk membuat Anda bingung:

  1. OnCalculate(const int rates_total, ...): Ini adalah mode "lama", mirip MQL4. Anda bekerja dengan *index* (0, 1, 2, 3...).
  2. OnCalculate(const datetime &time[], ...): Ini adalah mode "baru" yang (katanya) lebih efisien, di mana data diindeks berdasarkan *time series* (tanggal), bukan *array index*.

 

Selain itu, *indexing* *array* sekarang jadi isu. Di MQL4, Close[0] adalah *candle* sekarang. Di MQL5, Close[0] (secara *default*) adalah *candle* paling TUA di sejarah. Anda harus memanggil ArraySetAsSeries() di setiap *array* data Anda agar perilakunya kembali normal ([0] = sekarang). Kenapa? Entahlah. Mungkin para *engineer* di MetaQuotes sedang bosan hari itu.

H2: Akhirnya, Kabar Baiknya (Kalau Bisa Dibilang Begitu)

Oke, setelah 1000+ kata penuh hinaan dan ratapan, apakah ada hal bagus di MQL5? Anehnya, ya. Banyak.

H3: 1. Strategy Tester Level S-Tier (Ini *Game Changer*)

Strategy Tester di MQL4 itu mainan anak-anak. Lambat, satu *core*, dan tidak akurat. Strategy Tester di MQL5 adalah monster.

  • Multi-threaded: Dia akan memakai SEMUA *core* CPU Anda. *Backtest* yang dulu butuh 1 jam, sekarang selesai dalam 3 menit.
  • Multi-Simbol: Anda bisa menguji EA yang trading di 10 *pair* sekaligus. Di MQL4? Mimpi.
  • MQL5 Cloud Network: Anda bisa "menyewa" kekuatan ribuan komputer di seluruh dunia untuk melakukan optimasi genetik super kompleks dalam hitungan menit.
  • Mode "Real Ticks": Jauh lebih akurat daripada "Control Points" MQL4.

Hanya demi Tester-nya saja, migrasi ke MQL5 itu sepadan.

 

H3: 2. Lebih Banyak "Mainan"

MQL5 adalah bahasa yang lebih dewasa. Anda dapat:

  • Struktur (structs) dan Kelas (classes): Untuk mengorganisir data Anda dengan waras.
  • Enum: Tidak perlu lagi pakai angka sihir int mode = 1. Sekarang bisa pakai enum Mode {MODE_A, MODE_B};
  • Event Handling: Jauh lebih presisi. OnTimer(), OnBookEvent() (data *Depth of Market*), OnChartEvent() (reaksi terhadap klik mouse!).
  • Konektivitas: Fungsi untuk mengirim *request* HTTP (WebRequest()) dan bekerja dengan database SQL.

 

H3: 3. MQL4 Sudah Mati (Terima Saja)

Ini mungkin pahit, tapi MQL4 sudah *sunset*. MetaQuotes tidak lagi mengembangkannya. Semua hal keren di masa depan—integrasi *Machine Learning*, *library* Python, *trading* di bursa saham—semua ada dan akan ada di MQL5. Bertahan di MQL4 berarti Anda memilih untuk jadi dinosaurus yang menunggu meteor.

H2: Kesimpulan: Pindah, Pensiun, atau Menangis?

Migrasi dari MQL4 ke MQL5 bukanlah "belajar 1-2 hari". Ini adalah komitmen untuk belajar ulang dari nol. Anda harus membuang banyak kebiasaan lama Anda, menelan ego Anda, dan menerima filosofi OOP yang rumit.

Perjalanan ini akan penuh dengan frustrasi. Anda akan maki-maki. Anda akan kangen dengan simplisitas MQL4. Anda akan menghabiskan jam-jam berharga hanya untuk mencari tahu kenapa trade.Buy() Anda gagal (jawabannya: mungkin karena Anda lupa set *magic number* via trade.SetExpertMagicNumber()).

Tapi di ujung terowongan gelap itu, ada cahaya. Cahaya itu adalah Strategy Tester yang super cepat, kode yang lebih bersih, dan platform yang siap untuk masa depan.

Proses belajar ini sendirian itu bikin frustrasi. Anda akan mentok, maki-maki, dan nyaris banting laptop. Untuk itulah komunitas ada. Kalau Anda mau lihat-lihat tips, trik, dan diskusi cerdas (atau sekadar curhat) soal dunia *coding* trading dan investasi yang kadang bikin gila ini...

...pastikan Anda follow akun sosial media INVEZTO. Kami menyajikan konten-konten edukatif yang relevan dengan penderitaan Anda sehari-hari sebagai trader dan developer. Siapa tahu, di sana Anda bisa menemukan pencerahan... atau setidaknya teman senasib. Selamat belajar (kembali)!

You may also like

Related posts