MQL5 Wizard: Membuat EA dengan Sinyal Trading Berdasarkan Pola Morning/Evening Stars dan Stochastic

Mike 2011.03.26 01:11 115 0 0
Lampiran

Mungkin kamu sudah familiar dengan MQL5 Wizard, alat yang memudahkan kita untuk membuat Expert Advisor (EA) siap pakai berbasis pada kelas pustaka standar yang disertakan dalam terminal klien. Dengan MQL5 Wizard, kamu bisa dengan cepat memeriksa ide tradingmu hanya dengan membuat kelas sinyal tradingmu sendiri. Struktur kelas ini dan contohnya bisa kamu temukan di artikel MQL5 Wizard: Cara Membuat Modul Sinyal Trading.

Intinya, kelas sinyal trading diturunkan dari CExpertSignal. Setelah itu, kita perlu mengoverride metode virtual LongCondition() dan ShortCondition() dengan metode kita sendiri.

Ada sebuah buku berjudul "Strategi Para Trader Terbaik" (dalam bahasa Rusia), yang membahas banyak strategi trading, namun kita akan fokus pada pola candlestick pembalikan yang dikonfirmasi oleh Stochastic, CCI, MFI, dan RSI.

Cara terbaik adalah dengan membuat kelas terpisah yang diturunkan dari CExpertSignal untuk memeriksa pembentukan pola candlestick. Untuk mengkonfirmasi sinyal trading yang dihasilkan oleh pola candlestick, cukup tulis kelas yang diturunkan dari CCandlePattern dan tambahkan fitur yang diperlukan (misalnya, konfirmasi oleh osilator).

Di sini kita akan membahas sinyal yang didasarkan pada pola pembalikan "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) yang dikonfirmasi oleh indikator Stochastic. Modul sinyal trading ini didasarkan pada kelas CCandlePattern, yang merupakan contoh sederhana penggunaannya untuk membuat sinyal trading dengan pola candlestick.


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

1.1. Morning Star

Pola ini menunjukkan pembalikan dari tren turun, terdiri dari tiga candlestick (Gambar 1). Setelah candlestick hitam panjang, ada candlestick dengan tubuh kecil (warna tidak penting) yang berada di luar tubuh candlestick hitam. Tubuh kecil ini menunjukkan bahwa kekuatan bull dan bear seimbang, dan pasar siap untuk berubah arah.

Candlestick ketiga dari pola ini adalah candlestick bullish, tubuhnya tidak tumpang tindih dengan tubuh candlestick kedua, dan harga penutupan berada di dalam tubuh candlestick pertama (bearish). Candlestick hasil model ini juga terlihat pada Gambar 1.

Jika candlestick kedua adalah candlestick doji, model ini disebut "Morning Doji Star".

Gambar 1. Pola Candlestick Morning Star dan Morning Doji Star

Gambar 1. Pola Candlestick Morning Star dan Morning Doji Star

Identifikasi pola "Morning Star" dilakukan dalam metode CheckPatternMorningStar() dan CheckPatternMorningDoji() dari kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Morning Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morning Star
   if((Open(3)-Close(3)>AvgBody(1))
           && // candlestick bearish, tubuhnya lebih besar dari rata-rata
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // candlestick kedua memiliki tubuh kecil
      (Close(2)<Close(3))
                   && // penutupan candlestick kedua lebih rendah dari candlestick pertama
      (Open(2)<Open(3))
                     && // pembukaan candlestick kedua lebih rendah dari candlestick pertama
      (Close(1)>MidOpenClose(3)))
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Morning Doji Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morning Doji Star
   if((Open(3)-Close(3)>AvgBody(1)) && // candlestick bearish
      (AvgBody(2)<AvgBody(1*0.1)   && // candlestick kedua memiliki tubuh yang sangat kecil (doji)
      (Close(2)<Close(3))
               && // penutupan candlestick kedua lebih rendah dari candlestick pertama
      (Open(2)<Open(3))
                     && // pembukaan candlestick kedua lebih rendah dari candlestick pertama
      (Open(1)>Close(2))             && // gap naik pada candlestick terakhir
      (Close(1)>Close(2)))             return(true);
//---
   return(false);
  }

Metode CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_MORNING_DOJI) dari kelas CCandlePattern digunakan untuk memeriksa pembentukan pola "Morning Star" dan "Morning Doji Star".


1.2. Evening Star

Pola ini menunjukkan pembalikan dari tren naik, terdiri dari tiga candlestick (Gambar 2). Setelah candlestick putih panjang, ada candlestick dengan tubuh kecil (warna tidak penting) yang berada di luar tubuh candlestick putih. Tubuh kecil ini menunjukkan bahwa kekuatan bull dan bear seimbang, dan pasar siap untuk berubah arah.

Candlestick ketiga dari pola ini adalah candlestick bearish, tubuhnya tidak tumpang tindih dengan tubuh candlestick kedua, dan harga penutupan berada di dalam tubuh candlestick pertama (bullish). Candlestick hasil model ini juga terlihat pada Gambar 2.

Jika candlestick kedua adalah candlestick doji, model ini disebut "Evening Doji Star".

Gambar 2. Pola Candlestick Evening Star dan Evening Doji Star

Gambar 2. Pola Candlestick Evening Star dan Evening Doji Star

Berikut adalah metode untuk mengidentifikasi pola "Evening Star" dan "Evening Doji Star":

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Evening Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star
   if((Close(3)-Open(3)>AvgBody(1))
           && // candlestick bullish
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // candlestick kedua memiliki tubuh kecil
      (Close(2)>Close(3))
                   && // penutupan candlestick kedua lebih tinggi dari candlestick pertama
      (Open(2)>Open(3))
                     && // pembukaan candlestick kedua lebih tinggi dari candlestick pertama
      (Close(1)<MidOpenClose(3)))
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Evening Doji Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Evening Doji Star
   if((Close(3)-Open(3)>AvgBody(1)) && // candlestick bullish
      (AvgBody(2)<AvgBody(1*0.1)   && // candlestick kedua memiliki tubuh kecil (doji)
      (Close(2)>Close(3))
               && // penutupan candlestick kedua lebih tinggi dari candlestick pertama
      (Open(2)>Open(3))
                     && // pembukaan candlestick kedua lebih tinggi dari candlestick pertama
      (Open(1)<Close(2))             && // gap turun pada candlestick terakhir
      (Close(1)<Close(2)))             return(true);
//---
   return(false);
  }

Metode CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) dan CheckCandlestickPattern(CANDLE_PATTERN_EVENING_DOJI) dari kelas CCandlePattern digunakan untuk memeriksa pembentukan pola "Evening Star" dan "Evening Doji Star".


2. Sinyal Trading yang Dikonfirmasi oleh Indikator Stochastic

Sinyal trading untuk membuka posisi long atau short harus dikonfirmasi oleh osilator Stochastic. Garis %D harus lebih tinggi/rendah dari level kritis yang sesuai (30 atau 70).

Penutupan posisi terbuka bergantung pada nilai indikator %D. Ini dapat dilakukan dalam dua kasus:

  1. jika garis %D telah mencapai level kritis yang berlawanan (80 untuk posisi long dan 20 untuk posisi short)
  2. jika sinyal pembalikan tidak terkonfirmasi (ketika garis %D mencapai level berikutnya: 20 untuk posisi long dan 80 untuk posisi short)

Gambar 3. Pola Evening Star yang Dikonfirmasi oleh Indikator Stochastic

Gambar 3. Pola Evening Star yang Dikonfirmasi oleh Indikator Stochastic



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

2.1. Membuka posisi long/Menutup posisi short

  1. Pembentukan pola "Morning Star" harus dikonfirmasi oleh indikator Stochastic: StochSignal(1)<30 (nilai garis sinyal indikator Stochastic dari bar yang telah selesai harus kurang dari 30).

  2. Posisi short harus ditutup jika garis sinyal indikator Stochastic telah melintasi level 20 atau 80 ke arah atas.

//+------------------------------------------------------------------+
//| Memeriksa kondisi untuk masuk dan keluar dari pasar |
//| 1) Masuk pasar (membuka posisi long, hasil=80) |
//| 2) Keluar pasar (menutup posisi short, hasil=40) |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::LongCondition()
  {
   int result=0;
//--- idx dapat digunakan untuk menentukan mode kerja Expert Advisor
//--- idx=0 - dalam kasus ini EA memeriksa kondisi trading pada setiap tick
//--- idx=1 - dalam kasus ini EA memeriksa kondisi trading hanya pada bar berita
  int idx   =StartIndex();
//--- memeriksa kondisi untuk membuka posisi long
//--- pembentukan pola Morning Star dan garis sinyal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (StochSignal(1)<30))
     result=80;
//--- memeriksa kondisi untuk menutup posisi short
//--- crossover garis sinyal level jenuh beli/jenuh jual (ke bawah 20, ke atas 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- mengembalikan hasil
   return(result);
  }

2.2. Membuka posisi short/Menutup posisi long

  1. Pembentukan pola "Evening Star" harus dikonfirmasi oleh indikator Stochastic: StochSignal(1)>70 (nilai garis sinyal indikator Stochastic dari bar yang telah selesai harus lebih dari 70).

  2. Posisi long harus ditutup jika garis sinyal indikator Stochastic telah melintasi level 80 atau 20 ke arah bawah.

//+------------------------------------------------------------------+
//| Memeriksa kondisi untuk masuk dan keluar dari pasar |
//| 1) Masuk pasar (membuka posisi short, hasil=80) |
//| 2) Keluar pasar (menutup posisi long, hasil=40) |
//+------------------------------------------------------------------+
int CMS_ES_Stoch::ShortCondition()
  {
   int result=0;
//--- idx dapat digunakan untuk menentukan mode kerja Expert Advisor
//--- idx=0 - dalam kasus ini EA memeriksa kondisi trading pada setiap tick
//--- idx=1 - dalam kasus ini EA memeriksa kondisi trading hanya pada bar berita
  int idx   =StartIndex();
//--- memeriksa kondisi untuk membuka posisi short
//--- pembentukan Evening Star dan garis sinyal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (StochSignal(1)>70))
     result=80;
//--- memeriksa kondisi untuk menutup posisi long
//--- crossover garis sinyal level jenuh beli/jenuh jual (ke bawah 80, ke atas 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- mengembalikan hasil
   return(result);
  }


2.3. Membuat Expert Advisor Menggunakan MQL5 Wizard

Kelas CMS_ES_Stoch tidak termasuk dalam kelas Pustaka Standar, untuk menggunakannya, perlu mendownload file acms_es_stoch.mqh (lihat lampiran) dan menyimpannya di folder client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Hal yang sama juga harus dilakukan dengan file candlepatterns.mqh. Kamu dapat menggunakannya di MQL5 Wizard setelah merestart MetaEditor.

Untuk membuat Expert Advisor, jalankan MQL5 Wizard:

Gambar 4. Membuat Expert Advisor Menggunakan MQL5 Wizard

Gambar 4. Membuat Expert Advisor Menggunakan MQL5 Wizard

Mari kita tentukan nama Expert Advisor:

Gambar 5. Properti Umum Expert Advisor

Gambar 5. Properti Umum Expert Advisor

Setelah itu kita perlu memilih modul sinyal trading yang digunakan.

Gambar 6. Properti Sinyal Expert Advisor

Gambar 6. Properti Sinyal Expert Advisor

Dalam kasus kita hanya menggunakan satu modul sinyal trading.

Menambahkan modul Sinyal Berdasarkan Morning/Evening Stars oleh Stochastic:

Gambar 7. Properti Sinyal Expert Advisor

Gambar 7. Properti Sinyal Expert Advisor

Modul sinyal trading telah ditambahkan:

Gambar 8. Properti Sinyal Expert Advisor

Gambar 8. Properti Sinyal Expert Advisor

Kamu dapat memilih properti trailing apa pun, tetapi kita akan menggunakan "Trailing Stop tidak digunakan":

Gambar 9. Properti Trailing Expert Advisor

Gambar 9. Properti Trailing Expert Advisor

Mengenai properti manajemen uang, kita akan menggunakan "Trading dengan volume perdagangan tetap":

Gambar 10. Properti Manajemen Uang Expert Advisor

Gambar 10. Properti Manajemen Uang Expert Advisor

Dengan menekan tombol "Selesai", kita akan mendapatkan kode dari Expert Advisor yang dihasilkan, terletak di Expert_AMS_ES_Stoch.mq5, yang akan disimpan di terminal_data_folder\MQL5\Experts\.

Parameter input default dari Expert Advisor yang dihasilkan:

//--- input untuk sinyal utama
input int            Signal_ThresholdOpen   =10;     // Nilai ambang sinyal untuk membuka [0...100]
input int            Signal_ThresholdClose  =10     // Nilai ambang sinyal untuk menutup [0...100]
input double         Signal_PriceLevel      =0.0    // Level harga untuk mengeksekusi transaksi
input double         Signal_StopLevel       =50.0   // Level Stop Loss (dalam poin)
input double         Signal_TakeLevel       =50.0 // Level Take Profit (dalam poin)

harus diganti menjadi:

//--- input untuk sinyal utama
input int            Signal_ThresholdOpen   =40;     // Nilai ambang sinyal untuk membuka [0...100]
input int            Signal_ThresholdClose  =20     // Nilai ambang sinyal untuk menutup [0...100]
input double         Signal_PriceLevel      =0.0    // Level harga untuk mengeksekusi transaksi
input double         Signal_StopLevel       =0.0    // Level Stop Loss (dalam poin)
input double         Signal_TakeLevel       =0.0    // Level Take Profit (dalam poin)

Parameter input Signal_ThresholdOpen/Signal_ThresholdClose memungkinkan untuk menentukan level ambang untuk membuka dan menutup posisi.

Dalam kode metode LongCondition() dan ShortCondition() dari kelas sinyal trading, telah ditentukan nilai tetap dari ambang:

  • Membuka posisi: 80;
  • Menutup posisi: 40.

Expert Advisor yang dihasilkan oleh MQL5 Wizard membuka dan menutup posisi menggunakan "suara" dari modul sinyal trading. Suara dari modul utama (sebagai wadah, terdiri dari semua modul yang ditambahkan) juga digunakan, tetapi metode LongCondition() dan ShortCondition() selalu mengembalikan 0.

Hasil suara dari modul utama juga digunakan dalam rata-rata suara. Dalam kasus kita, kita memiliki: modul utama + 1 modul sinyal trading, jadi kita perlu mempertimbangkan fakta ini saat mengatur nilai ambang. Karena itu, ThresholdOpen dan ThresholdClose harus diatur sebagai 40=(0+80)/2 dan 20=(0+40)/2.

Nilai dari parameter input Signal_StopLevel dan Signal_TakeLevel diatur ke 0, yang berarti bahwa penutupan posisi hanya akan dilakukan ketika kondisi penutupan benar.


2.4. Hasil Backtesting Sejarah

Kita akan membahas backtesting dari Expert Advisor pada data historis (EURUSD H1, periode pengujian: 2000.01.01-2011.03.16, PeriodK=12, PeriodD=8, PeriodSlow=29, MA_period=4).

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

Gambar 11. Hasil Pengujian Expert Advisor, Berdasarkan Morning/Evening Stars + Stochastic

Gambar 11. Hasil Pengujian Expert Advisor, Berdasarkan Morning/Evening Stars + Stochastic


Set parameter input terbaik dapat ditemukan menggunakan Strategy Tester dari terminal klien MetaTrader 5.

Kode dari Expert Advisor yang dibuat oleh MQL5 Wizard dilampirkan dalam file expert_ams_es_stoch.mq5.


Daftar
Komentar 0