MQL5 Wizard: Cipta Signals Dagangan Berdasarkan Bullish Engulfing/Bearish Engulfing + RSI

Mike 2011.03.10 19:55 72 0 0
Lampiran

MQL5 Wizard membolehkan kita mencipta Expert Advisors (EA) siap sedia berdasarkan kelas dari perpustakaan standard yang disertakan dengan terminal klien. Dengan MQL5 Wizard, kita dapat menguji idea dagangan dengan cepat, cuma perlu mencipta kelas isyarat dagangan sendiri. Struktur kelas ini dan contoh boleh didapati dalam artikel MQL5 Wizard: Cara Mencipta Modul Isyarat Dagangan.

Idea asasnya adalah seperti berikut: kelas isyarat dagangan diturunkan dari CExpertSignal. Seterusnya, kita perlu menulis semula kaedah LongCondition() dan ShortCondition() dengan kaedah kita sendiri.

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

Cara terbaik adalah untuk mencipta kelas yang terpisah, diturunkan dari CExpertSignal untuk memeriksa pembentukan pola lilin. Untuk mengesahkan isyarat dagangan yang dijana oleh pola lilin, cukup untuk menulis kelas yang diturunkan dari CCandlePattern dan menambah ciri-ciri yang diperlukan (contohnya, pengesahan oleh osilator).

Di sini kita akan mempertimbangkan isyarat yang berdasarkan pola lilin "Bullish Engulfing/Bearish Engulfing", disahkan oleh indikator RSI. Modul isyarat dagangan ini berdasarkan kelas CCandlePattern, dan ia adalah contoh mudah penggunaannya untuk mencipta isyarat dagangan dengan pola lilin.


1. "Bullish Engulfing" dan "Bearish Engulfing"

1.1. Bullish Engulfing

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

Fig. 1.

Fig. 1. Pola lilin "Bullish Engulfing"

Pengesahan pola "Bullish Engulfing" dilaksanakan dalam kaedah CheckPatternBullishEngulfing() dari kelas CCandlePattern:

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

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


1.2. Bearish Engulfing

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

Figure 2.

Figure 2. Pola lilin "Bearish Engulfing"

Pengesahan pola "Bearish Engulfing" dilaksanakan dalam kaedah CheckPatternBearishEngulfing() dari kelas CCandlePattern:

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

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


2. Isyarat dagangan, disahkan oleh indikator RSI

Isyarat dagangan untuk membuka posisi panjang atau pendek mesti disahkan oleh indikator RSI. Nilai RSI mesti lebih rendah/lebih tinggi daripada tahap kritikal (40 untuk posisi panjang dan 60 untuk posisi pendek).

Penutupan posisi yang dibuka bergantung pada nilai RSI. Ini boleh dilakukan dalam 2 keadaan:

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

Fig. 3.

Fig. 3. Pola "Bullish Engulfing", disahkan oleh indikator RSI


  • int CBE_BE_RSI::LongCondition() - memeriksa syarat untuk membuka posisi panjang (mengembalikan 80) dan menutup posisi pendek (mengembalikan 40);
  • int CBE_BE_RSI::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 indikator RSI: RSI(1)<40 (nilai RSI bar yang telah siap mesti kurang dari 40).

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

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk masuk dan keluar dari pasaran                 |
//| 1) Masuk pasaran (buka posisi panjang, hasil=80)                  |
//| 2) Keluar pasaran (tutup posisi pendek, hasil=40)                 |
//+------------------------------------------------------------------+
int CBE_BE_RSI::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 Bullish Engulfing dan RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1)<40))
     result=80;
//--- memeriksa syarat untuk menutup posisi pendek
//--- pemotongan garis isyarat di tahap overbought/oversold (ke atas 30, ke atas 70)
  if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))
     result=40;
//--- pulangkan hasil
   return(result);
  }

2.2. Buka posisi pendek/Tutup posisi panjang

  1. Pembentukan pola "Bearish Engulfing" mesti disahkan oleh indikator RSI: RSI(1)>60 (nilai indikator RSI bar yang telah siap mesti lebih dari 60).

  2. Posisi panjang mesti ditutup jika indikator RSI telah melintasi tahap kritikal 70 atau 30 ke bawah.

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk masuk dan keluar dari pasaran                 |
//| 1) Masuk pasaran (buka posisi pendek, hasil=80)                 |
//| 2) Keluar pasaran (tutup posisi panjang, hasil=40)                  |
//+------------------------------------------------------------------+
int CBE_BE_RSI::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 Bearish Engulfing dan RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1)>60))
     result=80;
//--- memeriksa syarat untuk menutup posisi panjang
//--- pemotongan garis isyarat di tahap overbought/oversold (ke bawah 70, ke bawah 30)
   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
//--- pulangkan hasil
   return(result);
  }


2.3. Mencipta Expert Advisor menggunakan MQL5 Wizard

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

Untuk mencipta Expert Advisor, laksanakan 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

Setelah 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 RSI":

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 ciri trailing Expert Advisor

Fig. 9. Ciri ciri trailing Expert Advisor

Berkenaan dengan ciri pengurusan wang, kita akan menggunakan "Dagangan dengan volum 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 dijana, terletak dalam Expert_ABE_BE_RSI.mq5, ia akan disimpan dalam folder terminal_data_folder\MQL5\Experts\.

Parameter input lalai Expert Advisor yang dijana:

//--- 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 urus niaga
input double         Signal_StopLevel       =50.0;   // Tahap Stop Loss (dalam titik)
input double         Signal_TakeLevel       =50.0// Tahap Take Profit (dalam titik)

perlu diganti kepada:

//--- 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 urus niaga
input double         Signal_StopLevel       =0.0;    // Tahap Stop Loss (dalam titik)
input double         Signal_TakeLevel       =0.0    // Tahap Take Profit (dalam titik)

Parameter input Signal_ThresholdOpen/Signal_ThresholdClose membenarkan kita menetapkan tahap ambang untuk membuka dan menutup posisi.

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

  • Buka posisi: 80;
  • Tutup posisi: 40.

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

Keputusan undi modul utama juga digunakan dalam purata undi. Dalam kes kita, modul utama + 1 modul isyarat dagangan, jadi kita perlu mengambil kira fakta ini semasa menetapkan nilai ambang. Oleh kerana fakta ini, ThresholdOpen dan ThresholdClose perlu 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 akan dilakukan hanya apabila syarat penutupan adalah benar.


2.4. Keputusan ujian sejarah

Mari kita pertimbangkan ujian Expert Advisor ke atas data sejarah (EURUSD H1, tempoh ujian: 2010.01.01-2011.03.04, PeriodRSI=11, MA_period=5).

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

Fig. 11. Keputusan ujian Expert Advisor, berdasarkan Bullish Engulfing/Bearish Engulfing + RSI

Fig. 11. Keputusan ujian Expert Advisor, berdasarkan Bullish Engulfing/Bearish Engulfing + RSI


Set parameter input terbaik boleh didapati menggunakan Strategy Tester di terminal klien MetaTrader 5.

Kod Expert Advisor yang dicipta oleh MQL5 Wizard dilampirkan dalam expert_abe_be_rsi.mq5.


Senarai
Komen 0