Penulis Asli:
Ramdass - Konversi Saja
Indikator semafor sinyal BykovTrend ini dilengkapi dengan fitur notifikasi, pengiriman email, dan pemberitahuan ke perangkat mobile.
Beberapa perubahan telah dilakukan pada kode indikator ini guna mengimplementasikan notifikasi, pesan email, dan pemberitahuan push:
- Menambahkan parameter input baru:
input uint JumlahBar=1;//Jumlah bar untuk sinyal input bool SuaraON=true; //Aktifkan notifikasi suara input uint JumlahNotifikasi=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 NamaSinyal, // nama indikator untuk email dan pesan push double &TandaBeli[], // buffer indikator dengan sinyal beli const int TotalBar, // jumlah bar saat ini const int SebelumnyaDihitung, // jumlah bar pada tick sebelumnya const double &Tutup[], // harga penutupan const int &Spread[]) // spread { //--- static uint counter=0; if(TotalBar!=SebelumnyaDihitung) counter=0; bool SinyalBeli=false; bool UjiSeri=ArrayGetAsSeries(TandaBeli); int index; if(UjiSeri) index=int(JumlahBar); else index=TotalBar-int(JumlahBar)-1; if(NormalizeDouble(TandaBeli[index],_Digits) && TandaBeli[index]!=EMPTY_VALUE) SinyalBeli=true; if(SinyalBeli && counter<=JumlahNotifikasi) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); UjiSeri=ArrayGetAsSeries(Tutup); if(UjiSeri) index=int(JumlahBar); else index=TotalBar-int(JumlahBar)-1; double Tanya=Tutup[index]; double Tawaran=Tutup[index]; UjiSeri=ArrayGetAsSeries(Spread); if(UjiSeri) index=int(JumlahBar); else index=TotalBar-int(JumlahBar)-1; Tawaran+=Spread[index]; string sTanya=DoubleToString(Tanya,_Digits); string sTawaran=DoubleToString(Tawaran,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(SuaraON) Alert("Sinyal BELI \n Tanya=",Tanya,"\n Tawaran=",Tawaran,"\n waktu saat ini=",teks,"\n Simbol=",Symbol()," Periode=",sPeriode); if(EmailON) SendMail(NamaSinyal+": Peringatan sinyal BELI","Sinyal BELI di Tanya="+sTanya+", Tawaran="+sTawaran+", Tanggal="+teks+" Simbol="+Symbol()+" Periode="+sPeriode); if(PushON) SendNotification(NamaSinyal+": Sinyal BELI di Tanya="+sTanya+", Tawaran="+sTawaran+", Tanggal="+teks+" Simbol="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| Fungsi sinyal jual | //+------------------------------------------------------------------+ void SellSignal(string NamaSinyal, // nama indikator untuk email dan pesan push double &TandaJual[], // buffer indikator dengan sinyal jual const int TotalBar, // jumlah bar saat ini const int SebelumnyaDihitung, // jumlah bar pada tick sebelumnya const double &Tutup[], // harga penutupan const int &Spread[]) // spread { //--- static uint counter=0; if(TotalBar!=SebelumnyaDihitung) counter=0; bool SinyalJual=false; bool UjiSeri=ArrayGetAsSeries(TandaJual); int index; if(UjiSeri) index=int(JumlahBar); else index=TotalBar-int(JumlahBar)-1; if(NormalizeDouble(TandaJual[index],_Digits) && TandaJual[index]!=EMPTY_VALUE) SinyalJual=true; if(SinyalJual && counter<=JumlahNotifikasi) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); UjiSeri=ArrayGetAsSeries(Tutup); if(UjiSeri) index=int(JumlahBar); else index=TotalBar-int(JumlahBar)-1; double Tanya=Tutup[index]; double Tawaran=Tutup[index]; UjiSeri=ArrayGetAsSeries(Spread); if(UjiSeri) index=int(JumlahBar); else index=TotalBar-int(JumlahBar)-1; Tawaran+=Spread[index]; string sTanya=DoubleToString(Tanya,_Digits); string sTawaran=DoubleToString(Tawaran,_Digits); string sPeriode=GetStringTimeframe(ChartPeriod()); if(SuaraON) Alert("Sinyal JUAL \n Tanya=",Tanya,"\n Tawaran=",Tawaran,"\n waktu saat ini=",teks,"\n Simbol=",Symbol()," Periode=",sPeriode); if(EmailON) SendMail(NamaSinyal+": Peringatan sinyal JUAL","Sinyal JUAL di Tanya="+sTanya+", Tawaran="+sTawaran+", Tanggal="+teks+" Simbol="+Symbol()+" Periode="+sPeriode); if(PushON) SendNotification(NamaSinyal+": Sinyal JUAL di Tanya="+sTanya+", Tawaran="+sTawaran+", Tanggal="+teks+" Simbol="+Symbol()+" Periode="+sPeriode); } //--- } //+------------------------------------------------------------------+ //| Mendapatkan timeframe dalam bentuk 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("BykovTrendAlert",TandaBeli,total_bar,prev_calculated,tutup,spread); SellSignal("BykovTrendAlert",TandaJual,total_bar,prev_calculated,tutup,spread); //---
Di mana TandaBeli dan TandaJual adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Nilai kosong di buffer indikator, baik nol atau EMPTY_VALUE, harus diatur.
Diperkirakan bahwa hanya satu panggilan ke fungsi BuySignal() dan SellSignal() yang akan digunakan di blok OnCalculate() dari kode indikator.
Indikator ini pertama kali diimplementasikan dalam MQL4 dan dipublikasikan di Code Base pada 28.09.2007.

Gambar 1. Indikator BykovTrendAlert pada grafik
Gambar 2. Indikator BykovTrendAlert Menghasilkan notifikasi.
Postingan terkait
- Panduan Lengkap MetaCOT 2 CFTC ToolBox untuk Analisis COT di MT4
- BykovTrend_HTF_Signal: Indikator Canggih untuk MetaTrader 5
- Indikator Open Range Breakout untuk MetaTrader 5: Strategi Trading yang Efektif
- Indikator Alerts pada New Bar untuk MetaTrader 4: Panduan Lengkap
- Master Tools: Alat Indikator untuk MetaTrader 4 yang Harus Dimiliki
