Menggunakan MQL5 Wizard untuk Menjana Isyarat Dagangan Berdasarkan Indikator Alligator

Mike 2011.01.15 03:35 33 0 0
Lampiran

MQL5 Wizard membolehkan anda mencipta penasihat pakar secara automatik (EA) tanpa memerlukan kemahiran pengaturcaraan (rujuk MQL5 Wizard: Mencipta Penasihat Pakar Tanpa Pengaturcaraan).

Hari ini kita akan membincangkan tentang isyarat dagangan yang berdasarkan indikator teknikal Alligator, yang diperkenalkan oleh B. Williams dalam bukunya "Trading Chaos". Strategi ini dikenali sebagai "Isyarat Berdasarkan Alligator" ketika mencipta EA secara automatik dalam MQL5 Wizard.

Sistem ini berasaskan tiga purata bergerak (Lips, Teeth dan Jaw), dan pengayun yang dikira berdasarkan perbezaan antara garis-garis tersebut. Isyarat dagangan dijana selepas persilangan garis Alligator, bergantung kepada arah aliran yang ditentukan oleh urutan garis-garis tersebut. Dalam kes aliran menaik, garis Lips (dengan tempoh minimum) adalah yang tertinggi, diikuti oleh garis Teeth, dan yang terendah adalah garis Jaw. Keadaan yang sama tetapi bertentangan berlaku untuk aliran menurun.

Isyarat Dagangan:

  • Buka posisi long: persilangan garis Alligator dan peningkatan jarak antara mereka dalam kes aliran menaik;
  • Tutup posisi long: persilangan menaik garis Lips dengan garis Jaw;
  • Buka posisi short: persilangan garis Alligator dan peningkatan jarak antara mereka dalam kes aliran menurun;
  • Tutup posisi short: persilangan menurun garis Lips dengan garis Jaw;

Strategi ini dilaksanakan dalam kelas CSignalAlligator.

Gambar 1. Isyarat dagangan berdasarkan indikator teknikal Alligator

Gambar 1. Isyarat dagangan berdasarkan indikator teknikal Alligator


Isyarat Dagangan

Strategi dagangan ini dilaksanakan dalam CSignalAlligator, yang mempunyai beberapa kaedah terpelihara untuk memudahkan akses kepada nilai indikator:

double   Jaw(int ind)              // mengembalikan nilai garis Jaw bar 
double  Teeth(int ind)           // mengembalikan nilai garis Teeth bar
double  Lips(int ind)            // mengembalikan nilai garis Lips bar
double  LipsTeethDiff(int ind)   // mengembalikan perbezaan antara garis Lips dan Teeth
double  TeethJawDiff(int ind)    // mengembalikan perbezaan antara garis Teeth dan Jaw
double  LipsJawDiff(int ind)     // mengembalikan perbezaan antara garis Lips dan Jaw
bool     CheckCross();           // digunakan untuk memeriksa persilangan garis Alligator


1. Buka Posisi Long

Pemeriksaan syarat dagangan mempunyai beberapa ciri yang disebabkan oleh pergeseran garis Lips, Teeth dan Jaw.

Syarat untuk membuka posisi long:

  • CheckCross digunakan untuk menentukan persilangan dan peningkatan perbezaan antara garis;
  • LipsTeethDiff(-2)>=LipsTeethDiff(-1) dan LipsTeethDiff(-1)>=LipsTeethDiff(0); memeriksa peningkatan perbezaan antara garis Lips dan Teeth;
  • LipsTeethDiff(0)>=0.0; garis Lips lebih tinggi daripada garis Teeth;
  • TeethJawDiff(-2) >=TeethJawDiff(-1) dan TeethJawDiff(-1) >=TeethJawDiff(0); memeriksa peningkatan perbezaan antara garis Teeth dan Jaw;
  • TeethJawDiff(0) >=0.0; garis Teeth lebih tinggi daripada garis Jaw.
//+------------------------------------------------------------------+
//| Memeriksa syarat untuk membuka posisi long (beli) |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)>=LipsTeethDiff(-1) && LipsTeethDiff(-1)>=LipsTeethDiff(0) && LipsTeethDiff(0)>=0.0 &&
      TeethJawDiff(-2) >=TeethJawDiff(-1)  && TeethJawDiff(-1) >=TeethJawDiff(0)  && TeethJawDiff(0) >=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


2. Tutup Posisi Long

Syarat untuk menutup posisi long (perhatikan pergeseran garis):

  • LipsTeethDiff(-1)<0; garis Lips dari bar seterusnya (kerana pergeseran) lebih rendah daripada garis Teeth;
  • LipsTeethDiff(0)>=0; garis Lips dari bar semasa adalah lebih tinggi/sama dengan garis Teeth;
  • LipsTeethDiff(1)>0; garis Lips dari bar sebelumnya lebih tinggi daripada garis Teeth.
//+------------------------------------------------------------------+
//| Memeriksa syarat untuk menutup posisi long |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)<0 && LipsTeethDiff(0)>=0 && LipsTeethDiff(1)>0);
  }


3. Buka Posisi Short

Syarat untuk membuka posisi short:

  • CheckCross digunakan untuk menentukan persilangan dan peningkatan perbezaan antara garis;
  • LipsTeethDiff(-2)<=LipsTeethDiff(-1) dan LipsTeethDiff(-1)<=LipsTeethDiff(0); memeriksa peningkatan perbezaan antara garis Lips dan Teeth;
  • LipsTeethDiff(0)<=0.0; garis Lips dari bar semasa lebih rendah daripada garis Teeth;
  • TeethJawDiff(-2)<=TeethJawDiff(-1) dan TeethJawDiff(-1)<=TeethJawDiff(0); memeriksa peningkatan perbezaan antara garis Teeth dan Jaw;
  • TeethJawDiff(0) <=0.0; garis Teeth dari bar semasa lebih rendah daripada garis Jaw;
//+------------------------------------------------------------------+
//| Memeriksa syarat untuk membuka posisi short (jual) |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(CheckCross()) return(false);
//---
   price=0.0;
   sl   =0.0;
   tp   =0.0;
//---
   if(LipsTeethDiff(-2)<=LipsTeethDiff(-1) && LipsTeethDiff(-1)<=LipsTeethDiff(0) && LipsTeethDiff(0)<=0.0 &&
      TeethJawDiff(-2) <=TeethJawDiff(-1)  && TeethJawDiff(-1) <=TeethJawDiff(0)  && TeethJawDiff(0) <=0.0)
      m_crossed=true;
//---
   return(m_crossed);
  }


4. Tutup Posisi Short

Syarat untuk menutup posisi short:

  • LipsTeethDiff(-1)>0; garis Lips dari bar seterusnya (kerana pergeseran) lebih tinggi daripada garis Teeth;
  • LipsTeethDiff(0)<=0; garis Lips dari bar semasa lebih rendah/sama dengan garis Teeth;
  • LipsTeethDiff(1)<0; garis Lips dari bar sebelumnya lebih rendah daripada garis Teeth.
//+------------------------------------------------------------------+
//| Memeriksa syarat untuk menutup posisi short |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0);
  }

Mencipta Penasihat Pakar Menggunakan MQL5 Wizard

Untuk mencipta robot dagangan berdasarkan strategi ini, anda perlu memilih sifat isyarat sebagai "Isyarat Berdasarkan Alligator" dalam pilihan "Mencipta Penasihat Pakar Sedia Ada" di MQL5 Wizard:

Gambar 2. Pilih

Gambar 2. Pilih "Isyarat Berdasarkan Alligator" dalam MQL5 Wizard

Seterusnya, anda perlu menentukan algoritma trailing stop yang diperlukan dan sistem pengurusan wang dan risiko. Kod Penasihat Pakar akan dijana secara automatik, anda boleh menyusunnya dan mengujinya dalam Strategy Tester di terminal MetaTrader 5.


Keputusan Ujian

Mari kita lihat ujian belakang Penasihat Pakar menggunakan data sejarah (EURUSD H1, tempoh ujian: 1.1.2010-05.01.2011, JawPeriod=13, JawShift=8, TeethPeriod=8, TeethShift=5, LipsPeriod=5, LipsShift=3, MaMethod=2, Applied=5, CrossMeasure=5).

Dalam penciptaan Penasihat Pakar ini, kami menggunakan volum tetap (Dagangan Lot Tetap, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Gambar 3. Keputusan Ujian Penasihat Pakar dengan isyarat dagangan berdasarkan indikator Alligator

Gambar 3. Keputusan Ujian Penasihat Pakar dengan isyarat dagangan berdasarkan indikator Alligator


Keuntungan dapat ditingkatkan jika anda menggunakan penapisan dagangan dan mengambil kira ciri-ciri pasaran, bergantung pada masa. Kelas CSignalITF akan membolehkan anda menambah penapis masa intraday. Masa terbaik boleh didapati menggunakan Strategy Tester di terminal MetaTrader 5. Lihat contoh dalam MQL5 Wizard - Isyarat Dagangan Berdasarkan Persilangan Dua EMA dengan penapis masa intraday.


Lampiran: Fail SignalAlligator.mqh dengan kelas CSignalAlligator mesti diletakkan di folder terminal_data_folder\MQL5\Include\Expert\Signal.

Fail expert_alligator.mq5 mengandungi kod Penasihat Pakar yang dicipta menggunakan MQL5 Wizard.


Senarai
Komen 0