
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.
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:
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.
Mari kita coba "sihir" itu dan lihat apa yang terjadi. Ikuti langkah-langkah ini di MetaEditor Anda.
new di dalam kode Anda. Anda tidak membuat logika MA Cross. Anda *mengimpor* logika MA Cross yang sudah jadi.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".
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).
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(...); // BISAm_signal = new CSignalMA(...); // BISAm_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".
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.
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.
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):
m_signal.CheckSignal()). Ada sinyal apa?"m_money.CheckVolume()). Berapa lot kita boleh Beli?"m_trade.Buy(...)) untuk Beli 0.1 lot."m_trailing.CheckTrailing()) untuk mengawasi semua posisi yang ada."
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.
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.
OnInit(). Jenius.CTrade, `Money`, dan `Trailing` sudah diuji ribuan kali. (Secara teori) bebas *bug*.override 5 fungsi *virtual*-nya. Selamat! Itu lebih sulit daripada nulis dari nol.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:
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!
Multi-Level Grid Trading M...
Bitcoin: Asia Serves Toxic...
Pasar Forex Curang? ...
Gartley Pattern MQL5: The ...