und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
- Ansichten:
- 1136
- Rating:
- Veröffentlicht:
- 2017.02.24 11:10
- Aktualisiert:
- 2023.03.29 15:01
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Echter Autor: dimeon
Der trendfolgende MA ColorXdinMA sendet Alerts, E-Mails und Push-Benachrichtigungen an Smartphone.
Für das Senden von Alerts, E-Mails und Push-Benachrichtigungen wurden im Code des Indikators die folgenden Änderungen vorgenommen:
- Vor der Deklaration der Eingabevariablen wird die Aufzählung für Varianten der vom Indikator generierten Signale an der globalen Ebene deklariert//+----------------------------------------------------+
//| Aufzählung für Varianten der von Indikator generierten Signale |
//+----------------------------------------------------+
enum ENUM_SIGNAL_MODE
{
MODE_SIGNAL, //Ausbruchssignale
MODE_TREND //Ausbruchssignale und Trendsignale
}; - Es wurden neue Eingabevariablen den Eingabeparametern hinzugefügt//---- Eingabevariablen für Alerts
input ENUM_SIGNAL_MODE SignMode=MODE_SIGNAL; //Variante des Signals
input uint NumberofBar=1; //Nummer des Balkens für das Senden des Signals
input bool SoundON=true; //Alerts aktivieren
input uint NumberofAlerts=2; //Anzahl der Alerts
input bool EMailON=false; //Senden des Signals per E-Mail aktivieren
input bool PushON=false; //Senden des Signals an Mobilgeräte aktivieren - Es wurden drei neue Funktionen BuySignal(), SellSignal() und GetStringTimeframe() am Ende des Codes hinzugefügt//+------------------------------------------------------------------+
//| Buy signal function |
//+------------------------------------------------------------------+
void BuySignal(string SignalSirname,// Text des Namens des Indikators für E-Mails und Push-Benachrichtigungen
double &ColorArray[],// Farbindex-Puffer
int ColorIndex,// Farbindex im Farbindex-Puffer für das Senden des Signals
const int Rates_total, // aktuelle Anzahl der Balken
const int Prev_calculated, // Anzahl der Balken auf dem vorherigen Tick
const double &Close[], // Schlusskurs
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("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
}
else
{
if(SoundON) Alert("Up Trend signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
if(EMailON) SendMail(SignalSirname+": Up Trend signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
if(PushON) SendNotification(SignalSirname+": Up Trend signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
}
}
//---
}
//+------------------------------------------------------------------+
//| Sell signal function |
//+------------------------------------------------------------------+
void SellSignal(string SignalSirname,// Text des Namens des Indikators für E-Mails und Push-Benachrichtigungen
double &ColorArray[], // Farbindex-Puffer
int ColorIndex, // Farbindex im Farbindex-Puffer für das Senden des Signals
const int Rates_total, // aktuelle Anzahl der Balken
const int Prev_calculated, // Anzahl der Balken auf dem vorherigen Tick
const double &Close[], // Schlusspreis
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("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
}
else
{
if(SoundON) Alert("Down trend signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod);
if(EMailON) SendMail(SignalSirname+": Down trend signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
if(PushON) SendNotification(SignalSirname+": Down trend signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod);
}
}
//---
}
//+------------------------------------------------------------------+
//| Erhalten der Timeframe als String |
//+------------------------------------------------------------------+
string GetStringTimeframe(ENUM_TIMEFRAMES timeframe)
{
//----
return(StringSubstr(EnumToString(timeframe),7,-1));
//----
} - Es wurden einige Aufrufe von BuySignal() und SellSignal() in den OnCalculate() Block nach den Berechnungsschleifen hinuzugefügt //---
BuySignal("ColorXdinMA_Alert",ColorXdinMA,1,rates_total,prev_calculated,close,spread);
SellSignal("ColorXdinMA_Alert",ColorXdinMA,2,rates_total,prev_calculated,close,spread);
//---
Wobei: ColorXdinMA — Name des Farbindex-Puffers für das Speichern der Farben des Indikators, 1 und 2 — Farbennummern im Index-Puffer, welche das Steigen oder Fallen des MAs bedeuten.
Es wird angenommen, dass der Aufruf der BuySignal() und SellSignal() Funktionen im OnCalculate() Block nur einmal im Code des Indikators verwendet wird.
Der Indikator verwendet Klassen der Bibliothek SmoothAlgorithms.mqh (kopieren Sie diese nach <terminal_data_folder>\MQL5\Include). Die Klassen wurden im Artikel <a0>"Bildung von Kursreihenmittelwerten für Zwischenberechnungen ohne zusätzliche Puffer"</a0> ausführlich beschrieben.
Abb.1. Der ColorXdinMA_Alert Indikator auf dem Chart
Abb.2. Der ColorXdinMA_Alert Indikator. Die Erzeugung eines Alerts für Ausbruchssignal
Abb.3. Der ColorXdinMA_Alert Indikator. Die Erzeugung eines Alerts für Trendsignal
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/17111

Ein Oszillator, der eine gewichtete und geglätte Summe der vier Indikatoren Fractal_RSI, Fractal_MFI, Fractal_WPR und Fractal_DeMarker darstellt.

Fraktaler Money Flow Index.

Der EA basiert auf den Indikatoren iAlligator, Alligator, iMA und Moving Average.

Handel anhand des benutzerdefinierten Indikators ZeroLag MACD.