Selamat datang di dunia trading! Hari ini kita akan membahas tentang MQL5 Wizard, alat yang memungkinkan kita untuk membuat Expert Advisor (EA) siap pakai dengan memanfaatkan kelas-kelas dari Standard Library yang disediakan oleh terminal klien MetaTrader.
Dengan MQL5 Wizard, kita bisa mengecek ide trading dengan cepat. Yang kita butuhkan hanyalah membuat kelas sinyal trading kita sendiri. Struktur kelas ini serta contoh penggunaannya dapat ditemukan di artikel MQL5 Wizard: Cara Membuat Modul Sinyal Trading.
Inti dari proses ini adalah bahwa kelas sinyal trading diturunkan dari CExpertSignal. Selanjutnya, kita perlu menimpa metode virtual LongCondition() dan ShortCondition() dengan metode kita sendiri.
Ada sebuah buku menarik berjudul "Strategi Para Trader Terbaik" (dalam bahasa Rusia) yang membahas berbagai strategi trading. Namun, kita akan fokus pada pola candlestick pembalikan, yang dikonfirmasi oleh indikator seperti Stochastic, CCI, MFI, dan RSI.
Cara terbaik adalah dengan membuat kelas terpisah yang diturunkan dari CExpertSignal untuk memeriksa pembentukan pola candlestick. Untuk konfirmasi sinyal trading yang dihasilkan oleh pola candlestick, cukup tulis kelas yang diturunkan dari CCandlePattern dan tambahkan fitur yang diperlukan (misalnya, konfirmasi oleh osilator).
Kita akan membahas sinyal yang didasarkan pada pola candlestick "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) yang dikonfirmasi oleh indikator RSI. Modul sinyal trading ini berdasarkan kelas CCandlePattern, dan ini adalah contoh sederhana penggunaannya untuk membuat sinyal trading dengan pola candlestick.
1. Pola Candlestick Pembalikan "Morning Star" dan "Evening Star"
1.1. Morning Star
Pola ini menunjukkan pembalikan dari tren turun, terdiri dari tiga candlestick (Gambar 1). Setelah candlestick hitam panjang, muncul candlestick kedua (warna tidak penting) dengan tubuh kecil yang berada di luar tubuh candlestick hitam. Tubuh kecil ini menunjukkan bahwa kekuatan bull dan bear seimbang, dan pasar siap untuk berbalik arah.
Candlestick ketiga dalam pola ini adalah candlestick bullish, yang tidak tumpang tindih dengan tubuh candlestick kedua, dan harga penutupan berada di dalam tubuh candlestick pertama (bearish). Candlestick yang dihasilkan dari model ini juga terlihat pada Gambar 1.
Jika candlestick kedua mirip doji, maka pola ini disebut "Morning Doji Star".

Gambar 1. Pola candlestick "Morning Star" dan "Morning Doji Star".
Identifikasi pola "Morning Star" dilakukan di metode CheckPatternMorningStar() dan CheckPatternMorningDoji() dari kelas CCandlePattern:
//+------------------------------------------------------------------+ //| Memeriksa pembentukan pola "Morning Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Morning Star if((Open(3)-Close(3)>AvgBody(1)) && // candlestick bearish, tubuhnya lebih besar dari rata-rata tubuh (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // candlestick kedua memiliki tubuh kecil (kurang dari setengah rata-rata) (Close(2)<Close(3)) && // penutupan candlestick kedua lebih rendah dari penutupan candlestick pertama.
Metode CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) dari kelas CCandlePattern digunakan untuk memeriksa pembentukan pola "Morning Star" dan "Morning Doji Star".
1.2. Evening Star
Pola ini menunjukkan pembalikan dari tren naik, juga terdiri dari tiga candlestick (Gambar 2). Setelah candlestick putih panjang, muncul candlestick kedua (warna tidak penting) dengan tubuh kecil yang berada di luar tubuh candlestick putih. Tubuh kecil ini menunjukkan bahwa kekuatan bull dan bear seimbang, dan pasar siap untuk berbalik arah.
Candlestick ketiga dalam pola ini adalah candlestick bearish, yang tidak tumpang tindih dengan tubuh candlestick kedua, dan harga penutupan berada di dalam tubuh candlestick pertama (bullish). Candlestick yang dihasilkan dari model ini juga terlihat pada Gambar 2.
Jika candlestick kedua mirip doji, maka pola ini disebut "Evening Doji Star".

Gambar 2. Pola candlestick "Evening Star" dan "Evening Doji Star".
Berikut adalah metode untuk mengidentifikasi pola "Evening Star" dan "Evening Doji Star":
//+------------------------------------------------------------------+ //| Memeriksa pembentukan pola "Evening Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Evening Star if((Close(3)-Open(3)>AvgBody(1)) && // candlestick bullish dengan tubuh lebih tinggi dari rata-rata (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // candlestick kedua memiliki tubuh kecil (kurang dari setengah rata-rata) (Close(2)>Close(3)) && // penutupan candlestick kedua lebih tinggi dari penutupan candlestick pertama
Metode CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) dari kelas CCandlePattern digunakan untuk memeriksa pembentukan pola "Evening Star" dan "Evening Doji Star".
2. Sinyal Trading, Dikonfirmasi oleh Indikator RSI
Sinyal trading untuk membuka posisi long atau short harus dikonfirmasi oleh indikator RSI. Nilai RSI harus kurang dari/lebih dari level kritis (40 untuk posisi long dan 60 untuk posisi short).
Penutupan posisi yang dibuka bergantung pada nilai RSI. Ini dapat dilakukan dalam 2 kasus:
- Jika RSI telah mencapai level kritis yang berlawanan (70 untuk posisi long dan 30 untuk posisi short)
- Jika sinyal pembalikan tidak terkonfirmasi (ketika RSI mencapai level berikut: 30 untuk posisi long dan 70 untuk posisi short)

Gambar 3. Pola "Morning Star", dikonfirmasi oleh indikator RSI.
- int CMS_ES_RSI::LongCondition() - memeriksa kondisi untuk membuka posisi long (mengembalikan 80) dan menutup posisi short (mengembalikan 40);
- int CMS_ES_RSI::ShortCondition() - memeriksa kondisi untuk membuka posisi short (mengembalikan 80) dan menutup posisi long (mengembalikan 40).
2.1. Membuka posisi long/Menutup posisi short
Pembentukan pola "Morning Star" harus dikonfirmasi oleh indikator RSI:
RSI(1)<40 (nilai RSI dari bar yang terakhir diselesaikan harus kurang dari 40).Posisi short harus ditutup jika indikator RSI telah melintasi ke atas level kritis 70 atau 30.
//+------------------------------------------------------------------+ //| Memeriksa kondisi untuk masuk dan keluar dari pasar | //| 1) Masuk pasar (membuka posisi long, hasil=80) | //| 2) Keluar pasar (menutup posisi short, hasil=40) | //+------------------------------------------------------------------+ int CMS_ES_RSI::LongCondition() { int result=0; //--- idx dapat digunakan untuk menentukan mode kerja Expert Advisor //--- idx=0 - dalam hal ini EA memeriksa kondisi trading di setiap tick //--- idx=1 - dalam hal ini EA memeriksa kondisi trading hanya pada bar berita int idx =StartIndex(); //--- pemeriksaan kondisi untuk membuka posisi long //--- pembentukan pola Morning Star dan RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (RSI(1)<40)) result=80; //--- pemeriksaan kondisi untuk menutup posisi short //--- sinyal garis melintasi level overbought/oversold (ke atas 30, ke atas 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- mengembalikan hasil return(result); }
2.2. Membuka posisi short/Menutup posisi long
Pembentukan pola "Evening Star" harus dikonfirmasi oleh indikator RSI: RSI(1)>60 (nilai dari indikator RSI harus lebih besar dari 60).
Posisi long harus ditutup jika indikator RSI telah melintasi ke bawah level kritis 70 atau 30.
//+------------------------------------------------------------------+ //| Memeriksa kondisi untuk masuk dan keluar dari pasar | //| 1) Masuk pasar (membuka posisi short, hasil=80) | //| 2) Keluar pasar (menutup posisi long, hasil=40) | //+------------------------------------------------------------------+ int CMS_ES_RSI::ShortCondition() { int result=0; //--- idx dapat digunakan untuk menentukan mode kerja Expert Advisor //--- idx=0 - dalam hal ini EA memeriksa kondisi trading di setiap tick //--- idx=1 - dalam hal ini EA memeriksa kondisi trading hanya pada bar berita int idx =StartIndex(); //--- pemeriksaan kondisi untuk membuka posisi short //--- pembentukan pola Evening Star dan RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (RSI(1)>60)) result=80; //--- pemeriksaan kondisi untuk menutup posisi long //--- sinyal garis melintasi level overbought/oversold (ke bawah 70, ke bawah 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- mengembalikan hasil return(result); }
2.3. Membuat Expert Advisor Menggunakan MQL5 Wizard
Kelas CMS_ES_RSI tidak termasuk dalam kelas Standard Library, untuk menggunakannya, kita perlu mengunduh file acms_es_rsi.mqh (lihat lampiran) dan menyimpannya di folder client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignals. Hal yang sama juga berlaku untuk file candlepatterns.mqh. Kita dapat menggunakannya di MQL5 Wizard setelah me-restart MetaEditor.
Untuk membuat Expert Advisor, jalankan MQL5 Wizard:

Gambar 4. Membuat Expert Advisor Menggunakan MQL5 Wizard
Mari kita tentukan nama Expert Advisor:

Gambar 5. Properti Umum dari Expert Advisor
Setelah itu, kita perlu memilih modul sinyal trading yang digunakan.

Gambar 6. Properti Sinyal Expert Advisor
Dalam kasus kita, kita hanya menggunakan satu modul sinyal trading.
Menambahkan modul Sinyal Berdasarkan Morning/Evening Stars yang Dikonfirmasi oleh RSI:

Gambar 7. Properti Sinyal Expert Advisor
Modul sinyal trading telah ditambahkan:

Gambar 8. Properti Sinyal Expert Advisor
Anda dapat memilih properti trailing apa pun, tetapi kita akan menggunakan "Trailing Stop tidak digunakan":

Gambar 9. Properti Trailing dari Expert Advisor
Mengenai properti manajemen uang, kita akan menggunakan "Trading dengan volume perdagangan tetap":

Gambar 10. Properti Manajemen Uang dari Expert Advisor
Dengan menekan tombol "Finish", kita akan mendapatkan kode dari Expert Advisor yang dihasilkan, yang terletak di Expert_AMS_ES_RSI.mq5, dan akan disimpan di terminal_data_folder\MQL5\Experts\.
Parameter input default dari Expert Advisor yang dihasilkan:
//--- input untuk sinyal utama input int Signal_ThresholdOpen =10; // Nilai threshold sinyal untuk membuka [0...100] input int Signal_ThresholdClose =10; // Nilai threshold sinyal untuk menutup [0...100] input double Signal_PriceLevel =0.0; // Level harga untuk mengeksekusi transaksi input double Signal_StopLevel =50.0; // Level Stop Loss (dalam poin) input double Signal_TakeLevel =50.0; // Level Take Profit (dalam poin)
harus diganti menjadi:
//--- input untuk sinyal utama input int Signal_ThresholdOpen =40; // Nilai threshold sinyal untuk membuka [0...100] input int Signal_ThresholdClose =20; // Nilai threshold sinyal untuk menutup [0...100] input double Signal_PriceLevel =0.0; // Level harga untuk mengeksekusi transaksi input double Signal_StopLevel =0.0; // Level Stop Loss (dalam poin) input double Signal_TakeLevel =0.0 // Level Take Profit (dalam poin)
Parameter input Signal_ThresholdOpen/Signal_ThresholdClose memungkinkan kita untuk menentukan level threshold untuk membuka dan menutup posisi.
Pada kode metode LongCondition() dan ShortCondition() dari kelas sinyal trading, kita telah menentukan nilai tetap dari threshold:
- Membuka posisi: 80;
- Menutup posisi: 40.
Expert Advisor yang dihasilkan oleh MQL5 Wizard membuka dan menutup posisi dengan menggunakan "suara" dari modul sinyal trading. Suara dari modul utama (sebagai kontainer, terdiri dari semua modul yang ditambahkan) juga digunakan, tetapi metode LongCondition() dan ShortCondition() dari modul utama selalu mengembalikan 0.
Hasil suara dari modul utama juga digunakan dalam rata-rata "suara". Dalam kasus kita, kita memiliki: modul utama + 1 modul sinyal trading, jadi kita perlu memperhitungkan hal ini saat menetapkan nilai threshold. Karena fakta ini, ThresholdOpen dan ThresholdClose harus diatur sebagai 40=(0+80)/2 dan 20=(0+40)/2.

