विवरण
CDEMAOnRingBuffer क्लास को डबल एक्सपोनेंशियल मूविंग एवरेज (Double Exponential Moving Average, DEMA) के तकनीकी संकेतक की गणना के लिए डिजाइन किया गया है, जो रिंग बफर के एल्गोरिदम का उपयोग करता है।
घोषणा
class CDEMAOnRingBuffer : public CArrayRing
शीर्षक
#include <IncOnRingBuffer\CDEMAnRingBuffer.mqh>CDEMAOnRingBuffer.mqh क्लास की फ़ाइल को MQL5\Include\ में स्थापित की जानी चाहिए। इस फ़ोल्डर से क्लास के उदाहरणों का उपयोग करने वाली दो फ़ाइलें भी संलग्न की गई हैं। रिंग बफर और मूविंग एवरेज की क्लास की फ़ाइल भी इस फ़ोल्डर में होनी चाहिए।
क्लास के तरीके
//--- Initialization method: bool Init( // यदि त्रुटि है तो false लौटाएगा, यदि सफल - true int period = 12, // DEMA अवधि ENUM_MA_METHOD method = MODE_EMA, // समतल करने की विधि int size_buffer = 256, // रिंग बफर का आकार bool as_series = false // यदि समय श्रृंखला है, अन्यथा - false );
//--- समय श्रृंखला या संकेतक बफरों पर आधारित गणना की विधि: int MainOnArray( // संसाधित तत्वों की संख्या लौटाता है const int rates_total, // ऐरे का आकार const int prev_calculated, // पिछले कॉल पर संसाधित तत्व const double& price[], // गणना के लिए ऐरे );
//--- ऐरे के अलग श्रृंखला तत्वों पर आधारित गणना की विधि: double MainOnValue( // सेट तत्व (बार) के लिए DEMA मान लौटाता है const int rates_total, // ऐरे का आकार const int prev_calculated, // ऐरे के संसाधित तत्व const int begin, // ऐरे के महत्वपूर्ण डेटा से शुरू होता है const double value, // तत्व (बार) का मान const int index // तत्व (बार) का सूचकांक );
//--- डेटा तक पहुँचने के तरीके: int BarsRequired(); // संकेतक को खींचने के लिए आवश्यक बार की संख्या लौटाता है string Name(); // संकेतक का नाम लौटाता है int Period(); // अवधि लौटाता है int Size(); // रिंग बफर का आकार लौटाता है double MA(int index); // मूविंग एवरेज का मान लौटाता है, सूचकांक समय श्रृंखला की तरह है
रिंग बफर से संकेतक के गणना किए गए डेटा को सामान्य ऐरे की तरह प्राप्त किया जा सकता है। उदाहरण के लिए:
//--- DEMA संकेतक की गणना करने वाली क्लास: #include <IncOnRingBuffer\CDEMAOnRingBuffer.mqh> CDEMAOnRingBuffer dema; ... //+------------------------------------------------------------------+ //| कस्टम संकेतक पुनरावृत्ति फ़ंक्शन | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // ऐरे price[] का आकार const int prev_calculated, // पिछले कॉल पर संसाधित बार const int begin, // महत्वपूर्ण डेटा कहाँ से शुरू होता है const double& price[]) // गणना के लिए ऐरे { //--- समय श्रृंखला पर आधारित संकेतक की गणना: dema.MainOnArray(rates_total,prev_calculated,price); ... //--- "dema" रिंग बफर से डेटा का उपयोग करें, // उदाहरण के लिए, डेटा को संकेतक बफर में कॉपी करें: for(int i=start;i<rates_total && !IsStopped();i++) DEMA_Buffer[i] = dema[rates_total-1-i]; // DEMA संकेतक रेखा ... //--- अगले कॉल के लिए prev_calculated का लौटाना: return(rates_total); }
जब DEMA की गणना की जाती है, तो उसी पैरामीटर के साथ मूविंग एवरेज की भी गणना की जाती है। हम MA रिंग बफर से डेटा को MA विधि(int index) का उपयोग करके प्राप्त कर सकते हैं:
//--- मूविंग एवरेज रिंग बफर से डेटा का उपयोग करें, // उदाहरण के लिए, संकेतक बफर में डेटा को कॉपी करें: for(int i=start;i<rates_total && !IsStopped();i++) MA_Buffer[i] = dema.MA(rates_total-1-i); // मूविंग एवरेज संकेतक रेखा
कृपया ध्यान दें कि रिंग बफरों में सूचकांक उसी तरह है जैसे समय श्रृंखला में।
उदाहरण
- संकेतक Test_DEMA_OnArrayRB.mq5 फ़ाइल पर आधारित मूल्य समय श्रृंखला पर गणना करता है। MainOnArray() विधि का उपयोग प्रदर्शित किया गया है।
- Test_DEMA_OnValueRB.mq5 फ़ाइल MainOnValue() विधि के उपयोग का प्रदर्शन करती है। पहले DEMA संकेतक की गणना और खींची जाती है। फिर इस संकेतक रिंग बफर के आधार पर एक और DEMA खींची जाती है।

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

Test_DEMA_OnValueRB.mq5 के काम का परिणाम, जिसमें रिंग बफर का आकार 256 तत्व है
कोड लिखने में MetaQuotes Software Corp., Integer और GODZILLA के विकास का उपयोग किया गया।
संबंधित पोस्ट
- ओपन रेंज ब्रेकआउट इंडिकेटर: ट्रेडिंग में लाभ उठाने का तरीका
- ID Lite Info MA: MetaTrader 5 के लिए एक शक्तिशाली संकेतक
- iSpread: मेटा ट्रेडर 5 के लिए स्प्रेड इंडिकेटर जो पेयर ट्रेडिंग को आसान बनाता है
- Volume Profile + Range v6.0: MetaTrader 5 के लिए एक बेहतरीन संकेतक
- Volume Profile + Range v6.0: MetaTrader 5 के लिए नया इंडिकेटर