Mungkin ramai yang sudah tahu tentang MQL5 Wizard, tetapi adakah anda tahu ia membolehkan anda mencipta Expert Advisor (EA) dengan mudah berdasarkan corak candlestick dan petunjuk lain? Dalam artikel ini, kita akan membincangkan cara mencipta EA yang menggunakan corak candlestick "Hammer" dan "Hanging Man" yang disahkan oleh indikator RSI.
Untuk memulakan, anda hanya perlu membuat kelas isyarat dagangan anda sendiri yang diturunkan daripada kelas CExpertSignal. Anda boleh merujuk kepada artikel MQL5 Wizard: Cara Membuat Modul Isyarat Dagangan untuk maklumat lebih lanjut tentang struktur kelas ini. Idea asasnya adalah untuk mengubahsuai kaedah LongCondition() dan ShortCondition() mengikut keperluan anda.
1. Corak Candlestick: Hammer dan Hanging Man
1.1. Hammer
"Hammer" adalah corak candlestick yang mempunyai badan kecil dan sumbu bawah yang panjang, yang terbentuk selepas pergerakan harga menurun. Corak ini menunjukkan akhir daripada trend menurun.
Warna badan candlestick tidak begitu penting, tetapi hammer bullish menunjukkan potensi kenaikan yang lebih tinggi. Badan corak "Hammer" sering terbentuk berhampiran minimum candlestick sebelumnya. Sumbu bawah yang lebih panjang dan sumbu atas yang lebih pendek menambah potensi pembalikan.

Fig. 1. Corak candlestick 'Hammer'
Pengenalan corak "Hammer" dilakukan dalam kaedah CheckPatternHammer() dari kelas CCandlePattern:
//+------------------------------------------------------------------+ //| Memeriksa pembentukan corak candlestick "Hammer" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- Hammer if((MidPoint(1)<CloseAvg(2)) && // trend menurun (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // badan di atas 1/3 (Close(1)<Close(2)) && (Open(1)<Open(2))) return(true); //--- return(false); }
Pengesahan corak candlestick (CANDLE_PATTERN_HAMMER) menggunakan kaedah CheckCandlestickPattern() dari kelas CCandlePattern.
1.2. Hanging Man
"Hanging Man" adalah corak candlestick yang juga mempunyai badan kecil dan sumbu bawah yang panjang, yang terbentuk selepas pergerakan harga menaik. Corak ini menunjukkan akhir daripada trend menaik.
Warna badan candlestick tidak begitu penting, tetapi candlestick bearish menunjukkan potensi penurunan yang lebih tinggi. Badan corak "Hanging Man" sering terbentuk berhampiran maksimum candlestick sebelumnya. Sumbu bawah yang lebih panjang dan sumbu atas yang lebih pendek menambah potensi pembalikan.

Fig. 2. Corak candlestick 'Hanging Man'
Pengenalan corak "Hanging Man" dilakukan dalam kaedah CheckPatternHangingMan() dari kelas CCandlePattern:
//+------------------------------------------------------------------+ //| Memeriksa pembentukan corak candlestick "Hanging Man" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- Hanging Man if((MidPoint(1)>CloseAvg(2)) && // trend menaik (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // badan di atas 1/3 (Close(1)>Close(2)) && (Open(1)>Open(2))) return(true); //--- return(false); }
Pengesahan corak candlestick (CANDLE_PATTERN_HANGING_MAN) menggunakan kaedah CheckCandlestickPattern() dari kelas CCandlePattern.
2. Isyarat Dagangan, Disahkan oleh Indikator RSI
Isyarat dagangan untuk membuka posisi long atau short mesti disahkan oleh indikator RSI. Nilai RSI mesti lebih rendah atau lebih tinggi daripada tahap kritikal (40 untuk posisi long dan 60 untuk posisi short).
Penutupan posisi yang dibuka bergantung kepada nilai RSI. Ini boleh dilakukan dalam 2 kes:
- Jika RSI telah mencapai tahap kritikal yang bertentangan (70 untuk posisi long dan 30 untuk posisi short).
- Jika isyarat pembalikan tidak disahkan (apabila RSI mencapai tahap berikut: 30 untuk posisi long dan 70 untuk posisi short).

Fig. 3. Corak 'Harami', disahkan oleh indikator RSI
- int CH_HM_RSI::LongCondition() - memeriksa syarat untuk membuka posisi long (mengembalikan 80) dan menutup posisi short (mengembalikan 40);
- int CH_HM_RSI::ShortCondition() - memeriksa syarat untuk membuka posisi short (mengembalikan 80) dan menutup posisi long (mengembalikan 40).
2.1. Membuka Posisi Long/Menutup Posisi Short
Pembentukan corak "Hammer" mesti disahkan oleh indikator RSI: RSI(1)<40 (nilai RSI pada bar yang telah selesai mesti kurang daripada 40).
Posisi short mesti ditutup jika indikator RSI telah melintasi ke atas tahap kritikal 70 atau 30.
//+------------------------------------------------------------------+ //| Memeriksa syarat untuk masuk dan keluar dari pasaran | //| 1) Masuk pasaran (buka posisi long, hasil=80) | //| 2) Keluar pasaran (tutup posisi short, hasil=40) | //+------------------------------------------------------------------+ int CH_HM_RSI::LongCondition() { int result=0; //--- idx boleh digunakan untuk menentukan mod kerja Expert Advisor //--- idx=0 - dalam kes ini EA memeriksa syarat dagangan pada setiap tick //--- idx=1 - dalam kes ini EA memeriksa syarat dagangan hanya pada bar berita int idx =StartIndex(); //--- memeriksa syarat untuk membuka posisi long //--- pembentukan corak Hammer dan RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (RSI(1)<40)) result=80; //--- memeriksa syarat untuk menutup posisi short //--- persilangan garis isyarat tahap terlebih beli/terlebih jual (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 corak "Hanging Man" mesti disahkan oleh indikator RSI: RSI(1)>60 (nilai RSI pada bar yang telah selesai mesti lebih besar daripada 60).
Posisi long mesti ditutup jika indikator RSI telah melintasi ke bawah tahap kritikal 70 atau 30.
//+------------------------------------------------------------------+ //| Memeriksa syarat untuk masuk dan keluar dari pasaran | //| 1) Masuk pasaran (buka posisi short, hasil=80) | //| 2) Keluar pasaran (tutup posisi long, hasil=40) | //+------------------------------------------------------------------+ int CH_HM_RSI::ShortCondition() { int result=0; //--- idx boleh digunakan untuk menentukan mod kerja Expert Advisor //--- idx=0 - dalam kes ini EA memeriksa syarat dagangan pada setiap tick //--- idx=1 - dalam kes ini EA memeriksa syarat dagangan hanya pada bar berita int idx =StartIndex(); //--- memeriksa syarat untuk membuka posisi short //--- pembentukan corak Hanging Man dan RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (RSI(1)>60)) result=80; //--- memeriksa syarat untuk menutup posisi long //--- persilangan garis isyarat tahap terlebih beli/terlebih jual (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. Mencipta Expert Advisor Menggunakan MQL5 Wizard
Kelas CH_HM_RSI tidak termasuk dalam kelas Standard Library, untuk menggunakannya, anda perlu memuat turun fail ach_hm_rsi.mqh (lihat lampiran) dan simpan ke dalam folder client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Perkara yang sama harus dilakukan dengan fail candlepatterns.mqh. Anda boleh menggunakannya dalam MQL5 Wizard selepas memulakan semula MetaEditor.
Untuk mencipta Expert Advisor, lancarkan MQL5 Wizard:

Fig. 4. Mencipta Expert Advisor menggunakan MQL5 Wizard
Mari kita tentukan nama untuk Expert Advisor:

Fig. 5. Ciri umum Expert Advisor
Setelah itu, kita perlu memilih modul isyarat dagangan yang digunakan.

Fig. 6. Ciri isyarat Expert Advisor
Dalam kes ini, kita hanya menggunakan satu modul isyarat dagangan.
Menambah modul Isyarat Berdasarkan Hammer/Hanging Man Disahkan oleh RSI:

Fig. 7. Ciri isyarat Expert Advisor
Modul isyarat dagangan telah ditambah:

Fig. 8. Ciri isyarat Expert Advisor
Anda boleh memilih sebarang ciri trailing, tetapi kami akan menggunakan "Trailing Stop tidak digunakan":

Fig. 9. Ciri ciri trailing Expert Advisor
Berkenaan dengan ciri pengurusan wang, kami akan menggunakan "Trading dengan volum tetap":

Fig. 10. Ciri ciri pengurusan wang Expert Advisor
Dengan menekan butang "Selesai", kami akan mendapatkan kod Expert Advisor yang dihasilkan, yang terletak dalam Expert_AH_HM_RSI.mq5, ia akan disimpan dalam terminal_data_folder\MQL5\Experts\.
Parameter input lalai bagi Expert Advisor yang dihasilkan:
//--- input untuk isyarat utama input int Signal_ThresholdOpen =10; // Nilai ambang isyarat untuk membuka [0...100] input int Signal_ThresholdClose =10; // Nilai ambang isyarat untuk menutup [0...100] input double Signal_PriceLevel =0.0; // Tahap harga untuk melaksanakan urus niaga input double Signal_StopLevel =50.0; // Tahap Stop Loss (dalam mata) input double Signal_TakeLevel =50.0; // Tahap Take Profit (dalam mata)
harus diganti kepada:
//--- input untuk isyarat utama input int Signal_ThresholdOpen =40; // Nilai ambang isyarat untuk membuka [0...100] input int Signal_ThresholdClose =20; // Nilai ambang isyarat untuk menutup [0...100] input double Signal_PriceLevel =0.0; // Tahap harga untuk melaksanakan urus niaga input double Signal_StopLevel =0.0; // Tahap Stop Loss (dalam mata) input double Signal_TakeLevel =0.0 // Tahap Take Profit (dalam mata)
Parameter input Signal_ThresholdOpen/Signal_ThresholdClose membolehkan anda menetapkan tahap ambang untuk membuka dan menutup posisi.
Dalam kod kaedah LongCondition() dan ShortCondition() bagi kelas isyarat dagangan, kita telah menetapkan nilai tetap untuk ambang:
- Buka posisi: 80;
- Tutup posisi: 40.
Expert Advisor yang dihasilkan oleh MQL5 Wizard membuka dan menutup posisi menggunakan "undi" dari modul isyarat dagangan. Undi dari modul utama (sebagai kontena, ia terdiri daripada semua modul yang ditambah) juga digunakan, tetapi kaedah LongCondition() dan ShortCondition() sentiasa mengembalikan 0.
Keputusan undi dari modul utama juga digunakan dalam purata "undi". Dalam kes kami, terdapat modul utama + 1 modul isyarat dagangan, jadi kita perlu mengambil kira fakta ini ketika menetapkan nilai-nilai ambang. Oleh kerana itu, ThresholdOpen dan ThresholdClose mesti ditetapkan kepada 40=(0+80)/2 dan 20=(0+40)/2.
