Laman utama Indikator Teknikal Siaran

Iin_MA_Signal_Alert: Indikator untuk MetaTrader 5 dengan Notifikasi

Lampiran
21911.zip (4.1 KB, Muat turun 0 kali)

Penulis asal: Iin Zulkarnainn

Iin_MA_Signal adalah indikator isyarat semaphore yang dilengkapi dengan notifikasi, email, dan pemberitahuan push.

Berikut adalah perubahan yang telah dilakukan pada kod indikator ini untuk melaksanakan notifikasi, mesej email, dan pemberitahuan push:

  1. Diperkenalkan parameter input baru:
    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
    
  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 beli
                   const int Rates_total,     // jumlah 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("ISYARAT BELI\n Ask=",Ask,"\n Bid=",Bid,"\n waktu semasa=",text,"\n Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": amaran isyarat BELI","ISYARAT BELI pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": ISYARAT BELI pada 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 jual
                    const int Rates_total,     // jumlah 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("ISYARAT JUAL\n Ask=",Ask,"\n Bid=",Bid,"\n waktu semasa=",text,"\n Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": amaran isyarat JUAL","ISYARAT JUAL pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": ISYARAT JUAL pada Ask="+sAsk+", Bid="+sBid+", Tarikh="+text+" Simbol="+Symbol()+" Tempoh="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Mendapatkan tempoh 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("Iin_MA_Signal_Alert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("Iin_MA_Signal_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 dalam buffer indikator mestilah sama ada nol atau EMPTY_VALUE.

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

    Fig. 1. Iin_MA_Signal_Alert pada carta

    Fig. 1. Iin_MA_Signal_Alert pada carta


    Fig. 2. Iin_MA_Signal_Alert. Menghasilkan notifikasi

    Fig. 2. Iin_MA_Signal_Alert. Menghasilkan notifikasi

    Siaran berkaitan

Komen (0)