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

Mike 2013.01.18 22:00 43 0 0
संलग्नक

विवरण

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

घोषणा

class CFractalsOnRingBuffer

शीर्षक

#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>

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

कक्षा के तरीके

//--- प्रारंभिककरण विधि:bool Init(                      // यदि त्रुटि है तो false लौटाता है, यदि सफल - true
   int  bars_right  = 2,        // चरम बिंदु से दाईं ओर की बार की संख्या
   int  bars_left   = 2,        // चरम बिंदु से बाईं ओर की बार की संख्या
   int  size_buffer = 256,        // रिंग बफर का आकार
   bool as_series   = false     // true, यदि समय श्रृंखला, अन्यथा - false
   );
//--- समय श्रृंखला या संकेतक बफर के आधार पर गणना करने की विधि:int MainOnArray(                  // संसाधित तत्वों की संख्या लौटाता है
   constint     rates_total,     // ऐरे का आकार
   constint     prev_calculated, // पिछली कॉल में संसाधित तत्व
   constdouble& high[],          // अधिकतम का ऐरे
   constdouble& low[],           // न्यूनतम का ऐरे
   );
//--- अलग श्रृंखला तत्वों के आधार पर ऊपर के फ्रैक्टल की गणना करने की विधि:double MainOnHigh(               // index-bars_right तत्व (बार) के लिए ऊपर का फ्रैक्टल मान लौटाता है
   constint    rates_total,     // ऐरे का आकार
   constint    prev_calculated, // ऐरे के संसाधित तत्व
   constint    begin,           // ऐरे के महत्वपूर्ण डेटा से शुरू होता है
   constdouble high,            // वर्तमान बार अधिकतम
   constint    index            // वर्तमान तत्व (बार) इंडेक्स
   );
//--- अलग श्रृंखला तत्वों के आधार पर नीचे के फ्रैक्टल की गणना करने की विधि:double MainOnLow(                // index-bars_right तत्व (बार) के लिए नीचे का फ्रैक्टल मान लौटाता है
   constint    rates_total,     // ऐरे का आकार
   constint    prev_calculated, // ऐरे के संसाधित तत्व
   constint    begin,           // ऐरे के महत्वपूर्ण डेटा से शुरू होता है
   constdouble low,             // वर्तमान बार न्यूनतम, वर्तमान ऐरे तत्व अधिकतम
   constint    index            // वर्तमान तत्व (बार) इंडेक्स
   );
//--- डेटा तक पहुँचने के तरीके:int    BarsRequired();  // संकेतक को खींचने के लिए आवश्यक बार की संख्या लौटाता हैstring Name();          // संकेतक का नाम लौटाता हैstring NameUpper()      // ऊपर के फ्रैक्टल का नाम लौटाता हैstring NameLower()      // नीचे के फ्रैक्टल का नाम लौटाता हैint    BarsRight()      // चरम बिंदु से दाईं ओर की बार की संख्या लौटाता हैint    BarsLeft()       // चरम बिंदु से बाईं ओर की बार की संख्या लौटाता हैint    Size();          // रिंग बफर का आकार लौटाता है

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

//--- फ्रैक्टल संकेतक की गणना करने वाली कक्षा:#include <IncOnRingBuffer\CFractalsOnRingBuffer.mqh>
CFractalsOnRingBuffer fractals;

...

//+------------------------------------------------------------------+//| कस्टम संकेतक पुनरावृत्ति फ़ंक्शन                              |//+------------------------------------------------------------------+intOnCalculate(constint rates_total,
                constint prev_calculated,
                constdatetime& time[],
                constdouble& open[],
                constdouble& high[],
                constdouble& low[],
                constdouble& close[],
                constlong& tick_volume[],
                constlong& volume[],
                constint& spread[])
  {
//--- मूल्य समय श्रृंखला के आधार पर संकेतक की गणना:
   fractals.MainOnArray(rates_total,prev_calculated,high,low);

...

//--- "फ्रैक्टल्स" रिंग बफर से डेटा का उपयोग करें,//    उदाहरण के लिए, डेटा को संकेतक बफर में कॉपी करें:
   for(int i=start;i<rates_total-BarsRight && !IsStopped();i++)
     {
      UpperBuffer[i] = fractals.upper[rates_total-1-i]; // ऊपर फ्रैक्टल
      LowerBuffer[i] = fractals.lower[rates_total-1-i]; // नीचे फ्रैक्टल
     }

...

//--- अगली कॉल के लिए prev_calculated का लौटने का मान:
   return(rates_total);
  }

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

उदाहरण

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


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



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

 

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

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