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

BeginnerAlert: एक बेहतरीन MetaTrader 5 संकेतक

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

असली लेखक:

EarnForex

BeginnerAlert एक ऐसा संकेतक है जो ट्रेंड के अधिकतम और न्यूनतम बिंदुओं को दर्शाता है। इसे समर्थन और प्रतिरोध बिंदुओं के रूप में उपयोग किया जा सकता है। यह वर्तमान ट्रेंड के चैनल को निर्धारित करने में मदद करता है। इस संकेतक में अलर्ट्स की सुविधा है, जो ईमेल और मोबाइल डिवाइस पर पुश-नोटिफिकेशन भेजता है।

यह एक सरल संकेतक है जो एक निश्चित अवधि का उपयोग करके न्यूनतम और अधिकतम बिंदुओं को खोजता है और उन्हें बिंदुओं के रूप में चिह्नित करता है।

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

  1. नई इनपुट पैरामीटर्स जोड़े गए:
    input uint NumberofBar=1;// संकेत के लिए बार संख्या
    input bool SoundON=true; // अलर्ट्स सक्षम करें
    input uint NumberofAlerts=2;// अलर्ट्स की संख्या
    input bool EMailON=false; // संकेत को ईमेल करने के लिए सक्षम करें
    input bool PushON=false; // मोबाइल डिवाइस पर संकेत भेजने के लिए सक्षम करें
    
  2. संकेतक कोड के अंत में तीन नई फ़ंक्शन जोड़े गए: BuySignal(), SellSignal() और GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| ख़रीद संकेत फ़ंक्शन                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // ईमेल और पुश संदेशों के लिए संकेतक नाम का टेक्स्ट
                   double &BuyArrow[],        // ख़रीद संकेतों के लिए संकेतक बफर
                   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(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;
          double Ask=Close[index];
          double Bid=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[],       // बेचने के संकेतों के लिए संकेतक बफर
                    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(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;
          double Ask=Close[index];
          double Bid=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("BeginnerAlert",BuyBuffer,rates_total,prev_calculated,Close,spread);
       SellSignal("BeginnerAlert",SellBuffer,rates_total,prev_calculated,Close,spread);
    //--- 
    

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

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

इस संकेतक को मूल रूप से MQL4 में लिखा गया था और इसे पहली बार कोड बेस पर 03.09.2008 को प्रकाशित किया गया था।

Fig1. The BeginnerAlert indicator on the chart

Fig1. The BeginnerAlert indicator on the chart

Fig.2. The BeginnerAlert indicator Generating alerts.

Fig.2. The BeginnerAlert indicator Generating alerts.

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

टिप्पणी (0)