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

MetaTrader 5 में रिंग बफर का उपयोग कर AMA कैसे बनाएं

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

विवरण

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);
  }

कृपया ध्यान दें कि रिंग बफर में अनुक्रमण समय श्रृंखला के समान है।

उदाहरण

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


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



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

 

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

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

टिप्पणी (0)