होम तकनीकी संकेतक पोस्ट

TEMA इंडिकेटर का रिंग बफर का उपयोग करके निर्माण - MetaTrader 5 के लिए गाइड

संलग्नक
1417.zip (11.22 KB, डाउनलोड 0 बार)

विवरण

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 इंडिकेटर लाइन
     }

कृपया ध्यान दें कि रिंग बफर में इंडेक्सिंग समय श्रृंखलाओं के समान होती है।

उदाहरण

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


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



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

 

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

संबंधित पोस्ट

टिप्पणी (0)