MQL5 Wizard adalah alat yang hebat untuk trader yang ingin mencipta Expert Advisors secara mudah. Dengan menggunakan kelas-kelas yang disediakan dalam Standard Library, anda boleh menguji idea dagangan dengan cepat, hanya perlu mencipta kelas isyarat dagangan anda sendiri. Struktur dan contoh kelas ini boleh didapati dalam artikel MQL5 Wizard: Cara Mencipta Modul Isyarat Dagangan.
Inti pati di sini adalah: kelas isyarat dagangan diturunkan dari CExpertSignal. Anda perlu menggantikan kaedah LongCondition() dan ShortCondition() dengan kaedah anda sendiri.
Dalam buku "Strategi Trader Terbaik" (dalam bahasa Rusia), banyak strategi dagangan dibincangkan, dan kita akan memberi tumpuan kepada pola candlestick pembalikan yang disahkan oleh Stochastic, CCI, MFI, dan RSI.
Cara terbaik adalah dengan mencipta kelas terpisah yang diturunkan dari CExpertSignal untuk memeriksa pembentukan pola candlestick. Untuk mengesahkan isyarat dagangan yang dihasilkan oleh pola candlestick, anda hanya perlu menulis kelas yang diturunkan dari CCandlePattern dan menambah ciri-ciri yang diperlukan (contohnya, pengesahan oleh osilator).
Di sini kita akan membincangkan isyarat yang berdasarkan pola candlestick "Hammer/Hanging Man" yang disahkan oleh indikator CCI. Modul isyarat dagangan ini berdasarkan kelas CCandlePattern, contoh ringkas penggunaannya untuk mencipta isyarat dagangan dengan pola candlestick.
1. Pola Candlestick Pembalikan: "Hammer" dan "Hanging Man"
1.1. Hammer
Pola "Hammer" ialah candlestick dengan badan kecil dan sumbu bawah yang panjang, terbentuk selepas pergerakan harga menurun. Pola "Hammer" menunjukkan akhir dari trend menurun.
Warna badan candlestick tidak penting, tetapi hammer bull menunjukkan potensi bull yang lebih tinggi. Badan pola "Hammer" sering terbentuk dekat dengan minimum candlestick sebelumnya. Sumbu bawah yang lebih panjang dan sumbu atas yang lebih pendek menunjukkan potensi pembalikan yang lebih tinggi.

Fig. 1. Pola candlestick "Hammer"
Pengesahan pola "Hammer" dilaksanakan dalam kaedah CheckPatternHammer() dari kelas CCandlePattern:
//+------------------------------------------------------------------+ //| Memeriksa pembentukan pola "Hammer" candlestick | //+------------------------------------------------------------------+ 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 dalam 1/3 atas (Close(1)<Close(2)) && (Open(1)<Open(2))) // jurang badan return(true); //--- return(false); }
Pengesahan pola candlestick (CANDLE_PATTERN_HAMMER) kaedah CheckCandlestickPattern() dari kelas CCandlePattern digunakan untuk mengesahkan pembentukan pola "Hammer".
1.2. Hanging Man
Pola "Hanging Man" ialah candlestick dengan badan kecil dan sumbu bawah yang panjang, terbentuk selepas pergerakan harga menaik. Pola "Hanging Man" menunjukkan akhir dari trend menaik.
Warna badan candlestick tidak penting, tetapi candle bear menunjukkan potensi bear yang lebih tinggi. Badan pola "Hanging Man" sering terbentuk dekat dengan maksimum candlestick sebelumnya. Sumbu bawah yang lebih panjang dan sumbu atas yang lebih pendek menunjukkan potensi pembalikan yang lebih tinggi.

Fig. 2. Pola candlestick "Hanging Man"
Pengesahan pola "Hanging Man" dilaksanakan dalam kaedah CheckPatternHangingMan() dari kelas CCandlePattern:
//+------------------------------------------------------------------+ //| Memeriksa pembentukan pola "Hanging Man" candlestick | //+------------------------------------------------------------------+ 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 dalam 1/3 atas (Close(1)>Close(2)) && (Open(1)>Open(2)))) // jurang badan return(true); //--- return(false); }
Pengesahan pola candlestick (CANDLE_PATTERN_HANGING_MAN) kaedah CheckCandlestickPattern() dari kelas CCandlePattern digunakan untuk mengesahkan pembentukan pola "Hanging Man".
2. Isyarat Dagangan, yang Disahkan oleh Indikator CCI
Isyarat dagangan untuk membuka posisi panjang atau pendek mestilah disahkan oleh indikator CCI. Nilai CCI mesti lebih tinggi/rendah daripada tahap kritikal (-50 untuk posisi panjang dan 50 untuk posisi pendek).
Penutupan posisi yang dibuka bergantung pada nilai CCI. Ini boleh dilakukan dalam 2 kes:
- jika garis CCI telah mencapai tahap kritikal bertentangan (80 untuk posisi panjang dan -80 untuk posisi pendek)
- jika isyarat pembalikan tidak disahkan (apabila CCI mencapai tahap berikut: -80 untuk posisi panjang dan 80 untuk posisi pendek)

Fig. 3. Pola "Hammer" yang disahkan oleh indikator CCI
- int CH_HM_CCI::LongCondition() - memeriksa syarat untuk membuka posisi panjang (mengembalikan 80) dan menutup posisi pendek (mengembalikan 40);
- int CH_HM_CCI::ShortCondition() - memeriksa syarat untuk membuka posisi pendek (mengembalikan 80) dan menutup posisi panjang (mengembalikan 40).
2.1. Membuka Posisi Panjang/Menutup Posisi Pendek
Pembentukan pola "Hammer" mesti disahkan oleh indikator CCI: CCI(1)<-50 (nilai CCI bagi bar yang telah selesai mesti kurang daripada -50).
Posisi pendek mesti ditutup jika indikator CCI telah melintasi ke atas tahap kritikal -80 atau melintasi ke bawah tahap kritikal 80.
//+------------------------------------------------------------------+ //| Memeriksa syarat untuk masuk dan keluar dari pasaran | //| 1) Masuk pasaran (buka posisi panjang, hasil=80) | //| 2) Keluar dari pasaran (tutup posisi pendek, hasil=40) | //+------------------------------------------------------------------+ int CH_HM_CCI::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 panjang //--- pembentukan pola Hammer dan CCI<-50 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50)) result=80; //--- memeriksa syarat untuk menutup posisi pendek //--- isyarat garis melintasi tahap terlebih beli/terlebih jual (ke bawah -80, ke bawah -80) if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80))) result=40; //--- kembalikan keputusan return(result); }
2.2. Membuka Posisi Pendek/Menutup Posisi Panjang
Pembentukan pola "Hanging Man" mesti disahkan oleh indikator CCI: CCI(1)>50 (nilai CCI indikator bagi bar yang telah selesai mesti lebih daripada 50).
Posisi panjang mesti ditutup jika indikator CCI telah melintasi ke bawah tahap -80 atau 80.
//+------------------------------------------------------------------+ //| Memeriksa syarat untuk masuk dan keluar dari pasaran | //| 1) Masuk pasaran (buka posisi pendek, hasil=80) | //| 2) Keluar dari pasaran (tutup posisi panjang, hasil=40) | //+------------------------------------------------------------------+ int CH_HM_CCI::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 pendek //--- pembentukan pola Hanging Man dan CCI>50 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50)) result=80; //--- memeriksa syarat untuk menutup posisi panjang //--- isyarat garis melintasi tahap terlebih beli/terlebih jual (ke bawah -80, ke bawah 80) if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80))) result=40; //--- kembalikan keputusan return(result); }
2.3. Mencipta Expert Advisor Menggunakan MQL5 Wizard
Kelas CH_HM_CCI tidak termasuk dalam kelas Standard Library, untuk menggunakannya, perlu memuat turun fail ach_hm_cci.mqh (lihat lampiran) dan simpan ke dalam folder client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Begitu juga 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 Expert Advisor:

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

Fig. 6. Ciri isyarat Expert Advisor
Dalam kes kita, kita hanya menggunakan satu modul isyarat dagangan.
Menambah modul isyarat "Isyarat berdasarkan Hammer/Hanging Man disahkan oleh CCI":

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

Fig. 8. Ciri 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 "Dagangan dengan volum tetap":

Fig. 10. Ciri pengurusan wang Expert Advisor
Dengan menekan butang "Selesai", kita akan mendapat kod Expert Advisor yang dihasilkan, terletak di Expert_AH_HM_CCI.mq5, yang akan disimpan dalam terminal_data_folder\MQL5\Experts\.
Parameter input lalai untuk Expert Advisor yang dihasilkan:
//--- input untuk isyarat utama input int Signal_ThresholdOpen =10; // Nilai ambang isyarat untuk dibuka [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 poin) input double Signal_TakeLevel =50.0 // Tahap Take Profit (dalam poin)
perlu digantikan kepada:
//--- inputs untuk isyarat utama input int Signal_ThresholdOpen =40; // Nilai ambang isyarat untuk dibuka [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 poin) input double Signal_TakeLevel =0.0 // Tahap Take Profit (dalam poin)
Parameter input Signal_ThresholdOpen/Signal_ThresholdClose membolehkan untuk menentukan tahap ambang bagi membuka dan menutup posisi.
Dalam kod kaedah LongCondition() dan ShortCondition() di kelas isyarat dagangan, kita telah menetapkan nilai tetap bagi ambang tersebut:
- 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 kontainer, yang terdiri daripada semua modul yang ditambah) juga digunakan, tetapi kaedah LongCondition() dan ShortCondition()nya sentiasa mengembalikan 0.
Keputusan undi dari modul utama juga digunakan dalam purata "undi". Dalam kes kita, kita mempunyai: modul utama + 1 modul isyarat dagangan, jadi kita perlu mengambil kira fakta ini apabila menetapkan nilai ambang. Oleh kerana fakta ini, ThresholdOpen dan ThresholdClose mesti ditetapkan kepada 40=(0+80)/2 dan 20=(0+40)/2.
Nilai parameter input Signal_StopLevel dan Signal_TakeLevel ditetapkan kepada 0, yang bermakna penutupan posisi hanya akan dilakukan apabila syarat penutupan adalah benar.
2.4. Keputusan Uji Kembali Sejarah
Mari kita lihat ujian kembali Expert Advisor ini pada data sejarah (EURUSD H1, tempoh ujian: 2010.01.01-2011.03.16, PeriodCCI=25, MA_period=5).
Dalam penciptaan Expert Advisor, kita menggunakan volum tetap (Dagangan Lot Tetap, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Fig. 11. Keputusan ujian Expert Advisor, berdasarkan Hammer/Hanging Man + CCI
Set parameter input terbaik boleh didapati menggunakan Strategy Tester dalam terminal klien MetaTrader 5.
Kod Expert Advisor yang dicipta oleh MQL5 Wizard dilampirkan dalam expert_ah_hm_cci.mq5.
Siaran berkaitan
- 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 Sistem Trading Berdasarkan Pola Morning/Evening Star dan RSI
- MQL5 Wizard: Cipta Isyarat Dagangan Menggunakan Corak Morning/Evening Star dan MFI
- MQL5 Wizard: Sinyal Dagangan Berdasarkan Corak Bintang Pagi/Malam + CCI untuk MetaTrader 5