EA Long Short: Meneroka CExpert untuk MetaTrader 5

Mike 2014.07.31 20:40 11 0 0
Lampiran

EA yang terkini membolehkan kita memilih untuk membuka posisi long atau short (atau kedua-duanya) berdasarkan pengembangan kelas CExpert.

Kami menyediakan dua fail berbeza:

  • LongShortExpertModified.mqh: Kelas ini memperluas kelas CExpert secara lalai dengan memodifikasi kaedah CheckOpen() dan CheckReverse() untuk membenarkan hanya pesanan yang diinginkan dibuka;
  • LongShortExpertMACD.mq5: EA ini adalah modifikasi mudah ke atas kelas embedded ExpertMACD.mq5, termasuk pakar yang telah dimodifikasi untuk membenarkan hanya jenis pesanan tertentu berdasarkan parameter input, dan disediakan untuk menjelaskan penggunaan pakar ini.

LongShortExpertModified

Kelas ini mengubah tingkah laku kelas CExpert secara lalai dengan membenarkan hanya jenis pesanan 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 diperlukan untuk menentukan jenis pesanan yang akan dibenarkan, dan digunakan secara dalaman untuk membuka hanya pesanan yang diinginkan serta memproses pembalikan pesanan hanya jika kedua-dua jenis posisi dibenarkan (nilai enum BOTH_POSITION).

Untuk melakukannya, kaedah CheckOpen() dan CheckReverse() diubahsuai:

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() diubahsuai untuk hanya memeriksa posisi long atau short mengikut nilai m_positions:

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

CheckReverse() diubahsuai untuk memeriksa pembalikan posisi hanya jika kedua-dua jenis posisi dibenarkan:

bool CLongShortExpertModified::CheckReverse()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
      case SHORT_POSITION:
         return false;                    // tiada pembalikan dibenarkan
      default:
         return CExpert::CheckReverse(); //tingkah laku lalai
     }
  }

LongShortExpertMACD

Kelas ini memberikan contoh EA yang khusus bagi penggunaan kelas sebelumnya, berdasarkan EA ExpertMACD lalai yang termasuk dalam pengedaran MQL5.

Pertama sekali, kelas Expert yang konkrit mesti disertakan, dan parameter input yang berkaitan ditambah. Juga, pakar luar dikaitkan dengan subkelas, bukannya CExpert lalai:

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //posisi short / long / kedua-dua dibenarkan
//[...]
CLongShortExpertModified ExtExpert;  //Subkelas CExpert yang direka khusus

Setelah pakar diinisialisasi, parameter mesti ditetapkan mengikut nilai input:

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- gagal
      printf(__FUNCTION__+": ralat menginisialisasi pakar");
      ExtExpert.Deinit();
      return(-1);
     }
   
   // Parameter khusus yang mengawal posisi yang dibenarkan
   ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

Tiada perubahan tambahan diperlukan. Rajah berikut menunjukkan parameter konfigurasi untuk pakar ini:

EA Long/Short sahaja

Senarai
Komen 0