Originele Auteur: dimeon
De ColorXdinMA is een trend moving average indicator met meldingen die e-mails en push-notificaties naar je mobiele apparaten verstuurt.
Om de meldingen, e-mailberichten en push-notificaties te implementeren, zijn de volgende wijzigingen aangebracht in de code van de indicator:
- Een enumeratie voor de opties van signalen is gedefinieerd op globaal niveau voordat de invoervariabelen worden geïntroduceerd.//+----------------------------------------------------+
//| Enumeratie voor signalen generatie opties |
//+----------------------------------------------------+
enum ENUM_SIGNAL_MODE
{
MODE_SIGNAL, // Doorbraak signalen
MODE_TREND // Doorbraak en trend signalen
}; - Nieuwe invoerparameters zijn toegevoegd//---- Invoer variabelen voor meldingen
input ENUM_SIGNAL_MODE SignMode=MODE_SIGNAL; // Modus voor signalen generatie
input uint NumberofBar=1; // Aantal bars om een signaal te genereren
input bool SoundON=true; // Meldingen inschakelen
input uint NumberofAlerts=2; // Aantal meldingen
input bool EMailON=false; // E-mailen van het signaal inschakelen
input bool PushON=false; // Verzenden van het signaal naar mobiele apparaten inschakelen - Drie nieuwe functies zijn aan het einde van de indicatorcode toegevoegd: BuySignal(), SellSignal() en GetStringTimeframe()//+------------------------------------------------------------------+
//| Functie voor koop signaal |
//+------------------------------------------------------------------+
void BuySignal(string SignalSirname,// tekst van de indicatornaam voor e-mail en push-berichten
double &ColorArray[],// kleur index buffer
int ColorIndex,// kleur index in de kleur index buffer om een signaal te genereren
const int Rates_total, // het huidige aantal bars
const int Prev_calculated, // het aantal bars op de vorige tick
const double &Close[], // sluitprijs
const int &Spread[]) // spread
{
//---
static uint counter=0;
if(Rates_total!=Prev_calculated) counter=0;
bool BuySignal=false;
bool SeriesTest=ArrayGetAsSeries(ColorArray);
int index,index1;
if(SeriesTest)
{
index=int(NumberofBar);
index1=index+1;
}
else
{
index=Rates_total-int(NumberofBar)-1;
index1=index-1;
}
if(SignMode==MODE_SIGNAL)
{
if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) BuySignal=true;
}
else
{
if(ColorArray[index]==ColorIndex) 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+=_Point*Spread[index];
string sAsk=DoubleToString(Ask,_Digits);
string sBid=DoubleToString(Bid,_Digits);
string sPeriod=GetStringTimeframe(ChartPeriod());
if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
{
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 melding","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);
}
else
{
if(SoundON) Alert("Opwaarts Trend signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
if(EMailON) SendMail(SignalSirname+": Opwaarts Trend signaal melding","KOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
if(PushON) SendNotification(SignalSirname+": Opwaarts Trend signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
}
}
//---
}
//+------------------------------------------------------------------+
//| Functie voor verkoop signaal |
//+------------------------------------------------------------------+
void SellSignal(string SignalSirname,// tekst van de indicatornaam voor e-mail en push-berichten
double &ColorArray[], // kleur index buffer
int ColorIndex, // kleur index in de kleur index buffer om een signaal te genereren
const int Rates_total, // het huidige aantal bars
const int Prev_calculated, // het aantal bars op de vorige tick
const double &Close[], // sluitprijs
const int &Spread[]) // spread
{
//---
static uint counter=0;
if(Rates_total!=Prev_calculated) counter=0;
bool SellSignal=false;
bool SeriesTest=ArrayGetAsSeries(ColorArray);
int index,index1;
if(SeriesTest)
{
index=int(NumberofBar);
index1=index+1;
}
else
{
index=Rates_total-int(NumberofBar)-1;
index1=index-1;
}
if(SignMode==MODE_SIGNAL)
{
if(ColorArray[index1]!=ColorIndex && ColorArray[index]==ColorIndex) SellSignal=true;
}
else
{
if(ColorArray[index]==ColorIndex) 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+=_Point*Spread[index];
string sAsk=DoubleToString(Ask,_Digits);
string sBid=DoubleToString(Bid,_Digits);
string sPeriod=GetStringTimeframe(ChartPeriod());
if(SignMode==MODE_SIGNAL || (SignMode==MODE_TREND && ColorArray[index1]!=ColorIndex))
{
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 melding","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);
}
else
{
if(SoundON) Alert("Neerwaarts trend signaal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbool=",Symbol()," Periode=",sPeriod);
if(EMailON) SendMail(SignalSirname+": Neerwaarts trend signaal melding","VERKOOP signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
if(PushON) SendNotification(SignalSirname+": Neerwaarts trend signaal bij Ask="+sAsk+", Bid="+sBid+", Datum="+text+" Symbool="+Symbol()+" Periode="+sPeriod);
}
}
//---
}
//+------------------------------------------------------------------+
//| Verkrijgen van de tijdseenheid als een string |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
{
//----
return(StringSubstr(EnumToString(timeframe),7,-1));
//----
} - Enkele aanroepen naar de functies BuySignal() en SellSignal() zijn toegevoegd na de indicatorberekeningen in het OnCalculate() blok //---
BuySignal("ColorXdinMA_Alert",ColorXdinMA,1,rates_total,prev_calculated,close,spread);
SellSignal("ColorXdinMA_Alert",ColorXdinMA,2,rates_total,prev_calculated,close,spread);
//---
Hierbij is ColorXdinMA de naam van de kleur index buffer voor het opslaan van indicator kleuren. Waarden 1 en 2 zijn de nummers van kleuren in deze buffer, waarbij het voortschrijdend gemiddelde respectievelijk stijgt of daalt.
Er wordt aangenomen dat er slechts één oproep naar de functies BuySignal() en SellSignal() zal worden gebruikt in het OnCalculate() blok van de indicatorcode.
De indicator maakt gebruik van de klassen van de SmoothAlgorithms.mqh bibliotheek (kopieer deze naar <terminal_data_folder>\MQL5\Include). Het gebruik van de klassen is uitvoerig beschreven in het artikel "Averaging Price Series for Intermediate Calculations Without Using Additional Buffers".

Fig1. De ColorXdinMA_Alert indicator op de grafiek

Fig.2. De ColorXdinMA_Alert indicator. Genereren van melding voor doorbraak signaal

Fig.3. De ColorXdinMA_Alert indicator. Genereren van melding voor trend signaal
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