BrainTrend1Sig_Alert adalah indikator isyarat semaphore yang menawarkan pelbagai ciri seperti amaran, email, dan notifikasi push.
Berikut adalah beberapa perubahan yang telah dilakukan pada kod indikator ini untuk melaksanakan amaran, mesej email, dan notifikasi push:
- Menambah parameter input baru
inputuint NumberofBar=1;//Bilangan bar untuk isyaratinputbool SoundON=true;//Aktifkan amaraninputuint NumberofAlerts=2;//Bilangan amaraninputbool EMailON=false;//Aktifkan penghantaran email isyaratinputbool PushON=false;//Aktifkan penghantaran isyarat ke peranti mudah alih
- Menambah tiga fungsi baru di akhir kod indikator: BuySignal(), SellSignal(), dan GetStringTimeframe()
//+------------------------------------------------------------------+//| Fungsi isyarat beli |//+------------------------------------------------------------------+void BuySignal(string SignalSirname, // nama indikator untuk mesej email dan push double &BuyArrow[], // buffer indikator dengan isyarat beli constint Rates_total, // jumlah bar semasa constint Prev_calculated, // bilangan bar pada tick sebelumnya constdouble &Close[], // harga tutup constint &Spread[]) // spread { //--- staticuint 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; doubleAsk=Close[index]; doubleBid=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("ISYARAT BELI Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": amaran isyarat BELI","ISYARAT BELI pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": ISYARAT BELI pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+//| Fungsi isyarat jual |//+------------------------------------------------------------------+void SellSignal(string SignalSirname, // nama indikator untuk mesej email dan push double &SellArrow[], // buffer indikator dengan isyarat jual constint Rates_total, // jumlah bar semasa constint Prev_calculated, // bilangan bar pada tick sebelumnya constdouble &Close[], // harga tutup constint &Spread[]) // spread { //--- staticuint 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; doubleAsk=Close[index]; doubleBid=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("ISYARAT JUAL Ask=",Ask," Bid=",Bid," currtime=",text," Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": amaran isyarat JUAL","ISYARAT JUAL pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": ISYARAT JUAL pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+//| Mendapatkan timeframe sebagai string |//+------------------------------------------------------------------+string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Menambah beberapa panggilan kepada fungsi BuySignal() dan SellSignal() selepas kitaran pengiraan indikator dalam blok OnCalculate() //---
BuySignal("BrainTrend1Sig_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
SellSignal("BrainTrend1Sig_Alert",SellBuffer,rates_total,prev_calculated,close,spread);
//---
Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan isyarat beli dan jual. Nilai kosong atau EMPTY_VALUE harus ditetapkan dalam buffer indikator sebagai nilai kosong.
Diandaikan bahawa hanya satu panggilan kepada fungsi BuySignal() dan SellSignal() akan digunakan dalam blok OnCalculate() kod indikator.

Fig.1. Indikator BrainTrend1Sig_Alert pada carta

Fig.2. Indikator BrainTrend1Sig_Alert. Menghasilkan amaran

Komen 0