MQL5 Wizard: Cipta EA Berdasarkan Pola Candlestick Bullish/Bearish Harami + CCI

Mike 2011.03.17 02:40 70 0 0
Lampiran

MQL5 Wizard adalah alat yang membolehkan anda menghasilkan Expert Advisor (EA) siap pakai berdasarkan kelas dari pustaka standard yang disertakan bersama terminal klien. Ini membolehkan anda memeriksa idea perdagangan dengan cepat, hanya dengan mencipta kelas sinyal perdagangan anda sendiri. Struktur kelas ini dan contoh boleh ditemui dalam artikel MQL5 Wizard: Cara Mencipta Modul Sinyal Perdagangan.

Idea umum adalah seperti berikut: kelas sinyal perdagangan diturunkan dari CExpertSignal, dan seterusnya, perlu untuk menggantikan kaedah virtual LongCondition() dan ShortCondition() dengan kaedah anda sendiri.

Terdapat sebuah buku "Strategi Pedagang Terbaik" (dalam bahasa Rusia), di mana banyak strategi perdagangan dipertimbangkan. Kita akan fokus pada pola candlestick pembalikan yang disahkan oleh Stochastic, CCI, MFI, dan RSI.

Cara terbaik adalah mencipta kelas terpisah yang diturunkan dari CExpertSignal untuk memeriksa pembentukan pola candlestick. Untuk pengesahan sinyal perdagangan yang dijana oleh pola candlestick, cukup untuk menulis kelas yang diturunkan dari CCandlePattern dan menambah ciri yang diperlukan (contohnya, pengesahan oleh osilator).

1. Pola Candlestick Bullish Harami dan Bearish Harami

1.1. Bullish Harami

Pola Bullish Harami muncul dalam tren menurun apabila candlestick besar diikuti oleh candlestick lebih kecil yang tubuhnya terletak dalam julat vertikal tubuh yang lebih besar. Pola ini menunjukkan bahawa tren menurun mungkin sedang berbalik, menandakan bahawa ini adalah waktu yang baik untuk masuk ke posisi panjang. Candlestick kedua dibuka dengan gap ke atas. Semakin kecil candlestick kedua (putih), semakin besar kemungkinan pembalikan.

Bullish Harami reversal pattern

Fig. 1. Pola Candlestick "Bullish Harami"

Pengiktirafan pola "Bullish Harami" dilaksanakan dalam kaedah CheckPatternBullishHarami() dari kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola candlestick "Bullish Harami" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- Bullish Harami
   if((Close(1)>Open(1))              && // bar terakhir adalah bullish
     ((Open(2)-Close(2)>AvgBody(1))  && // candlestick sebelumnya adalah bearish
     ((Close(1)<Open(2))              && // harga tutup candlestick bullish rendah dari harga buka candlestick bearish
      (Open(1)>Close(2)))             && // harga buka candlestick bullish tinggi dari harga tutup candlestick bearish
      (MidPoint(2)<CloseAvg(2)))         // tren menurun
      return(true);
//---
   return(false);
  }

Kaedah CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) dari kelas CCandlePattern digunakan untuk memeriksa pembentukan pola "Bullish Harami".


1.2. Bearish Harami

Pola Bearish Harami muncul dalam tren menaik apabila candlestick besar diikuti oleh candlestick lebih kecil yang tubuhnya terletak dalam julat vertikal tubuh yang lebih besar. Pola ini menunjukkan bahawa tren menaik mungkin sedang berbalik, menandakan bahawa ini adalah waktu yang baik untuk masuk ke posisi pendek. Candlestick kedua dibuka dengan gap ke bawah.

Semakin kecil candlestick kedua (hitam), semakin besar kemungkinan pembalikan.

Bearish Harami reversal pattern

Fig. 2. Pola Candlestick "Bearish Harami"

Pengiktirafan pola "Bearish Harami" dilaksanakan dalam kaedah CheckPatternBearishHarami() dari kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola candlestick "Bearish Harami" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- Bearish Harami
   if((Close(1)<Open(1))              && // bar terakhir adalah bearish
     ((Close(2)-Open(2)>AvgBody(1))  && // candlestick sebelumnya adalah bullish
     ((Close(1)>Open(2))              && // harga tutup candlestick bearish tinggi dari harga buka candlestick bullish
      (Open(1)<Close(2)))             && // harga buka candlestick bearish rendah dari harga tutup candlestick bullish
      (MidPoint(2)>CloseAvg(2)))         // tren menaik
      return(true);
//---
   return(false);
  }

Kaedah CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) dari kelas CCandlePattern digunakan untuk memeriksa pembentukan pola "Bearish Harami".


2. Sinyal Perdagangan yang Disahkan oleh Indikator CCI

Sinyal perdagangan untuk membuka posisi panjang atau pendek mesti disahkan oleh Indikator CCI. Nilai CCI mesti lebih besar/lebih 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 mencapai tahap kritikal yang bertentangan (80 untuk posisi panjang dan -80 untuk posisi pendek)
  • jika sinyal pembalikan tidak disahkan (apabila CCI mencapai tahap berikut: -80 untuk posisi panjang dan 80 untuk posisi pendek)

Fig. 3. Pola Bullish Harami, disahkan oleh indikator CCI

Fig. 3. Pola Bullish Harami, disahkan oleh indikator CCI

  • int CBH_BH_CCI::LongCondition() - memeriksa syarat untuk membuka posisi panjang (mengembalikan 80) dan menutup posisi pendek (mengembalikan 40);
  • int CBH_BH_CCI::ShortCondition() - memeriksa syarat untuk membuka posisi pendek (mengembalikan 80) dan menutup posisi panjang (mengembalikan 40).

2.1. Membuka posisi panjang/Menutup posisi pendek

  1. Pembentukan pola "Bullish Harami" mesti disahkan oleh Indikator CCI: CCI(1)<-50 (nilai CCI dari bar yang telah dilengkapkan terakhir mesti kurang daripada -50).

  2. 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 ke pasaran (buka posisi panjang, hasil=80) |
//| 2) Keluar dari pasaran (tutup posisi pendek, hasil=40) |
//+------------------------------------------------------------------+
int CBH_BH_CCI::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 pola Bullish Harami dan CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (CCI(1)<-50))
     result=80;
//--- memeriksa syarat untuk menutup posisi pendek
//--- persilangan garis sinyal dari tahap overbought/oversold (ke bawah -80, ke bawah -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- mengembalikan hasil
   return(result);
  }

2.2. Membuka posisi pendek/Menutup posisi panjang

  1. Pembentukan pola "Bearish Harami" mesti disahkan oleh Indikator CCI: CCI(1)>50 (nilai indikator CCI dari bar yang telah dilengkapkan terakhir mesti lebih daripada 50).

  2. Posisi panjang mesti ditutup jika indikator CCI telah melintasi ke bawah -80 atau 80.

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk masuk dan keluar dari pasaran |
//| 1) Masuk ke pasaran (buka posisi pendek, hasil=80) |
//| 2) Keluar dari pasaran (tutup posisi panjang, hasil=40) |
//+------------------------------------------------------------------+
int CBH_BH_CCI::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 pola Bearish Harami dan CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (CCI(1)>50))
     result=80;
//--- memeriksa syarat untuk menutup posisi panjang
//--- persilangan garis sinyal dari tahap overbought/oversold (ke bawah -80, ke atas 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- mengembalikan hasil
   return(result);
  }

2.3. Mencipta Expert Advisor menggunakan MQL5 Wizard

Kelas CBH_BH_CCI tidak termasuk dalam kelas Pustaka Standard, untuk menggunakannya, perlu memuat turun fail acbh_bh_cci.mqh (lihat lampiran) dan simpan ke dalam folder terminal_klien_data\MQL5\Include\Expert\Signal\MySignals. Perkara yang sama perlu dilakukan dengan fail candlepatterns.mqh. Anda boleh menggunakannya di MQL5 Wizard setelah memulakan semula MetaEditor.

Untuk mencipta Expert Advisor, luncurkan MQL5 Wizard:

Fig. 4. Mencipta Expert Advisor menggunakan MQL5 Wizard

Fig. 4. Mencipta Expert Advisor menggunakan MQL5 Wizard

Mari kita tentukan nama Expert Advisor:

Fig. 5. Hartanah umum Expert Advisor

Fig. 5. Hartanah umum Expert Advisor

Setelah itu, kita perlu memilih modul sinyal perdagangan yang digunakan.

Fig. 6. Hartanah sinyal Expert Advisor

Fig. 6. Hartanah sinyal Expert Advisor

Dalam kes kita, kita menggunakan hanya satu modul sinyal perdagangan.

Menambah modul "Sinyal berdasarkan Bullish Harami/Bearish Harami disahkan oleh CCI":

Fig. 7. Hartanah sinyal Expert Advisor

Fig. 7. Hartanah sinyal Expert Advisor

Modul sinyal perdagangan telah ditambah:

Fig. 8. Hartanah sinyal Expert Advisor

Fig. 8. Hartanah sinyal Expert Advisor

Anda boleh memilih sebarang hartanah trailing, tetapi kita akan menggunakan "Trailing Stop tidak digunakan":

Fig. 9. Hartanah trailing Expert Advisor

Fig. 9. Hartanah trailing Expert Advisor

Berkaitan dengan hartanah pengurusan wang, kita akan menggunakan "Perdagangan dengan jumlah perdagangan tetap":

Fig. 10. Hartanah pengurusan wang Expert Advisor

Fig. 10. Hartanah pengurusan wang Expert Advisor

Dengan menekan butang "Selesai", kita akan mendapatkan kod Expert Advisor yang dihasilkan, yang terletak di Expert_ABH_BH_CCI.mq5, ia akan disimpan dalam terminal_data_folder\MQL5\Experts\.

Parameter input lalai untuk Expert Advisor yang dihasilkan:

//--- input untuk sinyal utama
input int            Signal_ThresholdOpen   =10;     // Nilai ambang sinyal untuk membuka [0...100]
input int            Signal_ThresholdClose  =10;     // Nilai ambang sinyal untuk menutup [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 kepada:

//--- input untuk sinyal utama
input int            Signal_ThresholdOpen   =40;     // Nilai ambang sinyal untuk membuka [0...100]
input int            Signal_ThresholdClose  =20;     // Nilai ambang sinyal untuk menutup [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 sinyal 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 sinyal perdagangan. Undi dari modul utama (sebagai kontainer, ia mengandungi 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 kita, kita mempunyai modul utama + 1 modul sinyal 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 diatur kepada 0, yang bermaksud bahawa penutupan posisi hanya akan dilakukan apabila syarat penutupan menjadi benar.


2.4. Keputusan backtesting sejarah

Kita akan mempertimbangkan backtesting Expert Advisor pada data sejarah (EURUSD H1, tempoh pengujian: 2010.01.01-2011.03.16, PeriodCCI=11, MA_period=5).

Dalam penciptaan Expert Advisor, kita menggunakan volume tetap (Perdagangan Lot Tetap, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Fig. 11. Keputusan pengujian Expert Advisor, berdasarkan Bullish Harami/Bearish Harami + CCI

Fig. 11. Keputusan pengujian Expert Advisor, berdasarkan Bullish Harami/Bearish Harami + CCI


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_abh_bh_cci.mq5.


Senarai
Komen 0