Laman utama Indikator Teknikal Siaran

Waddah_Attar_Trend_Alert: Indikator Terbaik untuk MetaTrader 5

Lampiran
16832.zip (22.5 KB, Muat turun 0 kali)

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 
    input uint NumberofBar=1;//Bilangan bar untuk isyarat
    input bool SoundON=true;//Aktifkan pemberitahuan
    input uint NumberofAlerts=2;//Bilangan pemberitahuan
    input bool EMailON=false;//Aktifkan pengiriman isyarat melalui e-mel
    input bool 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
    const int Rates_total,// bilangan bar semasa
    const int Prev_calculated,// bilangan bar pada tick sebelumnya
    const double &Close[],// harga tutup
    const int &Spread[]) // spread
    {
    //---
    static uint 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;
    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("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
    const int Rates_total,// bilangan bar semasa
    const int Prev_calculated,// bilangan bar pada tick sebelumnya
    const double &Close[],// harga tutup
    const int &Spread[]) // spread
    {
    //---
    static uint 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;
    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("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

Siaran berkaitan

Komen (0)