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:
inputuint JumlahBar=1;//Jumlah bar untuk sinyalinputbool SuaraON=true; //Aktifkan notifikasi suarainputuint JumlahNotifikasi=2;//Jumlah notifikasiinputbool EmailON=false; //Aktifkan pengiriman email sinyalinputbool 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 constint TotalBar, // jumlah bar saat ini constint SebelumnyaDihitung, // jumlah bar pada tick sebelumnya constdouble &Tutup[], // harga penutupan constint &Spread[]) // spread { //--- staticuint 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; doubleTanya=Tutup[index]; doubleTawaran=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 constint TotalBar, // jumlah bar saat ini constint SebelumnyaDihitung, // jumlah bar pada tick sebelumnya constdouble &Tutup[], // harga penutupan constint &Spread[]) // spread { //--- staticuint 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; doubleTanya=Tutup[index]; doubleTawaran=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.


Komentar 0