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

Mike 2013.01.17 00:39 62 0 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(                  // प्रोसेस किए गए तत्वों की संख्या लौटाता है 
   constint     rates_total,     // एरे का आकार
   constint     prev_calculated, // पिछले कॉल पर प्रोसेस किए गए तत्व
   constdouble& price[],         // गणना के लिए एरे
   );
//--- एकल श्रृंखला के तत्वों के आधार पर गणना की विधि           double MainOnValue(              // सेट तत्व (बार) के लिए TEMA मान लौटाता है
   constint    rates_total,     // एरे का आकार
   constint    prev_calculated, // एरे के प्रोसेस किए गए तत्व
   constint    begin,           // एरे के महत्वपूर्ण डेटा से शुरू होता हैconstdouble value,           // तत्व (बार) का मान constint    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;

...
//+------------------------------------------------------------------+//| कस्टम इंडिकेटर इटरेशन फंक्शन                              |//+------------------------------------------------------------------+intOnCalculate (constint rates_total,      // price[] एरे का आकार
                 constint prev_calculated,  // पिछले कॉल पर प्रोसेस किए गए बार
                 constint begin,            // महत्वपूर्ण डेटा से शुरू होने की स्थिति
                 constdouble& 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