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

Panduan MQL5 Standard Library & CExpert

Panduan MQL5 Standard Library & CExpert

MQL5 Standard Library: Menciptakan EA dalam 5 Menit, atau Terjebak "Borgol Emas" MetaQuotes?

Di artikel sebelumnya, kita sudah menelan pil pahit. Kita sudah belajar teori akademis membosankan di balik Object-Oriented Programming (OOP). Kita sudah pusing dengan `class`, `inheritance`, `polymorphism`, dan `virtual function`. Anda mungkin berpikir, "Buat apa saya belajar semua ini? Repot sekali!"

Selamat. Hari ini Anda akan melihat *kenapa*. Anda akan melihat "Hadiah" yang disiapkan MetaQuotes untuk Anda yang sudah (dipaksa) belajar OOP.

Hadiah itu bernama MQL5 Standard Library (SL). Dan "pintu masuk" termudahnya adalah fitur yang terlihat ajaib: MQL5 Wizard. (`File -> New -> Expert Advisor (generate)`).

Bagi *newbie* MQL4, ini adalah sihir. Anda klik-klik-klik... Pilih sinyal (MA Cross), pilih *money management* (Fixed Lot), pilih *trailing stop*... lalu "Selesai". Dan *POOF!* MetaEditor memuntahkan 12 file `.mqh` baru dan sebuah file `.mq5` utama yang berisi 1000+ baris kode yang tidak Anda pahami. Dan... EA-nya *berjalan*. EA-nya profit di *backtest*.

Anda merasa jenius. Anda merasa sudah menaklukkan MQL5. Tapi, kawan... Anda baru saja melakukan "perjanjian dengan iblis". Anda baru saja mengikat diri Anda pada *framework* yang sangat kuat, sangat kaku, dan sangat rumit. Anda baru saja memakai "Borgol Emas".

Artikel ini adalah panduan jujur (dan sarkastik) untuk membedah apa yang *sebenarnya* terjadi di balik kap mesin "MQL5 Wizard" itu. Kita akan membedah monster bernama `CExpert` dan seluruh departemennya.

H2: Apa Sebenarnya MQL5 Standard Library (SL) Itu?

Pikirkan MQL5 Standard Library sebagai "Pabrik Perakitan EA" resmi dari MetaQuotes. Ini adalah satu set GIGA berisi "Komponen LEGO" (class) yang sudah jadi dan sudah diuji.

Di artikel OOP sebelumnya, kita bicara soal membuat `CSignalRSI` atau `CSignalMA` kita sendiri, kan? Nah, MetaQuotes sudah melakukannya. Mereka sudah membuatkan *semua* komponen dasar yang Anda butuhkan:

  • Puluhan kelas Sinyal (`CSignalRSI`, `CSignalMA`, `CSignalStoch`, `CSignalMACD`, ...)
  • Kelas-kelas Money Management (`CMoneyFixedLot`, `CMoneyRiskPercent`, `CMoneyMartingale`, ...)
  • Kelas-kelas Trailing Stop (`CTrailingFixedPips`, `CTrailingParabolicSAR`, ...)
  • Dan satu "Bos Besar" yang mengatur semuanya: CExpert.

Tujuan SL ini mulia: Agar Anda tidak perlu lagi "mengotori tangan" Anda. Anda tidak perlu lagi pusing dengan `CopyBuffer()`, `OrderSend()`, `MqlTradeRequest`, atau `ArraySetAsSeries()`. Anda tidak perlu lagi menulis logika *loop* untuk *trailing stop*. Anda sekarang adalah seorang "Arsitek". Anda tinggal bilang: "Saya mau sinyal A, digabung dengan uang B, dan dikawal oleh trailing C. Kerjakan!"

Masalahnya? Anda harus bilang "Kerjakan!" dengan cara yang SANGAT spesifik. Cara mereka. Dan hanya cara mereka.

H2: Panduan 5 Menit Pakai 'Wizard' (dan Ilusi yang Diciptakannya)

Mari kita coba "sihir" itu dan lihat apa yang terjadi. Ikuti langkah-langkah ini di MetaEditor Anda.

  1. Buka `File` -> `New` -> `Expert Advisor (generate)`. Klik `Next`.
  2. Nama: Kasih nama EA Anda, misal `EAMalasSaya`. `Next`.
  3. Sinyal: Ini dia! Anda disuruh memilih "Sinyal". Coba klik `Add`. Anda akan lihat daftar panjang: "Signal based on Moving Average", "Signal based on RSI", dll.
    • Apa yang *sebenarnya* terjadi: Anda sedang memilih *objek* `CSignal...` mana yang akan di-new di dalam kode Anda. Anda tidak membuat logika MA Cross. Anda *mengimpor* logika MA Cross yang sudah jadi.
  4. Trailing Stop: Anda disuruh memilih Tipe Trailing. Misal, "Trailing Stop based on fixed pips".
    • Apa yang *sebenarnya* terjadi: Anda memilih *objek* `CTrailing...` mana yang akan dipakai.
  5. Money Management: Anda disuruh memilih Tipe MM. Misal, "Fixed trading volume" (Fixed Lot).
    • Apa yang *sebenarnya* terjadi: Anda memilih *objek* `CMoney...` mana yang akan dipakai.
  6. Klik `Finish`.

Sekarang lihat file `.mq5` Anda. Lihat bagian atasnya. Anda akan melihat kode seperti ini:

#include <Expert\Expert.mqh> 
#include <Expert\Signal\SignalMA.mqh> 
#include <Expert\Trailing\TrailingFixedPips.mqh> 
#include <Expert\Money\MoneyFixedLot.mqh>

//--- input parameters input int Signal_MA_PeriodFast = 10; input int Signal_MA_PeriodSlow = 20; input double Money_FixedLot_Volume = 0.1; input int Trailing_FixedPips_StopLoss = 100; input int Trailing_FixedPips_TakeProfit = 200; ...

Lihat? Wizard itu tidak "ajaib". Dia hanyalah *interface* cantik yang tugasnya *menulis* #include dan input parameters untuk Anda. Kode aslinya ada di file `.mqh` yang dia sertakan. Dan semua ini diorkestrasi oleh satu "Bos Besar".

H2: Arsitektur "Pabrik": Membedah Monster `CExpert`

Pikirkan `CExpert` sebagai "Manajer Pabrik EA". Ini adalah kelas induk (`base class`) yang SANGAT BESAR yang diwarisi oleh EA Anda. 
class CMyAwesomeEA : public CExpert

Karena EA Anda *mewarisi* `CExpert`, EA Anda "gratis" mendapatkan semua fungsionalitas manajer pabrik. Manajer `CExpert` ini punya 3 departemen utama yang dia kelola. Ini adalah "jeroan" dari artikel MQL5 (16024).

H3: 1. Departemen Sinyal (`CSignalBase* m_signal`)

Si `CExpert` (Manajer) punya "slot" untuk 1 (atau lebih) "Pemberi Sinyal". Slot ini adalah *pointer* ke kelas induk `CSignalBase`. 
Berkat keajaiban Polimorfisme (ingat pelajaran kita?), Anda bisa mengisi slot itu dengan *apa saja* yang mewarisi `CSignalBase`.

  • m_signal = new CSignalRSI(...); // BISA
  • m_signal = new CSignalMA(...); // BISA
  • m_signal = new CSignalStoch(...); // BISA

 

Wizard tadi tugasnya hanya menulis baris `new CSignalMA(...)` ini untuk Anda di dalam `OnInit()`. 
Nantinya, si Manajer `CExpert` tinggal bertanya, "Hei Departemen Sinyal, ada sinyal apa hari ini?" (memanggil m_signal.CheckSignal()). Dia tidak peduli departemen itu RSI, MA, atau Stochastic. Dia hanya butuh jawaban: "Beli", "Jual", atau "Diam".

H3: 2. Departemen Keuangan (`CMoneyBase* m_money`)

Sama persis. Manajer `CExpert` punya slot untuk "Bendahara". Slot ini adalah *pointer* ke `CMoneyBase`. 
m_money = new CMoneyFixedLot(...); // BISA 
m_money = new CMoneyRiskPercent(...); // BISA

Sebelum *trading*, si Manajer akan bertanya ke Bendahara: "Hei, Sinyal mau beli nih. Boleh? Berapa lot?" (memanggil m_money.CheckVolume(...)). 
Si Manajer tidak peduli bagaimana si Bendahara menghitungnya. Dia hanya butuh angka *lot* yang valid.

H3: 3. Departemen Pengawasan (`CTrailingBase* m_trailing` & `CExpertTrade* m_trade`)

Manajer juga punya slot untuk "Pengawas Posisi" (`CTrailingBase`) dan "Eksekutor" (`CExpertTrade`). 
Setelah posisi dibuka, si Manajer akan bilang ke Pengawas: "Hei, awasi posisi #12345 ini. Geser SL-nya kalau perlu." (memanggil m_trailing.CheckTrailing(...)).

Dan untuk membuka posisi, Manajer menggunakan "Eksekutor"-nya (`m_trade`), yang merupakan versi "super" dari CTrade yang sudah dibungkus dengan puluhan lapis logika pengaman.

H2: Bagian Paling Ajaib (dan Menjengkelkan): `OnTick()` Anda KOSONG!

Sekarang, buka file `.mq5` yang dibuat oleh Wizard. Scroll ke bawah. Cari fungsi OnTick().

void OnTick() {     Expert_OnTick(); }

Tunggu. Apa? Isinya cuma satu baris itu? Di mana semua logika if(RSI > 70) ...? Di mana if(MA_Fast > MA_Slow) ...?

Selamat datang di "Borgol Emas".

Fungsi `Expert_OnTick()` itu adalah fungsi milik si "Manajer" (kelas induk `CExpert`). Saat Anda memanggilnya, Anda menyerahkan seluruh kendali *tick* Anda kepada *framework* Standard Library.

Di dalam CExpert::OnTick() (yang tidak bisa Anda lihat), inilah yang terjadi (dalam bahasa manusia):

  1. "Oke, *tick* baru datang."
  2. "Saya cek Departemen Sinyal (m_signal.CheckSignal()). Ada sinyal apa?"
  3. "Oh, Sinyal bilang 'BUY'."
  4. "Saya cek dulu apa sudah ada posisi. Oh, belum."
  5. "Saya tanya Bendahara (m_money.CheckVolume()). Berapa lot kita boleh Beli?"
  6. "Oh, Bendahara bilang 0.1 lot."
  7. "OKE! Saya suruh Eksekutor (m_trade.Buy(...)) untuk Beli 0.1 lot."
  8. "Setelah itu, saya suruh Pengawas (m_trailing.CheckTrailing()) untuk mengawasi semua posisi yang ada."
  9. "Selesai. Tunggu *tick* berikutnya."

 

Fungsi OnTick() Anda bersih total. Tapi akibatnya, Anda *kehilangan* kontrol atas alur logika. Semuanya diurus oleh "Manajer" `CExpert`. Anda tidak bisa lagi seenaknya menyelipkan: "TAPI... kalau hari Jumat, jangan *trading*." Anda tidak bisa lagi bilang: "Beli, TAPI kalau *spread* di atas 20, jangan."

...Kecuali... Anda belajar *membongkar* pabrik itu. Dan itu 10x lebih sulit.

H2: Pro vs Kontra: Kapan Pakai "Meriam Tank" Ini?

Standard Library ini adalah "Over-Engineering" yang paling brutal. Dia adalah Meriam Tank untuk membunuh nyamuk. Anda mau MA Cross 20 baris? Dia kasih Anda 12 file dan 5000 baris kode.

H3: Keuntungan (PRO) - Kenapa Dia Jenius

  • Kecepatan Prototyping: Anda bisa menguji 10 ide sinyal berbeda dalam 1 jam. Cukup ganti satu baris di OnInit(). Jenius.
  • Kode Teruji: Logika CTrade, `Money`, dan `Trailing` sudah diuji ribuan kali. (Secara teori) bebas *bug*.
  • Struktur Bersih: Ini adalah contoh OOP "murni". Belajar dari sini itu bagus.

H3: Kerugian (KONTRA) - Kenapa Dia Borgol

  • SANGAT KAKU: "My way or the highway." Mau sinyal yang menggabungkan RSI *DAN* MA Cross? Tidak bisa (lewat Wizard). Wizard hanya mengizinkan SATU sinyal (atau beberapa sinyal dengan filter).
  • "Black Box": Saat EA Anda tidak *trading*, Anda stres. Kenapa? Apa Sinyal-nya gagal? Apa Bendahara-nya bilang "Tidak"? Apa Eksekutor-nya *error*? *Debugging* adalah mimpi buruk, karena Anda tidak melihat logika internalnya.
  • *Learning Curve* Terbalik: Gampang untuk membuat EA standar. Tapi MUSTAHIL SULIT untuk membuat 1 hal kustom. Mau *money management* kustom? Anda harus membuat kelas `CMyMoney` yang baru, mewarisi `CMoneyBase`, dan meng-override 5 fungsi *virtual*-nya. Selamat! Itu lebih sulit daripada nulis dari nol.

H2: Kesimpulan: Belajar dari Pabriknya, Bukan Jadi Buruhnya

Jadi, apakah MQL5 Standard Library ini sampah? Tentu saja tidak. Ini adalah karya *software engineering* yang mengesankan.

Apakah ini "Holy Grail" yang akan membuat Anda kaya? Tentu saja tidak. Ini hanyalah *alat*. Sebuah gergaji mesin yang sangat besar dan sangat spesifik.

Berikut adalah saran jujur saya:

  1. JANGAN gunakan Wizard/SL jika EA Anda sederhana (misal, 1 sinyal, 1 logika). Tulis dari nol. Anda akan lebih bahagia dan Anda memegang kendali.
  2. GUNAKAN Wizard/SL untuk *belajar*. Buat EA pakai Wizard, lalu *baca* kode yang dia hasilkan. Baca file `.mqh` yang dia sertakan. Lihat *bagaimana* para profesional di MetaQuotes menyusun kelas-kelas mereka. Ini adalah buku teks OOP trading terbaik di dunia.
  3. GUNAKAN Wizard/SL untuk *prototyping* cepat. Jika Anda punya 5 ide sinyal, buat 5 EA pakai Wizard dalam 30 menit, *backtest* semuanya. Mana yang paling oke? Nah, baru Anda *tulis ulang* EA yang paling oke itu DARI NOL, dengan kontrol penuh.

 

Standard Library adalah alat yang luar biasa untuk *developer* berpengalaman, tapi (ironisnya) adalah jebakan "black box" yang mematikan untuk pemula. Jangan jadi buruh pabrik yang hanya tahu menekan tombol. Jadilah arsitek yang paham cara kerja mesinnya.

Dunia *algorithmic trading* penuh dengan *trade-off* yang rumit seperti ini—antara efisiensi *framework* dan fleksibilitas kustom. Jika Anda menikmati diskusi mendalam yang membongkar "jeroan" mesin trading...

...Anda akan betah di tempat kami. Pastikan Anda follow akun sosial media INVEZTO! Kami tidak hanya menyajikan "apa yang harus dilakukan", tapi "mengapa" itu dilakukan. Dapatkan info menarik lainnya, bedah strategi, dan tips *coding* yang akan membuat Anda menjadi trader al-go yang lebih cerdas dan lebih sinis (secara sehat). Sampai jumpa di sana!

You may also like

Related posts