Home Technische indicator Bericht

BykovTrendAlert: De Indicator voor MetaTrader 5 met Waarschuwingen

Bijlage
16458.zip (3.75 KB, Downloaden 0 keer)

Werkelijke auteur:

Ramdass - Conversie alleen

De BykovTrend semaphore signaalindicator, die waarschuwingen biedt, e-mails verstuurt en pushmeldingen naar mobiele apparaten stuurt.

De volgende wijzigingen zijn aangebracht in de code van de indicator om de waarschuwingen, e-mailberichten en pushmeldingen te implementeren:

  1. Nieuwe invoerparameters toegevoegd:
    input uint NumberofBar=1;//Aantal bars voor het signaal
    input bool SoundON=true;//Waarschuwingen inschakelen
    input uint NumberofAlerts=2;//Aantal waarschuwingen
    input bool EMailON=false;//E-mail voor het signaal inschakelen
    input bool PushON=false;//Pushmeldingen naar mobiele apparaten inschakelen
    
  2. Drie nieuwe functies toegevoegd aan het einde van de indicatorcode: BuySignal(), SellSignal() en GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Koop signaal functie                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // tekst van de indicatornaam voor e-mail en pushberichten
                   double &BuyArrow[],        // indicatorbuffer met koop-signalen
                   const int Rates_total,     // het huidige aantal bars
                   const int Prev_calculated,// het aantal bars op de vorige tick
                   const double &Close[],     // slotprijs
                   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("KOOP signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KOOP signaal waarschuwing","KOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Verkoop signaal functie                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // tekst van de indicatornaam voor e-mail en pushberichten
                    double &SellArrow[],       // indicatorbuffer met verkoop-signalen
                    const int Rates_total,     // het huidige aantal bars
                    const int Prev_calculated,// het aantal bars op de vorige tick
                    const double &Close[],     // slotprijs
                    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("VERKOOP signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKOOP signaal waarschuwing","VERKOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Het verkrijgen van de tijdsperiode als een string               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Enkele aanroepen van de functies BuySignal() en SellSignal() toegevoegd na de indicatorberekeningen in de OnCalculate() blok:
    //---     
       BuySignal("BykovTrendAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("BykovTrendAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    //--- 
    

Waar BuyBuffer en SellBuffer de namen zijn van de indicatorbuffers voor het opslaan van de koop- en verkoop-signalen. De lege waarden in de indicatorbuffers moeten ofwel nullen of EMPTY_VALUE zijn.

Het is de bedoeling dat er slechts één aanroep naar de BuySignal() en SellSignal() functies wordt gebruikt in het OnCalculate() blok van de indicatorcode.

Deze indicator is voor het eerst geïmplementeerd in MQL4 en gepubliceerd in Code Base op 28.09.2007.

Fig1. De BykovTrendAlert indicator op de grafiek

Fig1. De BykovTrendAlert indicator op de grafiek


Fig.2. De BykovTrendAlert indicator genereert waarschuwingen.

Fig.2. De BykovTrendAlert indicator genereert waarschuwingen.

Gerelateerde berichten

Reactie (0)