iMFISignAlert: MetaTrader 5 के लिए सिग्नल इंडिकेटर

Mike 2016.07.20 23:44 62 0 0
संलग्नक

iMFISignAlert एक सेमाफोर एरो सिग्नल इंडिकेटर है, जो क्लासिक मनी फ्लो इंडेक्स ऑस्सीलेटर पर आधारित है। यह ओवरबॉट और ओवरसोल्ड क्षेत्रों से सिग्नल देता है और साथ ही अलर्ट्स, ईमेल भेजने और मोबाइल डिवाइस पर पुश नोटिफिकेशन की सुविधाएँ भी प्रदान करता है।

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

  1. नए इनपुट पैरामीटर जोड़े गए हैं:
    inputuint NumberofBar=1;// सिग्नल के लिए बार संख्याinputbool SoundON=true;// अलर्ट सक्षम करेंinputuint NumberofAlerts=2;// अलर्ट की संख्याinputbool EMailON=false;// सिग्नल के लिए ईमेल सक्षम करेंinputbool PushON=false;// मोबाइल डिवाइस पर सिग्नल भेजने के लिए सक्षम करें
  2. इंडिकेटर कोड के अंत में तीन नई फ़ंक्शन्स जोड़ी गई हैं: BuySignal(), SellSignal() और GetStringTimeframe()
    //+------------------------------------------------------------------+//| खरीद सिग्नल फ़ंक्शन                                              |//+------------------------------------------------------------------+void BuySignal(string SignalSirname,      // ईमेल और पुश संदेश के लिए इंडिकेटर नाम का टेक्स्ट
                   double &BuyArrow[],        // खरीद सिग्नल के लिए इंडिकेटर बफर
                   constint Rates_total,     // वर्तमान बार की संख्या
                   constint Prev_calculated, // पिछले टिक पर बार की संख्या
                   constdouble &Close[],     // क्लोज़ प्राइस
                   constint &Spread[])       // स्प्रेड
      {
    //---
       staticuint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) 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;
          doubleAsk=Close[index];
          doubleBid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+//| बिक्री सिग्नल फ़ंक्शन                                             |//+------------------------------------------------------------------+void SellSignal(string SignalSirname,      // ईमेल और पुश संदेश के लिए इंडिकेटर नाम का टेक्स्ट
                    double &SellArrow[],       // बिक्री सिग्नल के लिए इंडिकेटर बफर
                    constint Rates_total,     // वर्तमान बार की संख्या
                    constint Prev_calculated, // पिछले टिक पर बार की संख्या
                    constdouble &Close[],     // क्लोज़ प्राइस
                    constint &Spread[])       // स्प्रेड
      {
    //---
       staticuint counter=0;
       if(Rates_total!=Prev_calculated) counter=0;
    
       bool SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index;
       if(SeriesTest) index=int(NumberofBar);
       else index=Rates_total-int(NumberofBar)-1;
       if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) 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;
          doubleAsk=Close[index];
          doubleBid=Close[index];
          SeriesTest=ArrayGetAsSeries(Spread);
          if(SeriesTest) index=int(NumberofBar);
          else index=Rates_total-int(NumberofBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+//|  समयावधि को स्ट्रिंग के रूप में प्राप्त करना                               |//+------------------------------------------------------------------+string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. OnCalculate() ब्लॉक में इंडिकेटर कैलकुलेशन साइकिल के बाद BuySignal() और SellSignal() फ़ंक्शन्स को कॉल करने के लिए जोड़े गए:
    BuySignal("iWPRSign",BuyBuffer,rates_total,prev_calculated,close,spread);
        SellSignal("iWPRSign",SellBuffer,rates_total,prev_calculated,close,spread);
    

जहाँ BuyBuffer और SellBuffer खरीद और बिक्री सिग्नल के लिए इंडिकेटर बफर के नाम हैं। इंडिकेटर बफर में खाली मान या तो जीरो या EMPTY_VALUE सेट किया जाना चाहिए।

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

Fig.1. The iMFISignAlert indicator on the chart

Fig.1. The iMFISignAlert indicator on the chart

Fig.2. The iMFISignAlert indicator. Generating alerts.

Fig.2. The iMFISignAlert indicator. Generating alerts.

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