Laman utama Indikator Teknikal Siaran

JBrainTrend1Stop_Alert: Indikator Trend untuk MetaTrader 5

Lampiran
16895.zip (11.35 KB, Muat turun 0 kali)

JBrainTrend1Stop adalah indikator trend yang dilengkapi dengan amaran, email, dan notifikasi push.

Berikut adalah perubahan yang telah dibuat pada kod indikator untuk melaksanakan amaran, mesej email, dan notifikasi push:

  1. Pengenalan parameter input baru
    input uint NumberofBar=1;//Bilangan bar untuk isyarat input bool SoundON=true; //Aktifkan amaran input uint NumberofAlerts=2;//Bilangan amaran input bool EMailON=false; //Aktifkan penghantaran isyarat melalui email input bool PushON=false; //Aktifkan penghantaran isyarat ke peranti mudah alih 
  2. 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 untuk trend menaik
                   double &SellArrow[],       // buffer indikator dengan isyarat untuk trend menurun
                   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,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("ISYARAT BELI Ask=",Ask," Bid=",Bid," masa semasa=",text," Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": amaran isyarat beli","ISYARAT BELI di Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": ISYARAT BELI di Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
         }
    //---
    }
    //+------------------------------------------------------------------+
    //| Fungsi isyarat jual                                              |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // nama indikator untuk mesej email dan push
                    double &SellArrow[],       // buffer indikator dengan isyarat untuk trend menurun
                    double &BuyArrow[],        // buffer indikator dengan isyarat untuk trend menaik
                    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,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("ISYARAT JUAL Ask=",Ask," Bid=",Bid," masa semasa=",text," Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": amaran isyarat jual","ISYARAT JUAL di Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": ISYARAT JUAL di Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
         }
    //---
    }
    //+------------------------------------------------------------------+
    //|   Mendapatkan tempoh masa sebagai string                                |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Menambah beberapa panggilan kepada fungsi BuySignal() dan SellSignal() selepas kitaran pengiraan 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 isyarat trend menaik dan menurun (garis henti untuk panjang dan pendek). Nilai sifar atau EMPTY_VALUE harus ada dalam buffer indikator jika tiada trend yang sesuai.

Diandaikan bahawa hanya satu panggilan kepada fungsi BuySignal() dan SellSignal() akan digunakan dalam blok OnCalculate() kod indikator.

Letakkan fail kompilasi indikator JMA.mq5 ke dalam MQL5\Indicators.


Gambar 1. Indikator JBrainTrend1Stop_Alert pada carta

Gambar 1. Indikator JBrainTrend1Stop_Alert pada carta

Gambar 2. Indikator JBrainTrend1Stop_Alert. Menghasilkan amaran

Gambar 2. Indikator JBrainTrend1Stop_Alert. Menghasilkan amaran

Siaran berkaitan

Komen (0)