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

ADX इंडिकेटर को रिंग बफर का उपयोग करके कैसे बनाएँ - MetaTrader 5 के लिए गाइड

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

विवरण

CADXOnRingBuffer क्लास का उपयोग तकनीकी इंडिकेटर Average Directional Movement Index (Average Directional Movement Index, ADX) की गणना के लिए किया जाता है। यह रिंग बफर के एल्गोरिदम का उपयोग करता है।

घोषणा

class CADXOnRingBuffer

शीर्षक

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>

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

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

//--- प्रारंभिककरण विधि:
bool Init(                                // यदि त्रुटि है तो यह false लौटाता है, यदि सफल - true
   int            ma_period   = 14,       // मूविंग एवरेज स्मूथिंग की अवधि
   ENUM_MA_METHOD ma_method   = MODE_EMA, // मूविंग एवरेज स्मूथिंग की विधि
   int            size_buffer = 256,      // रिंग बफर का आकार, संग्रहीत डेटा की संख्या
   bool           as_series   = false     // true, यदि समय श्रृंखला है, false यदि आम इनपुट डेटा की अनुक्रमण
   );             
//--- समय श्रृंखला या इंडिकेटर बफर्स के आधार पर गणना करने की विधि:          
int MainOnArray(                  // संसाधित तत्वों की संख्या लौटाता है  
   const int     rates_total,     // एरे का आकार
   const int     prev_calculated, // पिछले कॉल पर संसाधित तत्व
   const double &high[]           // अधिकतम मूल्य एरे
   const double &low[]            // न्यूनतम मूल्य एरे
   const double &close[]          // बंद मूल्य एरे
   );
//--- एरे के अलग-अलग श्रृंखला तत्वों के आधार पर गणना करने की विधि           
double MainOnValue(              // सेट तत्व के लिए ADX मान लौटाता है
   const int    rates_total,     // एरे का आकार
   const int    prev_calculated, // एरे के संसाधित तत्व
   const int    begin,           // एरे के महत्वपूर्ण मान कहाँ से शुरू होते हैं
   const double high,            // अधिकतम मूल्य 
   const double low,             // न्यूनतम मूल्य 
   const double close,           // बंद मूल्य 
   const int    index            // तत्व का अनुक्रमांक
   );
//--- डेटा तक पहुँचने की विधियाँ:
int    BarsRequired();   // इंडिकेटर को खींचने के लिए आवश्यक बार की संख्या लौटाता है
string NameADX();        // इंडिकेटर का नाम लौटाता है
string NameNDI();        // नकारात्मक दिशा गति इंडिकेटर लाइन का नाम लौटाता है
string NamePDI();        // सकारात्मक दिशा गति इंडिकेटर लाइन का नाम लौटाता है
string MAMethod();       // स्मूथिंग विधि का नाम पाठ में लौटाता है  
int    MAPeriod();       // स्मूथिंग की अवधि लौटाता है
int    Size();           // रिंग बफर का आकार लौटाता है

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

#include <IncOnRingBuffer\CADXOnRingBuffer.mqh>
CADXOnRingBuffer adx;

...

//+------------------------------------------------------------------+
//| कस्टम इंडिकेटर पुनरावृत्ति फ़ंक्शन                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime& time[],
                const double& open[],
                const double& high[],
                const double& low[],
                const double& close[],
                const long& tick_volume[],
                const long& volume[],
                const int& spread[])
  {
//--- इंडिकेटर की गणना:
   adx.MainOnArray(rates_total,prev_calculated,high,low,close);

   ...
     
//--- "adx" रिंग बफर से डेटा को इंडिकेटर में कॉपी करें:
   for(int i=start;i<rates_total;i++)
     {
      ADX_Buffer[i]=adx[rates_total-1-i];      // औसत दिशा गति सूचकांक
      PDI_Buffer[i]=adx.pdi[rates_total-1-i];  // सकारात्मक दिशा सूचकांक
      NDI_Buffer[i]=adx.ndi[rates_total-1-i];  // नकारात्मक दिशा सूचकांक
     }

   ...
  }

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

उदाहरण

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


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



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

 

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

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

टिप्पणी (0)