Home Technische indicator Bericht

iStochKomposterAlert - Een Handige Indicator voor MetaTrader 5

Bijlage
15850.zip (3.17 KB, Downloaden 0 keer)

Werkelijke auteur:

komposter

De iStochKomposterAlert is een semaphore-pijlen indicator die gebaseerd is op de klassieke Stochastische oscillator. Deze indicator laat ons zien wanneer de markt overbought of oversold is en biedt handige meldingen via e-mail en push-notificaties op mobiele apparaten.

Om de meldingen, e-mailberichten en push-notificaties te implementeren, zijn er een paar wijzigingen aangebracht in de code van de indicator:

  1. Nieuwe invoerparameters toegevoegd:
    input uint NumberofBar=1;//Aantal bars voor het signaal
    input bool SoundON=true; //Meldingen inschakelen
    input uint NumberofAlerts=2;//Aantal meldingen
    input bool EMailON=false; //E-mail voor het signaal inschakelen
    input bool PushON=false; //Versturen van signalen naar mobiele apparaten inschakelen
    
  2. Drie nieuwe functies aan het einde van de indicatorcode toegevoegd: BuySignal(), SellSignal() en GetStringTimeframe()
    //+------------------------------------------------------------------+
    //| Koop signaal functie                                              |
    //+------------------------------------------------------------------+
    void BuySignal(string SignalSirname,      // tekst voor de naam van de indicator in e-mail en pushberichten
                   double &BuyArrow[],        // buffer voor de koop signalen
                   const int Rates_total,     // huidig aantal bars
                   const int Prev_calculated, // 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 alert","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 voor de naam van de indicator in e-mail en pushberichten
                    double &SellArrow[],       // buffer voor de verkoop signalen
                    const int Rates_total,     // huidig aantal bars
                    const int Prev_calculated, // 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 alert","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);
         }
    //---
      }
    //+------------------------------------------------------------------+
    //|  Tijdframe als string verkrijgen                               |
    //+------------------------------------------------------------------+
    string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
      {
    //----
       return(StringSubstr(EnumToString(timeframe),7,-1));
    //----
      }
    
  3. Een paar aanroepen voor de functies BuySignal() en SellSignal() toegevoegd na de berekeningen in het OnCalculate() blok
    BuySignal("iWPRSign",BuyBuffer,rates_total,prev_calculated,close,spread);
        SellSignal("iWPRSign",SellBuffer,rates_total,prev_calculated,close,spread);
    

Hierbij zijn BuyBuffer en SellBuffer de namen van de indicatorbuffers om de koop- en verkoop signalen op te slaan. Let op dat lege waarden in de indicatorbuffers als nullen of EMPTY_VALUE moeten worden ingesteld.

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

Fig.1. De iStochKomposterAlert indicator op de grafiek

Fig.1. De iStochKomposterAlert indicator op de grafiek

Fig.2. De iStochKomposterAlert indicator. Meldingen genereren.

Fig.2. De iStochKomposterAlert indicator. Meldingen genereren.

Gerelateerde berichten

Reactie (0)