Startseite Technischer Indikator Beitrag

BykovTrendAlert: Ihr neuer Trading-Indikator für MetaTrader 5

Anhang
16458.zip (3.75 KB, Herunterladen 0 mal)

Autor: Ramdass - nur Umwandlung

Der BykovTrend Semaphore-Signalindikator bietet Ihnen nützliche Alerts, die Sie per E-Mail oder Push-Benachrichtigung auf Ihrem mobilen Gerät erreichen.

Um die Alerts, E-Mail-Nachrichten und Push-Benachrichtigungen zu implementieren, wurden folgende Änderungen im Indikatorcode vorgenommen:

  1. Neue Eingabeparameter eingeführt:
    input uint NumberofBar=1;//Bar-Nummer für das Signal
    input bool SoundON=true; //Alerts aktivieren
    input uint NumberofAlerts=2;//Anzahl der Alerts
    input bool EMailON=false; //E-Mail für das Signal aktivieren
    input bool PushON=false; //Push-Benachrichtigung aktivieren
    
  2. Drei neue Funktionen am Ende des Indikatorcodes hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Kauf-Signal-Funktion                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // Text des Indikatornamens für E-Mail- und Push-Nachrichten
                   double &BuyArrow[],        // Indikatorpuffer mit Kaufsignalen
                   const int Rates_total,     // aktuelle Anzahl der Bars
                   const int Prev_calculated, // Anzahl der Bars beim vorherigen Tick
                   const double &Close[],     // Schlusskurs
                   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("KAUF-Signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": KAUF-Signal-Alert","KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": KAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Verkaufs-Signal-Funktion                                               |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalSirname,      // Text des Indikatornamens für E-Mail- und Push-Nachrichten
                    double &SellArrow[],       // Indikatorpuffer mit Verkaufssignalen
                    const int Rates_total,     // aktuelle Anzahl der Bars
                    const int Prev_calculated, // Anzahl der Bars beim vorherigen Tick
                    const double &Close[],     // Schlusskurs
                    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("VERKAUF-Signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Periode=",sPeriod);
          if(EMailON) SendMail(SignalSirname+": VERKAUF-Signal-Alert","VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
          if(PushON) SendNotification(SignalSirname+": VERKAUF-Signal bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriod);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Abrufen des Zeitrahmens als String                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Ein paar Aufrufe von BuySignal() und SellSignal() Funktionen nach den Berechnungsschleifen im OnCalculate() Block hinzugefügt:
    //---    
       BuySignal("BykovTrendAlert",BuyBuffer,rates_total,prev_calculated,close,spread);
       SellSignal("BykovTrendAlert",SellBuffer,rates_total,prev_calculated,close,spread);
    //---
    

    Hierbei sind BuyBuffer und SellBuffer die Namen der Indikatorpuffer für die Speicherung der Kauf- und Verkaufssignale. Die leeren Werte in den Indikatorpuffern müssen entweder Nullen oder EMPTY_VALUE sein.

    Es wird davon ausgegangen, dass nur ein Aufruf der Funktionen BuySignal() und SellSignal() im OnCalculate() Block des Indikatorcodes verwendet wird.

    Dieser Indikator wurde erstmals in MQL4 implementiert und am Code Base am 28.09.2007 veröffentlicht.

    Abb.1. Der BykovTrendAlert-Indikator im Chart

    Abb.1. Der BykovTrendAlert-Indikator im Chart


    Abb.2. Der BykovTrendAlert-Indikator generiert Alarme.

    Abb.2. Der BykovTrendAlert-Indikator generiert Alarme.

    Verwandte Beiträge

Kommentar (0)