JBrainTrend1Stop_Alert: MetaTrader 5 के लिए प्रभावी ट्रेंड इंडिकेटर

Mike 2017.01.20 02:09 18 0 0
संलग्नक

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

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

  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[],        // ऊपर की प्रवृत्ति के लिए सिग्नल्स वाला इंडिकेटर बफर
                   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 BuySignal=false;
       bool SeriesTest=ArrayGetAsSeries(BuyArrow);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(SellArrow[index1] && SellArrow[index1]!=EMPTY_VALUE && BuyArrow[index] && 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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("खरीद सिग्नल Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": खरीद सिग्नल अलर्ट","खरीद सिग्नल Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": खरीद सिग्नल Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }

    //---
      }
    //+------------------------------------------------------------------+
    //| बिक्री सिग्नल फंक्शन                                |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // ईमेल और पुश संदेश के लिए इंडिकेटर नाम का टेक्स्ट
                    double &SellArrow[],       // नीचे की प्रवृत्ति के लिए सिग्नल्स वाला इंडिकेटर बफर
                    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 SellSignal=false;
       bool SeriesTest=ArrayGetAsSeries(SellArrow);
       int index,index1;
       if(SeriesTest)
         {
          index=int(NumberofBar);
          index1=index+1;
         }
       else
         {
          index=Rates_total-int(NumberofBar)-1;
          index1=index-1;
         }
       if(BuyArrow[index1] && BuyArrow[index1]!=EMPTY_VALUE && SellArrow[index] && 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+=_Point*Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(SoundON) Alert("बिक्री सिग्नल Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": बिक्री सिग्नल अलर्ट","बिक्री सिग्नल Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": बिक्री सिग्नल 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("JBrainTrend1Stop_Alert",BuyStopBuffer,SellStopBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("JBrainTrend1Stop_Alert",SellStopBuffer,BuyStopBuffer,rates_total,prev_calculated,close,spread);
    //---  

जहाँ BuyStopBuffer और SellStopBuffer उपर और नीचे की प्रवृत्ति सिग्नल्स को स्टोर करने वाले इंडिकेटर बफर्स के नाम हैं (लॉन्ग और शॉर्ट्स के लिए स्टॉप लाइन)। यदि उपयुक्त प्रवृत्ति नहीं है तो इंडिकेटर बफर्स में शून्य मान या EMPTY_VALUE होना चाहिए।

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

JMA.mq5 इंडिकेटर के संकलित फ़ाइल को MQL5\Indicators में रखें।


Fig.1. JBrainTrend1Stop_Alert indicator on the chart

Fig.1. JBrainTrend1Stop_Alert इंडिकेटर चार्ट पर

Fig.2. JBrainTrend1Stop_Alert indicator. Generating alerts

Fig.2. JBrainTrend1Stop_Alert इंडिकेटर। अलर्ट उत्पन्न करना

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