नमस्कार दोस्तों! आज हम बात करेंगे एक ऐसे क्लास की, जिसका उपयोग हम Average True Range (ATR) संकेतक को रिंग बफर की मदद से निकालने के लिए कर सकते हैं। यह क्लास, CATROnRingBuffer, MetaTrader 5 पर ATR की गणना करने के लिए डिजाइन की गई है।
विवरण
CATROnRingBuffer क्लास ATR संकेतक की गणना करने के लिए रिंग बफर के एल्गोरिदम का उपयोग करती है। ATR एक महत्वपूर्ण संकेतक है, जो हमें बाजार की अस्थिरता को समझने में मदद करता है।
घोषणा
class CATROnRingBufferफाइल सेटअप
CATROnRingBuffer.mqh फाइल को MQL5\Include\IncOnRingBuffer फोल्डर में रखा जाना चाहिए। इस फोल्डर में इस क्लास का उपयोग करने के लिए कुछ उदाहरण फाइलें भी शामिल हैं। रिंग बफर और Moving Average की क्लास भी इस फोल्डर में होनी चाहिए।
क्लास के तरीके
//--- प्रारंभिककरण विधि: bool Init( // यदि त्रुटि है तो false लौटाता है, यदि सफल - true int ma_period = 14, // Moving Average की अवधि ENUM_MA_METHOD ma_method = MODE_SMA, // Moving Average का तरीका int size_buffer = 256, // रिंग बफर का आकार bool as_series = false // यदि समय श्रृंखला है, तो true );
//--- समय श्रृंखला या संकेतक बफर पर आधारित गणना की विधि: int MainOnArray( // लौटाता है संसाधित तत्वों की संख्या const int rates_total, // ऐरे का आकार const int prev_calculated, // पिछले कॉल में संसाधित तत्व const double &high[] // अधिकतम मान ऐरे const double &low[] // न्यूनतम मान ऐरे const double &close[] // बंद कीमत ऐरे );
डेटा तक पहुँचने की विधियाँ
//--- डेटा तक पहुँचने की विधियाँ: int BarsRequired(); // संकेतक को खींचने के लिए आवश्यक बार की संख्या लौटाता है string Name(); // संकेतक का नाम लौटाता है string MAMethod(); // स्मूथिंग का तरीका लौटाता है int MAPeriod(); // स्मूथिंग की अवधि लौटाता है int Size(); // रिंग बफर का आकार लौटाता है
आप रिंग बफर से संकेतक का डेटा सामान्य ऐरे की तरह प्राप्त कर सकते हैं। उदाहरण के लिए:
#include <IncOnRingBuffer\CATROnRingBuffer.mqh> CATROnRingBuffer atr; ... //+------------------------------------------------------------------+ //| कस्टम संकेतक इटरेशन फ़ंक्शन | //+------------------------------------------------------------------+ 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[]) { //--- संकेतक की गणना: atr.MainOnArray(rates_total,prev_calculated,high,low,close); ... //--- "atr" रिंग बफर से संकेतक में डेटा कॉपी करें: for(int i=start;i<rates_total;i++) { ATR_Buffer[i]=atr[rates_total-1-i]; } return(rates_total); }
ध्यान दें कि रिंग बफर में अनुक्रमण समय श्रृंखला के समान है।
उदाहरण
- Test_ATR_OnArrayRB.mq5 फाइल कीमत समय श्रृंखला के आधार पर संकेतक की गणना करती है। यहां MainOnArray() विधि का उपयोग दिखाया गया है।
- Test_ATR_OnValueRB.mq5 फाइल MainOnValue() विधि के उपयोग को दर्शाती है। पहले ATR संकेतक की गणना और चित्रण किया जाता है। फिर इस संकेतक के रिंग बफर के आधार पर ATR संकेतक की एक और रेखा की गणना की जाती है।

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

Test_ATR_OnValueRB.mq5 के कार्य का परिणाम, जिसमें रिंग बफर का आकार 256 तत्व है
इस कोड लेखन में MetaQuotes Software Corp., Integer और GODZILLA के विकास का उपयोग किया गया है।
संबंधित पोस्ट
- ओपन रेंज ब्रेकआउट इंडिकेटर: ट्रेडिंग में लाभ उठाने का तरीका
- ID Lite Info MA: MetaTrader 5 के लिए एक शक्तिशाली संकेतक
- iSpread: मेटा ट्रेडर 5 के लिए स्प्रेड इंडिकेटर जो पेयर ट्रेडिंग को आसान बनाता है
- Volume Profile + Range v6.0: MetaTrader 5 के लिए एक बेहतरीन संकेतक
- Volume Profile + Range v6.0: MetaTrader 5 के लिए नया इंडिकेटर