Startseite Technischer Indikator Beitrag

BrainTrend1Sig_Alert: Dein neuer Trading-Indikator für MetaTrader 5

Anhang
16629.zip (4.08 KB, Herunterladen 0 mal)

BrainTrend1Sig_Alert ist ein Semaphore-Signalindikator, der dir nicht nur Signale, sondern auch Benachrichtigungen, E-Mails und Push-Nachrichten bietet.

Hier sind die wichtigsten Änderungen im Code des Indikators, die die Implementierung dieser Benachrichtigungen ermöglicht haben:

  1. Neue Eingabeparameter wurden hinzugefügt:
    input uint AnzahlDerKerzen=1;// Anzahl der Kerzen für das Signal
    input bool SoundAktiv=true; // Benachrichtigungen aktivieren
    input uint AnzahlDerAlerts=2;// Anzahl der Benachrichtigungen
    input bool EmailAktiv=false; // E-Mail-Benachrichtigungen aktivieren
    input bool PushAktiv=false; // Push-Benachrichtigungen aktivieren
    
  2. Drei neue Funktionen wurden am Ende des Indikatorcodes hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Funktion für Kaufsignal                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalName,      // Name des Indikators für E-Mail und Push-Nachrichten
                   double &KaufPfeil[],        // Indikatorpuffer mit Kaufsignalen
                   const int GesamteKerzen,     // aktuelle Anzahl der Kerzen
                   const int VorherigeBerechnung, // Anzahl der Kerzen bei der vorherigen Berechnung
                   const double &Schluss[],     // Schlusskurs
                   const int &Spread[])       // Spread
      {
    //---
       static uint zähler=0;
       if(GesamteKerzen!=VorherigeBerechnung) zähler=0;
    
       bool KaufSignal=false;
       bool SerienTest=ArrayGetAsSeries(KaufPfeil);
       int index;
       if(SerienTest) index=int(AnzahlDerKerzen);
       else index=GesamteKerzen-int(AnzahlDerKerzen)-1;
       if(NormalizeDouble(KaufPfeil[index],_Digits) && KaufPfeil[index]!=EMPTY_VALUE) KaufSignal=true;
       if(KaufSignal && zähler<=AnzahlDerAlerts)
         {
          zähler++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SerienTest=ArrayGetAsSeries(Schluss);
          if(SerienTest) index=int(AnzahlDerKerzen);
          else index=GesamteKerzen-int(AnzahlDerKerzen)-1;
          double Ask=Schluss[index];
          double Bid=Schluss[index];
          SerienTest=ArrayGetAsSeries(Spread);
          if(SerienTest) index=int(AnzahlDerKerzen);
          else index=GesamteKerzen-int(AnzahlDerKerzen)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(SoundAktiv) Alert("KAUFSIGNAL 
     Ask=",Ask,"
     Bid=",Bid,"
     aktuelle Zeit=",text,"
     Symbol=",Symbol()," Periode=",sPeriode);
          if(EmailAktiv) SendMail(SignalName+": KAUFSIGNAL-Benachrichtigung","KAUFSIGNAL bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode);
          if(PushAktiv) SendNotification(SignalName+": KAUFSIGNAL bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode);
         }
    
    //---
      }
    //+------------------------------------------------------------------+
    //| Funktion für Verkaufsignal                                             |
    //+------------------------------------------------------------------+
    void SellSignal(string SignalName,      // Name des Indikators für E-Mail und Push-Nachrichten
                    double &VerkaufPfeil[],       // Indikatorpuffer mit Verkaufsignalen
                    const int GesamteKerzen,     // aktuelle Anzahl der Kerzen
                    const int VorherigeBerechnung, // Anzahl der Kerzen bei der vorherigen Berechnung
                    const double &Schluss[],     // Schlusskurs
                    const int &Spread[])       // Spread
      {
    //---
       static uint zähler=0;
       if(GesamteKerzen!=VorherigeBerechnung) zähler=0;
    
       bool Verkaufsignal=false;
       bool SerienTest=ArrayGetAsSeries(VerkaufPfeil);
       int index;
       if(SerienTest) index=int(AnzahlDerKerzen);
       else index=GesamteKerzen-int(AnzahlDerKerzen)-1;
       if(NormalizeDouble(VerkaufPfeil[index],_Digits) && VerkaufPfeil[index]!=EMPTY_VALUE) Verkaufsignal=true;
       if(Verkaufsignal && zähler<=AnzahlDerAlerts)
         {
          zähler++;
          MqlDateTime tm;
          TimeToStruct(TimeCurrent(),tm);
          string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
          SerienTest=ArrayGetAsSeries(Schluss);
          if(SerienTest) index=int(AnzahlDerKerzen);
          else index=GesamteKerzen-int(AnzahlDerKerzen)-1;
          double Ask=Schluss[index];
          double Bid=Schluss[index];
          SerienTest=ArrayGetAsSeries(Spread);
          if(SerienTest) index=int(AnzahlDerKerzen);
          else index=GesamteKerzen-int(AnzahlDerKerzen)-1;
          Bid+=Spread[index];
          string sAsk=DoubleToString(Ask,_Digits);
          string sBid=DoubleToString(Bid,_Digits);
          string sPeriode=GetStringTimeframe(ChartPeriod());
          if(SoundAktiv) Alert("VERKAUFSIGNAL 
     Ask=",Ask,"
     Bid=",Bid,"
     aktuelle Zeit=",text,"
     Symbol=",Symbol()," Periode=",sPeriode);
          if(EmailAktiv) SendMail(SignalName+": VERKAUFSIGNAL-Benachrichtigung","VERKAUFSIGNAL bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode);
          if(PushAktiv) SendNotification(SignalName+": VERKAUFSIGNAL bei Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbol="+Symbol()+" Periode="+sPeriode);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Zeitrahmen als String abrufen                                  |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES zeitrahmen)
      {
    //----
       return(StringSubstr(EnumToString(zeitrahmen),7,-1));
    //----
      }
    
  3. Einige Aufrufe der Funktionen BuySignal() und SellSignal() wurden nach den Berechnungsschleifen des Indikators im OnCalculate()-Block hinzugefügt:
    //---
    BuySignal("BrainTrend1Sig_Alert",KaufPuffer,gesamt_kerzen,vorgerechnet,schluss,spread);
    SellSignal("BrainTrend1Sig_Alert",VerkaufPuffer,gesamt_kerzen,vorgerechnet,schluss,spread);
    //---

Hierbei sind KaufPuffer und VerkaufPuffer die Namen der Indikatorpuffer zum Speichern der Kauf- bzw. Verkaufssignale. In den Indikatorpuffern sollten entweder Nullen oder EMPTY_VALUE als leere Werte gesetzt werden.

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

Abbildung 1. BrainTrend1Sig_Alert Indikator im Chart

Abbildung 1. BrainTrend1Sig_Alert Indikator im Chart

Abbildung 2. BrainTrend1Sig_Alert Indikator. Alerts generieren

Abbildung 2. BrainTrend1Sig_Alert Indikator. Alerts generieren

Verwandte Beiträge

Kommentar (0)