Laman utama Indikator Teknikal Siaran

BrainTrend2SigAlert: Indikator Terbaik untuk MetaTrader 5

Lampiran
16695.zip (4.09 KB, Muat turun 0 kali)

BrainTrend2Sig adalah indikator sinyal semaphore yang menawarkan pelbagai kemudahan seperti amaran, e-mel dan notifikasi push.

Berikut adalah perubahan yang telah dilakukan pada kod indikator ini untuk mengimplementasikan amaran, mesej e-mel dan notifikasi push:

  1. Diperkenalkan parameter input baru:
    input uint NumberofBar=1;//Bilangan Bar untuk sinyal
    input bool SoundON=true; //Aktifkan amaran
    input uint NumberofAlerts=2;//Bilangan amaran
    input bool EMailON=false; //Aktifkan penghantaran e-mel untuk sinyal
    input bool PushON=false; //Aktifkan penghantaran sinyal ke peranti mudah alih
  2. Menambah tiga fungsi baru di akhir kod indikator: BuySignal(), SellSignal() dan GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fungsi sinyal beli                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // nama indikator untuk mesej e-mel dan push
            double &BuyArrow[],        // buffer indikator dengan sinyal 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 sinyal jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // nama indikator untuk mesej e-mel dan push
                    double &SellArrow[],       // buffer indikator dengan sinyal 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));
      //----
      }
  3. Menambah beberapa panggilan kepada fungsi BuySignal() dan SellSignal() selepas kitaran pengiraan indikator di blok OnCalculate()
    //---
    BuySignal("BrainTrend2SigAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
    SellSignal("BrainTrend2SigAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---

Di mana BuyBuffer dan SellBuffer adalah nama buffer indikator untuk menyimpan sinyal beli dan jual. Nilai kosong atau EMPTY_VALUE harus ditetapkan dalam buffer indikator sebagai nilai kosong.

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

Fig.1. Indikator BrainTrend2SigAlert pada carta

Fig.1. Indikator BrainTrend2SigAlert pada carta

Fig.2. Indikator BrainTrend2SigAlert. Menghasilkan amaran

Fig.2. Indikator BrainTrend2SigAlert. Menghasilkan amaran

Siaran berkaitan

Komen (0)