लॉन्ग और शॉर्ट केवल EA: MetaTrader 5 के लिए विशेष सलाहकार

Mike 2014.07.31 20:40 9 0 0
संलग्नक

नमस्कार, दोस्तों! आज हम एक ऐसे एक्सपर्ट एडवाइजर के बारे में बात करने जा रहे हैं जो आपको केवल लॉन्ग या शॉर्ट (या दोनों) पोजिशन्स खोलने की अनुमति देता है। यह CExpert क्लास पर आधारित है।

हमारे पास दो अलग-अलग फाइलें हैं:

  • LongShortExpertModified.mqh: यह क्लास डिफ़ॉल्ट CExpert को बढ़ाती है, इसमें CheckOpen() और CheckReverse() मेथड्स को संशोधित किया गया है ताकि केवल वांछित ऑर्डर खोले जा सकें;
  • LongShortExpertMACD.mq5: यह EA एक साधारण संशोधन है, जिसमें एक इनपुट पैरामीटर के अनुसार केवल वांछित ऑर्डर टाइप को अनुमति देने के लिए विकसित किया गया है।

LongShortExpertModified

यह क्लास डिफ़ॉल्ट CExpert क्लास के व्यवहार को संशोधित करती है ताकि निम्नलिखित enum के अनुसार केवल एक निश्चित प्रकार के ऑर्डर की अनुमति हो:

enum ENUM_AVAILABLE_POSITIONS
  {
   LONG_POSITION,
   SHORT_POSITION,
   BOTH_POSITION
  };

यह enum अंतिम EA के लिए एक इनपुट पैरामीटर के रूप में इस्तेमाल किया जाएगा, जिससे यह निर्धारित होगा कि कौन से प्रकार के ऑर्डर्स की अनुमति होगी। यह केवल वांछित ऑर्डर खोलने और ऑर्डर रिवर्सल को केवल तभी प्रोसेस करने के लिए अंदरूनी रूप से उपयोग किया जाता है जब दोनों पोजिशन प्रकारों की अनुमति हो (BOTH_POSITION enum मान)।

इसके लिए, 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() को केवल लॉन्ग या शॉर्ट पोजिशन्स की जांच करने के लिए संशोधित किया गया है, जो m_positions मान के अनुसार है:

bool CLongShortExpertModified :: CheckOpen()
  {
   switch(m_positions)
     {
      case LONG_POSITION:
         return CheckOpenLong();         // केवल नए लॉन्ग पोजिशन्स की जांच करें
      case SHORT_POSITION:
         return CheckOpenShort();        // केवल नए शॉर्ट पोजिशन्स की जांच करें
      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 उदाहरण प्रदान करती है, जो डिफ़ॉल्ट ExpertMACD EA पर आधारित है।

सबसे पहले, ठोस Expert क्लास को शामिल किया जाना चाहिए, और संबंधित इनपुट पैरामीटर जोड़ा जाना चाहिए। इसके अलावा, बाहरी विशेषज्ञ को उप-क्लास के साथ जोड़ा गया है, न कि डिफ़ॉल्ट CExpert:

#include <Expert\LongShortExpertModified.mqh>
//[...]
input ENUM_AVAILABLE_POSITIONS Inp_Allowed_Positions=BOTH_POSITION; //शॉर्ट / लॉन्ग / दोनों पोजिशन्स की अनुमति
//[...]
CLongShortExpertModified ExtExpert;  // विशेष रूप से डिज़ाइन किया गया CExpert उपक्लास

विशेषज्ञ को आरंभ करने के बाद, पैरामीटर को इनपुट मान के अनुसार सेट किया जाना चाहिए:

if(!ExtExpert.Init(Symbol(),Period(),Expert_EveryTick,Expert_MagicNumber))
     {
      //--- विफल
      printf(__FUNCTION__+": विशेषज्ञ को आरंभ करने में त्रुटि");
      ExtExpert.Deinit();
      return(-1);
     }
   
   // विशेष पैरामीटर जो निर्धारित करता है कि कौन सी पोजिशन्स की अनुमति है
   ExtExpert.SetAvailablePositions(Inp_Allowed_Positions);  

कोई अतिरिक्त परिवर्तन की आवश्यकता नहीं है। निम्नलिखित चित्र में विशेषज्ञ के लिए कॉन्फ़िगरेशन पैरामीटर दिखाए गए हैं:

लॉन्ग/शॉर्ट केवल सामान्य विशेषज्ञ सलाहकार

सूची
टिप्पणी 0