Indikator ColorX2MA ini sangat menarik kerana ia dilengkapi dengan sistem amaran yang menghantar email dan notifikasi kepada peranti mudah alih.
Beberapa perubahan telah dilakukan pada kod indikator ini untuk mengimplementasikan sistem amaran, email, dan notifikasi:
- Parameter input baru telah diperkenalkan:
//---- Pembolehubah input untuk amaran input uint NumberofBar=1; //Nombor bar untuk isyarat input bool SoundON=true; //Aktifkan amaran input uint NumberofAlerts=2; //Bilangan amaran input bool EMailON=false; //Aktifkan penghantaran email untuk isyarat input bool PushON=false; //Aktifkan penghantaran isyarat ke peranti mudah alih
- Tiga fungsi baru telah ditambah di akhir kod indikator: BuySignal(), SellSignal(), dan GetStringTimeframe()
//+------------------------------------------------------------------+ //| Fungsi isyarat beli | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname,// nama indikator untuk email dan mesej push double &ColorArray[],// buffer indeks warna int ColorIndex,// indeks warna dalam buffer 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+=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," currtime=",text," Simbol=",Symbol()," Tempoh=",sPeriod); if(EMailON) SendMail(SignalSirname+": 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 email dan mesej push double &ColorArray[], // buffer indeks warna int ColorIndex, // indeks warna dalam buffer 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+=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," currtime=",text," Simbol=",Symbol()," Tempoh=",sPeriod); if(EMailON) SendMail(SignalSirname+": 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 masa sebagai string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Beberapa panggilan kepada fungsi BuySignal() dan SellSignal() telah ditambah selepas kitaran pengiraan indikator dalam blok OnCalculate()
//--- BuySignal("X2MA_Alert",ColorX2MA,1,rates_total,prev_calculated,close,spread); SellSignal("X2MA_Alert",ColorX2MA,2,rates_total,prev_calculated,close,spread); //---
Di mana ColorX2MA adalah nama buffer indeks warna untuk menyimpan warna garis dalam bentuk indeks.
Dianggarkan hanya satu panggilan kepada fungsi BuySignal() dan SellSignal() akan digunakan dalam blok OnCalculate() kod indikator ini.
Indikator ini menggunakan kelas dari perpustakaan SmoothAlgorithms.mqh (salin ke <terminal_data_folder>\MQL5\Include). Penggunaan kelas ini telah diterangkan dengan terperinci dalam artikel "Rata-Rata Siri Harga untuk Pengiraan Pertengahan Tanpa Menggunakan Buffer Tambahan".

Fig1. Indikator ColorX2MA_Alert pada carta
Fig.2. Indikator ColorX2MA_Alert. Menghasilkan amaran.
Siaran berkaitan
- X2MA_HTF_Signal_BG: Indikator Terbaik untuk MetaTrader 5
- X2MA_HTF_Signal: Petunjuk Trend untuk MetaTrader 5
- Panduan Volume Profile + Range v6.0 untuk MetaTrader 5: Indikator Trading Utama
- ColorXdinMA_Alert: Indikator Trend untuk MetaTrader 5 dengan Notifikasi
- Memahami Indikator ColorX2MA_Osc untuk MetaTrader 5
