Laman utama Indikator Teknikal Siaran

ColorJFatl_Digit_Alert: Indikator Keren untuk MetaTrader 5

Lampiran
16407.zip (23.48 KB, Muat turun 0 kali)

Indikator ColorJFatl_Digit ini mempunyai ciri-ciri amaran yang membolehkan anda menerima pemberitahuan melalui email dan notifikasi push ke peranti mudah alih anda.

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

  1. Diperkenalkan parameter input baru:
    //---- Pembolehubah input untuk amaran 
    input uint JumlahBar=1;                    //Nombor bar untuk isyarat
    input bool BunyiON=true;                     //Aktifkan amaran
    input uint JumlahAmaran=2;                 //Jumlah 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 NamaIsyarat,// teks nama indikator untuk email dan mesej push
                   double &ArrayWarna[],// penampung indeks warna
                   int IndeksWarna,// indeks warna dalam penampung indeks warna untuk menghasilkan isyarat
                   const int JumlahBar,     // nombor bar terkini
                   const int Prev_calculated, // nombor bar pada tick sebelumnya
                   const double &Close[],     // harga tutup
                   const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(JumlahBar!=Prev_calculated) counter=0;
    
       bool IsyaratBeli=false;
       bool UjiSeries=ArrayGetAsSeries(ArrayWarna);
       int index,index1;
       if(UjiSeries)
         {
          index=int(JumlahBar);
          index1=index+1;
         }
       else
         {
          index=JumlahBar-int(JumlahBar)-1;
          index1=index-1;
         }
       if(ArrayWarna[index1]!=IndeksWarna && ArrayWarna[index]==IndeksWarna) IsyaratBeli=true;
       if(IsyaratBeli && counter<=JumlahAmaran)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          UjiSeries=ArrayGetAsSeries(Close);
          if(UjiSeries) index=int(JumlahBar);
          else index=JumlahBar-int(JumlahBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          UjiSeries=ArrayGetAsSeries(Spread);
          if(UjiSeries) index=int(JumlahBar);
          else index=JumlahBar-int(JumlahBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(BunyiON) Alert("ISYARAT BELI 
     Ask=",Ask,"
     Bid=",Bid,"
     waktu sekarang=",teks,"
     Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(NamaIsyarat+": amaran isyarat beli","ISYARAT BELI di Ask="+sAsk+", Bid="+sBid+", Tarikh="+teks+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(NamaIsyarat+": ISYARAT BELI di Ask="+sAsk+", Bid="+sBid+", Tarikh="+teks+" Simbol="+Symbol()+" Tempoh="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi isyarat jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NamaIsyarat,      // teks nama indikator untuk email dan mesej push
                    double &ArrayWarna[],       // penampung indeks warna
                    int IndeksWarna,             // indeks warna dalam penampung indeks warna untuk menghasilkan isyarat
                    const int JumlahBar,     // nombor bar terkini
                    const int Prev_calculated, // nombor bar pada tick sebelumnya
                    const double &Close[],     // harga tutup
                    const int &Spread[])       // spread
      {
    //---
       static uint counter=0;
       if(JumlahBar!=Prev_calculated) counter=0;
    
       bool IsyaratJual=false;
       bool UjiSeries=ArrayGetAsSeries(ArrayWarna);
       int index,index1;
       if(UjiSeries)
         {
          index=int(JumlahBar);
          index1=index+1;
         }
       else
         {
          index=JumlahBar-int(JumlahBar)-1;
          index1=index-1;
         }
       if(ArrayWarna[index1]!=IndeksWarna && ArrayWarna[index]==IndeksWarna) IsyaratJual=true;
       if(IsyaratJual && counter<=JumlahAmaran)
         {
          counter++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          UjiSeries=ArrayGetAsSeries(Close);
          if(UjiSeries) index=int(JumlahBar);
          else index=JumlahBar-int(JumlahBar)-1;
          double Ask=Close[index];
          double Bid=Close[index];
          UjiSeries=ArrayGetAsSeries(Spread);
          if(UjiSeries) index=int(JumlahBar);
          else index=JumlahBar-int(JumlahBar)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriod=GetStringTimeframe(ChartPeriod());
          if(BunyiON) Alert("ISYARAT JUAL 
     Ask=",Ask,"
     Bid=",Bid,"
     waktu sekarang=",teks,"
     Simbol=",Symbol()," Tempoh=",sPeriod);
          if(EMailON) SendMail(NamaIsyarat+": amaran isyarat jual","ISYARAT JUAL di Ask="+sAsk+", Bid="+sBid+", Tarikh="+teks+" Simbol="+Symbol()+" Tempoh="+sPeriod);
          if(PushON) SendNotification(NamaIsyarat+": ISYARAT JUAL di Ask="+sAsk+", Bid="+sBid+", Tarikh="+teks+" 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("ColorJFatl_Digit_Alert",ArrayWarna,2,JumlahBar,Prev_calculated,Close,Spread);
       SellSignal("ColorJFatl_Digit_Alert",ArrayWarna,0,JumlahBar,Prev_calculated,Close,Spread);
    //--- 
    

Di mana ArrayWarna adalah nama penampung indeks warna untuk menyimpan warna garis dalam bentuk indeks.

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

Indikator ini menggunakan kelas dari pustaka SmoothAlgorithms.mqh (salin ke <terminal_data_folder>\MQL5\Include). Penggunaan kelas ini telah diterangkan dengan terperinci dalam artikel "Rata-Rata Siri Harga untuk Pengiraan Sementara Tanpa Menggunakan Penampung Tambahan".

Fig1. Indikator ColorJFatl_Digit_Alert pada carta

Fig1. Indikator ColorJFatl_Digit_Alert pada carta

Fig.2. Indikator ColorJFatl_Digit_Alert Menghasilkan amaran.

Fig.2. Indikator ColorJFatl_Digit_Alert Menghasilkan amaran.

Siaran berkaitan

Komen (0)