MQL5 Wizard: Membuat EA dengan Sinyal Trading Berdasarkan Pola Candlestick Meeting Lines dan Stochastic

Mike 2011.03.24 02:45 65 0 0
Lampiran

Selamat datang di dunia MQL5! Jika kamu seorang trader yang ingin mengoptimalkan strategi tradingmu, MQL5 Wizard adalah alat yang tepat untuk membuat Expert Advisor (EA) yang siap digunakan. Dengan alat ini, kamu bisa cepat mengecek ide trading yang kamu miliki. Semua yang perlu kamu lakukan adalah membuat kelas sinyal tradingmu sendiri. Untuk informasi lebih lanjut, cek artikel MQL5 Wizard: Cara Membuat Modul Sinyal Trading.

Konsep umumnya adalah sebagai berikut: kelas sinyal trading diturunkan dari CExpertSignal. Selanjutnya, kamu perlu mengoverride metode LongCondition() dan ShortCondition() dengan metode milikmu sendiri.

Ada sebuah buku berjudul "Strategi Trader Terbaik" (dalam bahasa Rusia) yang membahas berbagai strategi trading, termasuk pola candlestick reversal yang dikonfirmasi oleh Stochastic, CCI, MFI, dan RSI oscillator.

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

Kali ini, kita akan membahas sinyal yang berdasarkan pada pola candlestick reversal "Bullish/Bearish Meeting Lines" yang dikonfirmasi oleh indikator Stochastic. Modul sinyal trading ini didasarkan pada kelas CCandlePattern dan merupakan contoh sederhana penggunaannya dalam menciptakan sinyal trading dengan pola candlestick.

1. Pola Candlestick "Meeting Lines" Reversal

1.1. Bullish Meeting Lines

Pola ini terdiri dari dua candlestick (bearish dan bullish) dengan harga penutupan yang sama (atau sangat dekat). Badan dari kedua candlestick harus lebih besar dari rata-rata panjang badan.

Pola "Bullish Meeting Lines" menandakan pembalikan dari tren penurunan.

Gambar 1. Pola

Gambar 1. Pola "Bullish Meeting Lines"

Pengenalan pola "Bullish Meeting Lines" diimplementasikan dalam metode CheckPatternBullishMeetingLines() dari kelas CCandlePattern:

//+--------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Bullish Meeting Lines" candlestick |            //+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- Bullish Meeting Lines
   if((Open(2)-Close(2)>AvgBody(1))              && // candlestick hitam panjang
     ((Close(1)-Open(1))>AvgBody(1))             && // candlestick putih panjang
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // doji close
      return(true);
//---
   return(false);
  }

Pola candlestick "Bullish Meeting Lines" diperiksa menggunakan metode CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) dari kelas CCandlePattern.

1.2. Bearish Meeting Lines

Pola ini terdiri dari dua candlestick (bullish dan bearish) dengan harga penutupan yang sama (atau sangat dekat). Badan dari kedua candlestick harus lebih besar dari rata-rata panjang badan.

Pola "Bearish Meeting Lines" menandakan pembalikan dari tren naik.

Gambar 2. Pola

Gambar 2. Pola "Bearish Meeting Lines"

Pengenalan pola "Bearish Meeting Lines" diimplementasikan dalam metode CheckPatternBearishMeetingLines() dari kelas CCandlePattern:

//+--------------------------------------------------------------------+
//| Memeriksa pembentukan pola "Bearish Meeting Lines" candlestick |//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- Bearish Meeting Lines
   if((Close(2)-Open(2)>AvgBody(1))             && // candlestick putih panjang
     ((Open(1)-Close(1))>AvgBody(1))             && // candlestick hitam panjang
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))  // doji close
      return(true);
//---
   return(false);
  }

Pola candlestick "Bearish Meeting Lines" diperiksa menggunakan metode CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) dari kelas CCandlePattern.

2. Sinyal Trading, Dikonfirmasi oleh Indikator Stochastic

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

Penutupan posisi terbuka tergantung pada nilai indikator %D. Hal ini dapat dilakukan dalam 2 kasus:

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

Gambar 3. Pola

Gambar 3. Pola "Bearish Meeting Lines", dikonfirmasi oleh indikator Stochastic

  • int CML_Stoch::LongCondition() - memeriksa kondisi untuk membuka posisi long (mengembalikan 80) dan menutup posisi short (mengembalikan 40);
  • int CML_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 "Bullish Meeting Lines" harus dikonfirmasi oleh indikator Stochastic: StochSignal(1)<30 (nilai garis sinyal dari indikator Stochastic pada bar yang telah selesai harus kurang dari 30).

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

//+------------------------------------------------------------------+
//| 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 CML_Stoch::LongCondition()
  {
   int result=0;
//--- idx dapat digunakan untuk menentukan mode kerja EA
//--- 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 Bullish Meeting Lines dan garis sinyal<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (StochSignal(1)<30))
     result=80;
//--- memeriksa kondisi untuk menutup posisi short
//--- persilangan garis sinyal level overbought/oversold (turun 20, naik 80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
//--- kembalikan hasil
   return(result);
  }

2.2. Membuka Posisi Short/Menutup Posisi Long

  1. Pembentukan pola "Bearish Meeting Lines" harus dikonfirmasi oleh indikatorm Stochastic: StochSignal(1)>70 (nilai garis sinyal dari indikator Stochastic pada bar yang telah selesai harus lebih dari 70).

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

//+------------------------------------------------------------------+
//| 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 CML_Stoch::ShortCondition()
  {
   int result=0;
//--- idx dapat digunakan untuk menentukan mode kerja EA
//--- 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 Bearish Meeting Lines dan garis sinyal>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (StochSignal(1)>70))
     result=80;
//--- memeriksa kondisi untuk menutup posisi long
//--- persilangan garis sinyal level overbought/oversold (turun 80, naik 20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
//--- kembalikan hasil
   return(result);
  }

2.3. Membuat Expert Advisor Menggunakan MQL5 Wizard

Kelas CML_Stoch tidak termasuk dalam kelas Standard Library, untuk menggunakannya, kamu perlu mengunduh file acml_stoch.mqh (lihat lampiran) dan menyimpannya di folder data_klien_terminal\MQL5\Include\Expert\Signal\MySignals. Lakukan hal yang sama dengan file candlepatterns.mqh. Kamu 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 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 Bullish/Bearish Meeting Lines yang Dikonfirmasi 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 bisa memilih properti trailing apapun, 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 trading 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, yang terletak di Expert_AML_Stoch.mq5, 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 threshold sinyal untuk membuka [0...100]
input int            Signal_ThresholdClose  =10     // Nilai threshold sinyal untuk menutup [0...100]
input double         Signal_PriceLevel      =0.0    // Tingkat harga untuk mengeksekusi transaksi
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 threshold sinyal untuk membuka [0...100]
input int            Signal_ThresholdClose  =20     // Nilai threshold sinyal untuk menutup [0...100]
input double         Signal_PriceLevel      =0.0    // Tingkat harga untuk mengeksekusi transaksi
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 threshold untuk membuka dan menutup posisi.

Dalam kode metode LongCondition() dan ShortCondition() dari kelas sinyal trading kita telah menentukan 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()nya 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 memperhitungkan fakta ini saat mengatur nilai threshold. Karena fakta ini, ThresholdOpen dan ThresholdClose harus diatur menjadi 40=(0+80)/2 dan 20=(0+40)/2.

Nilai parameter input Signal_StopLevel dan Signal_TakeLevel diatur ke 0, artinya 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: 2005.01.01-2010.03.16, PeriodK=6, PeriodD=3, PeriodSlow=36, MA_period=3).

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

Gambar 11. Hasil pengujian Expert Advisor, berdasarkan Bullish/Bearish Meeting Lines + Stochastic

Gambar 11. Hasil pengujian Expert Advisor, berdasarkan Bullish/Bearish Meeting Lines + Stochastic


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

Kode Expert Advisor yang dibuat oleh MQL5 Wizard dilampirkan dalam expert_aml_stoch.mq5.

Daftar
Komentar 0