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:
- 795
- Rating:
- Veröffentlicht:
- 2019.01.02 08:13
- Aktualisiert:
- 2023.03.29 15:02
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Wirklicher Autor:
Rafael Jimenez Tocino
Der Signalindikator RJTX_Matches_Smoothed bietet Alarme, E-Mails und Push-Benachrichtigungen.
Folgendes wurde geändert, damit der Indikator Alarme, E-Mails und Push-Benachrichtigungen erzeugen kann:
- Neu eingeführte Eingabeparameter
input uint NumberofBar=1; // Anzahl von Bars für das Senden der Signale input bool SoundON=true; // Alerts erlauben input uint NumberofAlerts=2; // Anzahl von Alerts input bool EMailON=false; // Senden vom E-Mails erlauben input bool PushON=false; // Senden von Push-Benachrichtigungen erlauben
- Ergänzt wurden drei neue Funktionen am Ende des Codes des Indikators: BuySignal(), SellSignal() und GetStringTimeframe()
//+------------------------------------------------------------------+ //| Funktion der Kaufsignale | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // Indikatorname für E-Mail und Push-Benachrichtigung double &BuyArrow[], // Indikatorpuffer der Kaufsignale const int Rates_total, // Aktuelle Anzahl der Bars const int Prev_calculated, // Anzahl der Bars des vorherigen Ticks 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(BuyArrow); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(!BuyArrow[index1] && BuyArrow[index]) 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]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); 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); } //--- } //+------------------------------------------------------------------+ //| Funktion der Verkaufssignale | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // Indikatorname für E-Mail und Push-Benachrichtigung double &SellArrow[], // Indikatorpuffer für Kaufsignale const int Rates_total, // Aktuelle Anzahl der Bars const int Prev_calculated, // Anzahl der Bars des vorherigen Ticks const double &Close[], // Schlusskurs const int &Spread[]) // Spread { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool SellSignal=false; bool SeriesTest=ArrayGetAsSeries(SellArrow); int index,index1; if(SeriesTest) { index=int(NumberofBar); index1=index+1; } else { index=Rates_total-int(NumberofBar)-1; index1=index-1; } if(!SellArrow[index1] && SellArrow[index]) 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]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); 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); } //--- } //+------------------------------------------------------------------+ //| Abfrage des Zeitrahmens als Zeichenkette | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Ergänzt wurden eine paar Funktionsaufrufe von BuySignal() und SellSignal() im Block von OnCalculate() in der Schleife der Indikatorberechnung.
//--- BuySignal("RJTX_Matches_Smoothed_Alert",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("RJTX_Matches_Smoothed_Alert",SellBuffer,rates_total,prev_calculated,close,spread); //---
Dabei sind BuyBuffer und SellBuffer die Namen der Indikatorpuffer zur Speicherung der Kauf- und Verkaufssignale. Als Leer-Wert für die Indikatorpuffer sollte entweder Null oder EMPTY_VALUE festgelegt werden.
Es wird davon ausgegangen, dass nur ein einziger Aufruf der Funktionen BuySignal() und SellSignal() im Block von OnCalculate() des Indikatorcodes verwendet wird.
Der Indikator verwendet die Klassen der Bibliothek SmoothAlgorithms.mqh (kopieren Sie sie in <Terminal_Verzeichnis>\MQL5\Include). Die Arbeit mit diesen Klassen wird ausführlich im Artikel "Bildung von Kursreihenmittelwerten für Zwischenberechnungen ohne zusätzliche Buffer" beschrieben.
Ursprünglich wurde dieser Indikator in MQL4 geschrieben und zuerst veröffentlicht in der Code-Basis am 23.12.2015.
Abb. 1. Der Indikator RJTX_Matches_Smoothed_Alert auf dem Chart
Abb. 2. Der Indikator RJTX_Matches_Smoothed_Alert. Alarmieren
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/22712

Der Indikator HLCrossSigForWPR mit in den Eingabeparameter bestimmbarem Zeitrahmen.

Eine Bibliothek zur Berechnung des besten Handelsintervalls.

Der Signalindikator RJTX_Matches_Smoothed_Alert bietet Alarme, E-Mails und Push-Benachrichtigungen. Die Eingabevariablen erlauben das Ersetzen der dargestellten Symbole auf dem Chart

VZO Indikator