नमस्ते दोस्तों! आज हम एक खास विषय पर चर्चा करेंगे, जो है रिंग बफर का उपयोग करके OBV (On Balance Volume) संकेतक बनाना। यह विषय उन ट्रेडर्स के लिए बहुत उपयोगी है, जो अपने ट्रेडिंग की रणनीतियों में तकनीकी संकेतकों का इस्तेमाल करते हैं।
क्या है COBVOnRingBuffer क्लास?
COBVOnRingBuffer क्लास एक तकनीकी संकेतक है जिसका उपयोग हम OBV की गणना के लिए करते हैं। यह रिंग बफर के एल्गोरिदम पर आधारित है। अगर आप OBV के बारे में अधिक जानना चाहते हैं, तो यहां क्लिक करें।
घोषणा
class COBVOnRingBuffer : public CArrayRing
फाइलें कैसे सेट करें?
COBVOnRingBuffer.mqh फाइल को MQL5\Include\IncOnRingBuffer फोल्डर में रखना होगा। इस फोल्डर में क्लास के उदाहरण के लिए दो फाइलें भी जुड़ी हुई हैं। रिंग बफर की क्लास (यहां) भी इस फोल्डर में होनी चाहिए।
क्लास के तरीके
//--- प्रारंभिक विधि: bool Init( // त्रुटि होने पर false लौटाता है, सफल होने पर true int period = 0, // OBV अवधि int size_buffer = 256, // रिंग बफर का आकार bool as_series = false // यदि समय श्रृंखला है, अन्यथा - false );
OBV अवधि उसी तरह का उपयोग करती है जैसे Integer: यदि मान 0 (डिफ़ॉल्ट) है, तो संकेतक चार्ट के सभी बारों के लिए काम करेगा। किसी अन्य सकारात्मक मान के मामले में, निर्दिष्ट संख्या के बार का उपयोग किया जाता है (मूविंग एवरेज के सिद्धांत के अनुसार) हर चार्ट बार में मान की गणना के लिए।
गणना विधियाँ
//--- समय श्रृंखला या संकेतक बफर्स पर आधारित गणना की विधि: int MainOnArray( // संसाधित तत्वों की संख्या लौटाता है const int rates_total, // ऐरे का आकार const int prev_calculated, // पिछले कॉल पर संसाधित तत्व const double& price[], // कीमत const long& volume[]); // मात्रा );
रिंग बफर से संकेतक के गणना डेटा को सामान्य ऐरे की तरह प्राप्त किया जा सकता है। उदाहरण के लिए:
//--- OBV संकेतक की गणना करने वाली क्लास: #include <IncOnRingBuffer\COBVOnRingBuffer.mqh> COBVOnRingBuffer obv; ...//+------------------------------------------------------------------+ //| कस्टम संकेतक पुनरावृत्ति कार्य | //+------------------------------------------------------------------+ 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[]) { //--- समय श्रृंखला के आधार पर संकेतक की गणना: obv.MainOnArray(rates_total,prev_calculated,close,tick_volume); ... //--- रिंग बफर "obv" से डेटा का उपयोग करें, // उदाहरण के लिए, संकेतक बफर में डेटा कॉपी करें: for(int i=start;i<rates_total && !IsStopped();i++) OBV_Buffer[i] = obv[rates_total-1-i]; // संकेतक रेखा ... //--- अगले कॉल के लिए prev_calculated का मान लौटाएं: return(rates_total); }
कृपया ध्यान दें कि रिंग बफर में अनुक्रमण समय श्रृंखला के समान है।
उदाहरण
- Test_OBV_OnArrayRB.mq5 फाइल OBV संकेतक की गणना करती है जो मूल्य समय श्रृंखला के आधार पर है। MainOnArray() विधि का उपयोग दिखाया गया है।
- Test_OBV_OnValueRB.mq5 फाइल MainOnValue() विधि के उपयोग को दर्शाती है। पहले OBV संकेतक की गणना की जाती है और फिर इस संकेतक रिंग बफर के आधार पर एक और OBV खींचा जाता है।

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

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