MQL5 Wizard: Cipta EA Berdasarkan Pola Bullish dan Bearish Engulfing dengan Stochastic

Mike 2011.03.10 19:54 110 0 0
Lampiran

MQL5 Wizard adalah alat hebat yang membolehkan anda mencipta Expert Advisor (EA) siap pakai berdasarkan kelas Standard library yang disertakan bersama terminal klien MetaTrader. Dengan alat ini, anda boleh menguji idea dagangan anda dengan cepat. Apa yang anda perlukan adalah mencipta kelas isyarat dagangan anda sendiri. Struktur kelas ini serta contoh penggunaannya boleh didapati dalam artikel MQL5 Wizard: Cara Membuat Modul Isyarat Dagangan.

Konsep asasnya adalah seperti berikut: kelas isyarat dagangan adalah turunan daripada CExpertSignal. Anda perlu menggantikan kaedah LongCondition() dan ShortCondition() dengan kaedah anda sendiri.

Dalam buku "Strategi Trader Terbaik" (dalam bahasa Rusia), terdapat banyak strategi dagangan yang dibincangkan, tetapi kita akan fokus kepada pola candlestick pembalikan yang disahkan oleh Stochastic, CCI, MFI, dan RSI.

Kaedah terbaik adalah mencipta kelas berasingan yang diturunkan daripada CExpertSignal untuk memeriksa pembentukan pola candlestick. Untuk mengesahkan isyarat dagangan yang dihasilkan oleh pola candlestick, cukup untuk menulis kelas yang diturunkan daripada CCandlePattern dan menambah ciri yang diperlukan (seperti pengesahan oleh osilator).

Kita akan mempertimbangkan isyarat yang berdasarkan pola candlestick pembalikan "Bullish Engulfing/Bearish Engulfing" yang disahkan oleh Stochastic. Modul isyarat dagangan ini adalah berdasarkan kelas CCandlePattern, yang merupakan contoh mudah penggunaannya untuk mencipta isyarat dagangan dengan pola candlestick.


1. Pola Candlestick Pembalikan "Bullish Engulfing" dan "Bearish Engulfing"

1.1. Bullish Engulfing

Pola "Bullish Engulfing" terbentuk dalam trend menurun apabila candlestick hitam kecil diikuti oleh candlestick putih besar yang sepenuhnya menutupi ("mengambil") candlestick hari sebelumnya. Bayang-bayang (ekor) candlestick kecil adalah pendek, membolehkan badan candlestick besar menutupi keseluruhan candlestick dari hari sebelumnya.

Fig. 1. Pola candlestick 'Bullish Engulfing'

Fig. 1. Pola candlestick 'Bullish Engulfing'

Pengiktirafan pola "Bullish Engulfing" dilaksanakan dalam kaedah CheckPatternBullishEngulfing() pada kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Bullish Engulfing"
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing()
  {
//--- Bullish Engulfing
   if((Open(2)>Close(2))
             &&  // candlestick sebelumnya adalah bearish
      (Close(1)-Open(1)>AvgBody(1))  &&  // badan candlestick bullish lebih tinggi daripada purata
      (Close(1)>Open(2))             &&  // harga tutup candlestick bullish lebih tinggi daripada harga buka candlestick bearish
      (MidOpenClose(2)<CloseAvg(2))  &&  // dalam trend menurun
      (Open(1)<Close(2)))                // harga buka candlestick bullish lebih rendah daripada harga tutup candlestick bearish
      return(true);
//---
   return(false);
  }

Panggilan CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) digunakan untuk memeriksa pembentukan pola "Bullish Engulfing".


1.2. Bearish Engulfing

Pola "Bearish Engulfing" terbentuk dalam trend menaik apabila candlestick putih kecil diikuti oleh candlestick hitam besar yang sepenuhnya menutupi ("mengambil") candlestick hari sebelumnya. Bayang-bayang (ekor) candlestick kecil adalah pendek, membolehkan badan candlestick besar menutupi keseluruhan candlestick dari hari sebelumnya.

Fig. 2. Pola candlestick 'Bearish Engulfing'

Fig. 2. Pola candlestick 'Bearish Engulfing'

Pengiktirafan pola "Bearish Engulfing" dilaksanakan dalam kaedah CheckPatternBearishEngulfing() pada kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Bearish Engulfing"
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing()
  {
   //--- Bearish Engulfing
   if((Open(2)<Close(2))
            &&  // candlestick sebelumnya adalah bullish
      (Open(1)-Close(1)>AvgBody(1)) &&  // badan candlestick lebih tinggi daripada purata
      (Close(1)<Open(2))            &&  // harga tutup candlestick bearish lebih rendah daripada harga buka candlestick bullish
      (MidOpenClose(2)>CloseAvg(2)) &&  // dalam trend menaik
      (Open(1)>Close(2)))               // harga buka candlestick bearish lebih tinggi daripada harga tutup candlestick bullish
      return(true);
//---
   return(false);
  }

Panggilan CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) digunakan untuk memeriksa pembentukan pola "Bearish Engulfing".


2. Isyarat Dagangan, Disahkan oleh Indikator Stochastic

Isyarat dagangan untuk membuka posisi panjang atau pendek mesti disahkan oleh osilator Stochastic. Garis %D mesti lebih besar/kecil daripada tahap kritikal yang bersesuaian (30 atau 70).

Penutupan posisi yang dibuka bergantung kepada nilai indikator %D. Ia boleh dilakukan dalam 2 kes:

  • jika garis %D telah mencapai tahap kritikal bertentangan (80 untuk posisi panjang dan 20 untuk posisi pendek)
  • jika isyarat terbalik tidak disahkan (apabila garis %D mencapai tahap berikut: 20 untuk posisi panjang dan 80 untuk posisi pendek)

Fig. 3. Pola 'Bullish Engulfing', Disahkan oleh Indikator Stochastic

Fig. 3. Pola 'Bullish Engulfing', Disahkan oleh Indikator Stochastic

Memeriksa syarat dagangan untuk kemasukan dan keluar dilaksanakan dalam dua kaedah:

  • int CBE_BE_Stoch::LongCondition() - memeriksa syarat untuk membuka posisi panjang (mengembalikan 80) dan menutup posisi pendek (mengembalikan 40);
  • int CBE_BE_Stoch::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 Engulfing" mesti disahkan oleh Stochastic: StochSignal(1)<30 (nilai garis isyarat osilator Stochastic pada bar terakhir yang telah selesai mesti kurang daripada 30).

  2. Posisi pendek mesti ditutup jika garis isyarat osilator Stochastic telah melintasi ke atas tahap 20 atau 80.

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk kemasukan dan keluar dari pasaran
//| 1) Kemasukan pasaran (buka posisi panjang, hasil=80)
//| 2) Keluar pasaran (tutup posisi pendek, hasil=40)
//+------------------------------------------------------------------+
int CBE_BE_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 hanya memeriksa syarat dagangan pada bar berita
  int idx   =StartIndex();
   //--- memeriksa syarat untuk membuka posisi panjang
   //--- pembentukan pola Bullish Engulfing dan garis isyarat<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (StochSignal(1)<30))
     result=80;
   //--- memeriksa syarat untuk menutup posisi pendek
   //--- persilangan garis isyarat tahap terlebih beli/terlebih jual (ke bawah 20, ke atas 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
   //--- pulangkan hasil
   return(result);
  }

2.2. Buka Posisi Pendek/Tutup Posisi Panjang

  1. Pembentukan pola "Bearish Engulfing" mesti disahkan oleh Stochastic: StochSignal(1)>70 (nilai garis isyarat osilator pada bar terakhir yang telah selesai mesti lebih daripada 70).

  2. Posisi panjang mesti ditutup jika garis isyarat osilator Stochastic telah melintasi ke bawah tahap 80 atau 20.

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk kemasukan dan keluar dari pasaran
//| 1) Kemasukan pasaran (buka posisi pendek, hasil=80)
//| 2) Keluar pasaran (tutup posisi panjang, hasil=40)
//+------------------------------------------------------------------+
int CBE_BE_Stoch::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 hanya memeriksa syarat dagangan pada bar berita
  int idx   =StartIndex();
   //--- memeriksa syarat untuk membuka posisi pendek
   //--- pembentukan pola Bearish Engulfing dan garis isyarat>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (StochSignal(1)>70))
     result=80;
   //--- memeriksa syarat untuk menutup posisi panjang
   //--- persilangan garis isyarat tahap terlebih beli/terlebih jual (ke bawah 80, ke atas 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
   //--- pulangkan hasil
   return(result);
  }


2.3. Mencipta Expert Advisor Menggunakan MQL5 Wizard

Kelas CBE_BE_Stoch tidak termasuk dalam kelas Standard Library, untuk menggunakannya, anda perlu memuat turun fail acbe_be_stoch.mqh dan menyimpannya ke dalam folder terminal_klien_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

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

Selepas itu, 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 Engulfing/Bearish Engulfing Disahkan oleh Stochastic:

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 sifat trailing, tetapi kita akan menggunakan "Trailing Stop tidak digunakan":

Fig. 9. Sifat Trailing Expert Advisor

Fig. 9. Sifat Trailing Expert Advisor

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

Fig. 10. Sifat Pengurusan Wang Expert Advisor

Fig. 10. Sifat Pengurusan Wang Expert Advisor

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

Parameter input default untuk Expert Advisor yang dihasilkan:

//--- input untuk isyarat utama
input int            Signal_ThresholdOpen   =10;     // Nilai ambang isyarat untuk buka [0...100]
input int            Signal_ThresholdClose  =10;     // Nilai ambang isyarat untuk tutup [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 diganti kepada:

//--- input untuk isyarat utama
input int            Signal_ThresholdOpen   =40;     // Nilai ambang isyarat untuk buka [0...100]
input int            Signal_ThresholdClose  =20;     // Nilai ambang isyarat untuk tutup [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 buka dan tutup posisi.

Dalam kod kaedah LongCondition() dan ShortCondition() bagi kelas isyarat dagangan, kita telah menetapkan nilai tetap bagi ambang:

  • Posisi buka: 80;
  • Posisi tutup: 40.

Expert Advisor yang dihasilkan oleh MQL5 Wizard membuka dan menutup posisi menggunakan "undian" dari modul isyarat dagangan. Undian modul utama (sebagai kontena, ia terdiri daripada semua modul yang ditambah) juga digunakan, tetapi kaedah LongCondition() dan ShortCondition()nya sentiasa mengembalikan 0.

Hasil undian modul utama juga digunakan dalam purata "undian". Dalam kes kita, kita mempunyai: modul utama + 1 modul isyarat dagangan, jadi kita perlu mengambil kira perkara 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 Uji Kembali Sejarah

Mari kita pertimbangkan ujian kembali Expert Advisor ke atas data sejarah (EURUSD H1, tempoh ujian: 2010.01.01-2011.03.04, PeriodK=47, PeriodD=9, PeriodSlow=13, MA_period=5).

Dalam mencipta Expert Advisor, kita menggunakan volum tetap (Dagangan Lot Tetap, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).


Fig. 11. Hasil Ujian Expert Advisor berdasarkan Bullish/Bearish Engulfing + Stochastic

Fig. 11. Hasil Ujian Expert Advisor berdasarkan Bullish/Bearish Engulfing + Stochastic


Set parameter input terbaik boleh ditemui menggunakan Strategy Tester pada terminal klien MetaTrader 5.

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


Senarai
Komen 0