MetaTrader 5 में रिंग बफर का उपयोग कर OBV संकेतक कैसे बनाएं

Mike 2013.01.17 00:38 51 0 0
संलग्नक

नमस्ते दोस्तों! आज हम एक खास विषय पर चर्चा करेंगे, जो है रिंग बफर का उपयोग करके 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(                  // संसाधित तत्वों की संख्या लौटाता है
   constint     rates_total,     // ऐरे का आकार
   constint     prev_calculated, // पिछले कॉल पर संसाधित तत्व
   constdouble& price[],         // कीमत
   constlong&   volume[]);       // मात्रा
   );

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

//--- OBV संकेतक की गणना करने वाली क्लास:#include <IncOnRingBuffer\COBVOnRingBuffer.mqh>
COBVOnRingBuffer obv;
...//+------------------------------------------------------------------+//| कस्टम संकेतक पुनरावृत्ति कार्य                              |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
                constint prev_calculated,
                constdatetime& time[],
                constdouble& open[],
                constdouble& high[],
                constdouble& low[],
                constdouble& close[],
                constlong& tick_volume[],
                constlong& volume[],
                constint& 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);
  }

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

उदाहरण

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


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



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

 

इस कोड में MetaQuotes Software Corp., Integer  और GODZILLA के विकास का प्रयोग किया गया है।

सूची
टिप्पणी 0