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:
- 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
- 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));
//----
} - 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.2. Indikator Waddah_Attar_Trend_Alert. Menghasilkan pemberitahuan
Siaran berkaitan
- HarmonikManual: Indikator Canggih untuk MetaTrader 4
- Penggunaan Buffer Jam untuk Pengumpulan Data di MetaTrader 5
- Alat Master - Indikator untuk MetaTrader 4
- Indikator Pembukaan Rentang Untuk MetaTrader 5: Panduan Lengkap
- Paparan Grafik Trend Semasa untuk Semua Tempoh Dalam Satu Panel - Indikator untuk MetaTrader 4
