BrainTrend2Sig merupakan indikator sinyal semaphore yang kini dilengkapi dengan fitur notifikasi, email, dan push notification. Dengan fitur-fitur ini, kamu bisa lebih mudah mendapatkan sinyal trading yang akurat!
Berikut adalah beberapa perubahan yang dilakukan pada kode indikator untuk mengimplementasikan notifikasi, pesan email, dan push notification:
- Menambahkan parameter input baru:
- Menambahkan tiga fungsi baru di akhir kode indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
- Menambahkan beberapa panggilan untuk fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator di blok OnCalculate():
- Panduan Lengkap MetaCOT 2 CFTC ToolBox untuk Analisis COT di MT4
- Indikator Alerts pada New Bar untuk MetaTrader 4: Panduan Lengkap
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- Master Tools: Alat Indikator untuk MetaTrader 4 yang Harus Dimiliki
- Mengenal Indicator BrainTrend2Stop_HTF untuk MetaTrader 5
input uint NumberofBar=1;//Jumlah bar untuk sinyal input bool SoundON=true; //Aktifkan notifikasi suara input uint NumberofAlerts=2;//Jumlah notifikasi yang akan dikirim input bool EMailON=false; //Aktifkan pengiriman email sinyal input bool PushON=false; //Aktifkan pengiriman sinyal ke perangkat mobile
//+------------------------------------------------------------------+ //| Fungsi sinyal beli | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname,// nama indikator untuk pesan email dan push 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 pada Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": Sinyal BUY pada Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Fungsi sinyal jual | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname,// nama indikator untuk pesan email dan push 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 pada Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": Sinyal SELL pada 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)); //---- }
BuySignal("BrainTrend2SigAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
SellSignal("BrainTrend2SigAlert",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 ditetapkan dalam buffer indikator sebagai nilai kosong.
Diperkirakan bahwa hanya satu panggilan untuk fungsi BuySignal() dan SellSignal() yang akan digunakan dalam blok OnCalculate() dari kode indikator.

Gambar 1. Indikator BrainTrend2SigAlert di grafik

Gambar 2. Indikator BrainTrend2SigAlert. Menghasilkan notifikasi