MetaTrader 5 के लिए MACD संकेतक बनाने की विधि: रिंग बफर का उपयोग

Mike 2012.12.28 17:51 60 0 0
संलग्नक

विवरण

CMACDOnRingBuffer क्लास तकनीकी संकेतक मूविंग एवरेज कन्वर्जेंस/डाइवर्जेंस (MACD) की गणना के लिए बनाई गई है। यह रिंग बफर के एल्गोरिदम का उपयोग करके काम करती है।

घोषणा

class CMACDOnRingBuffer

शीर्षक

#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>

CMACDOnRingBuffer.mqh क्लास की फाइल को MQL5\Include\ में IncOnRingBuffer फ़ोल्डर में रखा जाना चाहिए। इस फ़ोल्डर से क्लास के उपयोग के उदाहरणों की दो फाइलें इस विवरण के साथ संलग्न हैं। रिंग बफर की क्लास और मूविंग एवरेज की क्लास भी इस फ़ोल्डर में होनी चाहिए।

क्लास के तरीके

//--- प्रारंभिककरण विधि:bool Init(                                  // यदि त्रुटि है तो false लौटता है, यदि सफल - true
   int            fast_period   = 12,       // तेजी से मूविंग एवरेज का समय
   int            slow_period   = 26,       // धीमे मूविंग एवरेज का समय
   int            signal_period = 9,        // सिग्नल मूविंग एवरेज का समय
   ENUM_MA_METHOD fast_method   = MODE_EMA, // तेजी से मूविंग एवरेज का तरीका
   ENUM_MA_METHOD slow_method   = MODE_EMA, // धीमे मूविंग एवरेज का तरीका
   ENUM_MA_METHOD signal_method = MODE_SMA, // सिग्नल मूविंग एवरेज का तरीका
   int            size_buffer   = 256,      // रिंग बफर का आकार, संग्रहीत डेटा की संख्या
   bool           as_series     = false     // true, यदि समय श्रृंखला है, false यदि सामान्य डेटा का अनुक्रमण
   );
//--- समय श्रृंखला या संकेतक बफर पर आधारित गणना की विधि:int MainOnArray(                  // प्रसंस्कृत तत्वों की संख्या लौटाता है
   constint     rates_total,     // array[] का आकार
   constint     prev_calculated, // पिछले कॉल पर प्रसंस्कृत तत्व
   constdouble &array[]          // इनपुट मानों का array
   );
//--- अलग-अलग श्रृंखला तत्वों पर आधारित गणना की विधि:double MainOnValue(              // सेट तत्व के लिए MACD मान लौटाता है
   constint    rates_total,     // array का आकार
   constint    prev_calculated, // array के प्रसंस्कृत तत्व
   constint    begin,           // array के महत्वपूर्ण डेटा से शुरू होने वाला स्थान
   constdouble value,           // array के तत्व का मान
   constint    index            // तत्व का अनुक्रमांक
   );
//--- डेटा तक पहुँचने की विधियाँ:int    BarsRequired();   // संकेतक को बनाने के लिए आवश्यक बार की संख्या लौटाता हैstring Name()            // संकेतक का नाम लौटाता हैstring NameMain()            // संकेतक की मुख्य लाइन का नाम लौटाता हैstring NameSignal()          // संकेतक की सिग्नल लाइन का नाम लौटाता हैstring FastMethod()      // तेजी से लाइन के समतल का तरीका लौटाता हैstring SlowMethod()      // धीमी लाइन के समतल का तरीका लौटाता हैstring SignalMethod()      // सिग्नल लाइन के समतल का तरीका लौटाता हैint    FastPeriod()      // तेजी से लाइन के समतल का समय लौटाता हैint    SlowPeriod()      // धीमी लाइन के समतल का समय लौटाता हैint    SignalPeriod()      // सिग्नल लाइन के समतल का समय लौटाता हैint    Size();           // रिंग बफर का आकार लौटाता है

रिंग बफर से संकेतक के गणना किए गए डेटा को सामान्य array के रूप में प्राप्त किया जा सकता है। उदाहरण के लिए:

//--- MACD संकेतक गणना के तरीकों के साथ क्लास:#include <IncOnRingBuffer\CMACDOnRingBuffer.mqh>
CMACDOnRingBuffer macd;

...

//+------------------------------------------------------------------+//| कस्टम संकेतक पुनरावृत्ति कार्य                              |//+------------------------------------------------------------------+intOnCalculate(constint    rates_total, 
                constint    prev_calculated, 
                constint    begin, 
                constdouble &price[]) 
  {
//--- मूल्य समय श्रृंखला पर आधारित संकेतक की गणना:
   macd.MainOnArray(rates_total,prev_calculated,price);

...

//--- "macd" रिंग बफर से डेटा का उपयोग करें,//    संकेतक बफर में डेटा कॉपी करें:
   for(int i=start;i<rates_total;i++)
     {
      MainBuffer[i]   = macd[rates_total-1-i];          // संकेतक का हिस्टोग्राम
      SignalBuffer[i] = macd.signal[rates_total-1-i];   // संकेतक की सिग्नल लाइन
     }
//--- अगले कॉल के लिए prev_calculated का लौटने वाला मान:
   return(rates_total);
  }

कृपया ध्यान दें कि रिंग बफर में अनुक्रमण समय श्रृंखला के समान है।

उदाहरण

  1. Test_MACD_OnArrayRB.mq5 फ़ाइल मूल्य समय श्रृंखला के आधार पर संकेतक की गणना करती है। MainOnArray() विधि का उपयोग प्रदर्शित किया गया है।
  2. Test_MACD_OnValueRB.mq5 फ़ाइल MainOnValue() विधि का उपयोग दर्शाती है। पहले MACD संकेतक की गणना और चित्रित किया जाता है। फिर इस संकेतक के रिंग बफर के आधार पर एक और MACD संकेतक चित्रित किया जाता है।


Test_MACD_OnArrayRB.mq5 के काम का परिणाम, रिंग बफर का आकार 256 तत्व है



Test_MACD_OnValueRB.mq5 के काम का परिणाम, रिंग बफर का आकार 256 तत्व है

 

कोड लिखने में MetaQuotes Software Corp.Integer और GODZILLA के विकास का उपयोग किया गया था।

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