Beranda Perdagangan Sistem Postingan

Strategi Trading dengan MQL5 Wizard: Sinyal Berdasarkan Crossover Dua EMA dan Filter Waktu Intraday

Lampiran
264.zip (3.83 KB, Unduh 0 kali)

MQL5 Wizard memungkinkan kita untuk membuat kode Expert Advisor (EA) secara otomatis. Untuk detail lebih lanjut, lihat artikel tentang Membuat Expert Advisor Siap Pakai di MQL5 Wizard.

Sinyal trading dari strategi ini didasarkan pada dua moving average yang dijelaskan dalam MQL5 Wizard - Sinyal Trading Berdasarkan Crossover Dua Exponentially Smoothed Moving Averages. Moving averages efektif saat tren berlangsung, tetapi di sisi lain dapat memberikan banyak sinyal palsu. Salah satu cara untuk meningkatkan strategi ini adalah dengan menggunakan filter waktu (misalnya, membuka posisi baru saat sesi Eropa di FOREX).

Di sini, kita akan membahas strategi yang didasarkan pada crossover dua Exponentially Smoothed Moving Averages (fast EMA dan slow EMA) dengan filter waktu intraday. Strategi ini disebut "Sinyal Berdasarkan Crossover Dua EMA dengan Filter Waktu Intraday" (saat membuat EA secara otomatis di MQL5 Wizard).

Sinyal Trading:

  • Buka posisi long: Fast EMA crossover ke atas slow EMA dan kondisi filter waktu intraday tidak terpenuhi.
  • Buka posisi short: Fast EMA crossover ke bawah slow EMA dan kondisi filter waktu intraday tidak terpenuhi.

Strategi ini diimplementasikan dalam kelas CSignal2EMA_ITF.

Filtrasi sinyal berdasarkan periode waktu yang ditentukan dilakukan dalam kelas CSignalITF. Sebagai contoh penggunaannya, kita akan mempertimbangkan kelas CSignal2EMA_ITF (yang mengandung objek kelas CSignalITF).

Sistem trading ini didasarkan pada pending order, dengan level harga yang dihitung berdasarkan nilai moving average dan ATR (Average True Range) digunakan.

Gambar 1. Sinyal trading berdasarkan crossover dua EMA dengan filter waktu intraday

Gambar 1. Sinyal trading berdasarkan crossover dua EMA dengan filter waktu intraday

Sinyal Trading

Strategi trading ini diimplementasikan dalam CSignal2EMA_ITF, yang memiliki beberapa metode terlindungi untuk mempermudah akses ke nilai indikator:

 double  FastEMA(int ind)      // mengembalikan nilai fast EMA dari bar
double  SlowEMA(int ind)      // mengembalikan nilai slow EMA dari bar
double  StateFastEMA(int ind) // mengembalikan nilai positif/negatif jika fast EMA meningkat/menurun
double  StateSlowEMA(int ind) // mengembalikan nilai positif/negatif jika slow EMA meningkat/menurun
double  StateEMA(int ind)     // mengembalikan selisih antara fast dan slow EMA
double  ATR(int ind)          // mengembalikan nilai ATR dari bar


Fitur dari sistem ini adalah sebagai berikut: trading tergantung pada parameter input Limit. Berdasarkan tanda dari nilai ini, ada beberapa kasus:

  1. Limit>0. Akan masuk pada pergerakan balik ketika terjadi breakdown palsu dari moving average pada harga yang lebih baik daripada harga pasar (Buy Limit dan Sell Limit akan ditempatkan tergantung pada sinyal trading)
  2. Limit<0. Akan masuk ke arah pergerakan harga (Buy Stop dan Sell Stop akan ditempatkan tergantung pada sinyal trading).
  3. Limit=0. Dalam kasus ini, trading akan dilakukan menggunakan harga pasar.


1. Buka posisi long

Sistem ini memeriksa kondisi untuk membuka posisi long: jika perbedaan antara fast dan slow EMA pada bar terakhir yang sudah selesai telah berubah tanda dari "-" ke "+" (StateEMA(1)>0 && StateEMA(2)<0).

Selanjutnya, sistem memeriksa kondisi filter waktu intraday dengan memanggil metode CheckOpenLong() dari kelas CSignalITF. Jika trading diizinkan, maka akan dihitung level harga dasar (nilai moving average) dan nilai rentang ATR dari bar terakhir yang sudah selesai.

Bergantung pada tanda dari parameter input Limit, sistem akan menempatkan pending order buy. Harga order, level Take Profit, dan Stop Loss dihitung relatif terhadap level harga dasar (dalam unit ATR). Waktu kedaluwarsa order ditentukan (dalam bar) oleh parameter input Expiration.

//+------------------------------------------------------------------+
//| Memeriksa kondisi untuk membuka posisi long (buy)              |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) 
  {  
   if(!(StateEMA(1)>0 && StateEMA(2)<0))                     return(false);  
   if(!m_time_filter.CheckOpenLong(price,sl,tp,expiration)) return(false);  
//---
   double ema=SlowEMA(1);  
   double atr=ATR(1);  
   double spread=m_symbol.Ask()-m_symbol.Bid();  
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);  
   sl   =m_symbol.NormalizePrice(price+m_stop_loss*atr);  
   tp   =m_symbol.NormalizePrice(price-m_take_profit*atr);  
   expiration+=m_expiration*PeriodSeconds(m_period);  
//---
   return(true);  
  }

2. Tutup posisi long

Dalam kasus ini, fungsi yang memeriksa kondisi untuk menutup posisi long selalu mengembalikan nilai false, yaitu diasumsikan bahwa posisi long akan ditutup oleh Take Profit atau Stop Loss. Jika perlu, Anda dapat menulis kode sendiri untuk implementasi metode ini.

//+------------------------------------------------------------------+
//| Memeriksa kondisi untuk menutup posisi long                     |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseLong(double& price) 
  {  
   return(false);  
  }


3. Buka posisi short

Sistem memeriksa kondisi untuk membuka posisi short: jika perbedaan antara fast dan slow EMA pada bar terakhir yang sudah selesai telah berubah tanda dari "+" ke "-" (StateEMA(1)<0 && StateEMA(2)>0).

Selanjutnya, sistem memeriksa kondisi filter waktu intraday dengan memanggil metode CheckOpenLong() dari kelas CSignalITF. Jika trading diizinkan, maka akan dihitung level harga dasar (nilai moving average) dan nilai rentang ATR dari bar terakhir yang sudah selesai.

Bergantung pada tanda dari parameter input Limit, sistem akan menempatkan pending order sell. Harga order, level Take Profit, dan Stop Loss dihitung relatif terhadap level harga dasar (dalam unit ATR). Waktu kedaluwarsa order ditentukan (dalam bar) oleh parameter input Expiration.

//+------------------------------------------------------------------+
//| Memeriksa kondisi untuk membuka posisi short (sell)            |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) 
  {  
   if(!(StateEMA(1)<0 && StateEMA(2)>0))                     return(false);  
   if(!m_time_filter.CheckOpenShort(price,sl,tp,expiration)) return(false);  
//---
   double ema=SlowEMA(1);  
   double atr=ATR(1);  
//---
   price      =m_symbol.NormalizePrice(ema+m_limit*atr);  
   sl         =m_symbol.NormalizePrice(price+m_stop_loss*atr);  
   tp         =m_symbol.NormalizePrice(price-m_take_profit*atr);  
   expiration+=m_expiration*PeriodSeconds(m_period);  
//---
   return(true);  
  }

4. Tutup posisi short

Dalam kasus ini, fungsi yang memeriksa kondisi untuk menutup posisi short selalu mengembalikan nilai false, yaitu diasumsikan bahwa posisi akan ditutup oleh Take Profit atau Stop Loss. Jika perlu, Anda dapat menulis kode sendiri untuk implementasi metode ini.

//+------------------------------------------------------------------+
//| Memeriksa kondisi untuk menutup posisi short                    |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseShort(double& price) 
  {  
   return(false);  
  }


5. Trailing Stop dari Pending Order Buy

Expert Advisor akan melakukan trailing pada pending orders tergantung pada nilai moving average saat ini dan ATR.

Sistem trading ini akan menempatkan pending orders tergantung pada sinyal trading. Jika order berhasil ditempatkan, sistem akan melakukan trailing pada pending order sepanjang moving average. Order akan dieksekusi jika harga pasar mencapai harga order.
//+--------------------------------------------------------------------+
//| Memeriksa kondisi untuk memodifikasi pending order buy            |
//+--------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderLong(COrderInfo* order,double& price) 
  {  
//--- periksa
   if(order==NULL) return(false);  
//---
   double ema=SlowEMA(1);  
   double atr=ATR(1);  
   double spread=m_symbol.Ask()-m_symbol.Bid();  
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);  
//---
   return(true);  
  }


6. Trailing Stop dari Pending Order Sell

Expert Advisor akan melakukan trailing pada pending orders tergantung pada nilai moving average saat ini dan ATR.

Order akan dieksekusi jika harga pasar mencapai harga order.

//+--------------------------------------------------------------------+
//| Memeriksa kondisi untuk memodifikasi pending order sell           |
//+--------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderShort(COrderInfo* order,double& price) 
  {  
//--- periksa
   if(order==NULL) return(false);  
//---
   double ema=SlowEMA(1);  
   double atr=ATR(1);  
//---
   price=m_symbol.NormalizePrice(ema+m_limit*atr);  
//---
   return(true);  
  }

Membuat Expert Advisor Menggunakan MQL5 Wizard

Untuk membuat robot trading berdasarkan strategi ini, Anda perlu memilih properti sinyal sebagai "Sinyal Berdasarkan Crossover Dua EMA dengan Filter Waktu Intraday" di opsi "Membuat Expert Advisor Siap Pakai" dari MQL5 Wizard:

Gambar 2. Pilih 'Sinyal Berdasarkan Crossover Dua EMA dengan Filter Waktu Intraday' di MQL5 Wizard

Gambar 2. Pilih 'Sinyal Berdasarkan Crossover Dua EMA dengan Filter Waktu Intraday' di MQL5 Wizard

Selanjutnya, Anda harus menentukan algoritma trailing stop yang diperlukan dan sistem manajemen uang dan risiko. Kode Expert Advisor akan dibuat secara otomatis, Anda dapat mengkompilasinya dan mengujinya di Strategy Tester dari terminal klien MetaTrader 5.


Hasil Pengujian

Mari kita lihat pengujian balik dari Expert Advisor pada data historis (EUenSD H1, periode pengujian: 1.1.2010-05.01.2011, PeriodFastEMA=5, PeriodSlowEMA=30, PeriodATR=7, Limit=1.2, StopLoss=5, TakeProfit=8, Expiration=4, GoodMinuteOfHour=-1, BadMinutesOfHour=0, GoodHourOfDay=-1, BadHoursOfDay=0, GoodDayOfWeek=-1, BadDaysOfWeek=0).

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

Gambar 3. Hasil Pengujian dari Expert Advisor dengan sinyal trading, berdasarkan crossover dua EMA tanpa penggunaan filter ITF

Gambar 3. Hasil Pengujian dari Expert Advisor dengan sinyal trading, berdasarkan crossover dua EMA tanpa penggunaan filter ITF

Filter intraday tidak digunakan, sehingga terdapat banyak sinyal palsu. Sinyal trading dapat diperbaiki jika kita menganalisis hasil transaksi berdasarkan jam trading.

Dalam kasus kami, kami menemukan bahwa crossover dua EMA memberikan banyak sinyal palsu mulai dari pukul 6:00 hingga 23:59. Kita dapat menentukan filter waktu intraday dengan mengatur parameter filternya.

Misalnya, kita dapat menentukan filter waktu yang memungkinkan untuk membuka posisi hanya dari pukul 0:00 hingga 5:59. Ini dapat dilakukan dengan mengatur nilai BadHoursOfDay=16777152=111111111111111111000000b. Semua jam trading lainnya adalah "buruk", sehingga lebih baik melarang pembukaan posisi baru dari pukul 6:00 hingga akhir hari.

Jika kita mengatur nilai BadHoursOfDay=16777152, kita akan memfilter banyak sinyal palsu:

Gambar 4. Hasil Pengujian dari Expert Advisor dengan sinyal trading, berdasarkan crossover dua EMA dengan filter waktu (BadHoursofDay=16777152)

Gambar 4. Hasil Pengujian dari Expert Advisor dengan sinyal trading, berdasarkan crossover dua EMA dengan filter waktu (BadHoursofDay=16777152)


CSignalITF menyediakan banyak fitur filtrasi waktu lainnya (tinggal tentukan "jam baik" dan "jam buruk" dalam satu jam, jam dalam sehari, hari dalam seminggu).

Penggunaan filter waktu memungkinkan untuk meningkatkan sinyal trading dan mempertimbangkan dinamika pasar (misalnya, fitur sesi trading).

Lampiran: Signal2EMA-ITF.mqh dengan kelas CSignal2EMA_ITF harus ditempatkan di terminal_data_folder\MQL5\Include\Expert\Signal folder.

File expert_2ema_itf.mq5 berisi kode Expert Advisor yang dibuat menggunakan MQL5 Wizard.


Postingan terkait

Komentar (0)