Waddah_Attar_Trend_Alert: Indikator Terbaik untuk MetaTrader 5

Mike 2017.01.20 01:59 48 0 0
Lampiran

Pencipta Asli: Eng. Waddah Attar

Indikator Waddah_Attar_Trend dilengkapi dengan pemberitahuan, e-mel dan notifikasi push.

Berikut adalah perubahan yang telah dilakukan pada kod indikator untuk melaksanakan fitur pemberitahuan, mesej e-mel dan notifikasi push:

  1. Parameter input baru telah diperkenalkan:
    //---- Input untuk pemberitahuan inputuint NumberofBar=1;//Bilangan bar untuk isyaratinputbool SoundON=true;//Aktifkan pemberitahuaninputuint NumberofAlerts=2;//Bilangan pemberitahuaninputbool EMailON=false;//Aktifkan pengiriman isyarat melalui e-melinputbool PushON=false;//Aktifkan pengiriman isyarat ke peranti mudah alih
  2. Tiga fungsi baru ditambah di akhir kod indikator: BuySignal(), SellSignal() dan GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fungsi isyarat beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,// nama indikator untuk mesej e-mel dan push
    double &ColorArray[],// indeks warna
    int ColorIndex,// indeks warna dalam buffer indeks warna untuk menghasilkan isyarat
    constint Rates_total,// bilangan bar semasa
    constint Prev_calculated,// bilangan bar pada tick sebelumnya
    constdouble &Close[],// harga tutup
    constint &Spread[]) // 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("ISYARAT BELI Ask=",Ask," Bid=",Bid," waktu semasa=",text," Simbol=",Symbol()," Tempoh=",sPeriod);
    if(EMailON) SendMail(SignalSirname+": Pemberitahuan isyarat beli","ISYARAT BELI pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
    if(PushON) SendNotification(SignalSirname+": ISYARAT BELI pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
    }

    //---
    }
    //+------------------------------------------------------------------+
    //| Fungsi isyarat jual                                              |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,// nama indikator untuk mesej e-mel dan push
    double &ColorArray[],// indeks warna
    int ColorIndex,// indeks warna dalam buffer indeks warna untuk menghasilkan isyarat
    constint Rates_total,// bilangan bar semasa
    constint Prev_calculated,// bilangan bar pada tick sebelumnya
    constdouble &Close[],// harga tutup
    constint &Spread[]) // 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("ISYARAT JUAL Ask=",Ask," Bid=",Bid," waktu semasa=",text," Simbol=",Symbol()," Tempoh=",sPeriod);
    if(EMailON) SendMail(SignalSirname+": Pemberitahuan isyarat jual","ISYARAT JUAL pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
    if(PushON) SendNotification(SignalSirname+": ISYARAT JUAL pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
    }
    //---
    }
    //+------------------------------------------------------------------+
    //| Mendapatkan tempoh sebagai string                                  |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
    {
    //----
    return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
    }
  3. Beberapa panggilan untuk fungsi BuySignal() dan SellSignal() ditambah selepas siklus pengiraan indikator di blok OnCalculate()
    //---
    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);
    //---

Di mana ColorIndBuffer ialah nama buffer indeks warna untuk menyimpan warna garis sebagai indeks, sementara 0 dan 1 adalah nombor warna dalam buffer indeks warna.

Adalah dijangkakan bahawa hanya satu panggilan untuk fungsi BuySignal() dan SellSignal() yang akan digunakan dalam blok OnCalculate() kod indikator.

Indikator ini menggunakan kelas perpustakaan SmoothAlgorithms.mqh (salin ke <terminal_data_folder>\MQL5\Include). Penggunaan kelas ini telah diterangkan secara terperinci dalam artikel "Rata-rata Siri Harga untuk Pengiraan Pertengahan Tanpa Menggunakan Buffer Tambahan".

Fig.1. Indikator Waddah_Attar_Trend_Alert pada carta

Fig.1. Indikator Waddah_Attar_Trend_Alert pada carta

Fig.2. Indikator Waddah_Attar_Trend_Alert. Menghasilkan pemberitahuan

Fig.2. Indikator Waddah_Attar_Trend_Alert. Menghasilkan pemberitahuan

Senarai
Komen 0