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

Mike 2016.09.19 21:41 83 0 0
संलग्नक

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

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

  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[])       // स्प्रेड
      {u//---
       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("खरीद संकेत 
     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[],       // बिक्री संकेतों के लिए संकेतक बफर
                    constint Rates_total,     // बार की वर्तमान संख्या
                    constint Prev_calculated, // पिछले टिक पर बार की संख्या
                    constdouble &Close[],     // क्लोज़ प्राइस
                    constint &Spread[])       // स्प्रेड
      {
    u//---
       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("बिक्री संकेत 
     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