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:

Komen 0