MQL5 Wizard: Cipta Isyarat Dagangan dengan Bullish dan Bearish Harami + MFI

Mike 2011.03.17 19:32 109 0 0
Lampiran

MQL5 Wizard adalah alat yang memudahkan kita untuk mencipta System Trading secara cepat menggunakan kelas-kelas yang terdapat dalam Standard Library yang disediakan bersama terminal klien. Dengan menggunakan alat ini, kita dapat menguji idea dagangan dengan lebih pantas; apa yang kita perlukan hanyalah mencipta kelas isyarat dagangan kita sendiri. Struktur kelas ini serta contoh penggunaannya boleh dirujuk dalam artikel MQL5 Wizard: Cara Mencipta Modul Isyarat Dagangan.

Idea asasnya adalah kita perlu mengembangkan kelas isyarat dagangan daripada CExpertSignal. Kemudian, kita mesti menyesuaikan kaedah LongCondition() dan ShortCondition() dengan kaedah kita sendiri.

Dalam buku "Strategi Pedagang Terbaik" (dalam bahasa Rusia), banyak strategi dagangan yang dibincangkan, tetapi kita akan memberi tumpuan kepada pola candlestick pembalikan seperti Bullish Harami dan Bearish Harami, yang disahkan oleh Stochastic, CCI, MFI, dan RSI.

Cara terbaik adalah mencipta kelas terpisah yang diturunkan daripada CExpertSignal untuk memeriksa pembentukan pola candlestick. Untuk pengesahan isyarat dagangan yang dijana oleh pola candlestick, kita hanya perlu menulis kelas yang diturunkan daripada CCandlePattern dan tambahkan ciri-ciri yang diperlukan (contohnya, pengesahan oleh osilator).

Dalam artikel ini, kita akan membincangkan isyarat berdasarkan pola candlestick pembalikan "Bullish Harami/Bearish Harami" yang disahkan oleh indikator Market Facilitation Index (MFI). Modul isyarat dagangan ini berasaskan kelas CCandlePattern yang merupakan contoh mudah penggunaannya untuk mencipta isyarat dagangan dengan pola candlestick.


1. Pola Candlestick Pembalikan: Bullish Harami dan Bearish Harami

1.1. Bullish Harami

Pola Bullish Harami terbentuk dalam trend menurun apabila candlestick besar diikuti oleh candlestick kecil yang berada dalam julat vertikal badan candlestick besar. Pola ini menunjukkan bahawa trend menurun mungkin akan berbalik dan menandakan 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. Pola candlestick Bullish Harami

Fig. 1. Pola candlestick Bullish Harami

Pengesanan pola "Bullish Harami" dilaksanakan dalam kaedah CheckPatternBullishHarami() pada kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola 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 daripada 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);
  }

Pengesahan pola candlestick (CANDLE_PATTERN_BULLISH_HARAMI) dilakukan dalam kaedah CheckCandlestickPattern() pada kelas CCandlePattern.


1.2. Bearish Harami

Pola Bearish Harami terbentuk dalam trend menaik apabila candlestick besar diikuti oleh candlestick kecil yang berada dalam julat vertikal badan candlestick besar. Pola ini menunjukkan bahawa trend menaik mungkin akan berbalik dan menandakan 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. Pola candlestick Bearish Harami

Fig. 2. Pola candlestick Bearish Harami

Pengesanan pola "Bearish Harami" dilaksanakan dalam kaedah CheckPatternBearishHarami() pada kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola 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 daripada 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);
  }

Pengesahan pola candlestick (CANDLE_PATTERN_BEARISH_HARAMI) dilakukan dalam kaedah CheckCandlestickPattern() pada kelas CCandlePattern.


2. Isyarat Dagangan, disahkan oleh Indikator MFI

Isyarat dagangan untuk membuka posisi panjang atau pendek mesti disahkan oleh indikator MFI. Nilai indikator MFI mesti lebih rendah daripada 40 (untuk posisi panjang) atau lebih tinggi daripada 60 (untuk posisi pendek).

Penutupan posisi yang dibuka bergantung kepada nilai indikator MFI. Ini boleh dilakukan dalam 2 kes:

  1. jika MFI telah mencapai tahap kritikal bertentangan (70 untuk posisi panjang dan 30 untuk posisi pendek)
  2. jika isyarat pembalikan tidak disahkan (apabila indikator MFI mencapai tahap berikut: 30 untuk posisi panjang dan 70 untuk posisi pendek)

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

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


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

2.1. Buka posisi panjang/Tutup posisi pendek

  1. Pembentukan pola "Bullish Harami" mesti disahkan oleh MFI indikator: MFI(1)<40 (nilai indikator MFI dari bar terakhir mesti kurang daripada 40).

  2. Posisi pendek mesti ditutup jika MFI indikator telah melintasi ke atas tahap kritikal (70 atau 30).

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk penyertaan dan keluar dari pasaran |
//| 1) Penyertaan pasaran (buka posisi panjang, hasil=80)|
//| 2) Keluar pasaran (tutup posisi pendek, hasil=40)|
//+------------------------------------------------------------------+
int CBH_BH_MFI::LongCondition()
  {
   int result=0;
//--- idx boleh digunakan untuk menentukan mod kerja System Trading
//--- 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 Bullish Harami dan MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40))
     result=80;
//--- memeriksa syarat untuk menutup posisi pendek
//--- crossover garis isyarat pada tahap terlebih beli/terlebih jual (ke atas 30, ke atas 70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
//--- kembalikan hasil
   return(result);
  }


2.2. Buka posisi pendek/Tutup posisi panjang

  1. Pembentukan pola "Bearish Harami" mesti disahkan oleh MFI indikator: MFI(1)>60 (nilai indikator MFI dari bar terakhir mesti lebih besar daripada 60).

  2. Posisi panjang mesti ditutup jika MFI indikator telah melintasi ke atas tahap kritikal (70 atau 30).

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk penyertaan dan keluar dari pasaran |
//| 1) Penyertaan pasaran (buka posisi pendek, hasil=80)|
//| 2) Keluar pasaran (tutup posisi panjang, hasil=40)|
//+------------------------------------------------------------------+
int CBH_BH_MFI::ShortCondition()
  {
   int result=0;
//--- idx boleh digunakan untuk menentukan mod kerja System Trading
//--- 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 Bearish Harami dan MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60))
     result=80;
//--- memeriksa syarat untuk menutup posisi panjang
//--- crossover garis isyarat pada tahap terlebih beli/terlebih jual (ke atas 70, ke bawah 30)
   if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- kembalikan hasil
   return(result);
  }


2.3. Membuat Expert Advisor Menggunakan MQL5 Wizard

Kelas CBH_BH_MFI tidak termasuk dalam kelas Standard Library, untuk menggunakannya, perlu memuat turun fail abh_bh_mfi.mqh (lihat lampiran) dan simpan dalam folder terminal_klien_data\MQL5\Include\Expert\Signal\MySignals. Perkara yang sama juga perlu dilakukan dengan fail acandlepatterns.mqh. Anda boleh menggunakannya dalam MQL5 Wizard selepas memulakan semula MetaEditor.

Untuk mencipta Expert Advisor, jalankan 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. Ciri umum Expert Advisor

Fig. 5. Ciri umum Expert Advisor

Seterusnya, kita perlu memilih modul isyarat dagangan yang digunakan.

Fig. 6. Ciri isyarat Expert Advisor

Fig. 6. Ciri isyarat Expert Advisor

Dalam kes kita, kita hanya menggunakan satu modul isyarat dagangan.

Menambah modul Isyarat berdasarkan Bullish Harami /Bearish Harami yang disahkan oleh MFI:

Fig. 7. Ciri isyarat Expert Advisor

Fig. 7. Ciri isyarat Expert Advisor

Modul isyarat dagangan telah ditambah:

Fig. 8. Ciri isyarat Expert Advisor

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

Fig. 9. Ciri pengurusan wang Expert Advisor

Mengenai ciri pengurusan wang, kita akan menggunakan "Dagangan dengan jumlah dagangan tetap":

Fig. 10. Ciri pengurusan wang Expert Advisor

Fig. 10. Ciri pengurusan wang Expert Advisor

Dengan menekan butang "Selesai", kita akan mendapatkan kod Expert Advisor yang dihasilkan, terletak di dalam Expert_ABH_BH_MFI.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 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 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 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 kita menetapkan tahap ambang untuk membuka dan menutup posisi.

Dalam kod kaedah LongCondition() dan ShortCondition() pada 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 ditambahkan) 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 semasa 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 bermaksud bahawa penutupan posisi hanya akan dilakukan apabila syarat penutupan adalah benar.


2.4. Keputusan Ujian Kembali Sejarah

Kita akan mempertimbangkan ujian kembali Expert Advisor pada data sejarah (EURUSD H1, tempoh ujian: 2010.01.01-2011.03.16, PeriodMFI=37, MA_period=11).

Dalam penciptaan Expert Advisor ini, kita menggunakan jumlah tetap (Dagangan Lot Tetap, 0.1), algoritma Trailing Stop tidak digunakan (Tidak digunakan Trailing).

Fig. 11. Keputusan ujian Expert Advisor, berdasarkan Bullish Harami /Bearish Harami + MFI

Fig. 11. Keputusan ujian Expert Advisor, berdasarkan Bullish Harami /Bearish Harami + MFI


Set parameter input terbaik boleh diperoleh menggunakan Strategy Tester dalam terminal klien MetaTrader 5.

Kod Expert Advisor yang dicipta oleh MQL5 Wizard disertakan dalam expert_abh_bh_mfi.mq5.


Senarai
Komen 0