EA สำหรับการซื้อขาย Long/Short บน MetaTrader 5 ที่คุณต้องรู้

Mike 2014.07.31 20:40 13 0 0
ไฟล์แนบ

ในบทความนี้เราจะพูดถึง Expert Advisor (EA) ที่ช่วยให้คุณเลือกเปิดตำแหน่งการซื้อขายในลักษณะ Long หรือ Short (หรือทั้งสองแบบ) โดยอิงจากคลาส CExpert ที่ได้ปรับแต่งมาเป็นพิเศษ

เรามีไฟล์ที่แตกต่างกันสองไฟล์ให้คุณได้ลองใช้:

  • LongShortExpertModified.mqh: คลาสนี้ขยายการทำงานของ CExpert ดั้งเดิม โดยปรับปรุงเมธอด CheckOpen() และ CheckReverse() เพื่อให้สามารถเปิดคำสั่งตามที่ต้องการได้เท่านั้น;
  • LongShortExpertMACD.mq5: EA นี้เป็นการดัดแปลงจากคลาส ExpertMACD.mq5 ที่มีอยู่แล้ว โดยรวมการปรับแต่งที่พัฒนาขึ้นเพื่อให้สามารถเปิดคำสั่งตามประเภทที่ต้องการได้ตามพารามิเตอร์ที่กำหนด

LongShortExpertModified

คลาสนี้ปรับเปลี่ยนการทำงานของคลาส CExpert โดยอนุญาตให้เปิดคำสั่งตามประเภทที่ได้กำหนดไว้ใน enum ดังนี้:

enum ENUM_AVAILABLE_POSITIONS
  {
   LONG_POSITION,
   SHORT_POSITION,
   BOTH_POSITION
  };

enum นี้จะถูกใช้เป็นพารามิเตอร์นำเข้าสำหรับ EA ที่ต้องการ เพื่อกำหนดว่าประเภทคำสั่งไหนที่จะได้รับอนุญาตให้เปิด และจะใช้ภายในเพื่อเปิดเฉพาะคำสั่งที่ต้องการและจัดการการกลับตำแหน่งเฉพาะเมื่อทั้งสองประเภทได้รับอนุญาต (ค่าของ enum เป็น BOTH_POSITION)

เพื่อให้ทำงานได้ CheckOpen() และ CheckReverse() จะถูกเขียนใหม่:

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() จะถูกปรับให้ตรวจสอบเฉพาะตำแหน่ง Long หรือ Short ตามค่าของ m_positions:

bool CLongShortExpertModified :: CheckOpen()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
         return CheckOpenLong();         //ตรวจสอบเฉพาะตำแหน่ง Long ใหม่
      case SHORT_POSITION:
         return CheckOpenShort();        //ตรวจสอบเฉพาะตำแหน่ง Short ใหม่
      default:
         return CExpert::CheckOpen();    //พฤติกรรมตามค่าเริ่มต้น
     }
  }

CheckReverse() จะถูกปรับเพื่อตรวจสอบการกลับตำแหน่งเฉพาะเมื่ออนุญาตให้ทั้งสองประเภท:

bool CLongShortExpertModified::CheckReverse()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
      case SHORT_POSITION:
         return false;                    //ไม่อนุญาตให้กลับตำแหน่ง
      default:
         return CExpert::CheckReverse(); //พฤติกรรมตามค่าเริ่มต้น
     }
  }

LongShortExpertMACD

คลาสนี้ให้ตัวอย่าง EA ที่เฉพาะเจาะจงในการใช้คลาสก่อนหน้า โดยอิงจาก EA ExpertMACD ดั้งเดิมที่รวมอยู่ใน MQL5

ในขั้นตอนแรกต้องรวมคลาส Expert ที่เฉพาะเจาะจง และเพิ่มพารามิเตอร์นำเข้าสำหรับพารามิเตอร์ที่เกี่ยวข้อง นอกจากนี้ยังต้องเชื่อมต่อ expert กับซับคลาสแทนที่จะเป็น CExpert เริ่มต้น:

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //อนุญาตให้ตำแหน่ง Short / Long / ทั้งสอง
//[...]
CLongShortExpertModified ExtExpert;  //ซับคลาสที่ออกแบบเฉพาะ

หลังจากเริ่มต้น expert เสร็จแล้ว พารามิเตอร์จะต้องตั้งค่าตามค่าที่นำเข้า:

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- ล้มเหลว
      printf(__FUNCTION__+": error initializing expert");
      ExtExpert.Deinit();
      return(-1);
     }
     
   //พารามิเตอร์เฉพาะที่ควบคุมว่าตำแหน่งไหนอนุญาต
   ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

ไม่มีการเปลี่ยนแปลงเพิ่มเติมที่จำเป็น โดยภาพถัดไปจะแสดงพารามิเตอร์การกำหนดค่าของ expert:

Long/Short only general Expert Advisor

รายการ
ความคิดเห็น 0