EA Long Short Berdasarkan CExpert untuk MetaTrader 5: Pilih Posisi yang Diinginkan

Mike 2014.07.31 20:40 16 0 0
Lampiran

EA (Expert Advisor) saat ini memungkinkan Anda untuk memilih apakah akan membuka posisi long, short, atau kedua-duanya berdasarkan pengembangan kelas CExpert.

Terdapat dua file yang berbeda disediakan:

  • LongShortExpertModified.mqh: Kelas ini memperluas kelas CExpert yang ada, dengan memodifikasi metode CheckOpen() dan CheckReverse() agar hanya posisi yang diinginkan yang bisa dibuka;
  • LongShortExpertMACD.mq5: EA ini adalah modifikasi sederhana dari kelas ExpertMACD.mq5 yang telah ada, dengan modifikasi untuk hanya mengizinkan tipe order yang diinginkan sesuai dengan parameter input, dan disertakan untuk memperjelas penggunaan expert ini.

LongShortExpertModified

Kelas ini memodifikasi perilaku kelas CExpert yang ada agar hanya mengizinkan tipe order tertentu berdasarkan enum berikut:

enum ENUM_AVAILABLE_POSITIONS
  {
   LONG_POSITION,
   SHORT_POSITION,
   BOTH_POSITION
  };

Enum ini akan digunakan sebagai parameter input untuk EA akhir yang dibutuhkan, untuk menentukan tipe order mana yang diizinkan, dan digunakan secara internal untuk membuka hanya order yang diinginkan serta memproses pembalikan order hanya jika kedua tipe posisi diizinkan (nilai enum BOTH_POSITION).

Untuk melakukan ini, metode CheckOpen() dan CheckReverse() ditulis ulang:

class CLongShortExpertModified : public CExpert
  {
protected:
   ENUM_AVAILABLE_POSITIONS m_positions;
public:
                     CLongShortExpertModified(void);
                    ~CLongShortExpertModified(void);
   virtual bool      CheckOpen(void);
   virtual bool      CheckReverse(void);
   void SetAvailablePositions(ENUM_AVAILABLE_POSITIONS newValue){m_positions=newValue;};
  };

CheckOpen() dimodifikasi untuk hanya memeriksa posisi long atau short sesuai dengan nilai m_positions:

bool CLongShortExpertModified :: CheckOpen()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
         return CheckOpenLong();         //hanya periksa posisi long baru
      case SHORT_POSITION:
         return CheckOpenShort();        //hanya periksa posisi short baru
      default:
         return CExpert::CheckOpen();    //perilaku default
     }
  }

CheckReverse() dimodifikasi untuk memeriksa pembalikan posisi hanya jika kedua tipe posisi diizinkan:

bool CLongShortExpertModified::CheckReverse()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
      case SHORT_POSITION:
         return false;                    // tidak ada pembalikan yang diizinkan
      default:
         return CExpert::CheckReverse(); //perilaku default
     }
  }

LongShortExpertMACD

Kelas ini menyediakan contoh EA spesifik dari penggunaan kelas sebelumnya, berdasarkan EA ExpertMACD default yang termasuk dalam distribusi MQL5.

Pertama-tama, kelas Expert konkrit harus disertakan, dan parameter input yang sesuai ditambahkan. Juga, expert eksternal dihubungkan dengan subkelas, bukan dengan CExpert default:

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //posisi short / long / keduanya diizinkan
//[...]
CLongShortExpertModified ExtExpert;  //subkelas CExpert yang dirancang khusus

Setelah menginisialisasi expert, parameter harus diatur sesuai dengan nilai input:

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- gagal
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }
   
   // Parameter spesifik yang mengontrol posisi yang diizinkan
   ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

Tidak ada perubahan tambahan yang diperlukan. Gambar berikut menunjukkan parameter konfigurasi untuk expert ini:

Long/Short only general Expert Advisor

Daftar
Komentar 0