विवरण
CAMAOnRingBuffer क्लास तकनीकी संकेतक एडाप्टिव मूविंग एवरेज (Adaptive Moving Average, AMA) की गणना करने के लिए डिज़ाइन की गई है, जो रिंग बफर एल्गोरिदम का उपयोग करती है।
घोषणा
class CAMAOnRingBuffer : public CArrayRing
शीर्षक
#include <IncOnRingBuffer\CAMAOnRingBuffer.mqh>CAMAOnRingBuffer.mqh फ़ाइल को MQL5\Include\ में IncOnRingBuffer फ़ोल्डर में रखा जाना चाहिए। इस फ़ोल्डर से क्लास के उदाहरणों के साथ दो फ़ाइलें विवरण के साथ संलग्न हैं। रिंग बफर क्लास रिंग बफर और इफिशिएंसी रेशियो की क्लास भी इस फ़ोल्डर में होनी चाहिए।
क्लास विधियाँ
//--- initialization method: bool Init( // अगर त्रुटि है तो false लौटाएगा, यदि सफल - true int period = 10, // AMA की अवधि int fast_period = 2, // फास्ट EMA की अवधि int slow_period = 30, // स्लो EMA की अवधि int size_buffer = 256, // रिंग बफर का आकार, संग्रहीत डेटा की संख्या bool as_series = false // true, यदि समय श्रृंखला है, false - यदि इनपुट डेटा का सामान्य अनुक्रमण );
//--- समय श्रृंखला या संकेतक बफर के आधार पर गणना करने की विधि: int MainOnArray( // संसाधित तत्वों की संख्या लौटाता है const int rates_total, // एरे की आकार array[] const int prev_calculated, // पिछले कॉल पर संसाधित तत्व const double &array[] // इनपुट मानों का एरे );
//--- //--- एरे के अलग-अलग श्रृंखला तत्वों के आधार पर गणना करने की विधि
double MainOnValue( // सेट तत्व के लिए AMA मान लौटाता है
const int rates_total, // एरे का आकार
const int prev_calculated, // एरे के संसाधित तत्व
const int begin, // एरे के महत्वपूर्ण डेटा से शुरू होने वाला स्थान
const double value, // एरे का तत्व मान
const int index // तत्व अनुक्रमांक
);//--- डेटा तक पहुँचने की विधियाँ: int BarsRequired(); // संकेतक को खींचने के लिए आवश्यक बार की संख्या लौटाता है string Name(); // संकेतक का नाम लौटाता है string FastPeriod(); // फास्ट EMA स्मूथिंग की अवधि लौटाता है int SlowPeriod(); // स्लो EMA स्मूथिंग की अवधि लौटाता है int Period(); // AMA की अवधि लौटाता है int Size(); // रिंग बफर का आकार लौटाता है
रिंग बफर से संकेतक के गणना किए गए डेटा को सामान्य एरे की तरह प्राप्त किया जा सकता है। उदाहरण के लिए:
//--- AMA संकेतक की गणना विधियों के साथ क्लास: #include <IncOnRingBuffer\CAMAOnRingBuffer.mqh> CAMAOnRingBuffer ama; ... //+------------------------------------------------------------------+ //| कस्टम संकेतक पुनरावृत्ति फ़ंक्शन | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]) { //--- मूल्य समय श्रृंखला के आधार पर संकेतक की गणना: ama.MainOnArray(rates_total,prev_calculated,price); ... //--- रिंग बफर "ama" से डेटा का उपयोग करें, // उदाहरण के लिए, संकेतक बफर में डेटा की कॉपी करें: for(int i=start;i<rates_total;i++) AMA_Buffer[i] = ama[rates_total-1-i]; // संकेतक रेखा //--- अगले कॉल के लिए prev_calculated का लौटने वाला मान: return(rates_total); }
कृपया ध्यान दें कि रिंग बफर में अनुक्रमण समय श्रृंखला के समान है।
उदाहरण
- Test_AMA_OnArrayRB.mq5 फ़ाइल मूल्य समय श्रृंखला के आधार पर संकेतक की गणना करती है। MainOnArray() विधि का उपयोग प्रदर्शित किया गया है।
- Test_AMA_OnValueRB.mq5 फ़ाइल MainOnValue() विधि का उपयोग प्रदर्शित करती है। पहले AMA संकेतक की गणना की जाती है और खींची जाती है। फिर इस संकेतक रिंग बफर के आधार पर एक और AMA खींची जाती है।

Test_AMA_OnArrayRB.mq5 के काम का परिणाम रिंग बफर के 256 तत्वों के आकार के साथ

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