MQL5 Wizard adalah alat hebat yang membolehkan anda mencipta Expert Advisor yang siap digunakan berdasarkan kelas dalam pustaka standard. Dengan MQL5 Wizard, anda dapat menguji idea dagangan dengan cepat hanya dengan mencipta kelas isyarat dagangan anda sendiri. Struktur kelas ini dan contoh penggunaannya boleh didapati dalam artikel MQL5 Wizard: Cara Mencipta Modul Isyarat Dagangan.
Konsep umum di sini adalah: kelas isyarat dagangan berasal dari CExpertSignal, di mana anda perlu menggantikan kaedah LongCondition() dan ShortCondition() dengan kaedah anda sendiri.
Terdapat sebuah buku berjudul "Strategi Pedagang Terbaik" (dalam bahasa Rusia) yang membincangkan banyak strategi dagangan. Dalam artikel ini, kita akan memberi tumpuan kepada pola candlestick pembalikan, yang disahkan oleh Stochastic, CCI, MFI, dan RSI yang merupakan osilator.
Cara terbaik adalah dengan mencipta kelas terpisah yang berasal dari CExpertSignal untuk memeriksa pembentukan pola candlestick. Untuk pengesahan isyarat dagangan yang dihasilkan oleh pola candlestick, anda hanya perlu menulis kelas yang berasal dari CCandlePattern dan menambah ciri yang diperlukan (contohnya, pengesahan oleh osilator).
Dalam artikel ini, kita akan membincangkan isyarat yang berasaskan pola "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) yang disahkan oleh Stochastic. Modul isyarat dagangan berasaskan kelas CCandlePattern adalah contoh mudah penggunaannya untuk mencipta isyarat dagangan dengan pola candlestick.
1. Pola Candlestick Pembalikan "Morning Star" dan "Evening Star"
1.1. Morning Star
Pola ini menunjukkan pembalikan dari arah aliran menurun, terdiri daripada tiga lilin (Rujuk Gambar 1). Selepas lilin hitam yang panjang, terdapat lilin (warna tidak penting) dengan badan kecil yang terletak di luar badan lilin hitam. Badan kecil lilin menunjukkan bahawa kekuatan lembu dan beruang adalah sama dan pasaran bersedia untuk mengubah arah aliran.
Lilin ketiga dalam pola ini adalah lilin bullish, badan lilin ini tidak bertindih dengan badan lilin kedua, dan harga tutup terletak di dalam badan lilin pertama (bearish). Lilin yang dihasilkan dalam model juga ditunjukkan dalam Gambar 1.
Jika lilin kedua adalah lilin doji, model ini dinamakan "Morning Doji Star".

Gambar 1. Pola "Morning Star" dan "Morning Doji Star"
Pengesanan pola "Morning Star" diimplementasikan dalam kaedah CheckPatternMorningStar() dan CheckPatternMorningDoji() dari kelas CCandlePattern:
//+------------------------------------------------------------------+ //| Memeriksa pembentukan pola "Morning Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningStar() { //--- Morning Star if((Open(3)-Close(3)>AvgBody(1)) && // lilin bearish, badannya lebih besar dari rata-rata badan lilin (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // lilin kedua mempunyai badan kecil (kurang dari separuh badan rata-rata) (Close(2)<Close(3)) && // tutup lilin kedua lebih rendah dari tutup lilin pertama (Open(2)<Open(3)) && // buka lilin kedua lebih rendah dari buka lilin pertama (Close(1)>MidOpenClose(3))) // tutup lilin terakhir lebih tinggi dari tengah lilin pertama return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Memeriksa pembentukan pola "Morning Doji Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternMorningDoji() { //--- Morning Doji Star if((Open(3)-Close(3)>AvgBody(1)) && // lilin bearish dengan badan lebih besar dari rata-rata (AvgBody(2)<AvgBody(1)*0.1) && // lilin kedua mempunyai badan yang sangat kecil (doji) (Close(2)<Close(3)) && // tutup lilin kedua lebih rendah dari tutup lilin pertama (Open(2)<Open(3)) && // buka lilin kedua lebih rendah dari buka lilin pertama (Open(1)>Close(2)) && // gap ke atas pada lilin terakhir (Close(1)>Close(2))) // tutup lilin terakhir lebih tinggi dari tutup lilin kedua return(true); //--- return(false); }
Kaedah CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) digunakan untuk memeriksa pembentukan pola "Morning Star" dan "Morning Doji Star".
1.2. Evening Star
Pola ini menunjukkan pembalikan dari arah aliran menaik, terdiri daripada tiga lilin (Rujuk Gambar 2). Selepas lilin putih yang panjang, terdapat lilin (warna tidak penting) dengan badan kecil yang terletak di luar badan lilin putih. Badan kecil lilin menunjukkan bahawa kekuatan lembu dan beruang adalah sama dan pasaran bersedia untuk mengubah arah aliran.
Lilin ketiga dalam pola ini adalah lilin bearish, badan lilin ini tidak bertindih dengan badan lilin kedua, dan harga tutup terletak di dalam badan lilin pertama (bullish). Lilin yang dihasilkan dalam model juga ditunjukkan dalam Gambar 2.
Jika lilin kedua adalah lilin doji, model ini dinamakan "Evening Doji Star".

Gambar 2. Pola "Evening Star" dan "Evening Doji Star"
Berikut adalah kaedah untuk mengenal pasti pola "Evening Star" dan "Evening Doji Star":
//+------------------------------------------------------------------+ //| Memeriksa pembentukan pola "Evening Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningStar() { //--- Evening Star if((Close(3)-Open(3)>AvgBody(1)) && // lilin bullish dengan badan lebih tinggi dari badan rata-rata (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // lilin kedua mempunyai badan kecil (kurang dari separuh badan rata-rata) (Close(2)>Close(3)) && // tutup lilin kedua lebih tinggi dari tutup lilin pertama (Open(2)>Open(3)) && // buka lilin kedua lebih tinggi dari buka lilin pertama (Close(1)<MidOpenClose(3))) // tutup lilin terakhir lebih rendah dari tengah lilin pertama return(true); //--- return(false); } //+------------------------------------------------------------------+ //| Memeriksa pembentukan pola "Evening Doji Star" | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternEveningDoji() { //--- Evening Doji Star if((Close(3)-Open(3)>AvgBody(1)) && // lilin bullish dengan badan lebih tinggi dari rata-rata (AvgBody(2)<AvgBody(1)*0.1) && // lilin kedua mempunyai badan yang sangat kecil (doji) (Close(2)>Close(3)) && // tutup lilin kedua lebih tinggi dari tutup lilin pertama (Open(2)>Open(3)) && // buka lilin kedua lebih tinggi dari buka lilin pertama (Open(1)<Close(2)) && // gap ke bawah pada lilin terakhir (Close(1)<Close(2))) // tutup lilin terakhir lebih rendah dari tutup lilin kedua return(true); //--- return(false); }
Kaedah CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) digunakan untuk memeriksa pembentukan pola "Evening Star" dan "Evening Doji Star".
2. Isyarat Dagangan yang Disahkan oleh Indikator Stochastic
Isyarat dagangan untuk membuka posisi long atau short mesti disahkan oleh Stochastic. Garis isyarat %D mesti lebih besar/kecil daripada tahap kritikal yang sesuai (30 atau 70).
Penutupan posisi yang dibuka bergantung kepada nilai indikator %D. Ini boleh dilakukan dalam 2 kes:
- Jika garis %D telah mencapai tahap kritikal bertentangan (80 untuk posisi long dan 20 untuk posisi short)
- Jika isyarat pembalikan tidak disahkan (apabila garis %D mencapai tahap berikut: 20 untuk posisi long dan 80 untuk posisi short)

Gambar 3. Pola "Evening Star" yang disahkan oleh indikator Stochastic
- int CH_HM_Stoch::LongCondition() - memeriksa syarat untuk membuka posisi long (mengembalikan 80) dan menutup posisi short (mengembalikan 40);
- int CH_HM_Stoch::ShortCondition() - memeriksa syarat untuk membuka posisi short (mengembalikan 80) dan menutup posisi long (mengembalikan 40).
2.1. Membuka posisi long/Menutup posisi short
Pembentukan pola "Morning Star" mesti disahkan oleh indikator Stochastic: StochSignal(1)<30 (nilai garis isyarat indikator Stochastic pada bar yang telah selesai mesti kurang dari 30).
Posisi short mesti ditutup jika garis isyarat indikator Stochastic telah melintasi ke atas tahap 20 atau 80.
//+------------------------------------------------------------------+ //| Memeriksa syarat untuk masuk dan keluar dari pasaran | //| 1) Masuk pasaran (buka posisi long, hasil=80) | //| 2) Keluar dari pasaran (tutup posisi short, hasil=40) | //+------------------------------------------------------------------+ int CMS_ES_Stoch::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 keadaan dagangan hanya pada bar berita int idx =StartIndex(); //--- memeriksa syarat untuk membuka posisi long //--- pembentukan pola Morning Star dan garis isyarat<30 if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30)) result=80; //--- memeriksa syarat untuk menutup posisi short //--- persilangan garis isyarat tahap beli/jual (ke bawah 20, ke atas 80) if((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) result=40; //--- mengembalikan hasil return(result); }
2.2. Membuka posisi short/Menutup posisi long
Pembentukan pola "Evening Star" mesti disahkan oleh indikator Stochastic: StochSignal(1)>70 (nilai garis isyarat indikator Stochastic pada bar yang telah selesai mesti lebih dari 70).
Posisi long mesti ditutup jika garis isyarat indikator Stochastic telah melintasi ke bawah tahap 80 atau 20.
//+------------------------------------------------------------------+ //| Memeriksa syarat untuk masuk dan keluar dari pasaran | //| 1) Masuk pasaran (buka posisi short, hasil=80) | //| 2) Keluar dari pasaran (tutup posisi long, hasil=40) | //+------------------------------------------------------------------+ int CMS_ES_Stoch::ShortCondition() { int result=0; //--- idx boleh digunakan untuk menentukan Expert Advisor kerja mod //--- idx=0 - dalam kes ini EA memeriksa syarat dagangan pada setiap tick //--- idx=1 - dalam kes ini EA memeriksa keadaan dagangan hanya pada bar berita int idx =StartIndex(); //--- memeriksa syarat untuk membuka posisi short //--- pembentukan Evening Star dan garis isyarat>70 if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70)) result=80; //--- memeriksa syarat untuk menutup posisi long //--- persilangan garis isyarat tahap beli/jual (ke bawah 80, ke atas 20) if((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20)))) result=40; //--- mengembalikan hasil return(result); }
2.3. Mencipta Expert Advisor Menggunakan MQL5 Wizard
Kelas CMS_ES_Stoch tidak termasuk dalam kelas Pustaka Standard, untuk menggunakannya, anda perlu memuat turun fail acms_es_stoch.mqh (lihat lampiran) dan simpan 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:

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

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

Gambar 6. Ciri isyarat Expert Advisor
Dalam kes ini, kita hanya menggunakan satu modul isyarat dagangan.
Menambah modul isyarat "Isyarat Berdasarkan Morning/Evening Stars oleh Stochastic":

Gambar 7. Ciri isyarat Expert Advisor
Modul isyarat dagangan ditambah:

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

Gambar 9. Ciri pengurusan wang Expert Advisor
Mengenai ciri pengurusan wang, kita akan menggunakan "Dagangan dengan volume perdagangan tetap":

Gambar 10. Ciri pengurusan wang Expert Advisor
Dengan menekan butang "Selesai", kita akan mendapatkan kod Expert Advisor yang dihasilkan, yang terletak dalam Expert_AMS_ES_Stoch.mq5, yang akan disimpan di terminal_data_folder\MQL5\Experts\.
Parameter input lalai 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 ditutup [0...100] input double Signal_PriceLevel =0.0; // Tahap harga untuk melaksanakan transaksi input double Signal_StopLevel =50.0; // Tahap Stop Loss (dalam poin) input double Signal_TakeLevel =50.0 // Tahap Take Profit (dalam poin)
perlu digantikan dengan:
//--- input untuk isyarat utama input int Signal_ThresholdOpen =40; // Nilai ambang isyarat untuk dibuka [0...100] input int Signal_ThresholdClose =20; // Nilai ambang isyarat untuk ditutup [0...100] input double Signal_PriceLevel =0.0; // Tahap harga untuk melaksanakan transaksi 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 anda menetapkan tahap ambang untuk membuka dan menutup posisi.
Dalam kod kaedah LongCondition() dan ShortCondition() dari 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 kontainer, ia terdiri daripada semua modul yang ditambahkan) juga digunakan, tetapi kaedah LongCondition() dan ShortCondition()nya sentiasa mengembalikan 0.
Hasil undi 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 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. Keputusan Backtesting Sejarah
Mari kita lihat backtesting Expert Advisor pada data sejarah (EURUSD H1, tempoh ujian: 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4).
Dalam penciptaan Expert Advisor, kita menggunakan volume tetap (Dagangan Lot Tetap, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Gambar 11. Keputusan ujian Expert Advisor yang berdasarkan Morning/Evening Stars + Stochastic
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_ams_es_stoch.mq5.
Siaran berkaitan
- MQL5 Wizard: Cipta Isyarat Dagangan Menggunakan Corak Morning/Evening Star dan MFI
- MQL5 Wizard: Cipta Sistem Trading Berdasarkan Pola Morning/Evening Star dan RSI
- MQL5 Wizard: Cipta EA Berdasarkan Pola Bullish dan Bearish Engulfing dengan Stochastic
- MQL5 Wizard: Cipta Isyarat Dagangan Berdasarkan Corak Hammer/Hanging Man dan Stochastic
- MQL5 Wizard: Cipta EA Berdasarkan Corak Lilin 3 Black Crows/3 White Soldiers dan Stochastic