MQL5 Wizard: Strategi Isyarat Perdagangan Berdasarkan Crossover Harga dan MA dengan ADX

Mike 2011.01.11 01:50 24 0 0
Lampiran

MQL5 Wizard membolehkan anda mencipta kod untuk Sistem Trading secara automatik. Lihat Membuat Sistem Trading Sedia Ada dalam MQL5 Wizard untuk maklumat lanjut.

Kita akan membincangkan strategi yang berdasarkan crossover harga menggunakan indikator Moving Average (MA), yang disahkan oleh indikator ADX. Strategi ini dikenali sebagai "Isyarat Berdasarkan Crossover Harga dengan MA yang Disahkan oleh ADX" (ketika mencipta EA secara automatik di MQL5 Wizard).

Isyarat Perdagangan:

  • Beli: harga penutupan bar terakhir yang telah selesai lebih tinggi daripada moving average, dan moving average meningkat pada bar semasa dan terakhir yang telah selesai.
  • Jual: harga penutupan bar terakhir yang telah selesai lebih rendah daripada moving average, dan moving average menurun pada bar semasa dan terakhir yang telah selesai.
  • Untuk menapis isyarat palsu, ia memeriksa kekuatan trend (ADX>ADXmin) dan arah trend menggunakan Indeks Pergerakan Arah (DI+ dan DI-).

Strategi ini dilaksanakan dalam kelas CSignalADX_MA (ia perlu diletakkan di terminal_data_folder\MQL5\Include\Expert\Signal\SignalADX-MA.mqh).

Gambar 1. Isyarat perdagangan berdasarkan crossover harga dengan Moving Average, disahkan oleh ADX

Gambar 1. Isyarat perdagangan berdasarkan crossover harga dengan Moving Average, disahkan oleh ADX

Isyarat Perdagangan

Strategi perdagangan ini dilaksanakan dalam kelas CSignalADX_MA, yang mempunyai beberapa kaedah terpelihara untuk memudahkan akses kepada indikator dan nilai harga:

double   PlusADX(int ind)     // mengembalikan nilai baris DI+ bar
double   MainADX(int ind)     // mengembalikan nilai baris utama bar
double   MinusADX(int ind)    // mengembalikan nilai baris DI- bar
double   EMA(int ind)         // mengembalikan nilai moving average bar
double   Close(int ind)       // mengembalikan nilai harga penutupan bar
double   StateADX(int ind)    // mengembalikan perbezaan antara baris DI+ dan DI-
double   StateEMA(int ind)    // mengembalikan nilai positif jika EMA meningkat dan negatif jika menurun
double   StateClose(int ind)  // mengembalikan perbezaan antara harga penutupan dan moving average
Ciri implementasi ini adalah pemeriksaan tambahan kehadiran trend (menggunakan Indikator Pergerakan Arah). Ia membolehkan penapisan isyarat palsu dan memeriksa syarat perdagangan menggunakan nilai bar semasa (yang belum selesai).


1. Membuka posisi long

Keadaan untuk membuka posisi long:

  1. StateEMA(0)<0 dan StateEMA(1)>0: moving average meningkat pada bar semasa dan bar terakhir yang telah selesai;
  2. StateClose(1)>0: harga penutupan bar terakhir yang telah selesai lebih tinggi daripada moving average;
  3. MainADX(0)>minimum_ADX: nilai ADX bar semasa lebih besar daripada nilai minimum yang ditetapkan (untuk memeriksa kehadiran trend);
  4. StateADX(0)>0: DI+ lebih besar daripada DI- pada bar semasa.
//+------------------------------------------------------------------+
//| Memeriksa keadaan untuk membuka posisi long (beli)                     |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- keadaan 1: moving average meningkat pada bar semasa dan bar terakhir yang telah selesai 
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- keadaan 2: harga penutupan bar terakhir lebih tinggi daripada moving average 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- keadaan 3: nilai ADX bar semasa lebih besar daripada nilai minimum yang ditetapkan (threshold trend) 
   bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- keadaan 4: nilai DI+ lebih besar daripada DI- pada bar semasa
    bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- memeriksa semua keadaan
   return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }


2. Menutup posisi long

Keadaan untuk menutup posisi long:

  1. StateEMA(0)<0 dan StateEMA(1)<0: moving average menurun pada bar semasa dan bar terakhir yang telah selesai;
  2. StateClose(1)<0: harga penutupan bar terakhir lebih rendah daripada moving average;
  3. MainADX(0)>minimum_ADX: nilai ADX bar semasa lebih besar daripada nilai minimum yang ditetapkan (untuk memeriksa kehadiran trend);
  4. StateADX(0)<0: DI- lebih besar daripada DI+ pada bar semasa.
//+------------------------------------------------------------------+
//| Memeriksa keadaan untuk menutup posisi long                         |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseLong(double& price)
  {
//--- keadaan 1: moving average menurun pada bar semasa dan bar terakhir yang telah selesai 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- keadaan 2: harga penutupan bar terakhir lebih rendah daripada moving average 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- keadaan 3: nilai ADX bar semasa lebih besar daripada nilai minimum yang ditetapkan (threshold trend) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- keadaan 4: nilai DI- lebih besar daripada DI+ pada bar semasa
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
//--- memeriksa semua keadaan
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


3. Membuka posisi short

Keadaan untuk membuka posisi short adalah sama dengan keadaan menutup posisi long.

//+------------------------------------------------------------------+
//| Memeriksa keadaan untuk membuka posisi short (jual)                   |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
//--- keadaan 1: moving average menurun pada bar semasa dan bar terakhir yang telah selesai 
   bool Sell_Condition_1=(StateEMA(0)<0 && StateEMA(1)<0);
//--- keadaan 2: harga penutupan bar terakhir lebih rendah daripada moving average 
   bool Sell_Condition_2=(StateClose(1)<0);
//--- keadaan 3: nilai ADX bar semasa lebih besar daripada nilai minimum yang ditetapkan (threshold trend) 
   bool Sell_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- keadaan 4: nilai DI- lebih besar daripada DI- pada bar semasa
   bool Sell_Condition_4=(StateADX(0)<0);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- memeriksa semua keadaan
   return(Sell_Condition_1 && Sell_Condition_2 && Sell_Condition_3 && Sell_Condition_4);
  }


4. Menutup posisi short

Keadaan untuk menutup posisi short adalah sama dengan keadaan untuk membuka posisi long.

//+------------------------------------------------------------------+
//| Memeriksa keadaan untuk menutup posisi short                        |
//+------------------------------------------------------------------+
bool CSignalADX_MA::CheckCloseShort(double& price)
  {
//--- keadaan 1: moving average meningkat pada bar semasa dan bar terakhir yang telah selesai
   bool Buy_Condition_1=(StateEMA(0)>0 && StateEMA(1)>0);
//--- keadaan 2: harga penutupan bar terakhir lebih tinggi daripada moving average 
   bool Buy_Condition_2=(StateClose(1)>0);
//--- keadaan 3: nilai ADX bar semasa lebih besar daripada nilai minimum yang ditetapkan (threshold trend)
    bool Buy_Condition_3=(MainADX(0)>m_minimum_ADX);
//--- keadaan 4: nilai DI+ lebih besar daripada DI- pada bar semasa
   bool Buy_Condition_4=(StateADX(0)>0);
//---
   price=0.0;
//--- memeriksa semua keadaan
  return(Buy_Condition_1 && Buy_Condition_2 && Buy_Condition_3 && Buy_Condition_4);
  }

Mencipta Sistem Trading Menggunakan MQL5 Wizard

Untuk mencipta robot perdagangan berdasarkan strategi ini, anda perlu memilih ciri isyarat sebagai "Isyarat Berdasarkan Crossover Harga dengan MA yang Disahkan oleh ADX" dalam pilihan MQL5 Wizard:

Gambar 2. Pilih isyarat berdasarkan crossover harga dengan MA disahkan oleh ADX dalam MQL5 Wizard

Gambar 2. Pilih "Isyarat Berdasarkan Crossover Harga dengan MA yang Disahkan oleh ADX" dalam MQL5 Wizard

Seterusnya, anda perlu menentukan algoritma trailing stop yang diperlukan dan sistem pengurusan wang dan risiko. Kod Sistem Trading akan dihasilkan secara automatik, anda boleh menyusunnya dan mengujinya dalam Strategy Tester terminal klien MetaTrader 5.


Keputusan Ujian

Mari kita lihat pengujian balik Sistem Trading pada data sejarah (EURUSD H1, tempoh ujian: 1.1.2010-05.01.2011,  PeriodADX=33, MinimumADX=22, PeriodMA=39, StopLoss=400, TakeProfit=900).

Dalam penciptaan Sistem Trading, kami menggunakan volume tetap (Trading Fixed Lot, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Gambar 3. Keputusan uji balik sejarah Sistem Trading, berdasarkan crossover harga dengan MA disahkan oleh ADX

Gambar 3. Keputusan uji balik sejarah Sistem Trading, berdasarkan crossover harga dengan MA disahkan oleh ADX


Lampiran: Fail SignalADX-MA.mqh dengan kelas CSignalADX_MA mesti diletakkan di terminal_data_folder\MQL5\Include\Expert\Signal\.

Fail ma_crossover_adx.mq5 mengandungi kod Sistem Trading, yang dicipta menggunakan MQL5 Wizard.


Senarai
Komen 0