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

Bikin Robot Trading Itu Gampang, Katanya: Bedah EA Crossover RSI (Part 5) yang Ribetnya Minta Ampun

Bikin Robot Trading Itu Gampang, Katanya: Bedah EA Crossover RSI (Part 5) yang Ribetnya Minta Ampun

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.

H2: Rencana Cemerlang di Atas Kertas: Membedah 'Blueprint' Strategi

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?".

H3: Sinyal Utama: Si Duo MA Lintas Sektoral (Crossover)

Ini adalah jantung dari strategi. Sang detektif utama. Kita pakai dua Moving Average:

  1. MA Cepat (Fast MA): Periode 14
  2. MA Lambat (Slow MA): Periode 50

 

Logikanya? Oh, ini bagian paling "inovatif" yang pernah Anda dengar (kalau Anda baru kemarin sore belajar trading):

  • Sinyal BUY: Terjadi ketika MA Cepat (14) dengan gagah berani memotong MA Lambat (50) dari BAWAH ke ATAS. Ini namanya Golden Cross versi mini. Dunia terlihat cerah, tren bullish (katanya) akan dimulai.
  • Sinyal SELL: Terjadi ketika MA Cepat (14) menukik tajam memotong MA Lambat (50) dari ATAS ke BAWAH. Dead Cross. Langit mendung, pasar mau runtuh (katanya).

 

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!

H3: Sang Penjaga Gerbang: RSI, Si Filter Sombong

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.

  • Bagi RSI, kalau di atas 50, momentum lagi bullish.
  • Kalau di bawah 50, momentum lagi bearish.

 

Jadi, gabungannya begini:

  • Kondisi BUY (Harus 2 Syarat): 1. MA 14 memotong MA 50 ke atas. 2. DAN PADA SAAT ITU, nilai RSI harus di atas 50. (Artinya: "Oke, tren emang lagi mau naik, dan momentumnya juga dukung. Gas!")
  • Kondisi SELL (Harus 2 Syarat): 1. MA 14 memotong MA 50 ke bawah. 2. DAN PADA SAAT ITU, nilai RSI harus di bawah 50. (Artinya: "Oke, emang lagi mau turun, dan momentumnya juga payah. Jual!")

 

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.

H3: Filter Hari: Karena Robot Juga Butuh Hari Libur (Serius?)

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!

H2: Selamat Datang di Dunia Nyata: Implementasi Kode MQL5 yang Bikin Migrain

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.

H3: Persiapan Awal: Basa-basi Wajib (dan Penting)

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.

H3: 'sinput' dan 'input': Parade Pilihan yang Bikin Pusing User

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?

  • GENERAL SETTINGS: Ini setelan dasar.
    • 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.
  • INDICATOR SETTINGS: Ini buat nyetel indikatornya.
    • 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).
    • ...dan seterusnya.
  • FILTER SETTINGS: Ini buat nyetel filternya.
    • inpRSI_Tf: Timeframe RSI (default PERIOD_CURRENT).
    • inpRSI_Period: Periode RSI (default 14).
    • inpRsiBUYThreshold: Batas atas RSI (default 50).
    • ...dan filter hari (Senin, Selasa, dll.) yang kita bahas tadi.

Banyak? Banget. Ini baru input. Belum kodenya.

H3: Siapkan Wadahnya: 'Handle' dan 'Buffer'

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.

H3: Fungsi Inti: OnInit, OnDeinit, dan (Tentu Saja) OnTick

EA itu punya tiga siklus hidup utama, kayak Kupu-kupu. Oke, nggak juga.

1. OnInit() - Fungsi Inisialisasi (Saat EA Baru Nyala)

Ini adalah fungsi yang dijalanin sekali doang pas EA pertama kali ditaruh di chart. Ngapain aja?

  • Minta 'Handle' beneran: Tadi kan baru deklarasi. Sekarang kita minta 'handle' beneran pakai fungsi iMA() dan iRSI(). Di sinilah kita masukin semua input yang tadi disetel user (Periode, Metode, dll.).
  • Cek Error (Paranoia Wajib): Habis minta 'handle', kita harus cek. "Dapet nggak 'handle'-nya?". Kalau ternyata handleMAFast == INVALID_HANDLE, artinya gagal. Mungkin user-nya iseng masukin periode -10. Kalau gagal? return(INIT_FAILED). EA-nya ngambek, nggak mau jalan. Bagus.
  • Balik Urutan Array: Ini teknis, tapi penting. Data di MetaTrader itu urutannya "dari sekarang ke masa lalu" (indeks 0 itu bar sekarang, 1 itu bar kemarin). Biar gampang dibaca, kita pakai ArraySetAsSeries(bufferMAFast, true). Ini kayak bilang, "Tolong datanya dibalik ya, biar gue bacanya gampang."
  • Ngasih Magic Number ke Paijo: obj_Trade.SetExpertMagicNumber(inpMagicNo). "Paijo, ini ID kamu. Jangan sampai salah."

 

2. OnDeinit() - Fungsi De-inisialisasi (Saat EA Dimatiin)

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.

3. OnTick() - Fungsi Inti (Saat Jantung Berdebar)

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?

  1. 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."

  2. Cek Error Lagi: Paranoia, ingat? Habis copy, kita cek. "Dapet nggak datanya? Minimal 3 bar dapet, kan?". Kalau CopyBuffer gagal, return. Jangan ambil keputusan pakai data sampah.
  3. Logika Sinyal (Bagian Seru): Setelah semua data aman di ember, barulah kita cek logikanya. Artikel ini bikin fungsi-fungsi terpisah yang rapi (ini patut dipuji).
    • Cek Crossover: 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*).
      • Cek RSI: if (bufferRSIFilter[1] < inpRsiSELLThreshold) // Konfirmasi Jual
      • Cek Hari: if (isCheckTradingDaysFilter()) // Hari ini boleh trading?

 

H3: Eksekusi! (Kalau Nggak Ragu-Ragu)

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.

H2: Ujian Akhir: Backtesting dan Kenapa Hasilnya Nggak Selalu Indah

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.

H2: Kesimpulan: Ribet, tapi (Mungkin) Sebanding?

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.

You may also like

Related posts