JBrainTrend1Stop adalah indikator tren yang dilengkapi dengan fitur peringatan, email, dan notifikasi push.
Pada indikator ini, terdapat beberapa perubahan yang dilakukan untuk mengimplementasikan fitur peringatan, pesan email, dan notifikasi push:
- Menambahkan parameter input baru:
input uint NumberofBar=1;//Jumlah Bar untuk sinyal input bool SoundON=true; //Aktifkan peringatan input uint NumberofAlerts=2;//Jumlah peringatan 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 SignalSirname, // teks nama indikator untuk email dan pesan push
double &BuyArrow[], // buffer indikator dengan sinyal untuk tren naik
double &SellArrow[], // buffer indikator dengan sinyal untuk tren turun
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(SellArrow[index1] && SellArrow[index1]!=EMPTY_VALUE && BuyArrow[index] && 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+=_Point*Spread[index];
string sAsk=DoubleToString(Ask,_Digits);
string sBid=DoubleToString(Bid,_Digits);
string sPeriod=GetStringTimeframe(ChartPeriod());
if(SoundON) Alert("sinyal BUY \n Ask=",Ask,"\n Bid=",Bid,"\n waktu saat ini=",text,"\n Simbol=",Symbol()," Periode=",sPeriod);
if(EMailON) SendMail(SignalSirname+": alert sinyal BUY","sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
if(PushON) SendNotification(SignalSirname+": sinyal BUY di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
}
//---
}
//+------------------------------------------------------------------+
//| Fungsi sinyal jual |
//+------------------------------------------------------------------+
void SellSignal(string SignalSirname, // teks nama indikator untuk email dan pesan push
double &SellArrow[], // buffer indikator dengan sinyal untuk tren turun
double &BuyArrow[], // buffer indikator dengan sinyal untuk tren naik
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(BuyArrow[index1] && BuyArrow[index1]!=EMPTY_VALUE && SellArrow[index] && 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+=_Point*Spread[index];
string sAsk=DoubleToString(Ask,_Digits);
string sBid=DoubleToString(Bid,_Digits);
string sPeriod=GetStringTimeframe(ChartPeriod());
if(SoundON) Alert("sinyal SELL \n Ask=",Ask,"\n Bid=",Bid,"\n waktu saat ini=",text,"\n Simbol=",Symbol()," Periode=",sPeriod);
if(EMailON) SendMail(SignalSirname+": alert sinyal SELL","sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
if(PushON) SendNotification(SignalSirname+": sinyal SELL di Ask="+sAsk+", Bid="+sBid+", Tanggal="+text+" Simbol="+Symbol()+" Periode="+sPeriod);
}
//---
}
//+------------------------------------------------------------------+
//| Mengambil timeframe sebagai string |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
{
//----
return(StringSubstr(EnumToString(timeframe),7,-1));
//----
} - Menambahkan beberapa panggilan ke fungsi BuySignal() dan SellSignal() setelah siklus perhitungan indikator dalam blok OnCalculate():
//---
BuySignal("JBrainTrend1Stop_Alert",BuyStopBuffer,SellStopBuffer,rates_total,prev_calculated,close,spread);
SellSignal("JBrainTrend1Stop_Alert",SellStopBuffer,BuyStopBuffer,rates_total,prev_calculated,close,spread);
//---
Di mana BuyStopBuffer dan SellStopBuffer adalah nama buffer indikator untuk menyimpan sinyal tren naik dan turun (garis stop untuk long dan short). Nilai nol atau EMPTY_VALUE harus ada dalam buffer indikator jika tidak ada tren yang sesuai.
Diasumsikan bahwa hanya satu panggilan ke fungsi BuySignal() dan SellSignal() yang akan digunakan dalam blok OnCalculate() dari kode indikator.
Tempatkan file terkompilasi JMA.mq5 ke dalam MQL5\Indicators.

Gambar.1. Indikator JBrainTrend1Stop_Alert di chart

Gambar.2. Indikator JBrainTrend1Stop_Alert. Menghasilkan peringatan
Komentar 0