
Selamat datang kembali di serial "Automating Trading Strategies in MQL5". Kalau Anda baru gabung... wah, Anda salah milih artikel buat mulai. Ini adalah Part 5. Lima! Artinya, sudah ada empat artikel sebelumnya yang (mungkin) sama-sama bikin pusing.
Judulnya kali ini adalah "Developing the Adaptive Crossover RSI Trading Suite Strategy". Keren. Canggih. Penuh kata kunci. Ada "Adaptive", ada "Crossover", ada "RSI", ada "Suite". Kurang "Quantum" dan "AI" aja biar lengkap. Di dunia MQL5, makin panjang judulnya, biasanya makin rumit kodenya. Dan, oh boy, artikel ini tidak mengecewakan.
Jadi, apa sih yang mau dibuat sama si penulis, Allan Munene Mutiiria? Pada dasarnya, dia mau bikin Expert Advisor (EA) alias robot trading yang menggabungkan dua indikator paling standar sejagat raya: Moving Average (MA) Crossover dan Relative Strength Index (RSI).
"Lho, gitu doang? Itu kan strategi pertama yang dipelajari semua newbie?"
Eits, tahan dulu. Tentu saja, ini MQL5. Nggak ada yang dibikin gampang. Ini bukan sekadar "kalau MA bersilangan, beli". Ini "Suite". Ini "Adaptive". Ini adalah contoh sempurna bagaimana programmer mengambil ide sederhana dan mengubahnya menjadi ratusan baris kode yang rumit, penuh filter, dan tentu saja... penuh potensi over-optimization. Tapi justru di situlah letak pelajarannya. Siapkan kopi, luruskan punggung, kita akan bedah monster ini bagian per bagian.
Setiap proyek EA yang bagus (atau yang pura-pura bagus) dimulai dengan sebuah "Blueprint" atau cetak biru. Ini adalah bagian di mana kita berandai-andai di dunia yang sempurna, di mana semua sinyal itu akurat dan slippage itu mitos.
Logika dasarnya dibagi jadi dua bagian: sinyal utama dan filter konfirmasi. Kayak di film-film, ada detektif utamanya, terus ada partnernya yang skeptis dan selalu nanya, "Lo yakin?".
Ini adalah jantung dari strategi. Sang detektif utama. Kita pakai dua Moving Average:
Logikanya? Oh, ini bagian paling "inovatif" yang pernah Anda dengar (kalau Anda baru kemarin sore belajar trading):
Sampai di sini, semua trader pemula di dunia mengangguk-angguk. "Gue bisa bikin ini pakai indikator bawaan." Tentu saja bisa. Tapi... apakah itu "Suite"? Tentu tidak. Kita butuh filter!
Inilah dia si partner skeptis. MA Crossover itu gampang banget ngasih sinyal palsu, apalagi di pasar sideways. Dia bakal bilang "BUY!" "SELL!" "BUY!" "SELL!" sampai akun Anda kena margin call.
Di sinilah RSI (Periode 14) berperan. Dia nggak peduli sama persilangan. Dia peduli sama "momentum". Dia punya satu garis ajaib di tengah: level 50.
Jadi, gabungannya begini:
Ini adalah logika "konfirmasi". Si MA udah teriak "BUY!", tapi si RSI bilang, "Eits, tahan dulu, Bos. Momentumnya masih di bawah 50. Gue nggak ikut-ikutan." Hasilnya? Sinyal jadi lebih sedikit, tapi (konon) lebih akurat. Konon.
Ini adalah bagian favorit saya. Seakan-akan dua filter tadi belum cukup, si penulis nambahin filter hari. Di bagian input EA-nya nanti, Anda bisa milih mau trading hari apa aja.
input bool Tuesday = true; // Trade on Tuesday?input bool Wednesday = true; // Trade on Wednesday?input bool Thursday = true; // Trade on Thursday?input bool Friday = false; // Trade on Friday?
Lihat? Di contohnya, hari Jumat disetel false. Mungkin si EA-nya takut NFP. Atau mungkin dia mau happy hour lebih cepat. Entahlah.
Secara edukatif, ini berguna. Misalnya, Anda tahu bahwa strategi Anda babak belur setiap hari Senin (karena pasar baru buka dan aneh) atau Jumat (karena profit taking). Anda bisa mematikan EA-nya di hari itu. Secara sarkas, ini adalah cara halus untuk "memaksa" hasil *backtest* jadi bagus. "Oh, strateginya jelek di hari Senin? Ya udah, matiin aja hari Seninnya." Jenius!
Oke, rencana di atas kertas selesai. Gampang, kan? Cuma tiga filter. Sekarang, mari kita ubah jadi kode MQL5. Ini adalah bagian di mana yang lemah akan menyerah dan yang kuat... akan cari kode contoh di forum MQL5.
Penulis artikel ini memandu kita langkah demi langkah, yang mana harus kita apresiasi. Tapi tetep aja, ini ribet.
Setiap EA MQL5 dimulai dengan ritual yang sama. Pertama, #property. Ini kayak ngasih KTP buat EA lo.
#property copyright "Forex Algo-Trader, Allan"#property link "https://t.me/Forex_Algo_Trader"#property version "1.00"
Biar dibilang pro. Padahal, ya, cuma informasi dasar. Yang paling penting dari basa-basi ini adalah:
#include <Trade/Trade.mqh>CTrade obj_Trade;
Trade.mqh adalah kitab suci yang disediain MetaQuotes biar kita nggak perlu pusing mikirin cara ngirim order manual. CTrade adalah kelasnya. obj_Trade adalah... sebut aja "Paijo". Si Paijo inilah yang bakal kita suruh-suruh, "Paijo, beli!" atau "Paijo, jual!". Tanpa Paijo, EA lo cuma bisa bengong ngeliatin chart.
Ini adalah bagian di mana si developer EA pamer. "Lo mau setting apa? Gue ada!" Artikel ini membagi input jadi tiga grup, yang mana itu bagus secara tatanan.
Bedanya sinput dan input apa? sinput (string input) itu buat parameter yang nggak akan di-optimize di Strategy Tester. input itu buat yang mau di-optimize. Tapi di artikel ini kayaknya dia pakai sinput buat... hampir semuanya, termasuk Lot. Hmm, pilihan yang menarik. (Update: Ah, dia pakai 'sinput' buat grup, dan 'input' buat variabelnya. Oke, masuk akal.)
Apa aja yang bisa disetel?
inpLots: Mau pakai lot berapa? 0.01? 10? Terserah, asal modalnya kuat.inpSLPts: Stop Loss berapa poin. Ini wajib. Kalau Anda bikin EA tanpa SL, Anda bukan trader, Anda penjudi.inpR2R: Risk to Reward Ratio. Ini keren. Misalnya SL 300 poin dan R2R 1.0, berarti TP-nya juga 300 poin. Kalau R2R 2.0, TP-nya 600 poin.inpMagicNo: Ini PENTING. Magic Number adalah ID unik buat EA ini. Biar EA lo nggak berantem sama EA lain di akun yang sama. Kayak ngasih label nama di kotak makan anak TK.inpisAllowTrailingStop: Mau pakai Trailing Stop? Ya/Tidak.inpMA_Fast_Period: Periode MA Cepat (default 14).inpMA_Fast_Method: Metode MA (SMA, EMA, SMMA, LWMA). Dikasih pilihan biar lo bisa nyalahin metodenya, bukan EA-nya, pas loss.inpMA_Slow_Period: Periode MA Lambat (default 50).inpRSI_Tf: Timeframe RSI (default PERIOD_CURRENT).inpRSI_Period: Periode RSI (default 14).inpRsiBUYThreshold: Batas atas RSI (default 50).Banyak? Banget. Ini baru input. Belum kodenya.
Di MQL5, lo nggak bisa seenaknya nanya ke indikator, "Eh, MA, nilai lo berapa?". Nggak sopan. Ada birokrasi.
Langkah 1: Minta 'Handle'
Anda harus deklarasikan variabel buat nyimpen "pegangan" atau 'handle' ke indikatornya.
int handleMAFast = INVALID_HANDLE;int handleMASlow = INVALID_HANDLE;int handleRSIFilter = INVALID_HANDLE;
INVALID_HANDLE itu nilai default yang artinya "gue belum pegang apa-apa". Ini kayak nomor antrian di bank. Anda punya nomornya (handle), tapi belum tentu itu indikatornya.
Langkah 2: Siapkan 'Buffer'
Setelah punya 'handle', Anda butuh "ember" buat nampung data dari indikator itu. Ember ini namanya 'array' atau 'buffer'.
double bufferMAFast[];double bufferMASlow[];double bufferRSIFilter[];
Ini cuma deklarasi. Embernya masih kosong.
EA itu punya tiga siklus hidup utama, kayak Kupu-kupu. Oke, nggak juga.
Ini adalah fungsi yang dijalanin sekali doang pas EA pertama kali ditaruh di chart. Ngapain aja?
iMA() dan iRSI(). Di sinilah kita masukin semua input yang tadi disetel user (Periode, Metode, dll.).handleMAFast == INVALID_HANDLE, artinya gagal. Mungkin user-nya iseng masukin periode -10. Kalau gagal? return(INIT_FAILED). EA-nya ngambek, nggak mau jalan. Bagus.ArraySetAsSeries(bufferMAFast, true). Ini kayak bilang, "Tolong datanya dibalik ya, biar gue bacanya gampang."obj_Trade.SetExpertMagicNumber(inpMagicNo). "Paijo, ini ID kamu. Jangan sampai salah."
Ini kebalikannya. Dijalanin sekali doang pas EA-nya ditutup atau di-remove dari chart. Tugasnya cuma satu: bersih-bersih.
IndicatorRelease(handleMAFast);IndicatorRelease(handleMASlow);IndicatorRelease(handleRSIFilter);
Ini kayak bilang, "Oke, kerjaan selesai. 'Handle'-nya gue balikin." Ini sopan santun dalam programming. Kalau Anda lupa ngelakuin ini, Anda bisa nyebabin memory leak. Laptop Anda jadi lambat, dan Anda nggak tahu kenapa.
Ini dia. Ini adalah fungsi yang dijalanin setiap ada tick harga baru. Setiap detik, bisa berkali-kali! Inilah jantungnya EA. Di sinilah semua keputusan trading diambil.
Apa yang terjadi di sini?
Isi Ember (CopyBuffer): Hal pertama yang dilakuin adalah ngisi 'buffer' yang tadi udah kita siapin.
CopyBuffer(handleMAFast, 0, 0, 3, bufferMAFast)
Ini artinya: "Tolong ambil data dari 'handle' MA Cepat, dari buffer ke-0 (karena MA cuma punya 1 garis), mulai dari bar ke-0 (bar sekarang), sebanyak 3 bar, dan masukin ke ember bufferMAFast."
CopyBuffer gagal, return. Jangan ambil keputusan pakai data sampah.if (bufferMAFast[1] > bufferMASlow[1] && bufferMAFast[2] < bufferMASlow[2]) // Sinyal Jual (Logikanya kebalik? Oh, tunggu, dia ngecek di bar-bar sebelumnya. Oke, ini pendekatan klasik. Bar [1] adalah bar yang udah closed*).if (bufferRSIFilter[1] < inpRsiSELLThreshold) // Konfirmasi Jualif (isCheckTradingDaysFilter()) // Hari ini boleh trading?
Setelah lolos semua interogasi tadi (MA cross? YA. RSI konfirm? YA. Hari ini boleh trading? YA. Belum ada posisi terbuka? YA.), akhirnya... saatnya nyuruh si Paijo.
obj_Trade.Buy(inpLots, NULL, openPrice, slPrice, tpPrice, "BUY TRADE");
Penulis artikel ini dengan rapi ngitung openPrice (harga Ask), slPrice (Bid - Poin SL), dan tpPrice (Bid + Poin SL * R2R). Ini adalah eksekusi yang bersih.
Setelah order dikirim, dia cek lagi. "Sukses nggak?".
if(ticket > 0) { Print("SUCCESS. Opened the BUY position..."); }else { Print("ERROR! Failed to open the BUY position."); }
Dan... selesai. Proses ini diulang lagi setiap tick baru masuk. Selamanya. Sampai Anda tutup EA-nya.
Di akhir artikel, penulis (seperti biasa) nunjukkin hasil *backtest*. Dan (seperti biasa) hasilnya terlihat... lumayan. *Equity curve*-nya naik, *profit factor*-nya bagus. Wow.
Di sinilah kita harus pakai topi sarkas kita lagi. Anda sudah nulis ratusan baris kode, merasa jenius karena menggabungkan MA, RSI, dan filter hari. Terus Anda *backtest*. Hasilnya bagus. Anda *optimize*. Hasilnya makin bagus. Anda menemukan setelan ajaib: Periode MA 17, Periode RSI 9, R2R 2.5, dan hanya trading hari Rabu jam 3 sore. Profitnya 1000%!
Selamat. Anda baru saja melakukan over-optimization. Anda nggak nemu strategi bagus. Anda cuma nemu setelan yang kebetulan cocok dengan data masa lalu.
Apakah EA ini jelek? Nggak. Artikel ini adalah contoh luar biasa tentang bagaimana membangun EA yang terstruktur, rapi, dan modular. Cara dia misahin logika sinyal, filter, dan eksekusi itu bagus banget buat dipelajari. Tapi apakah strategi "MA-Cross-plus-RSI" ini adalah holy grail? Tentu saja bukan.
Backtest yang bagus itu kayak foto profil di Tinder. Belum tentu sesuai sama aslinya pas live trade. *Spread* yang melebar, *slippage* pas berita, atau *server* lag... semua itu nggak ada di *backtest* Anda yang cantik.
Jadi, setelah baca bedah artikel "Part 5" yang panjangnya kayak skripsi ini, apakah Anda tercerahkan? Atau malah pengen banting laptop? Jujur aja.
Artikel MQL5 ini adalah contoh sempurna dari dunia algorithmic trading. Idenya seringkali sederhana (MA Cross + RSI), tapi eksekusinya butuh disiplin, struktur, dan... paranoia (cek error di mana-mana). Artikel ini sangat edukatif dalam menunjukkan cara membangun EA yang robus dan fleksibel.
Tapi inilah seninya. Mengubah ide—seabsurd apa pun itu, termasuk filter hari—menjadi barisan kode logis yang bisa jalan 24/7 tanpa emosi, tanpa lelah (tapi mungkin takut hari Jumat). Ini adalah suite strategi yang, walaupun rumit, tapi setiap bagiannya punya alasan... atau setidaknya, bisa dijustifikasi.
Pusing ngurusin kode-kode beginian? Pengen dapet info yang lebih gampang dicerna, tapi tetep berbobot seputar dunia trading dan investasi? Jelas. Kita semua butuh istirahat dari INVALID_HANDLE.
Daripada pusing sendirian, mending healing. Coba deh intip dan follow akun social media INVEZTO.
Gue nggak janji lo bakal langsung jadi master programmer MQL5, tapi seenggaknya, feed lo bakal diisi info-info menarik yang lebih manusiawi. Siapa tahu, ide buat EA lo berikutnya malah dateng dari sana. Cheers.
Multi-Level Grid Trading M...
Bitcoin: Asia Serves Toxic...
Pasar Forex Curang? ...
Gartley Pattern MQL5: The ...