ในบทความนี้เราจะพูดถึง 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:

ความคิดเห็น 0