MetaTrader 5 में OsCD बनाने के लिए रिंग बफर का उपयोग कैसे करें

Mike 2013.01.08 00:45 54 0 0
संलग्नक

विवरण

COsMAOnRingBuffer क्लास का उद्देश्य तकनीकी संकेतक मूविंग एवरेज ऑफ ओस्सीलेटर (मूविंग एवरेज ऑफ ओस्सीलेटर, OsMA) की गणना करना है, जो कि रिंग बफर के एल्गोरिदम का उपयोग करता है।

घोषणा

class COsMAOnRingBuffer : public CArrayRing

शीर्षक

#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>

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

क्लास विधियाँ

//--- आरंभिककरण विधि: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,     // ऐरे का आकार
   constint     prev_calculated, // पिछले कॉल पर संसाधित तत्व
   constdouble &array[]          // इनपुट मानों का ऐरे
   );
//--- ऐरे के अलग-अलग श्रृंखला तत्वों पर आधारित गणना विधिdouble MainOnValue(              // सेट तत्व के लिए OsMA मान लौटाता है
   constint    rates_total,     // ऐरे का आकार
   constint    prev_calculated, // ऐरे के संसाधित तत्व
   constint    begin,           // ऐरे के महत्वपूर्ण डेटा की शुरुआत
   constdouble value,           // ऐरे के महत्वपूर्ण तत्व
   constint    index            // तत्व का अनुक्रमांक
   );
//--- डेटा तक पहुँचने के विधियाँ:int    BarsRequired();   // संकेतक को खींचने के लिए आवश्यक बार की संख्या लौटाता हैstring Name()            // संकेतक का नाम लौटाता हैstring FastMethod()      // तेज रेखा के स्मूथिंग विधि को टेक्स्ट में लौटाता हैstring SlowMethod()      // धीमी रेखा के स्मूथिंग विधि को टेक्स्ट में लौटाता हैstring SignalMethod()      // सिग्नल रेखा के स्मूथिंग विधि को टेक्स्ट में लौटाता हैint    FastPeriod()      // तेज रेखा के स्मूथिंग अवधि लौटाता हैint    SlowPeriod()      // धीमी रेखा के स्मूथिंग अवधि लौटाता हैint    SignalPeriod()      // सिग्नल रेखा के स्मूथिंग अवधि लौटाता हैint    Size();           // रिंग बफर का आकार लौटाता है

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

//--- संकेतक गणना के विधियों के साथ क्लास OsMA:#include <IncOnRingBuffer\COsMAOnRingBuffer.mqh>
COsMAOnRingBuffer osma;

...

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

...

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

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

उदाहरण

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


Test_OsMA_OnArrayRB.mq5 के कार्य का परिणाम, जिसमें रिंग बफर का आकार 256 तत्व हैं।



Test_OsMA_OnValueRB.mq5 के कार्य का परिणाम, जिसमें रिंग बफर का आकार 256 तत्व हैं।

 

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

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