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

मेटाट्रेडर 5 के लिए रिंग बफर का उपयोग कर मोमेंटम इंडिकेटर कैसे बनाएं

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

विवरण

CMomentumOnRingBuffer क्लास तकनीकी संकेतक मोमेंटम (Momentum) की गणना के लिए डिज़ाइन की गई है, जो रिंग बफर के एल्गोरिदम का उपयोग करती है।

घोषणा

class CMomentumOnRingBuffer : public CArrayRing

शीर्षक

#include <IncOnRingBuffer\CMomentumOnRingBuffer.mqh>

CMomentumOnRingBuffer.mqh क्लास की फ़ाइल को IncOnRingBuffer फ़ोल्डर में रखा जाना चाहिए और फिर इसे MQL5\Include में स्थापित करना होगा। इस फ़ोल्डर से क्लास के उपयोग के उदाहरण वाली दो फ़ाइलें विवरण में संलग्न की गई हैं। रिंग बफर की क्लास की फ़ाइल भी इस फ़ोल्डर में होनी चाहिए।

क्लास के तरीके

//--- initialization method:
bool Init(                  // यदि त्रुटि है तो यह false लौटाएगा, यदि सफल - true
   int  period      = 14,   // मोमेंटम का अवधि
   int  size_buffer = 256,  // रिंग बफर का आकार
   bool as_series   = false // यदि समय श्रृंखला है, अन्यथा - false
   );
//--- समय श्रृंखला या संकेतक बफर के आधार पर गणना करने की विधि:
int MainOnArray(                  // संसाधित तत्वों की संख्या लौटाता है
   const int     rates_total,     // array[] का आकार
   const int     prev_calculated, // पिछले कॉल पर संसाधित तत्व
   const double& array[],         // इनपुट डेटा का array
   );
//--- अलग-अलग श्रृंखला के तत्वों के आधार पर गणना करने की विधि
double MainOnValue(               // सेट तत्व के लिए मोमेंटम का मान लौटाता है
   const int    rates_total,      // array का आकार
   const int    prev_calculated,  // array के संसाधित तत्व
   const int    begin,            // array का महत्वपूर्ण डेटा कहाँ से शुरू होता है
   const long   value,            // array का तत्व मान
   const int    index             // तत्व का अनुक्रमांक
   );
//--- डेटा तक पहुँचने के तरीके:
int                 BarsRequired(); // संकेतक को खींचने के लिए आवश्यक बार की संख्या लौटाता है
string              Name();         // संकेतक का नाम लौटाता है
int                 Period();       // अवधि लौटाता है
int                 Size();         // रिंग बफर का आकार लौटाता है

रिंग बफर से संकेतक के गणना किए गए डेटा को सामान्य array की तरह प्राप्त किया जा सकता है। उदाहरण के लिए:

//--- मोमेंटम संकेतक की गणना करने वाली क्लास:
#include <IncOnRingBuffer\CMomentumOnRingBuffer.mqh>
CMomentumOnRingBuffer momentum;

...

//+------------------------------------------------------------------+
//| कस्टम संकेतक पुनरावृत्ति कार्य                              |
//+------------------------------------------------------------------+
int OnCalculate (const int rates_total,      // array price[] का आकार
                 const int prev_calculated,  // पिछले कॉल पर संसाधित बार
                 const int begin,            // महत्वपूर्ण डेटा कहाँ से शुरू होता है
                 const double& price[])      // गणना के लिए array
  {
//--- समय श्रृंखला के आधार पर संकेतक की गणना:
   momentum.MainOnArray(rates_total,prev_calculated,price);

...
 
//--- "मोमेंटम" रिंग बफर के डेटा का उपयोग करें,
//    उदाहरण के लिए, संकेतक बफर में डेटा की कॉपी करें:
   for(int i=start;i<rates_total && !IsStopped();i++)
      Momentum_Buffer[i] = momentum[rates_total-1-i]; // संकेतक रेखा

...

//--- अगले कॉल के लिए prev_calculated का लौटने वाला मान:
   return(rates_total);
  }

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

उदाहरण

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


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



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

 

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

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

टिप्पणी (0)