Penulis Asli:
Wellx
Indikator sinyal semaphore ini didasarkan pada nilai dari Accelerator Oscillator dan Awesome Oscillator yang dikembangkan oleh Bill Williams. Fitur utama dari indikator ini adalah kemampuannya untuk memberikan notifikasi, mengirim email, dan push-notifikasi ke perangkat mobile.
Beberapa perubahan telah dilakukan pada kode indikator ini untuk mengimplementasikan notifikasi, pesan email, dan push-notifikasi:
- 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 sinyal ke perangkat mobile
- Menambahkan tiga fungsi baru di akhir kode indikator: BuySignal(), SellSignal(), dan GetStringTimeframe():
//+------------------------------------------------------------------+ //| Fungsi sinyal beli | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // teks nama indikator untuk email dan pesan 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 { 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 BUY Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": notifikasi sinyal BUY","Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": Sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Symbol="+Symbol()+" Period="+sPeriod); } u//--- } //+------------------------------------------------------------------+ //| Fungsi sinyal jual | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // teks nama indikator untuk email dan pesan 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 { 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 SELL Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": notifikasi sinyal SELL","Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": Sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Symbol="+Symbol()+" Period="+sPeriod); } u//--- } //+------------------------------------------------------------------+ //| 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():
u//--- BuySignal("wlxBW5ZoneAlert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("wlxBW5ZoneAlert",SellBuffer,rates_total,prev_calculated,close,spread); u//---
Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Nilai kosong dalam buffer indikator baik nol atau EMPTY_VALUE harus diatur.
Diperkirakan hanya satu panggilan ke fungsi BuySignal() dan SellSignal() yang akan digunakan dalam blok OnCalculate() dari kode indikator.
Indikator ini menggunakan kelas pustaka SmoothAlgorithms.mqh (salin ke <folder_data_terminal>\MQL5\Include). Penggunaan kelas-kelas ini telah dijelaskan secara mendalam dalam artikel "Rata-rata Seri Harga untuk Perhitungan Intermediate Tanpa Menggunakan Buffer Tambahan".
Awalnya, indikator ini ditulis dalam MQL4 dan pertama kali dipublikasikan di Code Base pada tanggal 08.03.2008.

Gambar.1. Indikator wlxBW5ZoneAlert di chart
Gambar.2. Indikator wlxBW5ZoneAlert. Menghasilkan notifikasi.
Postingan terkait
- wlxBW5Zone: Indikator Canggih untuk MetaTrader 5
- Menggunakan Buffer Jam dalam MetaTrader 5 untuk Pengumpulan Data Trading
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- wlxBWWiseMan-2: Indikator Unggulan untuk MetaTrader 5
- Mengenal Indikator SymbolX_Candle untuk MetaTrader 5
