MQL5 Wizard membolehkan anda mencipta Expert Advisor (EA) siap pakai berdasarkan kelas dari Perpustakaan Standard yang disertakan dengan terminal klien. Ia membolehkan anda memeriksa idea perdagangan dengan cepat, hanya dengan mencipta kelas isyarat perdagangan anda sendiri. Struktur kelas ini dan contoh boleh didapati dalam artikel MQL5 Wizard: Cara Mencipta Modul Isyarat Perdagangan.
Idea umumnya adalah seperti berikut: kelas isyarat perdagangan diturunkan dari CExpertSignal. Seterusnya, anda perlu menggantikan kaedah LongCondition() dan ShortCondition() dengan kaedah anda sendiri.
Terdapat sebuah buku "Strategi Pedagang Terbaik" (dalam bahasa Rusia) yang membincangkan banyak strategi perdagangan, di mana kita akan memberi tumpuan kepada corak candlestick pembalikan, yang disahkan oleh beberapa osilator seperti RSI, Stochastic, CCI, dan MFI.
Cara terbaik adalah mencipta kelas berasingan, yang diturunkan dari CExpertSignal untuk memeriksa pembentukan corak candlestick. Untuk pengesahan isyarat perdagangan yang dihasilkan oleh corak candlestick, adalah mencukupi untuk menulis kelas yang diturunkan dari CCandlePattern dan menambah ciri yang diperlukan (contohnya, pengesahan oleh osilator) di dalamnya.
Di sini, kita akan mempertimbangkan isyarat berdasarkan corak candlestick pembalikan "Bullish Harami/Bearish Harami" yang disahkan oleh indikator RSI. Modul isyarat perdagangan ini berdasarkan kelas CCandlePattern, yang merupakan contoh mudah penggunaannya untuk mencipta isyarat perdagangan dengan corak candlestick.
1. Corak Candlestick Pembalikan "Bullish Harami" dan "Bearish Harami"
1.1. Bullish Harami
Corak pembalikan Bullish Harami terbentuk dalam trend menurun apabila candlestick besar diikuti oleh candlestick lebih kecil yang badannya terletak dalam julat menegak badan yang lebih besar. Corak ini menunjukkan bahawa trend menurun mungkin akan berbalik, dan ia menandakan bahawa ini adalah masa yang baik untuk memasuki posisi panjang. Candlestick kedua dibuka dengan jurang ke atas.
Semakin kecil candlestick kedua (putih), semakin tinggi kemungkinan pembalikan.

Fig. 1. Corak candlestick Bullish Harami
Pengenalan corak "Bullish Harami" dilaksanakan dalam kaedah CheckPatternBullishHarami() dari kelas CCandlePattern:
//+------------------------------------------------------------------+ //| Memeriksa pembentukan corak candlestick "Bullish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- Bullish Harami if((Close(1)>Open(1)) // candlestick terakhir adalah bullish (hari putih) ((Open(2)-Close(2)>AvgBody(1)) && // candlestick sebelumnya adalah bearish, badannya lebih besar dari purata (hitam panjang) ((Close(1)<Open(2)) && // harga tutup candlestick bullish lebih rendah daripada harga buka candlestick bearish (Open(1)>Close(2))) && // harga buka candlestick bullish lebih tinggi daripada harga tutup candlestick bearish (MidPoint(2)<CloseAvg(2))) // trend menurun return(true); //--- return(false); }
Panggilan CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) digunakan untuk memeriksa pembentukan corak "Bullish Harami".
1.2. Bearish Harami
Corak pembalikan Bearish Harami terbentuk dalam trend menaik apabila candlestick besar diikuti oleh candlestick yang lebih kecil, di mana badannya terletak dalam julat menegak badan yang lebih besar. Corak ini menunjukkan bahawa trend menaik mungkin akan berbalik, dan ia menandakan bahawa ini adalah masa yang baik untuk memasuki posisi pendek. Candlestick kedua dibuka dengan jurang ke bawah.
Semakin kecil candlestick kedua (hitam), semakin tinggi kemungkinan pembalikan.

Fig. 2. Corak candlestick Bearish Harami
Pengenalan corak "Bearish Harami" dilaksanakan dalam kaedah CheckPatternBearishHarami() dari kelas CCandlePattern:
//+------------------------------------------------------------------+ //| Memeriksa pembentukan corak candlestick "Bearish Harami" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { //--- Bearish Harami if((Close(1)<Open(1)) // candlestick terakhir adalah bearish (hari hitam) ((Close(2)-Open(2)>AvgBody(1)) && // candlestick sebelumnya adalah bullish, badannya lebih besar dari purata (putih panjang) ((Close(1)>Open(2)) && // harga tutup candlestick bearish lebih tinggi daripada harga buka candlestick bullish (Open(1)<Close(2))) && // harga buka candlestick bearish lebih rendah daripada harga tutup candlestick bullish (MidPoint(2)>CloseAvg(2))) // trend menaik return(true); //--- return(false); }
Panggilan CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) digunakan untuk memeriksa pembentukan corak "Bearish Harami".
2. Isyarat Perdagangan yang Disahkan oleh Indikator RSI
Isyarat perdagangan untuk membuka posisi panjang atau pendek mesti disahkan oleh indikator RSI. Nilai RSI mesti lebih rendah/lebih tinggi daripada tahap kritikal (40 untuk posisi panjang dan 60 untuk posisi pendek).
Penutupan posisi yang dibuka bergantung kepada nilai RSI. Ini boleh dilakukan dalam 2 kes:
- jika RSI telah mencapai tahap kritikal bertentangan (70 untuk posisi panjang dan 30 untuk posisi pendek)
- jika isyarat pembalikan tidak disahkan (apabila RSI mencapai tahap berikut: 30 untuk posisi panjang dan 70 untuk posisi pendek)

Fig. 3. Corak "Bullish Harami" yang disahkan oleh indikator RSI
- int CBH_BH_RSI::LongCondition() - memeriksa syarat untuk membuka posisi panjang (mengembalikan 80) dan menutup posisi pendek (mengembalikan 40);
- int CBH_BH_RSI::ShortCondition() - memeriksa syarat untuk membuka posisi pendek (mengembalikan 80) dan menutup posisi panjang (mengembalikan 40).
2.1. Membuka posisi panjang/Menutup posisi pendek
Pembentukan corak "Bullish Harami" mesti disahkan oleh RSI: RSI(1)<40 (nilai RSI dari bar yang telah diselesaikan mesti kurang daripada 40).
Posisi pendek mesti ditutup jika RSI telah melintasi ke atas tahap kritikal 70 atau 30.
//+------------------------------------------------------------------+ //| Memeriksa syarat untuk masuk dan keluar dari pasaran | //| 1) Masuk pasaran (buka posisi panjang, hasil=80) | //| 2) Keluar pasaran (tutup posisi pendek, hasil=40) | //+------------------------------------------------------------------+ int CBH_BH_RSI::LongCondition() { int result=0; //--- idx boleh digunakan untuk menentukan mod kerja Expert Advisor //--- idx=0 - dalam kes ini EA memeriksa syarat perdagangan pada setiap tick //--- idx=1 - dalam kes ini EA memeriksa syarat perdagangan hanya pada bar berita int idx =StartIndex(); //--- memeriksa syarat untuk membuka posisi panjang //--- pembentukan corak Bullish Harami dan RSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (RSI(1)<40)) result=80; //--- memeriksa syarat untuk menutup posisi pendek //--- persilangan garis isyarat pada tahap overbought/oversold (ke atas 30, ke atas 70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- pulangkan hasil return(result); }
2.2. Membuka posisi pendek/Menutup posisi panjang
Pembentukan corak "Bearish Harami" mesti disahkan oleh RSI: RSI(1)>60 (nilai RSI dari bar yang telah diselesaikan mesti lebih besar daripada 60).
Posisi panjang mesti ditutup jika RSI telah melintasi ke bawah tahap kritikal 70 atau 30.
//+------------------------------------------------------------------+ //| Memeriksa syarat untuk masuk dan keluar dari pasaran | //| 1) Masuk pasaran (buka posisi pendek, hasil=80) | //| 2) Keluar pasaran (tutup posisi panjang, hasil=40) | //+------------------------------------------------------------------+ int CBH_BH_RSI::ShortCondition() { int result=0; //--- idx boleh digunakan untuk menentukan mod kerja Expert Advisor //--- idx=0 - dalam kes ini EA memeriksa syarat perdagangan pada setiap tick //--- idx=1 - dalam kes ini EA memeriksa syarat perdagangan hanya pada bar berita int idx =StartIndex(); //--- memeriksa syarat untuk membuka posisi pendek //--- pembentukan corak Bearish Harami dan RSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (RSI(1)>60)) result=80; //--- memeriksa syarat untuk menutup posisi panjang //--- persilangan garis isyarat pada tahap overbought/oversold (ke bawah 70, ke bawah 30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- pulangkan hasil return(result); }
2.3. Mencipta Expert Advisor menggunakan MQL5 Wizard
Kelas CBH_BH_RSI tidak termasuk dalam kelas Perpustakaan Standard. Untuk menggunakannya, perlu memuat turun fail acml_rsi.mqh (lihat lampiran) dan menyimpannya ke dalam folder terminal_klien_data\MQL5\Include\Expert\Signal\MySignals. Langkah yang sama perlu dilakukan dengan fail acandlepatterns.mqh. Anda boleh menggunakannya dalam MQL5 Wizard selepas memulakan semula MetaEditor.
Untuk mencipta Expert Advisor, laksanakan MQL5 Wizard:

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

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

Fig. 6. Atribut isyarat Expert Advisor
Dalam kes kita, kita hanya menggunakan satu modul isyarat perdagangan.
Menambah modul "Isyarat berdasarkan Bullish Harami/Bearish Harami disahkan oleh RSI":

Fig. 7. Atribut isyarat Expert Advisor
Modul isyarat perdagangan telah ditambah:

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

Fig. 9. Ciri pengurusan wang Expert Advisor
Mengenai ciri pengurusan wang, kita akan menggunakan "Perdagangan dengan volume tetap":

Fig. 10. Ciri pengurusan wang Expert Advisor
Dengan menekan butang "Selesai", kita akan mendapat kod EA yang dihasilkan, yang terletak di Expert_ABH_BH_RSI.mq5, dan ia akan disimpan di folder terminal_data_folder\MQL5\Experts\.
Parameter input lalai EA 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)
perlu digantikan dengan:
//--- 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 menentukan tahap ambang untuk membuka dan menutup posisi.
Dalam kod kaedah LongCondition() dan ShortCondition() dari kelas isyarat perdagangan, 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 perdagangan. Undi dari modul utama (sebagai bekas, ia terdiri daripada semua modul yang ditambah) juga digunakan, tetapi kaedah LongCondition() dan ShortCondition() sentiasa mengembalikan 0.
Hasil undian dari modul utama juga digunakan dalam purata "undi". Dalam kes kita, kita mempunyai: modul utama + 1 modul isyarat perdagangan, jadi kita perlu mengambil kira fakta ini semasa menetapkan nilai ambang. Oleh kerana fakta ini, ThresholdOpen dan ThresholdClose mesti ditetapkan sebagai 40=(0+80)/2 dan 20=(0+40)/2.
Nilai parameter input Signal_StopLevel dan Signal_TakeLevel ditetapkan kepada 0, ini bermakna penutupan posisi hanya akan dilakukan apabila syarat penutupan adalah benar.
2.4. Hasil pengujian kembali
Kita akan mempertimbangkan pengujian kembali Expert Advisor pada data sejarah (EURUSD H1, tempoh pengujian: 2010.01.01-2011.03.11, PeriodRSI=37, MA_period=7).
Dalam penciptaan Expert Advisor, kita menggunakan volume tetap (Perdagangan Lot Tetap, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Fig. 11. Hasil pengujian Expert Advisor, berdasarkan Bullish Harami/Bearish Harami + RSI
Set parameter input terbaik boleh ditemui menggunakan Strategy Tester dari terminal klien MetaTrader 5.
Kod Expert Advisor yang dicipta oleh MQL5 Wizard dilampirkan dalam expert_aml_rsi.mq5.
Siaran berkaitan
- MQL5 Wizard: Cipta EA Berdasarkan Pola Bullish dan Bearish Engulfing dengan Stochastic
- Panduan Lengkap MQL5 Wizard untuk Isyarat Dagangan Berdasarkan Morning/Evening Stars dan Stochastic
- MQL5 Wizard: Cipta EA Berdasarkan Corak Bullish dan Bearish Engulfing + CCI
- MQL5 Wizard: Cipta Signals Dagangan Berdasarkan Bullish Engulfing/Bearish Engulfing + RSI
- Mengenal MQL5 Wizard: Isyarat Dagangan Berdasarkan Pola Bullish dan Bearish Engulfing + MFI