Penulis asli:
Rafael Jimenez Tocino
Indikator RJTX_Matches_Smoothed dilengkapi dengan notifikasi, email, dan pemberitahuan ke smartphone.
Berikut adalah beberapa perubahan yang dilakukan pada kode indikator untuk mengimplementasikan notifikasi, pesan email, dan pemberitahuan:
- Variabel input baru ditambahkan ke input indikator:
input uint NumberofBar=1; // Nomor bar untuk mengaktifkan sinyal input bool SoundON=true; // Aktifkan notifikasi suara input uint NumberofAlerts=2; // Jumlah notifikasi input bool EMailON=false; // Aktifkan pengiriman sinyal melalui email input bool PushON=false; // Aktifkan pengiriman sinyal ke perangkat mobile
- Tiga fungsi baru ditambahkan di akhir indikator: BuySignal(), SellSignal(), dan GetStringTimeframe()
//+------------------------------------------------------------------+ //| Fungsi sinyal beli | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // teks 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,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(!BuyArrow[index1] && BuyArrow[index]) 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]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Fungsi sinyal jual | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // teks 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,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(!SellArrow[index1] && SellArrow[index]) 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]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Mendapatkan timeframe sebagai string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Beberapa panggilan fungsi BuySignal() dan SellSignal() ditambahkan setelah siklus perhitungan indikator dalam blok OnCalculate()
//--- BuySignal("RJTX_Matches_Smoothed_Alert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("RJTX_Matches_Smoothed_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 ditambahkan ke buffer indikator sebagai nilai kosong.
Hanya satu panggilan untuk masing-masing fungsi BuySignal() dan SellSignal() yang diasumsikan digunakan dalam kode indikator di blok OnCalculate().
Indikator ini menggunakan kelas dari pustaka SmoothAlgorithms.mqh (yang harus disalin ke folder <terminal_data_directory>\MQL5\Include). Penggunaan kelas ini telah dijelaskan secara rinci dalam artikel Rata-Rata Seri Harga untuk Perhitungan Menengah Tanpa Menggunakan Buffer Tambahan.
Indikator ini pertama kali diimplementasikan dalam MQL4 dan diterbitkan di Code Base pada 23 Desember 2015.

Gambar.1. Indikator RJTX_Matches_Smoothed_Alert pada grafik
Gambar. 2. Indikator RJTX_Matches_Smoothed_Alert. Pemberitahuan
Postingan terkait
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- Panduan Menggunakan Indikator RJTX_Matches_Smoothed_main di MetaTrader 5
- RJTX_Matches_Smoothed: Indikator Canggih untuk MetaTrader 5
- Volume Profile + Range v6.0: Indikator Penting untuk MetaTrader 5
- Mengoptimalkan Trading dengan Indikator RJTX_Matches_Smoothed_Alert untuk MetaTrader 5
