Laman utama Indikator Teknikal Siaran

Harami_Alert: Indikator Berguna untuk MetaTrader 5

Lampiran
22403.zip (3.69 KB, Muat turun 0 kali)

Penulis asal:

Paul Stringer

Indikator ini membantu kita mengenal pasti corak Harami dan dilengkapi dengan sistem amaran, e-mel, dan notifikasi. Dengan penggunaan indikator ini, anda akan lebih cepat bertindak dalam membuat keputusan trading.

Berikut adalah beberapa perubahan yang telah dibuat pada kod indikator ini untuk melaksanakan fungsi amaran, mesej e-mel, dan notifikasi:

  1. Parameter input baru telah ditambah:
    input uint BilanganBar=1;//Bilangan bar untuk isyarat
    input bool BunyiON=true; //Aktifkan amaran
    input uint BilanganAmaran=2;//Bilangan amaran
    input bool EMailON=false; //Aktifkan penghantaran isyarat melalui e-mel
    input bool NotifikasiON=false; //Aktifkan penghantaran isyarat ke peranti mudah alih
    
  2. Tiga fungsi baru telah ditambah di akhir kod indikator: BuySignal(), SellSignal(), dan GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Fungsi isyarat beli                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string NamaIsyarat,      // teks nama indikator untuk mesej e-mel dan notifikasi
                   double &ArrowsBeli[],        // buffer indikator dengan isyarat beli
                   const int Bilangan_total,     // bilangan bar semasa
                   const int Prev_dikira, // bilangan bar pada tick sebelumnya
                   const double &Tutup[],     // harga tutup
                   const int &Spread[])       // spread
      {
    //---
       static uint pengira=0;
       if(Bilangan_total!=Prev_dikira) pengira=0;
    
       bool IsyaratBeli=false;
       bool UjiSiri=ArrayGetAsSeries(ArrowsBeli);
       int indeks;
       if(UjiSiri) indeks=int(BilanganBar);
       else indeks=Bilangan_total-int(BilanganBar)-1;
       if(NormalizeDouble(ArrowsBeli[indeks],_Digits) && ArrowsBeli[indeks]!=EMPTY_VALUE) IsyaratBeli=true;
       if(IsyaratBeli && pengira<=BilanganAmaran)
         {
          pengira++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.jam)+":"+string(tm.menit);
          UjiSiri=ArrayGetAsSeries(Tutup);
          if(UjiSiri) indeks=int(BilanganBar);
          else indeks=Bilangan_total-int(BilanganBar)-1;
          double Tanya=Tutup[indeks];
          double TanyaBid=Tutup[indeks];
          UjiSiri=ArrayGetAsSeries(Spread);
          if(UjiSiri) indeks=int(BilanganBar);
          else indeks=Bilangan_total-int(BilanganBar)-1;
          TanyaBid+=Spread[indeks]*_Point;
          string sTanya=DoubleToString(Tanya,_Digits);
          string sTanyaBid=DoubleToString(TanyaBid,_Digits);
          string sTemp=GetStringTimeframe(ChartPeriod());
          if(BunyiON) Alert("ISYARAT BELI 
     Tanya=",Tanya,"
     TanyaBid=",TanyaBid,"
     waktu sekarang=",teks,"
     Simbol=",Symbol()," Tempoh=",sTemp);
          if(EMailON) SendMail(NamaIsyarat+": ISYARAT BELI","ISYARAT BELI di Tanya="+sTanya+", TanyaBid="+sTanyaBid+", Tarikh="+teks+" Simbol="+Symbol()+" Tempoh="+sTemp);
          if(NotifikasiON) SendNotification(NamaIsyarat+": ISYARAT BELI di Tanya="+sTanya+", TanyaBid="+sTanyaBid+", Tarikh="+teks+" Simbol="+Symbol()+" Tempoh="+sTemp);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Fungsi isyarat jual                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string NamaIsyarat,      // teks nama indikator untuk mesej e-mel dan notifikasi
                    double &ArrowsJual[],       // buffer indikator dengan isyarat jual
                    const int Bilangan_total,     // bilangan bar semasa
                    const int Prev_dikira, // bilangan bar pada tick sebelumnya
                    const double &Tutup[],     // harga tutup
                    const int &Spread[])       // spread
      {
    //---
       static uint pengira=0;
       if(Bilangan_total!=Prev_dikira) pengira=0;
    
       bool IsyaratJual=false;
       bool UjiSiri=ArrayGetAsSeries(ArrowsJual);
       int indeks;
       if(UjiSiri) indeks=int(BilanganBar);
       else indeks=Bilangan_total-int(BilanganBar)-1;
       if(NormalizeDouble(ArrowsJual[indeks],_Digits) && ArrowsJual[indeks]!=EMPTY_VALUE) IsyaratJual=true;
       if(IsyaratJual && pengira<=BilanganAmaran)
         {
          pengira++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string teks=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.jam)+":"+string(tm.menit);
          UjiSiri=ArrayGetAsSeries(Tutup);
          if(UjiSiri) indeks=int(BilanganBar);
          else indeks=Bilangan_total-int(BilanganBar)-1;
          double Tanya=Tutup[indeks];
          double TanyaBid=Tutup[indeks];
          UjiSiri=ArrayGetAsSeries(Spread);
          if(UjiSiri) indeks=int(BilanganBar);
          else indeks=Bilangan_total-int(BilanganBar)-1;
          TanyaBid+=Spread[indeks]*_Point;
          string sTanya=DoubleToString(Tanya,_Digits);
          string sTanyaBid=DoubleToString(TanyaBid,_Digits);
          string sTemp=GetStringTimeframe(ChartPeriod());
          if(BunyiON) Alert("ISYARAT JUAL 
     Tanya=",Tanya,"
     TanyaBid=",TanyaBid,"
     waktu sekarang=",teks,"
     Simbol=",Symbol()," Tempoh=",sTemp);
          if(EMailON) SendMail(NamaIsyarat+": ISYARAT JUAL","ISYARAT JUAL di Tanya="+sTanya+", TanyaBid="+sTanyaBid+", Tarikh="+teks+" Simbol="+Symbol()+" Tempoh="+sTemp);
          if(NotifikasiON) SendNotification(NamaIsyarat+": ISYARAT JUAL di Tanya="+sTanya+", TanyaBid="+sTanyaBid+", Tarikh="+teks+" Simbol="+Symbol()+" Tempoh="+sTemp);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Mendapatkan tempoh sebagai string                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES tempoh)
      {
    //----
       return(StringSubstr(EnumToString(tempoh),7,-1));
    //----
      }
    
  3. Beberapa panggilan kepada fungsi BuySignal() dan SellSignal() telah ditambah selepas kitaran pengiraan indikator dalam blok OnCalculate()
    //---     
       BuySignal("Harami_Alert",ArrowsBeli,rates_total,prev_calculated,Tutup,Spread);
       SellSignal("Harami_Alert",ArrowsJual,rates_total,prev_calculated,Tutup,Spread);
    //---   
    

Di mana ArrowsBeli dan ArrowsJual adalah nama buffer indikator untuk menyimpan isyarat beli dan jual. Nilai kosong dalam buffer indikator, sama ada sifar atau EMPTY_VALUE harus ditetapkan.

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

Indikator ini pada asalnya ditulis dalam MQL4 dan pertama kali diterbitkan di Pangkalan Kod pada 14.06.2016.

Gambar 1. Indikator Harami_Alert pada carta

Gambar 1. Indikator Harami_Alert pada carta


Gambar 2. Harami_Alert. Menghasilkan amaran

Gambar 2. Harami_Alert. Menghasilkan amaran

Siaran berkaitan

Komen (0)