Beranda Perdagangan Sistem Postingan

MQL5 Wizard: Mengoptimalkan Sinyal Perdagangan dengan Morning/Evening Stars dan MFI

Lampiran
323.zip (6.46 KB, Unduh 2 kali)

Halo trader! Kali ini kita akan membahas tentang MQL5 Wizard, alat yang memudahkan kita untuk membuat Expert Advisor siap pakai berdasarkan kelas dari perpustakaan standar yang disertakan dengan terminal klien. Dengan alat ini, kita bisa dengan cepat memeriksa ide perdagangan kita hanya dengan membuat kelas sinyal perdagangan kita sendiri. Struktur kelas ini beserta contohnya dapat kita temukan di artikel MQL5 Wizard: Cara Membuat Modul Sinyal Perdagangan.

Konsep umumnya adalah kelas sinyal perdagangan diturunkan dari CExpertSignal. Selanjutnya, kita perlu menimpa metode virtual LongCondition() dan ShortCondition() dengan metode kita sendiri.

Ada sebuah buku berjudul "Strategi Trader Terbaik" (dalam bahasa Rusia) yang menjelaskan banyak strategi perdagangan. Kita akan fokus pada pola candlestick pembalikan, yang dikonfirmasi oleh beberapa indikator seperti Stochastic, CCI, MFI, dan RSI.

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

Di sini, kita akan mempertimbangkan sinyal berdasarkan pola candlestick "Morning Star/Evening Star" (Morning Doji Star/Evening Doji Star) yang dikonfirmasi oleh indikator MFI. Modul sinyal perdagangan ini didasarkan pada kelas CCandlePattern, yang merupakan contoh sederhana penggunaannya untuk menciptakan sinyal perdagangan dengan pola candlestick.

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

1.1. Morning Star

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

Candle ketiga dari pola ini adalah candle bullish, yang tubuhnya tidak tumpang tindih dengan tubuh candle kedua, dan harga penutupan berada di dalam tubuh candle pertama (bearish). Candle yang dihasilkan dari pola ini juga ditampilkan pada Gambar 1.

Jika candle kedua adalah candle doji, maka pola ini disebut "Morning Doji Star".

Fig. 1. Pola candlestick Morning Star dan Morning Doji Star

Fig. 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))
         && // candle bearish, tubuhnya lebih besar dari rata-rata candle
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // candle kedua memiliki tubuh kecil (kurang dari setengah rata-rata tubuh)
      (Close(2)<Close(3))                   && // penutupan candle kedua lebih rendah dari penutupan candle pertama
      (Open(2)<Open(3))                     && // pembukaan candle kedua lebih rendah dari pembukaan candle pertama
      (Close(1)>MidOpenClose(3)))                  // penutupan candle terakhir lebih tinggi dari tengah candle pertama
            return true;
//---
   return false;
} 
//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Morning Doji Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningDoji()
  {
//--- Morning Doji Star
   if((Open(3)-Close(3)>AvgBody(1)) && // candle bearish dengan tubuh lebih besar dari rata-rata candle
      (AvgBody(2)<AvgBody(1*0.1)   && // candle kedua memiliki tubuh yang sangat kecil (doji)
      (Close(2)<Close(3))           && // penutupan candle kedua lebih rendah dari penutupan candle pertama
      (Open(2)<Open(3))               && // pembukaan candle kedua lebih rendah dari pembukaan candle pertama
      (Open(1)>Close(2))                 && // ada gap naik di candle terakhir
      (Close(1)>Close(2)))                 // penutupan candle terakhir lebih tinggi dari penutupan candle kedua
      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 menandakan pembalikan dari tren naik, terdiri dari tiga candle (Gambar 2). Setelah sebuah candle putih panjang, ada candle (warna tidak penting) dengan tubuh kecil, yang berada di luar tubuh candle putih. Tubuh kecil pada candle menunjukkan bahwa kekuatan bull dan bear sama dan pasar siap untuk berubah tren.

Candle ketiga dari pola ini adalah candle bearish, yang tubuhnya tidak tumpang tindih dengan tubuh candle kedua, dan harga penutupan berada di dalam tubuh candle pertama (bullish). Candle yang dihasilkan dari pola ini juga ditampilkan pada Gambar 2.

Jika candle kedua adalah candle doji, maka pola ini disebut "Evening Doji Star".

Fig. 2. Pola candlestick Evening Star dan Evening Doji Star

Fig. 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))             && // candle bullish dengan tubuh lebih tinggi dari rata-rata tubuh
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && // candle kedua memiliki tubuh kecil (kurang dari setengah rata-rata)
      (Close(2)>Close(3))                   && // penutupan candle kedua lebih tinggi dari penutupan candle pertama
      (Open(2)>Open(3))                     && // pembukaan candle kedua lebih tinggi dari pembukaan candle pertama
      (Close(1)<MidOpenClose(3)))                  // penutupan candle terakhir lebih rendah dari tengah candle pertama
      return true;
//---
   return false;
} 
//+------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Evening Doji Star" |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningDoji()
  {
//--- Evening Doji Star
   if((Close(3)-Open(3)>AvgBody(1)) && // candle bullish dengan tubuh lebih tinggi dari rata-rata
      (AvgBody(2)<AvgBody(1)*0.1)   && // candle kedua memiliki tubuh yang sangat kecil (doji)
      (Close(2)>Close(3))           && // penutupan candle kedua lebih tinggi dari penutupan candle pertama
      (Open(2)>Open(3))               && // pembukaan candle kedua lebih tinggi dari pembukaan candle pertama
      (Open(1)<Close(2))                 && // ada gap turun di candle terakhir
      (Close(1)<Close(2)))                 // penutupan candle terakhir lebih rendah dari penutupan candle kedua
      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 Perdagangan yang Dikonfirmasi oleh Indikator MFI

Sinyal perdagangan untuk membuka posisi long atau short harus dikonfirmasi oleh indikator MFI. Nilai indikator MFI harus lebih rendah dari 40 (untuk posisi long) atau lebih tinggi dari 60 (untuk posisi short).

Penutupan posisi terbuka bergantung pada nilai indikator MFI. Ini dapat dilakukan dalam 2 kasus:

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

Gambar 3. Pola Morning Star yang dikonfirmasi oleh indikator MFI

Gambar 3. Pola "Morning Star" yang dikonfirmasi oleh indikator MFI


  • int CMS_ES_MFI::LongCondition() - memeriksa kondisi untuk membuka posisi long (mengembalikan 80) dan menutup posisi short (mengembalikan 40);
  • int CMS_ES_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 pada bar 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 (buka posisi long, hasil=80) |
//| 2) Keluar pasar (tutup posisi short, hasil=40) |
//+------------------------------------------------------------------+
int CMS_ES_MFI::LongCondition()
  {
   int result=0;
//--- idx dapat digunakan untuk menentukan mode kerja Expert Advisor
//--- idx=0 - dalam hal ini EA memeriksa kondisi perdagangan pada setiap tick
//--- idx=1 - dalam hal ini EA hanya memeriksa kondisi perdagangan pada bar berita
   int idx   =StartIndex();
//--- memeriksa kondisi untuk membuka posisi long
//--- pembentukan pola Morning Star dan MFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(1)<40))
     result=80;
//--- memeriksa kondisi untuk menutup posisi short
//--- crossover 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 "Evening Star" harus dikonfirmasi oleh indikator MFI: MFI(1)>60 (nilai indikator MFI pada bar 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 (buka posisi short, hasil=80) |
//| 2) Keluar pasar (tutup posisi long, hasil=40) |
//+------------------------------------------------------------------+
int CMS_ES_MFI::ShortCondition()
  {
   int result=0;
//--- idx dapat digunakan untuk menentukan mode kerja Expert Advisor
//--- idx=0 - dalam hal ini EA memeriksa kondisi perdagangan pada setiap tick
//--- idx=1 - dalam hal ini EA hanya memeriksa kondisi perdagangan pada bar berita
   int idx   =StartIndex();
//--- memeriksa kondisi untuk membuka posisi short
//--- pembentukan pola Evening Star dan MFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(1)>60))
     result=80;
//--- memeriksa kondisi untuk menutup posisi long
//--- crossover 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. Membuat Expert Advisor Menggunakan MQL5 Wizard

Kelas CMS_ES_MFI tidak termasuk dalam kelas Perpustakaan Standar, untuk menggunakannya, kita perlu mengunduh file ams_es_mfi.mqh (lihat lampiran) dan menyimpannya di folder data_terminal_klien\MQL5\Include\Expert\Signal\MySignals. Hal yang sama juga harus dilakukan dengan file acandlepatterns.mqh. Kita bisa 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 perdagangan yang digunakan.

Gambar 6. Properti sinyal Expert Advisor

Gambar 6. Properti sinyal Expert Advisor

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

Menambahkan modul "Sinyal berdasarkan Morning Star/Evening Star yang dikonfirmasi oleh MFI" dari sinyal perdagangan:

Gambar 7. Properti sinyal Expert Advisor

Gambar 7. Properti sinyal Expert Advisor

Modul sinyal perdagangan telah ditambahkan:

Gambar 8. Properti sinyal Expert Advisor

Gambar 8. Properti sinyal Expert Advisor

Kita 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 "Perdagangan dengan volume 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_MFI.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 kita untuk menentukan level ambang untuk membuka dan menutup posisi.

Dalam kode metode LongCondition() dan ShortCondition() dari kelas sinyal perdagangan, kita telah menentukan nilai tetap dari ambang:

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

Expert Advisor yang dihasilkan oleh MQL5 Wizard membuka dan menutup posisi menggunakan "suara" dari modul sinyal perdagangan. Suara dari modul utama (sebagai wadah, yang 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 perdagangan, jadi kita perlu mempertimbangkan fakta ini saat menetapkan nilai ambang. Oleh karena itu, ThresholdOpen dan ThresholdClose harus disetel menjadi 40=(0+80)/2 dan 20=(0+40)/2.

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


2.4. Hasil Backtesting Sejarah

Kita akan mempertimbangkan backtesting dari Expert Advisor pada data historis (EURUSD H1, periode pengujian: 2010.01.01-2011.03.16, PeriodMFI=49, MA_period=3).

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

Gambar 11. Hasil pengujian Expert Advisor, berdasarkan Morning/Evening Stars + MFI

Gambar 11. Hasil pengujian Expert Advisor, berdasarkan Morning/Evening Stars + MFI


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

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


Postingan terkait

Komentar (0)