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

WeightOscillator_Alert: MetaTrader 5 के लिए अलर्ट देने वाला ट्रेंड इंडिकेटर

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

WeightOscillator एक बेहतरीन ट्रेंड इंडिकेटर है जो आपको अलर्ट देता है, ईमेल भेजता है और मोबाइल डिवाइस पर पुश नोटिफिकेशन भेजता है।

इस इंडिकेटर में अलर्ट्स, ईमेल संदेश और पुश नोटिफिकेशन को लागू करने के लिए कुछ महत्वपूर्ण बदलाव किए गए हैं:

  1. इंडिकेटर सिग्नल जनरेशन के विकल्पों के लिए एन्यूमरेशन को इनपुट वेरिएबल्स के घोषित होने से पहले ग्लोबल स्कोप पर डिक्लेयर किया गया है।
    //+----------------------------------------------------+
    //| सिग्नल जनरेशन विकल्पों के लिए एन्यूमरेशन |
    //+----------------------------------------------------+
    enum ENUM_SIGNAL_MODE
      {
       MODE_SIGNAL,  //ब्रेकआउट सिग्नल
       MODE_TREND    //ब्रेकआउट और ट्रेंड सिग्नल
      };
  2. नए इनपुट पैरामीटर्स को जोड़ा गया है:
    //---- अलर्ट्स के लिए इनपुट वेरिएबल्स
    input ENUM_SIGNAL_MODE SignMode=MODE_SIGNAL; //सिग्नल जनरेशन मोड
    input uint NumberofBar=1;                    //सिग्नल जनरेट करने के लिए बार की संख्या
    input bool SoundON=true;                     //अलर्ट सक्षम करें
    input uint NumberofAlerts=2;                 //अलर्ट्स की संख्या
    input bool EMailON=false;                    //सिग्नल को मेल भेजने के लिए सक्षम करें
    input bool PushON=false;                     //मोबाइल डिवाइस पर सिग्नल भेजने के लिए सक्षम करें
  3. इंडिकेटर कोड के अंत में तीन नए फंक्शंस जोड़े गए: BuySignal(), SellSignal() और GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| खरीद सिग्नल फंक्शन |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// ईमेल और पुश संदेशों के लिए इंडिकेटर नाम का टेक्स्ट
                   double &ColorArray[],// रंग इंडेक्स बफर
                   int ColorIndex,// रंग इंडेक्स बफर में सिग्नल जनरेट करने के लिए रंग इंडेक्स
                   const int Rates_total,     // बार की वर्तमान संख्या
                   const int Prev_calculated, // पिछले टिक पर बार की संख्या
                   const double &Close[],     // क्लोज प्राइस
                   const int &Spread[])       // स्प्रेड
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;

       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }

       if(SignMode==MODE_SIGNAL)
         {
          if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) BuySignal=true;
         }
       else
         {
          if(ColorArray[index]==ColorIndex) BuySignal=true;
         }
       if(BuySignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
            {
             if(SoundON) Alert("BUY सिग्नल Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod);
             if(EMailON) SendMail(SignalSirname+": BUY सिग्नल अलर्ट","BUY सिग्नल at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
             if(PushON) SendNotification(SignalSirname+": BUY सिग्नल at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
            }
          else
            {
             if(SoundON) Alert("Up Trend सिग्नल Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod);
             if(EMailON) SendMail(SignalSirname+": Up Trend सिग्नल अलर्ट","BUY सिग्नल at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
             if(PushON) SendNotification(SignalSirname+": Up Trend सिग्नल at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
            }
         }

    //---
      }
    //+------------------------------------------------------------------+
    //| बेचने का सिग्नल |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,// ईमेल और पुश संदेशों के लिए इंडिकेटर नाम का टेक्स्ट
                    double &ColorArray[],       // रंग इंडेक्स बफर
                    int ColorIndex,             // रंग इंडेक्स बफर में सिग्नल जनरेट करने के लिए रंग इंडेक्स
                    const int Rates_total,     // बार की वर्तमान संख्या
                    const int Prev_calculated, // पिछले टिक पर बार की संख्या
                    const double &Close[],     // क्लोज प्राइस
                    const int &Spread[])       // स्प्रेड
      {
    //---
       static uint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;

       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(ColorArray);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }

       if(SignMode==MODE_SIGNAL)
         {
          if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) SellSignal=true;
         }
       else
         {
          if(ColorArray[index]==ColorIndex) SellSignal=true;
         }
       if(SellSignal && counter<=NumberofAlerts)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SeriesTest=ArrayGetAsSeries(Close);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
            {
             if(SoundON) Alert("SELL सिग्नल Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod);
             if(EMailON) SendMail(SignalSirname+": SELL सिग्नल अलर्ट","SELL सिग्नल at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
             if(PushON) SendNotification(SignalSirname+": SELL सिग्नल at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
            }
          else
            {
             if(SoundON) Alert("Down trend सिग्नल Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod);
             if(EMailON) SendMail(SignalSirname+": Down trend सिग्नल अलर्ट","SELL सिग्नल at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
             if(PushON) SendNotification(SignalSirname+": Down trend सिग्नल at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
            }
         }
    //---
      }
    //+------------------------------------------------------------------+
    //| समय सीमा को एक स्ट्रिंग के रूप में प्राप्त करना |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  4. इंडिकेटर कैलकुलेशन साइकिल के बाद BuySignal() और SellSignal() फंक्शंस को कॉल करने के लिए कुछ बदलाव किए गए हैं:
    //---    
       BuySignal("WeightOscillator_Alert",ColorBuffer,0,rates_total,prev_calculated,close,spread);
       SellSignal("WeightOscillator_Alert",ColorBuffer,4,rates_total,prev_calculated,close,spread);
    //---  

    जहाँ ColorBuffer रंग इंडेक्स बफर का नाम है जो इंडिकेटर रंगों को स्टोर करता है। 0 और 4 इस बफर में रंगों के नंबर हैं, जो ओवरबॉट और ओवरसोल्ड क्षेत्रों में होते हैं।

    यह मान लिया गया है कि BuySignal() और SellSignal() फंक्शंस को इंडिकेटर कोड के OnCalculate() ब्लॉक में केवल एक बार कॉल किया जाएगा।

    यह इंडिकेटर SmoothAlgorithms.mqh लाइब्रेरी की क्लासेस का उपयोग करता है (इसे <terminal_data_folder>\MQL5\Include में कॉपी करें)। क्लासेस के उपयोग को "अतिरिक्त बफर का उपयोग किए बिना मध्यवर्ती गणनाओं के लिए प्राइस सीरीज का औसत निकालना" लेख में विस्तार से बताया गया है।

    Fig1. The WeightOscillator_Alert indicator on the chart

    Fig1. The WeightOscillator_Alert indicator on the chart

    Fig.3. The WeightOscillator_Alert indicator. Generating alert for trend signal

    Fig.2. The WeightOscillator_Alert indicator. Generating alert for breakout signal

    Fig.3. The WeightOscillator_Alert indicator. Generating alert for trend signal

    Fig.3. The WeightOscillator_Alert indicator. Generating alert for trend signal

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

टिप्पणी (0)