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:
- 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
- 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)); //---- }
- 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.2. De iStochKomposterAlert indicator. Meldingen genereren.
Gerelateerde berichten
- PCA Synthetics: Automatische Coëfficiëntselectie voor MetaTrader 5
- iExposure Indicator: Beheer je Handelsposities Efficiënt met MetaTrader 5
- Efficiënt Grafische Objecten Kopiëren in MetaTrader 5 met ChartObjectsCopyPaste
- Efficiëntie Ratio (ER) Berekenen met de CEROnRingBuffer voor MetaTrader 5
- Verbeter je Handelsstrategieën met de ColorXADX Indicator voor MetaTrader 5