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

DSSBressertSignAlert: एक अद्भुत संकेतक MetaTrader 5 के लिए

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

क्या आप अपने ट्रेडिंग अनुभव को और बेहतर बनाना चाहते हैं? तो DSSBressertSignAlert संकेतक आपके लिए एक बेहतरीन टूल साबित हो सकता है। यह संकेतक MetaTrader 5 पर आधारित है और इसमें अलर्ट, ईमेल भेजने और मोबाइल डिवाइस पर पुश-नोटिफिकेशन भेजने की सुविधा है।

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

  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[])       // स्प्रेड
      {u//---
       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("खरीद संकेत 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": खरीद संकेत अलर्ट","खरीद संकेत at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": खरीद संकेत at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| बिक्री संकेत फ़ंक्शन                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // ईमेल और पुश संदेशों के लिए संकेतक नाम का टेक्स्ट
                    double &SellArrow[],       // बिक्री संकेतों के लिए संकेतक बफर
                    const int Rates_total,     // बार की वर्तमान संख्या
                    const int Prev_calculated, // पिछले टिक पर बार की संख्या
                    const double &Close[],     // क्लोज़ प्राइस
                    const int &Spread[])       // स्प्रेड
      {
    u//---
       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("बिक्री संकेत 
     Ask=",Ask,"
     Bid=",Bid,"
     currtime=",text,"
     Symbol=",Symbol()," Period=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": बिक्री संकेत अलर्ट","बिक्री संकेत at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": बिक्री संकेत at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
         }
    u//---
      }
    //+------------------------------------------------------------------+
    //|  टाइमफ्रेम को स्ट्रिंग के रूप में प्राप्त करना                          |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. OnCalculate() ब्लॉक में संकेतक गणना चक्रों के बाद BuySignal() और SellSignal() फ़ंक्शंस को कॉल करने के लिए कुछ जोड़ें
    u//---     
       BuySignal("DSSBressertSignAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("DSSBressertSignAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    u//---
    

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

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

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


Fig.1. The DSSBressertSignAlert indicator on the chart

Fig.1. The DSSBressertSignAlert indicator on the chart

Fig.2. The DSSBressertSignAlert indicator. Generating alerts.

Fig.2. The DSSBressertSignAlert indicator. Generating alerts.

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

टिप्पणी (0)