Halo para trader! Kali ini kita akan membahas tentang DSSBressertSignAlert, indikator yang sangat berguna bagi kalian yang menggunakan MetaTrader 5. Indikator ini berbasis pada algoritma DSSBressert dan dilengkapi dengan fitur notifikasi yang dapat mengirimkan email dan notifikasi push ke perangkat mobile kalian.
Berikut adalah beberapa perubahan yang telah dilakukan pada kode indikator ini untuk mengimplementasikan fitur notifikasi:
- Menambahkan parameter input baru:
- Menambahkan tiga fungsi baru di akhir kode indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
- Menambahkan beberapa pemanggilan fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator di blok OnCalculate():
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 sinyal ke perangkat mobile
//+------------------------------------------------------------------+ //| Fungsi Sinyal Beli | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // Nama indikator untuk 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 { u//--- 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 BELI Ask=",Ask," Bid=",Bid," waktu sekarang=",text," Simbol=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": notifikasi sinyal BELI","Sinyal BELI di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": Sinyal BELI di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); } u//--- } //+------------------------------------------------------------------+ //| Fungsi Sinyal Jual | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // Nama indikator untuk 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 { u//--- 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 JUAL Ask=",Ask," Bid=",Bid," waktu sekarang=",text," Simbol=",Symbol()," Periode=",sPeriod); if(EMailON) SendMail(SignalSirname+": notifikasi sinyal JUAL","Sinyal JUAL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); if(PushON) SendNotification(SignalSirname+": Sinyal JUAL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod); } u//--- } //+------------------------------------------------------------------+ //| Mendapatkan timeframe sebagai string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
u//--- BuySignal("DSSBressertSignAlert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("DSSBressertSignAlert",SellBuffer,rates_total,prev_calculated,close,spread); u//---
Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Pastikan nilai kosong dalam buffer indikator diatur menjadi nol atau EMPTY_VALUE.
Perlu diingat bahwa hanya satu pemanggilan fungsi BuySignal() dan SellSignal() yang akan digunakan dalam blok OnCalculate() dari kode indikator ini.
Indikator ini juga menggunakan kelas dari pustaka SmoothAlgorithms.mqh (salin ke <terminal_data_folder>\MQL5\Include). Penggunaan kelas ini sudah dijelaskan secara rinci dalam artikel "Rata-rata Harga untuk Perhitungan Sementara Tanpa Menggunakan Buffer Tambahan".

Gambar 1. Indikator DSSBressertSignAlert pada chart
Gambar 2. Indikator DSSBressertSignAlert. Menghasilkan notifikasi.
Postingan terkait
- WeightOscillator_Alert: Indikator Trend dengan Notifikasi untuk MetaTrader 5
- Bollinger Bands Kustom untuk MetaTrader 5: Panduan Lengkap
- ColorXdinMA_Alert: Indikator Trend dengan Notifikasi untuk MetaTrader 5
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- Volume Profile + Range v6.0: Indikator Penting untuk MetaTrader 5
