Laman utama Perdagangan Sistem Siaran

MQL5 Wizard: Sinyal Dagangan Berdasarkan Corak Bintang Pagi/Malam + CCI untuk MetaTrader 5

Lampiran
322.zip (6.46 KB, Muat turun 2 kali)

MQL5 Wizard membolehkan anda mencipta Pembantu Pakar siap sedia berdasarkan kelas Perpustakaan Standard yang disediakan bersama terminal klien (lihat Mewujudkan Pembantu Pakar Sedia Ada dalam MQL5 Wizard untuk butiran lanjut). Ia membolehkan anda menyemak idea dagangan dengan cepat, hanya perlu mencipta kelas isyarat dagangan anda sendiri. Struktur kelas ini dan contoh boleh ditemui dalam artikel MQL5 Wizard: Cara Mencipta Modul Isyarat Dagangan.

Idea amnya adalah seperti berikut: kelas isyarat dagangan diturunkan daripada CExpertSignal, seterusnya, perlu menggantikan kaedah LongCondition() dan ShortCondition() dengan kaedah anda sendiri.

Terdapat sebuah buku "Strategi Pedagang Terbaik" (dalam bahasa Rusia), di mana banyak strategi dagangan dibincangkan, kita akan fokus kepada corak candlestick pembalikan, yang disahkan oleh Stochastic, CCI, MFI dan RSI.

Cara terbaik adalah dengan mencipta kelas yang berasingan, diturunkan dari CExpertSignal untuk menyemak pembentukan corak candlestick. Untuk mengesahkan isyarat dagangan yang dihasilkan oleh corak candlestick, 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 corak pembalikan "Bintang Pagi/Bintang Malam" (Morning Doji Star/Evening Doji Star), yang disahkan oleh indikator CCI. Modul isyarat dagangan ini berdasarkan kelas CCandlePattern, yang merupakan contoh mudah penggunaannya untuk mencipta isyarat dagangan dengan corak candlestick.

1. Corak Candlestick Pembalikan: "Bintang Pagi" dan "Bintang Malam"

1.1. Bintang Pagi

Corak ini menunjukkan pembalikan daripada trend menurun, ia terdiri daripada tiga lilin (Lihat Rajah 1). Selepas lilin hitam yang panjang, terdapat lilin (warna tidak penting) dengan badan kecil yang terletak di luar badan lilin hitam. Badan kecil lilin menunjukkan bahawa kekuatan lembu dan beruang adalah sama dan pasaran bersedia untuk mengubah arah trend.

Lilin ketiga dalam corak ini adalah lilin bullish, badannya tidak bertindih dengan badan lilin kedua, dan harga tutup terletak dalam badan lilin pertama (bearish). Lilin yang terhasil daripada model ini juga ditunjukkan dalam Rajah 1.

Sekiranya lilin kedua adalah lilin seperti doji, model ini dipanggil "Bintang Doji Pagi".

Fig. 1. Corak Candlestick 'Bintang Pagi' dan 'Bintang Doji Pagi'

Fig. 1. Corak Candlestick 'Bintang Pagi' dan 'Bintang Doji Pagi'

Pengesahan corak "Bintang Pagi" dilakukan dalam kaedah CheckPatternMorningStar() dan CheckPatternMorningDoji() dari kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Semak pembentukan corak "Bintang Pagi" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Bintang Pagi
   if((Open(3)-Close(3)>AvgBody(1)) && // lilin bearish, badannya lebih besar daripada badan lilin purata
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // lilin kedua mempunyai badan kecil (kurang daripada separuh badan purata)
      (Close(2)<Close(3)) && // tutup lilin kedua lebih rendah daripada tutup lilin pertama
      (Open(2)<Open(3)) && // buka lilin kedua lebih rendah daripada buka lilin pertama
      (Close(1)>MidOpenClose(3))) // tutup lilin terakhir lebih tinggi daripada pusat lilin pertama
      return(true);
//---
   return(false);
  }

Kaedah CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) digunakan untuk menyemak pembentukan corak "Bintang Pagi" dan "Bintang Doji Pagi".


1.2. Bintang Malam

Corak ini menunjukkan pembalikan daripada trend menaik, ia terdiri daripada tiga lilin (Lihat Rajah 2). Selepas lilin putih yang panjang, terdapat lilin (warna tidak penting) dengan badan kecil, yang terletak di luar badan lilin putih. Badan kecil lilin menunjukkan bahawa kekuatan lembu dan beruang adalah sama dan pasaran bersedia untuk mengubah arah trend.

Lilin ketiga dalam corak ini adalah lilin bearish, badannya tidak bertindih dengan badan lilin kedua, dan harga tutup terletak dalam badan lilin pertama (bullish). Lilin yang terhasil daripada model ini juga ditunjukkan dalam Rajah 2.

Sekiranya lilin kedua adalah lilin seperti doji, model ini dipanggil "Bintang Doji Malam".

Fig. 2. Corak Candlestick 'Bintang Malam' dan 'Bintang Doji Malam'

Fig. 2. Corak Candlestick 'Bintang Malam' dan 'Bintang Doji Malam'

Berikut adalah kaedah untuk mengenal pasti corak "Bintang Malam" dan "Bintang Doji Malam":

//+------------------------------------------------------------------+
//| Semak pembentukan corak "Bintang Malam" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Bintang Malam
   if((Close(3)-Open(3)>AvgBody(1)) && // lilin bullish dengan badan lebih tinggi daripada badan purata
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // lilin kedua mempunyai badan kecil (kurang daripada separuh badan purata)
      (Close(2)>Close(3)) && // tutup lilin kedua lebih tinggi daripada tutup lilin pertama
      (Open(2)>Open(3)) && // buka lilin kedua lebih tinggi daripada buka lilin pertama
      (Close(1)<MidOpenClose(3))) // tutup lilin terakhir lebih rendah daripada pusat lilin pertama
      return(true);
//---
   return(false);
  }

Kaedah CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) digunakan untuk menyemak pembentukan corak "Bintang Malam" dan "Bintang Doji Malam".


2. Sinyal Dagangan yang 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. Ia boleh dilakukan dalam 2 kes:

  1. jika garis CCI telah mencapai tahap kritikal yang 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 'Bintang Malam', disahkan oleh indikator CCI

Fig. 3. Corak 'Bintang Malam', disahkan oleh indikator CCI


  • int CMS_ES_CCI::LongCondition() - memeriksa syarat untuk membuka posisi panjang (mengembalikan 80) dan menutup posisi pendek (mengembalikan 40);
  • int CMS_ES_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 corak "Bintang Pagi" mesti disahkan oleh indikator CCI: CCI(1)<-50 (nilai CCI bar yang telah selesai 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 pasaran (buka posisi panjang, hasil=80)|
//| 2) Keluar dari pasaran (tutup posisi pendek, hasil=40)|
//+------------------------------------------------------------------+
int CMS_ES_CCI::LongCondition()
  {
   int result=0;
//--- idx boleh digunakan untuk menentukan mod kerja Pembantu Pakar
//--- 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 corak Bintang Pagi dan CCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (CCI(1)<-50))
     result=80;
//--- memeriksa syarat untuk menutup posisi pendek
//--- lintasan garis isyarat aras terlebih beli/terlebih jual (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 corak "Bintang Malam" mesti disahkan oleh indikator CCI: CCI(1)>50 (nilai CCI indikator bar yang telah selesai mesti lebih besar 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 pasaran (buka posisi pendek, hasil=80)|
//| 2) Keluar dari pasaran (tutup posisi panjang, hasil=40)|
//+------------------------------------------------------------------+
int CMS_ES_CCI::ShortCondition()
  {
   int result=0;
//--- idx boleh digunakan untuk menentukan mod kerja Pembantu Pakar
//--- 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 corak Bintang Malam dan CCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (CCI(1)>50))
     result=80;
//--- memeriksa syarat untuk menutup posisi panjang
//--- lintasan garis isyarat aras terlebih beli/terlebih jual (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.3. Mewujudkan Pembantu Pakar menggunakan MQL5 Wizard

Kelas CMS_ES_CCI tidak termasuk dalam kelas Perpustakaan Standard, untuk menggunakannya, perlu memuat turun fail acms_es_cci.mqh (lihat lampiran) dan menyimpannya ke dalam folder_data_terminal_klien\MQL5\Include\Expert\Signal\MySignals. Perkara yang sama perlu dilakukan dengan fail candlepatterns.mqh. Anda boleh menggunakannya dalam MQL5 Wizard selepas memulakan semula MetaEditor.

Untuk mencipta Pembantu Pakar, lancarkan MQL5 Wizard:

Fig. 4. Mewujudkan Pembantu Pakar menggunakan MQL5 Wizard

Fig. 4. Mewujudkan Pembantu Pakar menggunakan MQL5 Wizard

Mari kita tentukan nama Pembantu Pakar:

Fig. 5. Ciri umum Pembantu Pakar

Fig. 5. Ciri umum Pembantu Pakar

Selepas itu kita perlu memilih modul isyarat dagangan yang digunakan.

Fig. 6. Ciri isyarat Pembantu Pakar

Fig. 6. Ciri isyarat Pembantu Pakar

Dalam kes kita hanya menggunakan satu modul isyarat dagangan.

Menambah modul isyarat "Sinyal Berdasarkan Bintang Pagi/Malam Disahkan oleh CCI":

Fig. 7. Ciri isyarat Pembantu Pakar

Fig. 7. Ciri isyarat Pembantu Pakar

Modul isyarat dagangan telah ditambah:

Fig. 8. Ciri isyarat Pembantu Pakar

Fig. 8. Ciri isyarat Pembantu Pakar

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

Fig. 9. Ciri pengurusan wang Pembantu Pakar

Fig. 9. Ciri pengurusan wang Pembantu Pakar

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

Fig. 10. Ciri pengurusan wang Pembantu Pakar

Fig. 10. Ciri pengurusan wang Pembantu Pakar

Dengan menekan butang "Siap", kita akan mendapatkan kod Pembantu Pakar yang dihasilkan, terletak di Expert_AMS_ES_CCI.mq5, ia akan disimpan di terminal_data_folder\MQL5\Experts\.

Parameter input lalai Pembantu Pakar yang dihasilkan:

//--- 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 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 mata)
input double         Signal_TakeLevel       =50.0// Tahap Take Profit (dalam mata)

perlu digantikan 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 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 mata)
input double         Signal_TakeLevel       =0.0    // Tahap Take Profit (dalam mata)

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

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

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

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

Keputusan undian modul utama juga digunakan dalam purata "undian". Dalam kes kita, terdapat 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 sebagai 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 Uji Kembali Sejarah

Marilah kita lihat keputusan uji kembali Pembantu Pakar pada data sejarah (EURUSD H1, tempoh ujian: 2009.01.01-2011.03.16, PeriodCCI=25, MA_period=5).

Dalam penciptaan Pembantu Pakar, kita menggunakan jumlah tetap (Dagangan Lot Tetap, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Fig. 11. Keputusan ujian Pembantu Pakar, berdasarkan Bintang Pagi/Malam + CCI

Fig. 11. Keputusan ujian Pembantu Pakar, berdasarkan Bintang Pagi/Malam + CCI


Set parameter input yang terbaik boleh dicari menggunakan Penyemak Strategi dalam terminal klien MetaTrader 5.

Kod Pembantu Pakar yang dihasilkan oleh MQL5 Wizard dilampirkan dalam expert_ams_es_cci.mq5.


Siaran berkaitan

Komen (0)