BrainTrend1Sig_Alert adalah indikator sinyal semaphore yang dilengkapi dengan notifikasi, email, dan pemberitahuan push. Ini sangat membantu trader untuk tetap terhubung dengan peluang trading yang ada.
Berikut adalah beberapa perubahan yang dilakukan pada kode indikator untuk menerapkan notifikasi, pesan email, dan pemberitahuan push:
- Menambahkan parameter input baru:
input uint NumberofBar=1;//Jumlah bar untuk sinyal input bool SoundON=true; //Aktifkan notifikasi suara input uint NumberofAlerts=2;//Jumlah notifikasi input bool EMailON=false; //Aktifkan pengiriman email sinyal input bool PushON=false; //Aktifkan pengiriman notifikasi ke perangkat seluler
- Menambahkan tiga fungsi baru di akhir kode indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
//+------------------------------------------------------------------+ //| Fungsi sinyal beli | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname,// nama indikator untuk pesan email dan notifikasi double &BuyArrow[],// buffer indikator dengan sinyal beli const int Rates_total,// jumlah bar saat ini const int Prev_calculated,// jumlah bar pada tick sebelumnya const double &Close[],// harga penutupan const int &Spread[])// spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool BuySignal=false; bool SeriesTest=ArrayGetAsSeries(BuyArrow); int index; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) 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("Sinyal BUY Ask=",Ask," Bid=",Bid," waktu saat ini=",text," Simbol=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": Notifikasi sinyal BUY","Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Fungsi sinyal jual | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname,// nama indikator untuk pesan email dan notifikasi double &SellArrow[],// buffer indikator dengan sinyal jual const int Rates_total,// jumlah bar saat ini const int Prev_calculated,// jumlah bar pada tick sebelumnya const double &Close[],// harga penutupan const int &Spread[])// spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool SellSignal=false; bool SeriesTest=ArrayGetAsSeries(SellArrow); int index; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) 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("Sinyal SELL Ask=",Ask," Bid=",Bid," waktu saat ini=",text," Simbol=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": Notifikasi sinyal SELL","Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Mendapatkan timeframe sebagai string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Menambahkan beberapa panggilan ke fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator di blok OnCalculate():
//---
BuySignal("BrainTrend1Sig_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
SellSignal("BrainTrend1Sig_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
//---
Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Nilai nol atau EMPTY_VALUE harus diatur di buffer indikator sebagai nilai kosong.
Disarankan untuk hanya menggunakan satu panggilan ke fungsi BuySignal() dan SellSignal() di blok OnCalculate() dari kode indikator.

Fig.1. Indikator BrainTrend1Sig_Alert di grafik

Fig.2. Indikator BrainTrend1Sig_Alert. Menghasilkan notifikasi
Komentar 0