Waddah_Attar_Trend_Alert: MetaTrader 5 के लिए एक बेहतरीन संकेतक

Mike 2017.01.20 01:59 35 0 0
संलग्नक

वास्तविक लेखक: इंजीनियर वड्डाह अटार

Waddah_Attar_Trend संकेतक में अलर्ट, ईमेल और पुश नोटिफिकेशन की विशेषताएँ हैं।

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

  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 &ColorArray[],// रंग अनुक्रमांक बफर
    int ColorIndex,// संकेत उत्पन्न करने के लिए रंग अनुक्रमांक
    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(ColorArray);
    int index,index1;
    if(SeriesTest)
    {
    index=int(NumberofBar);
    index1=index+1;
    }
    else
    {
    index=Rates_total-int(NumberofBar)-1;
    index1=index-1;
    }
    if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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+=_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 &ColorArray[], // रंग अनुक्रमांक बफर
    int ColorIndex, // संकेत उत्पन्न करने के लिए रंग अनुक्रमांक
    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(ColorArray);
    int index,index1;
    if(SeriesTest)
    {
    index=int(NumberofBar);
    index1=index+1;
    }
    else
    {
    index=Rates_total-int(NumberofBar)-1;
    index1=index-1;
    }
    if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) 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+=_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. BuySignal() और SellSignal() फ़ंक्शन में संकेतक गणना चक्र के बाद कुछ कॉल जोड़े गए हैं:
    //---
    BuySignal("Waddah_Attar_Trend_Alert",ColorIndBuffer,0,rates_total,prev_calculated,close,spread);
    SellSignal("Waddah_Attar_Trend_Alert",ColorIndBuffer,1,rates_total,prev_calculated,close,spread);
    //---

जहाँ ColorIndBuffer रंग अनुक्रमांक बफर का नाम है, जबकि 0 और 1 रंग अनुक्रमांक बफर में रंगों की संख्या हैं।

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

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

चित्र.1. Waddah_Attar_Trend_Alert संकेतक चार्ट पर

चित्र.1. Waddah_Attar_Trend_Alert संकेतक चार्ट पर

चित्र.2. Waddah_Attar_Trend_Alert संकेतक। अलर्ट उत्पन्न करना

चित्र.2. Waddah_Attar_Trend_Alert संकेतक। अलर्ट उत्पन्न करना

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