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

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

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

नमस्कार साथियों! आज हम बात करेंगे कि कैसे आप रिंग बफर का उपयोग करके Efficiency Ratio (ER) इंडिकेटर को MetaTrader 5 में बना सकते हैं। यह तकनीकी इंडिकेटर आपके ट्रेडिंग में महत्वपूर्ण भूमिका निभा सकता है।

विवरण

CEROnRingBuffer क्लास को Adaptive Moving Average (AMA) के लिए Efficiency Ratio (ER) की गणना करने के लिए डिज़ाइन किया गया है। यह रिंग बफर के एल्गोरिदम का उपयोग करता है।

घोषणा

class CEROnRingBuffer : public CArrayRing

शिर्षक

#include <IncOnRingBuffer\CEROnRingBuffer.mqh>

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

कक्षा विधियाँ

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

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

//--- ER इंडिकेटर की गणना के साथ वर्ग:
#include <IncOnRingBuffer\CEROnRingBuffer.mqh>
CEROnRingBuffer er;

...

//+------------------------------------------------------------------+
//| कस्टम इंडिकेटर पुनरावृत्ति फ़ंक्शन |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total, 
                const int prev_calculated, 
                const int begin, 
                const double &price[]) 
  {
//--- मूल्य टाइम सीरीज़ पर आधारित इंडिकेटर की गणना:
   er.MainOnArray(rates_total, prev_calculated, price);

...

//--- रिंग बफर "er" से डेटा का उपयोग करें,
//    उदाहरण के लिए, इंडिकेटर बफर में डेटा कॉपी करें:
   for(int i=start; i<rates_total; i++)
     {
      ER_Buffer[i] = er[rates_total - 1 - i]; // इंडिकेटर रेखा
     }
//--- अगले कॉल के लिए prev_calculated का मान लौटाएं:
   return(rates_total);
  }

कृपया ध्यान दें कि रिंग बफर में अनुक्रमण उसी तरह है जैसे टाइम सीरीज़ में।

उदाहरण

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


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



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

 

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

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

टिप्पणी (0)