Beranda Perdagangan Sistem Postingan

Strategi Trading Alligator: Sinyal Otomatis dengan MQL5 Wizard

Lampiran
267.zip (3.41 KB, Unduh 0 kali)

MQL5 Wizard memungkinkan kita untuk membuat Expert Advisor secara otomatis (lihat juga MQL5 Wizard: Membuat Expert Advisors Tanpa Pemrograman).

Saatnya kita membahas sinyal trading yang didasarkan pada indikator teknikal Alligator, yang diperkenalkan oleh B. Williams dalam bukunya "Trading Chaos". Strategi ini dikenal sebagai Sinyal Berdasarkan Alligator (saat membuat EA secara otomatis di MQL5 Wizard).

Sistem ini didasarkan pada tiga garis moving average (garis Lips, Teeth, dan Jaw), serta osilator yang dihitung menggunakan selisih antara garis-garis tersebut. Sinyal trading dihasilkan setelah terjadinya crossover dari garis Alligator, tergantung pada tren yang ditentukan oleh urutan garis-garis tersebut. Dalam tren naik, garis Lips (dengan periode minimal) berada di atas, diikuti garis Teeth, dan garis Jaw berada di posisi terendah. Sebaliknya, dalam tren turun, urutannya akan terbalik.

Sinyal trading yang dihasilkan adalah sebagai berikut:

  • Buka posisi long: crossover garis Alligator dan peningkatan jarak di antara garis-garis tersebut saat tren naik;
  • Tutup posisi long: crossover ke atas dari garis Lips dengan garis Jaw;
  • Buka posisi short: crossover garis Alligator dan peningkatan jarak di antara garis-garis tersebut saat tren turun;
  • Tutup posisi short: crossover ke bawah dari garis Lips dengan garis Jaw;

Strategi ini diimplementasikan dalam kelas CSignalAlligator.

Gambar 1. Sinyal trading berdasarkan indikator Alligator

Gambar 1. Sinyal trading berdasarkan indikator Alligator


Sinyal Trading

Strategi trading ini diimplementasikan dalam kelas CSignalAlligator, yang memiliki beberapa metode yang dilindungi untuk mempermudah akses ke nilai indikator:

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


1. Buka Posisi Long

Pemeriksaan kondisi trading memiliki beberapa fitur, yang disebabkan oleh pergeseran garis Lips, Teeth, dan Jaw.

Kondisi untuk membuka posisi long adalah:

  • CheckCross digunakan untuk menentukan crossover dan peningkatan selisih antara garis-garis;
  • LipsTeethDiff(-2)>=LipsTeethDiff(-1) dan LipsTeethDiff(-1)>=LipsTeethDiff(0); memeriksa peningkatan selisih antara garis Lips dan Teeth;
  • LipsTeethDiff(0)>=0.0; garis Lips lebih tinggi dari garis Teeth;
  • TeethJawDiff(-2) >=TeethJawDiff(-1) dan TeethJawDiff(-1) >=TeethJawDiff(0); memeriksa peningkatan selisih antara garis Teeth dan Jaw;
  • TeethJawDiff(0) >=0.0; garis Teeth lebih tinggi dari garis Jaw.
//+------------------------------------------------------------------+
//| Memeriksa kondisi 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

Kondisi untuk menutup posisi long (perhatikan pergeseran garis):

  • LipsTeethDiff(-1)<0; garis Lips dari bar berikutnya (karena pergeseran) lebih rendah dari garis Teeth;
  • LipsTeethDiff(0)>=0; garis Lips dari bar saat ini lebih tinggi/sama dengan garis Teeth;
  • LipsTeethDiff(1)>0; garis Lips dari bar sebelumnya (yang sudah selesai) lebih tinggi dari garis Teeth.
//+------------------------------------------------------------------+

//| Memeriksa kondisi 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

Kondisi untuk membuka posisi short:

  • CheckCross digunakan untuk menentukan crossover dan peningkatan selisih antara garis-garis;
  • LipsTeethDiff(-2)<=LipsTeethDiff(-1) dan LipsTeethDiff(-1)<=LipsTeethDiff(0); memeriksa peningkatan selisih antara garis Lips dan Teeth;
  • LipsTeethDiff(0)<=0.0; garis Lips dari bar saat ini lebih rendah dari garis Teeth;
  • TeethJawDiff(-2)<=TeethJawDiff(-1) dan TeethJawDiff(-1)<=TeethJawDiff(0); memeriksa peningkatan selisih antara garis Teeth dan Jaw;
  • TeethJawDiff(0) <=0.0; garis Teeth dari bar saat ini lebih rendah dari garis Jaw;
//+------------------------------------------------------------------+
//| Memeriksa kondisi 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

Kondisi untuk menutup posisi short:

  • LipsTeethDiff(-1)>0; garis Lips dari bar berikutnya (karena pergeseran) lebih tinggi dari garis Teeth;
  • LipsTeethDiff(0)<=0; garis Lips dari bar saat ini lebih rendah/sama dengan garis Teeth;
  • LipsTeethDiff(1)<0; garis Lips dari bar sebelumnya lebih rendah dari garis Teeth.
//+------------------------------------------------------------------+

//| Memeriksa kondisi untuk menutup posisi short                     |
//+------------------------------------------------------------------+
bool CSignalAlligator::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(LipsTeethDiff(-1)>0 && LipsTeethDiff(0)<=0 && LipsTeethDiff(1)<0);
  }

Membuat Expert Advisor Menggunakan MQL5 Wizard

Untuk membuat robot trading berdasarkan strategi ini, Anda perlu memilih properti sinyal sebagai "Sinyal Berdasarkan Alligator" dalam opsi "Membuat Expert Advisors Siap Pakai" di MQL5 Wizard:

Gambar 2. Pilih sinyal berdasarkan Alligator di MQL5 Wizard

Gambar 2. Pilih "Sinyal Berdasarkan Alligator" 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 mengompilasinya dan mengujinya di Strategy Tester dari terminal klien MetaTrader 5.


Hasil Uji Coba

Mari kita lihat backtesting dari Expert Advisor pada data historis (EURUSD H1, periode pengujian: 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 pembuatan Expert Advisor ini, kami menggunakan volume tetap (Trading Fixed Lot, 0.1), algoritma Trailing Stop tidak digunakan (Trailing tidak digunakan).

Gambar 3. Hasil Uji Coba Expert Advisor dengan sinyal trading berdasarkan indikator Alligator

Gambar 3. Hasil Uji Coba Expert Advisor dengan sinyal trading berdasarkan indikator Alligator


Keuntungan dapat ditingkatkan jika Anda menggunakan filtrasi transaksi dan memperhatikan karakteristik pasar, tergantung pada waktu. Kelas CSignalITF akan memungkinkan Anda untuk menambahkan filter waktu intraday. Waktu terbaik dapat ditemukan menggunakan Strategy Tester dari terminal klien MetaTrader 5. Lihat contoh di MQL5 Wizard - Sinyal Trading Berdasarkan Crossover Dua EMA dengan filter waktu intraday.


Lampiran: File SignalAlligator.mqh dengan kelas CSignalAlligator harus ditempatkan di folder terminal_data_folder\MQL5\Include\Expert\Signal.

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


Postingan terkait

Komentar (0)