MQL5 Wizard: Cipta Sistem Trading Berdasarkan Pola Morning/Evening Star dan RSI

Mike 2011.03.28 22:06 87 0 0
Lampiran

MQL5 Wizard membolehkan anda mencipta Sistem Trading siap pakai yang berasaskan Expert Advisors yang menggunakan kelas-kelas dari Standard library yang disediakan bersama terminal klien. Dengan alat ini, anda dapat memeriksa idea trading anda dengan cepat, hanya perlu mencipta kelas isyarat trading anda sendiri. Struktur kelas ini dan contoh penggunaannya boleh dirujuk dalam artikel MQL5 Wizard: Cara Mencipta Modul Isyarat Trading.

Idea umumnya adalah seperti berikut: kelas isyarat trading diturunkan dari CExpertSignal. Selanjutnya, anda perlu mengatasi kaedah virtual LongCondition() dan ShortCondition() dengan kaedah anda sendiri.

Terdapat sebuah buku berjudul "Strategi Pedagang Terbaik" (dalam Bahasa Rusia) yang membincangkan pelbagai strategi trading. Kita akan fokus kepada pola candlestick pembalikan yang disahkan oleh Stochastic, CCI, MFI dan RSI.

Cara terbaik adalah untuk mencipta kelas berasingan yang diturunkan dari CExpertSignal bagi memeriksa pembentukan pola candlestick. Untuk mengesahkan isyarat trading yang dihasilkan oleh pola candlestick, anda hanya perlu menulis kelas yang diturunkan dari CCandlePattern dan menambah ciri-ciri yang diperlukan (contohnya, pengesahan oleh osilator).

Di sini kita akan mempertimbangkan isyarat yang berasaskan pola "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) yang disahkan oleh indikator RSI. Modul isyarat trading ini berasaskan kelas CCandlePattern, yang merupakan contoh mudah penggunaannya untuk mencipta isyarat trading dengan pola candlestick.

1. Pola Candlestick Pembalikan "Morning Star" dan "Evening Star"

1.1. Morning Star

Pola ini menunjukkan pembalikan dari trend menurun, ia terdiri daripada tiga lilin (Rujuk Gambar 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 bullish dan bearish adalah sama dan pasaran bersedia untuk mengubah trend.

Lilin ketiga dalam pola ini adalah lilin bullish yang tidak menutupi badan lilin kedua, dan harga tutup terletak di dalam badan lilin pertama (bearish). Lilin yang dihasilkan dalam model ini juga ditunjukkan dalam Gambar 1.

Jika lilin kedua adalah lilin doji, model ini dipanggil "Morning Doji Star".

Gambar 1. Pola

Gambar 1. Pola "Morning Star" dan "Morning Doji Star"

Pengesahan pola "Morning Star" boleh dilaksanakan dalam kaedah CheckPatternMorningStar() dan CheckPatternMorningDoji() dalam kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Periksa pembentukan pola "Morning Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morning Star
   if((Open(3)-Close(3)>AvgBody(1)) && // lilin bearish, badannya lebih besar dari purata
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // lilin kedua mempunyai badan kecil
      (Close(2)<Close(3)) && // tutup lilin kedua lebih rendah dari tutup lilin pertama
      (Open(2)<Open(3)) && // buka lilin kedua lebih rendah dari buka lilin pertama
      (Close(1)>MidOpenClose(3))) // tutup lilin terakhir lebih tinggi dari tengah lilin pertama
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Periksa pembentukan pola "Morning Doji Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morning Doji Star
   if((Open(3)-Close(3)>AvgBody(1)) && // lilin bearish dengan badan lebih besar dari purata
      (AvgBody(2)<AvgBody(1*0.1) && // lilin kedua mempunyai badan sangat kecil
      (Close(2)>Close(3) && // tutup lilin kedua lebih tinggi dari tutup lilin pertama
      (Open(2)>Open(3) && // buka lilin kedua lebih tinggi dari buka lilin pertama
      (Open(1)>Close(2) && // jurang naik pada lilin terakhir
      (Close(1)>Close(2))) // tutup lilin terakhir lebih tinggi dari tutup lilin kedua
     return(true);
//---
   return(false);
  }

Kaedah CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) digunakan untuk memeriksa pembentukan pola "Morning Star" dan "Morning Doji Star".

1.2. Evening Star

Pola ini menunjukkan pembalikan dari trend menaik, ia juga terdiri daripada tiga lilin (Rujuk Gambar 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 bullish dan bearish adalah sama dan pasaran bersedia untuk mengubah trend.

Lilin ketiga dalam pola ini adalah lilin bearish yang tidak menutupi badan lilin kedua, dan harga tutup terletak di dalam badan lilin pertama (bulish). Lilin yang dihasilkan dalam model ini juga ditunjukkan dalam Gambar 2.

Jika lilin kedua adalah lilin doji, model ini dipanggil "Evening Doji Star".

Gambar 2. Pola

Gambar 2. Pola "Evening Star" dan "Evening Doji Star"

Berikut adalah kaedah untuk mengenali pola "Evening Star" dan "Evening Doji Star":

//+------------------------------------------------------------------+
//| Periksa pembentukan pola "Evening Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star
   if((Close(3)-Open(3)>AvgBody(1)) && // lilin bullish dengan badan lebih tinggi dari purata
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // lilin kedua mempunyai badan kecil
      (Close(2)>Close(3)) && // tutup lilin kedua lebih tinggi dari tutup lilin pertama
      (Open(2)>Open(3)) && // buka lilin kedua lebih tinggi dari buka lilin pertama
      (Close(1)<MidOpenClose(3))) // tutup lilin terakhir lebih rendah dari tengah lilin pertama
     return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Periksa pembentukan pola "Evening Doji Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Evening Doji Star
   if((Close(3)-Open(3)>AvgBody(1)) && // lilin bullish dengan badan lebih tinggi dari purata
      (AvgBody(2)<AvgBody(1*0.1) && // lilin kedua mempunyai badan sangat kecil
      (Close(2)>Close(3) && // tutup lilin kedua lebih tinggi dari tutup lilin pertama
      (Open(2)>Open(3) && // buka lilin kedua lebih tinggi dari buka lilin pertama
      (Open(1)<Close(2) && // jurang turun pada lilin terakhir
      (Close(1)<Close(2))) // tutup lilin terakhir lebih rendah dari tutup lilin kedua
     return(true);
//---
   return(false);
  }

Kaedah CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) digunakan untuk memeriksa pembentukan pola "Evening Star" dan "Evening Doji Star".

2. Isyarat trading yang disahkan oleh indikator RSI

Isyarat trading untuk membuka posisi long atau short mesti disahkan oleh indikator RSI. Nilai RSI mesti lebih rendah/lebih tinggi dari tahap kritikal (40 untuk posisi long dan 60 untuk posisi short).

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

  • jika RSI telah mencapai tahap kritikal sebaliknya (70 untuk posisi long dan 30 untuk posisi short)
  • jika isyarat pembalikan tidak disahkan (apabila RSI mencapai tahap berikut: 30 untuk posisi long dan 70 untuk posisi short)

Gambar 3. Pola

Gambar 3. Pola "Morning Star", disahkan oleh indikator RSI

  • int CMS_ES_RSI::LongCondition() - memeriksa syarat untuk membuka posisi long (mengembalikan 80) dan menutup posisi short (mengembalikan 40);
  • int CMS_ES_RSI::ShortCondition() - memeriksa syarat untuk membuka posisi short (mengembalikan 80) dan menutup posisi long (mengembalikan 40).

2.1. Membuka posisi long/Tutup posisi short

  1. Pembentukan pola "Morning Star" mesti disahkan oleh indikator RSI:  RSI(1)<40 (nilai RSI pada bar yang telah selesai mesti kurang dari 40).

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

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk masuk dan keluar dari pasaran |
//| 1) Masuk pasaran (buka posisi long, hasil=80)|
//| 2) Keluar pasaran (tutup posisi short, hasil=40)|
//+------------------------------------------------------------------+
int CMS_ES_RSI::LongCondition()
  {
   int result=0;
//--- idx boleh digunakan untuk menentukan mod kerja Expert Advisor
//--- idx=0 - dalam kes ini EA memeriksa syarat trading pada setiap tick
//--- idx=1 - dalam kes ini EA memeriksa syarat trading hanya pada bar berita
  int idx   =StartIndex();
//--- memeriksa syarat untuk membuka posisi long
//--- pembentukan pola Morning Star dan RSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (RSI(1)<40))
     result=80;
//--- memeriksa syarat untuk menutup posisi short
//--- crossover garis isyarat pada 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. Membuka posisi short/Tutup posisi long

  1. Pembentukan pola "Evening Star" mesti disahkan oleh indikator RSI: RSI(1)>60 (nilai RSI pada bar yang telah selesai mesti lebih dari 60).

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

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk masuk dan keluar dari pasaran |
//| 1) Masuk pasaran (buka posisi short, hasil=80)|
//| 2) Keluar pasaran (tutup posisi long, hasil=40)|
//+------------------------------------------------------------------+
int CMS_ES_RSI::ShortCondition()
  {
   int result=0;
//--- idx boleh digunakan untuk menentukan mod kerja Expert Advisor
//--- idx=0 - dalam kes ini EA memeriksa syarat trading pada setiap tick
//--- idx=1 - dalam kes ini EA memeriksa syarat trading hanya pada bar berita
  int idx   =StartIndex();
//--- memeriksa syarat untuk membuka posisi short
//--- pembentukan pola Evening Star dan RSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (RSI(1)>60))
     result=80;
//--- memeriksa syarat untuk menutup posisi long
//--- crossover garis isyarat pada 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 CMS_ES_RSI tidak termasuk dalam kelas Standard Library, untuk menggunakannya, perlu memuat turun fail acms_es_rsi.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, jalankan MQL5 Wizard:

Gambar 4. Mencipta Expert Advisor menggunakan MQL5 Wizard

Gambar 4. Mencipta Expert Advisor menggunakan MQL5 Wizard

Mari kita tentukan nama Expert Advisor:

Gambar 5. Ciri umum Expert Advisor

Gambar 5. Ciri umum Expert Advisor

Setelah itu, kita perlu memilih modul isyarat trading yang digunakan.

Gambar 6. Ciri isyarat Expert Advisor

Gambar 6. Ciri isyarat Expert Advisor

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

Menambah modul "Isyarat berdasarkan Morning/Evening Stars disahkan oleh RSI":

Gambar 7. Ciri isyarat Expert Advisor

Gambar 7. Ciri isyarat Expert Advisor

Modul isyarat trading ditambah:

Gambar 8. Ciri isyarat Expert Advisor

Gambar 8. Ciri isyarat Expert Advisor

Anda boleh memilih sebarang sifat trailing, tetapi kita akan gunakan "Trailing Stop tidak digunakan":

Gambar 9. Ciri isyarat Expert Advisor

Gambar 9. Sifat trailing Expert Advisor

Berkenaan sifat pengurusan wang, kita akan menggunakan "Trading dengan volume dagangan tetap":

Gambar 10. Sifat pengurusan wang Expert Advisor

Gambar 10. Sifat pengurusan wang Expert Advisor

Dengan menekan butang "Selesai", kita akan mendapatkan kod Expert Advisor yang dijana, yang terletak di Expert_AMS_ES_RSI.mq5, yang akan disimpan di folder_data_terminal_klien\MQL5\Experts\.

Parameter input lalai Expert Advisor yang dijana:

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

Perlu digantikan dengan:

//--- 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 dagangan
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 anda menetapkan tahap ambang untuk membuka dan menutup posisi.

Dalam kod kaedah LongCondition() dan ShortCondition() kelas isyarat trading, 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 trading. Undi dari modul utama (sebagai kontena, ia terdiri dari semua modul yang ditambah) 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 trading, 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, bermakna penutupan posisi hanya akan dilakukan apabila syarat penutupan adalah benar.


2.4. Keputusan Ujian Sejarah

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

Dalam penciptaan Expert Advisor, kita menggunakan volume tetap (Trading Fixed Lot, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Gambar 11. Keputusan ujian Expert Advisor, berdasarkan Morning/Evening Stars + RSI

Gambar 11. Keputusan ujian Expert Advisor, berdasarkan Morning/Evening Stars + RSI


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

Studi parameter sangat dipermudahkan menggunakan mod 3D-Visualization Strategy Tester, yang ditambahkan bermula dari build 419 (Rujuk Gambar 12):

Gambar 12. Keseimbangan sebagai fungsi dari parameter input PeriodRSI dan MA_period.

Gambar 12. Keseimbangan sebagai fungsi dari parameter input PeriodRSI dan MA_period

Kod Expert Advisor yang dihasilkan oleh MQL5 Wizard dilampirkan dalam expert_ms_es_rsi.mq5.


Senarai
Komen 0