विवरण
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( // प्रसंस्कृत तत्वों की संख्या लौटाता है const int rates_total, // array[] का आकार const int prev_calculated, // पिछले कॉल पर प्रसंस्कृत तत्व const double &array[] // इनपुट मानों का array );
//--- अलग-अलग श्रृंखला तत्वों पर आधारित गणना की विधि: double MainOnValue( // सेट तत्व के लिए MACD मान लौटाता है const int rates_total, // array का आकार const int prev_calculated, // array के प्रसंस्कृत तत्व const int begin, // array के महत्वपूर्ण डेटा से शुरू होने वाला स्थान const double value, // array के तत्व का मान const int 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; ... //+------------------------------------------------------------------+ //| कस्टम संकेतक पुनरावृत्ति कार्य | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &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); }
कृपया ध्यान दें कि रिंग बफर में अनुक्रमण समय श्रृंखला के समान है।
उदाहरण
- Test_MACD_OnArrayRB.mq5 फ़ाइल मूल्य समय श्रृंखला के आधार पर संकेतक की गणना करती है। MainOnArray() विधि का उपयोग प्रदर्शित किया गया है।
- Test_MACD_OnValueRB.mq5 फ़ाइल MainOnValue() विधि का उपयोग दर्शाती है। पहले MACD संकेतक की गणना और चित्रित किया जाता है। फिर इस संकेतक के रिंग बफर के आधार पर एक और MACD संकेतक चित्रित किया जाता है।

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

Test_MACD_OnValueRB.mq5 के काम का परिणाम, रिंग बफर का आकार 256 तत्व है
कोड लिखने में MetaQuotes Software Corp., Integer और GODZILLA के विकास का उपयोग किया गया था।