Echte Auteur: Eng. Waddah Attar
De Waddah_Attar_Trend indicator biedt handige meldingen, e-mails en push-notificaties.
Om deze meldingen mogelijk te maken, zijn er verschillende wijzigingen aangebracht in de code van de indicator:
- Nieuwe invoerparameters zijn toegevoegd:
//---- Invoer voor meldingen input uint AantalBars=1; //Aantal bars voor het signaal input bool GeluidAan=true; //Meldingen inschakelen input uint AantalMeldingen=2; //Aantal meldingen input bool EMailAan=false; //E-mail voor het signaal inschakelen input bool PushAan=false; //Verzenden van meldingen naar mobiele apparaten inschakelen
- Drie nieuwe functies zijn toegevoegd aan het einde van de indicatorcode: KoopSignaal(), VerkoopSignaal() en GetStringTimeframe().
//+------------------------------------------------------------------+
//| Functie voor koop signaal |
//+------------------------------------------------------------------+
void KoopSignaal(string SignaalNaam,// indicator naam voor e-mail en push berichten
double &KleurArray[],// kleur index buffer
int KleurIndex,// kleur index in de kleur index buffer voor signaalgeneratie
const int TotaalAantalBars,// huidig aantal bars
const int Vorig_Berekend,// aantal bars op de vorige tick
const double &Sluit[], // sluitprijs
const int &Spread[]) // spread
{
//---
static uint teller=0;
if(TotaalAantalBars!=Vorig_Berekend) teller=0;
bool KoopSignaal=false;
bool SerieTest=ArrayGetAsSeries(KleurArray);
int index,index1;
if(SerieTest)
{
index=int(AantalBars);
index1=index+1;
}
else
{
index=TotaalAantalBars-int(AantalBars)-1;
index1=index-1;
}
if(KleurArray[index1]!=KleurIndex && KleurArray[index]==KleurIndex) KoopSignaal=true;
if(KoopSignaal && teller<=AantalMeldingen)
{
teller++;
MqlDateTime tm;
TimeToStruct(TimeCurrent(),tm);
string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
SerieTest=ArrayGetAsSeries(Sluit);
if(SerieTest) index=int(AantalBars);
else index=TotaalAantalBars-int(AantalBars)-1;
double Vraag=Sluit[index];
double Bod=Sluit[index];
SerieTest=ArrayGetAsSeries(Spread);
if(SerieTest) index=int(AantalBars);
else index=TotaalAantalBars-int(AantalBars)-1;
Bod+=_Point*Spread[index];
string sVraag=DoubleToString(Vraag,_Digits);
string sBod=DoubleToString(Bod,_Digits);
string sPeriode=GetStringTimeframe(ChartPeriod());
if(GeluidAan) Alert("KOOP signaal Vraag=",Vraag," Bod=",Bod," huidig tijd=",tekst," Symbool=",Symbol()," Periode=",sPeriode);
if(EMailAan) SendMail(SignaalNaam+": KOOP signaal melding","KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
if(PushAan) SendNotification(SignaalNaam+": KOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
}
//---
}
//+------------------------------------------------------------------+
//| Verkoop signaal functie |
//+------------------------------------------------------------------+
void VerkoopSignaal(string SignaalNaam, // indicator naam voor e-mail en push berichten
double &KleurArray[], // kleur index buffer
int KleurIndex, // kleur index in de kleur index buffer voor signaalgeneratie
const int TotaalAantalBars, // huidig aantal bars
const int Vorig_Berekend, // aantal bars op de vorige tick
const double &Sluit[], // sluitprijs
const int &Spread[]) // spread
{
//---
static uint teller=0;
if(TotaalAantalBars!=Vorig_Berekend) teller=0;
bool VerkoopSignaal=false;
bool SerieTest=ArrayGetAsSeries(KleurArray);
int index,index1;
if(SerieTest)
{
index=int(AantalBars);
index1=index+1;
}
else
{
index=TotaalAantalBars-int(AantalBars)-1;
index1=index-1;
}
if(KleurArray[index1]!=KleurIndex && KleurArray[index]==KleurIndex) VerkoopSignaal=true;
if(VerkoopSignaal && teller<=AantalMeldingen)
{
teller++;
MqlDateTime tm;
TimeToStruct(TimeCurrent(),tm);
string tekst=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min);
SerieTest=ArrayGetAsSeries(Sluit);
if(SerieTest) index=int(AantalBars);
else index=TotaalAantalBars-int(AantalBars)-1;
double Vraag=Sluit[index];
double Bod=Sluit[index];
SerieTest=ArrayGetAsSeries(Spread);
if(SerieTest) index=int(AantalBars);
else index=TotaalAantalBars-int(AantalBars)-1;
Bod+=_Point*Spread[index];
string sVraag=DoubleToString(Vraag,_Digits);
string sBod=DoubleToString(Bod,_Digits);
string sPeriode=GetStringTimeframe(ChartPeriod());
if(GeluidAan) Alert("VERKOOP signaal Vraag=",Vraag," Bod=",Bod," huidig tijd=",tekst," Symbool=",Symbol()," Periode=",sPeriode);
if(EMailAan) SendMail(SignaalNaam+": VERKOOP signaal melding","VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
if(PushAan) SendNotification(SignaalNaam+": VERKOOP signaal bij Vraag="+sVraag+", Bod="+sBod+", Datum="+tekst+" Symbool="+Symbol()+" Periode="+sPeriode);
}
//---
}
//+------------------------------------------------------------------+
//| Een tijdsframe als string verkrijgen |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
{
//----
return(StringSubstr(EnumToString(timeframe),7,-1));
//----
} - Er zijn een paar aanroepen naar de functies KoopSignaal() en VerkoopSignaal() toegevoegd na de indicatorberekeningen in het OnCalculate() blok //---
KoopSignaal("Waddah_Attar_Trend_Alert",KleurIndBuffer,0,totaal_aantal_bars,vorig_berekend,sluit,spread);
VerkoopSignaal("Waddah_Attar_Trend_Alert",KleurIndBuffer,1,totaal_aantal_bars,vorig_berekend,sluit,spread);
//---
Hierbij is KleurIndBuffer de naam van een kleur index buffer voor het opslaan van een lijnkleur als een index, terwijl 0 en 1 de nummers van kleuren in de kleur index buffer zijn.
Het is de bedoeling dat er maar één aanroep naar de functies KoopSignaal() en VerkoopSignaal() wordt gebruikt in het OnCalculate() blok van de indicatorcode.
De indicator maakt gebruik van de SmoothAlgorithms.mqh bibliotheekklassen (kopieer deze naar <terminal_data_folder>\MQL5\Include). Het gebruik van de klassen is uitgebreid beschreven in het artikel "Gemiddelde Prijsseries voor Tussentijdse Berekeningen Zonder Extra Buffers te Gebruiken".

Fig.1. Waddah_Attar_Trend_Alert indicator op de grafiek
Fig.2. Waddah_Attar_Trend_Alert indicator. Genereren van meldingen
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
