MQL5 Wizard: Ciptakan Expert Advisor Berdasarkan Pola Candlestick dan MFI

Mike 2011.02.25 19:49 87 0 0
Lampiran

MQL5 Wizard adalah alat yang sangat berguna untuk membuat Expert Advisor (EA) siap pakai berdasarkan kelas Standard Library yang disertakan dalam terminal klien MetaTrader 5. 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.

Idenya sederhana: kelas sinyal trading diturunkan dari CExpertSignal. Kemudian, kamu perlu mengoverride metode LongCondition() dan ShortCondition() dengan metode milikmu sendiri.

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

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

Di sini, kita akan membahas sinyal yang berdasarkan pola candlestick pembalikan "Dark Cloud Cover" dan "Piercing Line", yang dikonfirmasi oleh indikator Market Facilitation Index (MFI). Modul sinyal trading ini didasarkan pada kelas CCandlePattern, dan ini adalah contoh sederhana penggunaannya untuk menciptakan sinyal trading dengan pola candlestick.


1. Pola Candlestick Pembalikan "Dark Cloud Cover" dan "Piercing Line"

1.1. Dark Cloud Cover

Ini adalah pola candlestick pembalikan bearish yang terjadi di akhir tren naik. Candlestick putih panjang terbentuk pada hari pertama, dan pada hari kedua terjadi gap ke atas. Namun, hari kedua ditutup di bawah titik tengah hari pertama.

Fig. 1. Pola candlestick 'Dark Cloud Cover'

Fig. 1. Pola candlestick "Dark Cloud Cover"

Pengenalan pola "Dark Cloud Cover" diimplementasikan dalam metode CheckPatternDarkCloudCover() dari kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola candlestick "Dark Cloud Cover"        |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- Dark Cloud Cover 
   if((Close(2)-Open(2)>AvgBody(1))  && // (candlestick putih panjang)
      (Close(1)<Close(2))            && // 
      (Close(1)>Open(2))             && // (tutup dalam tubuh sebelumnya)
      (MidOpenClose(2)>CloseAvg(1))  && // (tren naik)
      (Open(1)>High(2)))                // (pembukaan pada tinggi baru)
      return(true);
//---
   return(false);
  }

Metode CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) dari kelas CCandlePattern digunakan untuk memeriksa pembentukan pola candlestick "Dark Cloud Cover".


1.2. Piercing Line

Gap turun pada hari kedua memperpanjang tren turun. Namun, penutupan hari kedua berada di atas titik tengah tubuh hari pertama, ini menunjukkan kepada para bearish bahwa mungkin dasar sedang terbentuk. Aksi harga ini tidak terlalu terlihat jelas menggunakan grafik batang jika dibandingkan dengan grafik candlestick. Semakin dalam penutupan hari kedua ke tubuh hari pertama, semakin besar kemungkinan sinyal pembalikan akan berhasil.

Fig. 2. Pola candlestick 'Piercing Line'

Fig. 2. Pola candlestick "Piercing Line"

Pengenalan pola "Piercing Line" diimplementasikan dalam metode CheckPatternPiercingLine() dari kelas CCandlePattern:

//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola candlestick "Piercing Line"           |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- Piercing Line
   if((Close(1)-Open(1)>AvgBody(1)) && // (candlestick putih panjang)
      (Open(2)-Close(2)>AvgBody(1)) && // (candlestick hitam panjang)
      (Close(1)>Close(2))           && //  
      (Close(1)<Open(2))            && // (tutup di dalam tubuh sebelumnya) 
      (MidOpenClose(2)<CloseAvg(2)) && // (tren turun)
      (Open(1)<Low(2)))                // (pembukaan lebih rendah dari rendah sebelumnya) 
      return(true);
//---
   return(false);
  }

Metode CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) dari kelas CCandlePattern digunakan untuk memeriksa pembentukan pola candlestick "Piercing Line".


2. Sinyal Trading yang Dikonfirmasi oleh Indikator MFI

Sinyal trading untuk membuka posisi long atau short harus dikonfirmasi oleh indikator MFI. Nilai indikator MFI harus di bawah 40 (untuk posisi long) atau lebih dari 60 (untuk posisi short).

Penutupan posisi yang sudah dibuka tergantung pada nilai indikator MFI. Ini bisa dilakukan dalam 2 kasus:

  • Jika MFI telah mencapai level kritis yang berlawanan (70 untuk posisi long dan 30 untuk posisi short)
  • Jika sinyal pembalikan tidak terkonfirmasi (ketika indikator MFI mencapai level berikut: 30 untuk posisi long dan 70 untuk posisi short)

Fig. 3. Pola 'Dark Cloud Cover', Dikonfirmasi oleh Indikator MFI

Fig. 3. Pola "Dark Cloud Cover", dikonfirmasi oleh indikator MFI


  • int CDC_PL_MFI::LongCondition() - memeriksa kondisi untuk membuka posisi long (mengembalikan 80) dan menutup posisi short (mengembalikan 40);
  • int CDC_PL_MFI::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 MFI: MFI(1)<40 (nilai indikator MFI dari bar yang telah selesai terakhir harus kurang dari 40).

  2. Posisi short harus ditutup jika indikator MFI telah melewati level kritis ke atas (70 atau 30).

//+------------------------------------------------------------------+
//| 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 CDC_PL_MFI::LongCondition()
  {
   int result=0;
//--- idx dapat digunakan untuk menentukan mode kerja Expert Advisor
//--- idx=0 - dalam hal ini EA memeriksa kondisi trading pada setiap tick
//--- idx=1 - dalam hal ini EA memeriksa kondisi trading hanya pada bar berita
  int idx   =StartIndex();
//--- memeriksa kondisi untuk membuka posisi long
//--- pembentukan pola Piercing Line dan MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (MFI(1)<40))
     result=80;
//--- memeriksa kondisi untuk menutup posisi short
//--- persilangan garis sinyal level overbought/oversold (ke atas 30, ke atas 70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
//--- mengembalikan hasil
   return(result);
  }


2.2. Membuka Posisi Short/Menutup Posisi Long

  1. Pembentukan pola "Dark Cloud Cover" harus dikonfirmasi oleh indikator MFI: MFI(1)>60 (nilai indikator MFI dari bar yang telah selesai terakhir harus lebih dari 60).

  2. Posisi long harus ditutup jika indikator MFI telah melewati level kritis ke atas (70 atau 30).

//+------------------------------------------------------------------+
//| 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 CDC_PL_MFI::ShortCondition()
  {
   int result=0;
//--- idx dapat digunakan untuk menentukan mode kerja Expert Advisor
//--- idx=0 - dalam hal ini EA memeriksa kondisi trading pada setiap tick
//--- idx=1 - dalam hal ini EA memeriksa kondisi trading hanya pada bar berita
  int idx   =StartIndex();
//--- memeriksa kondisi untuk membuka posisi short
//--- pembentukan pola Dark Cloud Cover dan MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (MFI(1)>60))
     result=80;
//--- memeriksa kondisi untuk menutup posisi long
//--- persilangan garis sinyal level overbought/oversold (ke atas 70, ke bawah 30)
   if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
//--- mengembalikan hasil
   return(result);
  }


2.3. Menciptakan Expert Advisor Menggunakan MQL5 Wizard

Kelas CDC_PL_MFI tidak disertakan dalam kelas Standard Library, untuk menggunakannya, kamu perlu mengunduh file adc_pl_mfi.mqh (lihat lampiran) dan menyimpannya di folder client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Hal yang sama harus dilakukan dengan file acandlepatterns.mqh. Kamu bisa menggunakannya di MQL5 Wizard setelah merestart MetaEditor.

Untuk membuat Expert Advisor, luncurkan MQL5 Wizard:

Fig. 4. Membuat Expert Advisor menggunakan MQL5 Wizard

Fig. 4. Membuat Expert Advisor menggunakan MQL5 Wizard

Mari kita tentukan nama Expert Advisor:

Fig. 5. Properti umum dari Expert Advisor

Fig. 5. Properti umum dari Expert Advisor

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

Fig. 6. Properti sinyal dari Expert Advisor

Fig. 6. Properti sinyal dari Expert Advisor

Dalam kasus kita, kita hanya menggunakan satu modul sinyal trading.

Menambahkan modul Sinyal Berdasarkan Dark Cloud Cover/Piercing Line yang Dikonfirmasi oleh MFI:

Fig. 7. Properti sinyal dari Expert Advisor

Fig. 7. Properti sinyal dari Expert Advisor

Modul sinyal trading telah ditambahkan:

Fig. 8. Properti sinyal dari Expert Advisor

Fig. 8. Properti sinyal dari Expert Advisor

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

Fig. 9. Properti trailing dari Expert Advisor

Fig. 9. Properti trailing dari Expert Advisor

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

Fig. 10. Properti manajemen uang dari Expert Advisor

Fig. 10. Properti manajemen uang dari Expert Advisor

Dengan menekan tombol "Selesai", kita akan mendapatkan kode dari Expert Advisor yang dihasilkan, yang terletak di Expert_ADC_PL_MFI.mq5, dan 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    // Tingkat harga untuk mengeksekusi perdagangan
input double         Signal_StopLevel       =50.0   // Tingkat Stop Loss (dalam poin)
input double         Signal_TakeLevel       =50.0    // Tingkat 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    // Tingkat harga untuk mengeksekusi perdagangan
input double         Signal_StopLevel       =0.0    // Tingkat Stop Loss (dalam poin)
input double         Signal_TakeLevel       =0.0    // Tingkat 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, kita telah menetapkan nilai tetap dari threshold:

  • Buka posisi: 80;
  • Tutup 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() miliknya selalu mengembalikan 0.

Hasil suara dari modul utama juga digunakan dalam perhitungan rata-rata suara. Dalam kasus kita, modul utama + 1 modul sinyal trading, sehingga kita perlu mempertimbangkan fakta ini saat menetapkan nilai threshold. Karena fakta ini, ThresholdOpen dan ThresholdClose harus diatur menjadi 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 terpenuhi.


2.4. Hasil Backtesting Sejarah

Mari kita lihat backtesting dari Expert Advisor pada data historis (EURUSD H1, periode pengujian: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=11).

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

Fig. 11. Hasil pengujian dari Expert Advisor, berdasarkan Dark Cloud Cover/Piercing Line + MFI

Fig. 11. Hasil pengujian dari Expert Advisor, berdasarkan Dark Cloud Cover/Piercing Line + MFI


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

Kode dari Expert Advisor yang dibuat oleh MQL5 Wizard terlampir dalam expert_adc_pl_mfi.mq5.


Daftar
Komentar 0