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

साइकिल पीरियड - MetaTrader 5 के लिए एक महत्वपूर्ण संकेतक

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

लेखक: Witold Wozniak

यह संकेतक वित्तीय संपत्ति की कीमत में बदलाव की आवृत्ति को मापने के लिए डिज़ाइन किया गया है।

यह संकेतक अपने बफर में वर्तमान बाजार चक्र के मानों को संग्रहीत करता है, जो स्पष्ट कारणों से स्थिर नहीं होते। इस संकेतक को ऑस्सीलेटर के साथ उपयोग करने के लिए बनाया गया है ताकि इसे लगातार बदलते हुए बाजार चक्रों के अनुकूल बनाया जा सके।

इस संकेतक को John Ehlers के लेख "Using The Fisher Transform" से प्रेरणा मिली है, जो नवंबर 2002 में "Technical Analysis Of Stock & Commodities" पत्रिका में प्रकाशित हुआ था।  

Cycle Period

CyclePeriod संकेतक हैंडल को वैश्विक स्तर पर घोषित किया जाना चाहिए ताकि इसे किसी अन्य संकेतक के कोड (उदाहरण के लिए, RVI ऑस्सीलेटर) में उपयोग किया जा सके:

//---- संकेतकों के हैंडल के लिए पूर्णांक चर की घोषणा
int CP_Handle;

इसके बाद, CyclePeriod संकेतक हैंडल को RVI संकेतक प्रारंभिक ब्लॉक में प्राप्त किया जाना चाहिए:

//---- CyclePeriod संकेतक हैंडल प्राप्त करना
   CP_Handle=iCustom(NULL,0,"CyclePeriod",Alpha);
   if(CP_Handle==INVALID_HANDLE)
     {
      Print(" CyclePeriod संकेतक हैंडल प्राप्त करने में विफल");
      return(1);
     }

अब, हमारे पास नया Alpha वेरिएबल है, जो उपयोग किए जाने वाले संकेतक का इनपुट पैरामीटर और अवधि औसत अनुपात है। इस वेरिएबल को विकसित संकेतक के इनपुट वेरिएबल में परिवर्तित किया जाना चाहिए।

//+----------------------------------------------+
//| संकेतक इनपुट पैरामीटर                   |
//+----------------------------------------------+
input double Alpha=0.07; // संकेतक चिकनाई अनुपात 

पूर्ववर्ती Length इनपुट वेरिएबल को इनपुट पैरामीटर की सूची से हटा दिया जाना चाहिए और इसे OnCalculate() फ़ंक्शन के भीतर स्थानीय वेरिएबल में परिवर्तित किया जाना चाहिए।

संकेतक चिकनाई के लिए उपयोग की जाने वाली एरे का आकार Length पैरामीटर के मान द्वारा निश्चित किया गया है:

//---- चर एरे के लिए मेमोरी वितरण  
   ArrayResize(Count,Length);
   ArrayResize(Value1,Length);
   ArrayResize(Value2,Length);

इस पैरामीटर का मान अब बदल रहा है। इसलिए, इन एरे के आकार को इस वेरिएबल के अनुमानित उच्च मान से कम से कम निर्धारित किया जाना बेहतर है।

जब हम संकेतक चार्ट का विश्लेषण करते हैं, तो हम देख सकते हैं कि यह मान 100 से अधिक नहीं होता है। इसलिए, एरे के आकार को इसी मान पर रखना होगा:

//---- चर एरे के लिए मेमोरी वितरण  
   ArrayResize(Count,MAXPERIOD);
   ArrayResize(Value1,MAXPERIOD);
   ArrayResize(Value2,MAXPERIOD);

और आगे, वर्तमान बार के लिए अवधि मानों को CyclePeriod कस्टम संकेतक बफर से प्राप्त किया जाना चाहिए ताकि इसे Length पूर्ववर्ती इनपुट पैरामीटर के मान के स्थान पर उपयोग किया जा सके।

//---- मुख्य संकेतक गणना लूप
   for(bar=first; bar<rates_total && !IsStopped(); bar++)
     {
      //---- नई प्रदर्शित डेटा को एरे में कॉपी करना
       if(CopyBuffer(CP_Handle,0,rates_total-1-bar,4,period)<=0) return(RESET);

      Length=int(MathFloor((4.0*period[0]+3.0*period[1]+2.0*period[2]+period[3])/20.0));
      if(bar<Length) Length=bar; // वास्तविक बार की संख्या तक चिकनाई कटौती करना

इस मामले में चार अंतिम मानों को CyclePeriod संकेतक बफर से लिया जाता है और उनका रैखिक रूप से भारित चिकनाई की जाती है, जिसके बाद प्राप्त मान Length चिकनाई अवधि के रूप में उपयोग किया जाता है। और अंत में, संकेतक कोड के अंत में पंक्ति को संशोधित किया जाना चाहिए:

      if(bar<rates_total-1) Recount_ArrayZeroPos(Count,MAXPERIOD);

नतीजतन, हमें Adaptive RVI ऑस्सीलेटर प्राप्त हुआ है:

RVI और Adaptive RVI संकेतक

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

टिप्पणी (0)