Strategi Perdagangan Menggunakan Tiga Purata Bergerak dengan MQL5 Wizard

Mike 2011.01.10 19:41 34 0 0
Lampiran

MQL5 Wizard membolehkan anda menghasilkan kod untuk EA secara automatik. Lihat Membuat EA Sedia Ada Menggunakan MQL5 Wizard untuk maklumat lanjut.

Dalam artikel ini, kita akan bincangkan strategi tren yang berasaskan tiga purata bergerak. Strategi ini dikenali sebagai "Isyarat Berdasarkan Tiga EMA". Untuk menentukan tren, ia menggunakan tiga purata bergerak yang diekspresikan secara eksponen: FastEMA, MediumEMA dan SlowEMA.

Isyarat Perdagangan:

  • Isyarat Beli: FastEMA > MediumEMA > SlowEMA (tren menaik).
  • Isyarat Jual: FastEMA < MediumEMA < SlowEMA (tren menurun).

Strategi ini diimplementasikan dalam kelas CSignal3EMA (fail signal3ema.mqh mesti diletakkan di terminal_data_folder\MQL5\Include\Expert\Signal\Signal3EMA.mqh).

Gambar 1. Isyarat perdagangan berdasarkan tiga purata bergerak

Gambar 1. Isyarat perdagangan berdasarkan tiga purata bergerak

Isyarat Perdagangan

Strategi perdagangan ini diimplementasikan dalam kelas CSignal3EMA, yang mempunyai beberapa kaedah terlindung untuk memudahkan akses kepada nilai tiga purata bergerak (Fast, Medium, Slow):

double  FastEMA(int ind)       // mengembalikan nilai Fast EMA bar
double  MediumEMA(int ind)     // mengembalikan nilai Medium EMA bar
double  SlowEMA(int ind)       // mengembalikan nilai Slow EMA bar
Nilai indikator untuk bar ke-0 (yang belum lengkap) mungkin berubah, jadi perlu melakukan pemeriksaan syarat perdagangan menggunakan data bar yang telah lengkap (dibentuk).

1. Membuka posisi panjang

Tren menaik ditentukan dengan syarat berikut: FastEMA > MediumEMA > SlowEMA:

  • FastEMA(1) > MediumEMA(1): Fast EMA lebih tinggi daripada Medium EMA (bar terakhir yang lengkap);
  • MediumEMA(2) > SlowEMA(1): Medium EMA lebih tinggi daripada Slow EMA (bar terakhir yang lengkap);
//+------------------------------------------------------------------+
//| Memeriksa syarat untuk membuka posisi panjang (beli) |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- memeriksa untuk tren menaik (pada bar terakhir yang lengkap): FastEMA(1) > MediumEMA(1) > SlowEMA(1)
    return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

2. Menutup posisi panjang

Tren menurun ditentukan dengan syarat berikut: FastEMA < MediumEMA < SlowEMA:

  • FastEMA(1) < MediumEMA(1): Fast EMA lebih rendah daripada Medium EMA (bar terakhir yang lengkap);
  • MediumEMA(2) < SlowEMA(1): Medium EMA lebih rendah daripada Slow EMA (bar terakhir yang lengkap);
//+------------------------------------------------------------------+
//| Memeriksa syarat untuk menutup posisi panjang |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseLong(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- memeriksa untuk tren menurun (pada bar terakhir yang lengkap): FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)1));
  }
Anda boleh meningkatkan penutupan posisi panjang: tidak perlu menunggu tren menurun, anda boleh menutup posisi panjang ketika datar, yang boleh ditentukan dengan syarat: FastEMA < MediumEMA > SlowEMA.

3. Membuka posisi pendek

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk membuka posisi pendek (jual) |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- memeriksa untuk tren menurun (pada bar terakhir yang lengkap): FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)1));

  }

4. Menutup posisi pendek

//+------------------------------------------------------------------+
//| Memeriksa syarat untuk menutup posisi pendek |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseShort(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- memeriksa untuk tren menaik (pada bar terakhir yang lengkap): FastEMA(1) > MediumEMA(1) > SlowEMA(1)
   return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

Anda boleh meningkatkan penutupan posisi pendek: tidak perlu menunggu tren menaik, anda boleh menutup posisi pendek ketika datar, yang boleh ditentukan dengan syarat: FastEMA > MediumEMA < SlowEMA.


Membuat EA Menggunakan MQL5 Wizard

Untuk membuat robot perdagangan berdasarkan strategi ini, anda perlu memilih ciri isyarat sebagai "Isyarat Berdasarkan Tiga EMA" dalam pilihan "Membuat EA Sedia Ada" di MQL5 Wizard:

Gambar 2. Pilih 'Isyarat Berdasarkan Tiga EMA' dalam MQL5 Wizard

Gambar 2. Pilih 'Isyarat Berdasarkan Tiga EMA' dalam MQL5 Wizard

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


Keputusan Ujian

Jom kita lihat ujian semula EA pada data sejarah (EURUSD H1, tempoh ujian: 1.1.2010-05.01.2011, FastPeriod=5, MediumPeriod=12, SlowPeriod=24, StopLoss=400, TakeProfit=900).

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

Gambar 3. Keputusan ujian semula EA, berdasarkan tiga EMA

Gambar 3. Keputusan ujian semula EA, berdasarkan tiga EMA

Lampiran: Fail Signal3EMA.mqh dengan kelas CSignal3EMA mesti diletakkan di terminal_data_folder\MQL5\Include\Expert\Signal.

Fail threeema.mq5 mengandungi kod EA yang dihasilkan menggunakan MQL5 Wizard.


Senarai
Komen 0