MQL5 Wizard: Cipta EA Berdasarkan Corak Bullish dan Bearish Engulfing + CCI

Mike 2011.03.10 19:54 107 0 0
Lampiran

MQL5 Wizard adalah alat yang memudahkan kita untuk mencipta Expert Advisor (EA) siap pakai berdasarkan kelas-kelas dalam Perpustakaan Standard yang disediakan bersama terminal klien. Dengan menggunakan MQL5 Wizard, anda boleh menguji idea dagangan anda dengan cepat, semuanya hanya memerlukan anda mencipta kelas isyarat dagangan sendiri. Struktur dan contoh kelas ini boleh didapati dalam artikel MQL5 Wizard: Cara Mencipta Modul Isyarat Dagangan.

Idea asasnya adalah kelas isyarat dagangan yang diturunkan dari CExpertSignal. Seterusnya, anda perlu mengubahsuai kaedah LongCondition() dan ShortCondition() dengan kaedah anda sendiri.

Sebuah buku yang menarik ialah "Strategi Peniaga Terbaik" (dalam bahasa Rusia), di mana banyak strategi dagangan dibincangkan, kita akan memberi tumpuan kepada corak lilin pembalikan, yang disahkan oleh Stochastic, CCI, MFI dan RSI sebagai osilator.

Cara terbaik adalah untuk mencipta kelas terpisah yang diturunkan dari CExpertSignal untuk memeriksa pembentukan corak lilin. Untuk pengesahan isyarat dagangan yang dihasilkan oleh corak lilin, anda hanya perlu menulis kelas yang diturunkan dari CCandlePattern dan menambah ciri yang diperlukan (contohnya, pengesahan melalui osilator).

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

1. Corak Lilin Pembalikan: "Bullish Engulfing" dan "Bearish Engulfing"

1.1. Bullish Engulfing

Corak pembalikan "Bullish Engulfing" terbentuk dalam aliran menurun apabila lilin hitam kecil diikuti oleh lilin putih besar yang sepenuhnya meliputi ("menggulung") lilin hari sebelumnya. Bayang-bayang (ekor) lilin kecil adalah pendek, yang membolehkan badan lilin besar menutup keseluruhan lilin dari hari sebelumnya.

Fig. 1. Corak lilin Bullish Engulfing

Fig. 1. Corak lilin Bullish Engulfing

Pengesahan corak "Bullish Engulfing" dilakukan dalam kaedah CheckPatternBullishEngulfing() kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan corak 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 dari purata badan
      (Close(1)>Open(2))             &&  // harga tutup lilin bullish lebih tinggi dari harga buka lilin bearish
      (MidOpenClose(2)<CloseAvg(2))  &&  // aliran menurun
      (Open(1)<Close(2)))                // harga buka lilin bullish lebih rendah dari harga tutup lilin bearish
      return(true);
//---
   return(false);
  }

Pengesahan corak lilin (CANDLE_PATTERN_BULLISH_ENGULFING) dalam kaedah CheckCandlestickPattern() kelas CCandlePattern.


1.2. Bearish Engulfing

Corak pembalikan "Bearish Engulfing" terbentuk dalam aliran menaik apabila lilin putih kecil diikuti oleh lilin hitam besar yang sepenuhnya meliputi ("menggulung") lilin hari sebelumnya. Bayang-bayang (ekor) lilin kecil adalah pendek, yang membolehkan badan lilin besar menutup keseluruhan lilin dari hari sebelumnya.

Fig. 2. Corak lilin Bearish Engulfing

Fig. 2. Corak lilin Bearish Engulfing

Pengesahan corak "Bearish Engulfing" dilakukan dalam kaedah CheckPatternBearishEngulfing() kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan corak 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 dari purata badan
      (Close(1)<Open(2))            &&  // harga tutup lilin bearish lebih rendah dari harga buka lilin bullish
      (MidOpenClose(2)>CloseAvg(2)) &&  // aliran menaik
      (Open(1)>Close(2)))               // harga buka lilin bearish lebih tinggi dari harga tutup lilin bullish
      return(true);
//---
   return(false);
  }

Pengesahan corak lilin (CANDLE_PATTERN_BEARISH_ENGULFING) dalam kaedah CheckCandlestickPattern() kelas CCandlePattern.


2. Isyarat Dagangan, Disahkan oleh Indikator CCI

Isyarat dagangan untuk membuka posisi panjang atau pendek mesti disahkan oleh indikator CCI. Nilai CCI mesti lebih besar/kecil daripada tahap kritikal (-50 untuk posisi panjang dan 50 untuk posisi pendek).

Penutupan posisi yang dibuka bergantung kepada nilai CCI. Ini boleh dilakukan dalam 2 keadaan:

  1. jika garis CCI mencapai tahap kritikal bertentangan (80 untuk posisi panjang dan -80 untuk posisi pendek)
  2. jika isyarat pembalikan tidak disahkan (apabila CCI mencapai tahap berikut: -80 untuk posisi panjang dan 80 untuk posisi pendek)

Fig. 3. Corak Bullish Engulfing, disahkan oleh indikator CCI

Fig. 3. Corak Bullish Engulfing, disahkan oleh indikator CCI


  • int CBE_BE_CCI::LongCondition() - memeriksa syarat untuk membuka posisi panjang (mengembalikan 80) dan menutup posisi pendek (mengembalikan 40);
  • int CBE_BE_CCI::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 corak "Bullish Engulfing" mesti disahkan oleh CCI indikator: CCI(1)<-50 (nilai CCI bar yang telah siap mesti kurang dari -50).

  2. Posisi pendek mesti ditutup jika CCI indikator telah melintasi ke atas tahap kritikal -80 atau melintasi ke bawah tahap kritikal 80.

//+------------------------------------------------------------------+
//| 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_CCI::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 corak Bullish Engulfing dan CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (CCI(1)<-50))
     result=80;
//--- memeriksa syarat untuk menutup posisi pendek
//--- crossover garis isyarat atas/bawah tahap overbought/oversold (ke bawah -80, ke bawah -80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- pulangkan hasil
   return(result);
  }

2.2. Buka posisi pendek/Tutup posisi panjang

  1. Pembentukan corak "Bearish Engulfing" mesti disahkan oleh CCI indikator: CCI(1)>50 (nilai CCI indikator bar yang telah siap mesti lebih dari 50).

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

//+------------------------------------------------------------------+
//| 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_CCI::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 corak Bearish Engulfing dan CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (CCI(1)>50))
     result=80;
//--- memeriksa syarat untuk menutup posisi panjang
//--- crossover garis isyarat atas/bawah tahap overbought/oversold (ke bawah -80, ke bawah 80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- pulangkan hasil
   return(result);
  }


2.3. Mencipta Expert Advisor menggunakan MQL5 Wizard

Kelas CBE_BE_CCI tidak termasuk dalam kelas Perpustakaan Standard, untuk menggunakannya, perlu memuat turun fail acbe_be_cci.mqh (lihat lampiran) dan simpan ke dalam folder data_terminal_klien\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, laksanakan MQL5 Wizard:

Fig. 4. Mencipta Expert Advisor menggunakan MQL5 Wizard

Fig. 4. Mencipta Expert Advisor menggunakan MQL5 Wizard

Mari kita nyatakan 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 yang disahkan oleh CCI":

Fig. 7. Ciri isyarat Expert Advisor

Fig. 7. Ciri isyarat Expert Advisor

Modul isyarat dagangan 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

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 EA yang dihasilkan, yang terletak di Expert_ABE_BE_CCI.mq5, ia akan disimpan di terminal_data_folder\MQL5\Experts\.

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

harus 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 urus niaga
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 untuk menetapkan tahap ambang untuk membuka dan menutup posisi.

Dalam kod kaedah LongCondition() dan ShortCondition() kelas isyarat dagangan ini, kita telah menetapkan nilai tetap tahap 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 dari semua modul yang ditambahkan) 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 isyarat dagangan, jadi kita perlu mengambil kira fakta ini semasa menetapkan nilai tahap 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, yang bermakna penutupan posisi akan dilakukan hanya ketika syarat penutupan menjadi benar.


2.4. Keputusan Ujian Sejarah

Mari kita lihat ujian belakang pada data sejarah (EURUSD H1, tempoh ujian: 2010.01.01-2011.03.16, PeriodCCI=49, MA_period=11).

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

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

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


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

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


Senarai
Komen 0