Laman utama Indikator Teknikal Siaran

wlxBW5ZoneAlert: Indikator Hebat untuk MetaTrader 5

Lampiran
16121.zip (3.5 KB, Muat turun 0 kali)

Penulis asal:

Wellx

Indikator signal semaphore ini berasaskan nilai dari Accelerator Oscillator dan Awesome Oscillator yang dihasilkan oleh Bill Williams. Ia dilengkapi dengan notifikasi, penghantaran e-mel, dan pemberitahuan push ke peranti mudah alih.

Berikut adalah beberapa perubahan yang telah dilakukan pada kod indikator untuk melaksanakan notifikasi, mesej e-mel dan pemberitahuan push:

  1. Parameter input baru telah diperkenalkan:
    input uint BilanganBar=1;//Bilangan bar untuk signal
    input bool BunyiON=true; //Aktifkan notifikasi
    input uint BilanganNotifikasi=2;//Bilangan notifikasi
    input bool EMailON=false; //Aktifkan penghantaran signal melalui e-mel
    input bool PushON=false; //Aktifkan penghantaran signal ke peranti mudah alih
    
  2. Tiga fungsi baru ditambah di akhir kod indikator: BuySignal(), SellSignal() dan GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fungsi signal beli                                            |
    //+------------------------------------------------------------------+
    void BuySignal(string NamaSignal,      // teks nama indikator untuk mesej e-mel dan push
                   double &ArrowBeli[],        // penampung indikator dengan signal beli
                   const int Jumlah_rates,     // bilangan bar semasa
                   const int Prev_hitung,// bilangan bar pada tick sebelumnya
                   const double &Tutup[],     // harga tutup
                   const int &Spread[])       // spread
      {
    u//---
       static uint pengira=0;
       if(Jumlah_rates!=Prev_hitung) pengira=0;
    
       bool SignalBeli=false;
       bool UjiSiri=ArrayGetAsSeries(ArrowBeli);
       int index;
       if(UjiSiri) index=int(BilanganBar);
       else index=Jumlah_rates-int(BilanganBar)-1;
       if(NormalizeDouble(ArrowBeli[index],_Digits) && ArrowBeli[index]!=EMPTY_VALUE) SignalBeli=true;
       if(SignalBeli && pengira<=BilanganNotifikasi)
         {
          pengira++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.jam)+":"+string(tm.menit);
          UjiSiri=ArrayGetAsSeries(Tutup);
          if(UjiSiri) index=int(BilanganBar);
          else index=Jumlah_rates-int(BilanganBar)-1;
          double Tanya=Tutup[index];
          double Tanya=Tutup[index];
          UjiSiri=ArrayGetAsSeries(Spread);
          if(UjiSiri) index=int(BilanganBar);
          else index=Jumlah_rates-int(BilanganBar)-1;
          Tanya+=Spread[index];
          string sTanya=DoubleToString(Tanya,_Digits);
          string sTanya=DoubleToString(Tanya,_Digits);
          string sTemp=GetStringTimeframe(ChartPeriod());
          if(BunyiON) Alert("SIGNAL BELI 
     Tanya=",Tanya,"
     Bid=",Tanya,"
     masa sekarang=",teks,"
     Simbol=",Symbol()," Period=",sTemp);
          if(EMailON) SendMail(NamaSignal+": NOTIFIKASI BELI","SIGNAL BELI di Tanya="+sTanya+", Bid="+sTanya+", Tarikh="+teks+" Simbol="+Symbol()+" Period="+sTemp);
          if(PushON) SendNotification(NamaSignal+": SIGNAL BELI di Tanya="+sTanya+", Bid="+sTanya+", Tarikh="+teks+" Simbol="+Symbol()+" Period="+sTemp);
         }
    
    u//---
      }
    //+------------------------------------------------------------------+
    //| Fungsi signal jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NamaSignal,      // teks nama indikator untuk mesej e-mel dan push
                    double &ArrowJual[],       // penampung indikator dengan signal jual
                    const int Jumlah_rates,     // bilangan bar semasa
                    const int Prev_hitung, // bilangan bar pada tick sebelumnya
                    const double &Tutup[],     // harga tutup
                    const int &Spread[])       // spread
      {
    u//---
       static uint pengira=0;
       if(Jumlah_rates!=Prev_hitung) pengira=0;
    
       bool SignalJual=false;
       bool UjiSiri=ArrayGetAsSeries(ArrowJual);
       int index;
       if(UjiSiri) index=int(BilanganBar);
       else index=Jumlah_rates-int(BilanganBar)-1;
       if(NormalizeDouble(ArrowJual[index],_Digits) && ArrowJual[index]!=EMPTY_VALUE) SignalJual=true;
       if(SignalJual && pengira<=BilanganNotifikasi)
         {
          pengira++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.jam)+":"+string(tm.menit);
          UjiSiri=ArrayGetAsSeries(Tutup);
          if(UjiSiri) index=int(BilanganBar);
          else index=Jumlah_rates-int(BilanganBar)-1;
          double Tanya=Tutup[index];
          double Tanya=Tutup[index];
          UjiSiri=ArrayGetAsSeries(Spread);
          if(UjiSiri) index=int(BilanganBar);
          else index=Jumlah_rates-int(BilanganBar)-1;
          Tanya+=Spread[index];
          string sTanya=DoubleToString(Tanya,_Digits);
          string sTanya=DoubleToString(Tanya,_Digits);
          string sTemp=GetStringTimeframe(ChartPeriod());
          if(BunyiON) Alert("SIGNAL JUAL 
     Tanya=",Tanya,"
     Bid=",Tanya,"
     masa sekarang=",teks,"
     Simbol=",Symbol()," Period=",sTemp);
          if(EMailON) SendMail(NamaSignal+": NOTIFIKASI JUAL","SIGNAL JUAL di Tanya="+sTanya+", Bid="+sTanya+", Tarikh="+teks+" Simbol="+Symbol()+" Period="+sTemp);
          if(PushON) SendNotification(NamaSignal+": SIGNAL JUAL di Tanya="+sTanya+", Bid="+sTanya+", Tarikh="+teks+" Simbol="+Symbol()+" Period="+sTemp);
         }
    u//---
      }
    //+------------------------------------------------------------------+
    //|  Mendapatkan timeframe sebagai string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
  3. Ditambah beberapa panggilan kepada fungsi BuySignal() dan SellSignal() selepas kitaran pengiraan indikator dalam blok OnCalculate()
    u//---     
       BuySignal("wlxBW5ZoneAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("wlxBW5ZoneAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    u//---

Di mana BuyBuffer dan SellBuffer adalah nama penampung indikator untuk menyimpan signal beli dan jual. Jika terdapat nilai kosong dalam penampung indikator sama ada adalah nol atau EMPTY_VALUE perlu ditetapkan.

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

Indikator ini menggunakan kelas perpustakaan SmoothAlgorithms.mqh (salin ke <terminal_data_folder>\MQL5\Include). Penggunaan kelas tersebut telah diterangkan dengan terperinci dalam artikel "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers".

Asal indikator ini ditulis dalam MQL4 dan pertama kali diterbitkan dalam Code Base pada 08.03.2008.

Fig.1. Indikator wlxBW5ZoneAlert pada carta

Fig.1. Indikator wlxBW5ZoneAlert pada carta

Fig.2. Indikator wlxBW5ZoneAlert. Menghasilkan notifikasi.

Fig.2. Indikator wlxBW5ZoneAlert. Menghasilkan notifikasi.

Siaran berkaitan

Komen (0)