विवरण
CTEMAOnRingBuffer क्लास तकनीकी इंडिकेटर ट्रिपल एक्सपोनेंशियल मूविंग एवरेज (Triple Exponential Moving Average, TEMA) की गणना के लिए डिज़ाइन की गई है, जो रिंग बफर के एल्गोरिदम का उपयोग करती है।
घोषणा
class CTEMAOnRingBuffer : public CArrayRing
शीर्षक
#include <IncOnRingBuffer\CTEMAnRingBuffer.mqh>CTEMAOnRingBuffer.mqh क्लास की फ़ाइल को MQL5\Include\ में स्थापित की जाने वाली IncOnRingBuffer फ़ोल्डर में रखा जाना चाहिए। इस फ़ोल्डर में क्लास के उपयोग के लिए दो फ़ाइलें उदाहरण के साथ जोड़ी गई हैं। रिंग बफर की क्लासों की फ़ाइल, DEMA, और मूविंग एवरेज की फ़ाइल भी इस फ़ोल्डर में होनी चाहिए।
क्लास के मेथड
//--- प्रारंभ करने की विधि: bool Init( // यदि त्रुटि है तो false लौटाता है, यदि सफल - true int period = 12, // TEMA की अवधि 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( // सेट तत्व (बार) के लिए TEMA मान लौटाता है 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); // मूविंग एवरेज का मान लौटाता है, इंडेक्सिंग समय श्रृंखला के समान है double DEMA(int index); // DEMA का मान लौटाता है, इंडेक्सिंग समय श्रृंखला के समान है
रिंग बफर से इंडिकेटर के गणना किए गए डेटा को सामान्य एरे की तरह प्राप्त किया जा सकता है। उदाहरण के लिए:
//--- TEMA इंडिकेटर की गणना करने वाली क्लास: #include <IncOnRingBuffer\CTEMAOnRingBuffer.mqh> CTEMAOnRingBuffer tema; ... //+------------------------------------------------------------------+ //| कस्टम इंडिकेटर इटरेशन फंक्शन | //+------------------------------------------------------------------+ int OnCalculate (const int rates_total, // price[] एरे का आकार const int prev_calculated, // पिछले कॉल पर प्रोसेस किए गए बार const int begin, // महत्वपूर्ण डेटा से शुरू होने की स्थिति const double& price[]) // गणना के लिए एरे { //--- समय श्रृंखला के आधार पर इंडिकेटर की गणना: tema.MainOnArray(rates_total,prev_calculated,price); ... //--- "tema" रिंग बफर से डेटा का उपयोग करें, // उदाहरण के लिए, इंडिकेटर बफर में डेटा की कॉपी करें: for(int i=start;i<rates_total && !IsStopped();i++) TEMA_Buffer[i] = tema[rates_total-1-i]; // TEMA इंडिकेटर लाइन ... //--- अगले कॉल के लिए prev_calculated का मान लौटाएं: return(rates_total); }
TEMA की गणना करते समय मूविंग एवरेज और DEMA की भी एक ही पैरामीटर के साथ गणना की जाती है। हम MA रिंग बफर से डेटा प्राप्त कर सकते हैं और DEMA का उपयोग करते हुए MA विधि(int index) और DEMA(int index) द्वारा।
//--- मूविंग एवरेज और DEMA रिंग बफर से डेटा का उपयोग करें, // उदाहरण के लिए, उन्हें इंडिकेटर बफर में कॉपी करें: for(int i=start;i<rates_total && !IsStopped();i++) { MA_Buffer[i] = dema.MA(rates_total-1-i); // मूविंग एवरेज इंडिकेटर लाइन DEMA_Buffer[i] = dema.DEMA(rates_total-1-i); // DEMA इंडिकेटर लाइन }
कृपया ध्यान दें कि रिंग बफर में इंडेक्सिंग समय श्रृंखलाओं के समान होती है।
उदाहरण
- इंडिकेटर Test_TEMA_OnArrayRB.mq5 फ़ाइल के आधार पर मूल्य समय श्रृंखला पर गणना करता है। MainOnArray() विधि का उपयोग प्रदर्शित किया गया है।
- Test_TEMA_OnValueRB.mq5 MainOnValue() विधि के उपयोग को प्रदर्शित करता है। पहले TEMA इंडिकेटर की गणना की जाती है और खींची जाती है। फिर इस इंडिकेटर रिंग बफर के आधार पर एक और TEMA खींचा जाता है।

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

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