ASCtrend adalah indikator isyarat semaphore yang memudahkan anda dengan notifikasi, email, dan pemberitahuan push.
Dalam kemas kini terbaru ini, beberapa perubahan telah dilakukan pada kod indikator untuk mengimplementasikan fungsi notifikasi, email, dan pemberitahuan push:
- Parameter input baru telah diperkenalkan:
input uint NumberofBar=1;//Bilangan bar untuk isyarat input bool SoundON=true; //Aktifkan notifikasi input uint NumberofAlerts=2;//Bilangan notifikasi input bool EMailON=false; //Aktifkan penghantaran email untuk isyarat input bool PushON=false; //Aktifkan penghantaran isyarat ke peranti mudah alih
- Tiga fungsi baru telah ditambah pada akhir kod indikator: BuySignal(), SellSignal() dan GetStringTimeframe():
//+------------------------------------------------------------------+ //| Fungsi isyarat beli | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // teks nama indikator untuk mesej email dan push double &BuyArrow[], // penampung indikator dengan isyarat beli const int Rates_total, // bilangan bar semasa const int Prev_calculated, // bilangan bar pada tick sebelumnya const double &Close[], // harga tutup const int &Spread[]) // spread { //--- 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("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 isyarat jual | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // teks nama indikator untuk mesej email dan push double &SellArrow[], // penampung indikator dengan isyarat jual const int Rates_total, // bilangan bar semasa const int Prev_calculated, // bilangan bar pada tick sebelumnya const double &Close[], // harga tutup const int &Spread[]) // spread { //--- 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("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 kepada fungsi BuySignal() dan SellSignal() telah ditambah selepas kitaran pengiraan indikator dalam blok OnCalculate():
//---
BuySignal("ASCtrend",BuyBuffer,rates_total,prev_calculated,close,spread);
SellSignal("ASCtrend",SellBuffer,rates_total,prev_calculated,close,spread);
//---
Di mana BuyBuffer dan SellBuffer adalah nama penampung indikator untuk menyimpan isyarat beli dan jual. Nilai kosong atau EMPTY_VALUE harus ditetapkan dalam penampung indikator sebagai nilai kosong.
Adalah diandaikan bahawa hanya satu panggilan kepada fungsi BuySignal() dan SellSignal() akan digunakan dalam blok OnCalculate() kod indikator.

Fig.1. Indikator ASCtrendAlert di atas carta

Fig.2. Indikator BykovTrendAlert. Menghasilkan notifikasi
Komen 0