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:
- 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
- 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)); //---- }
- 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
Fig.2. De BykovTrendAlert indicator genereert waarschuwingen.
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
