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:
- 898
- Rating:
- Veröffentlicht:
- 2016.12.22 14:06
- Aktualisiert:
- 2023.03.29 15:00
-
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Ein Semaphore-Signalindikator basierend auf der elativen geglätteten Geschwindigkeit der Preisänderung ,welcher Alarme, E-Mails und Push-Benachrichtigungen an Mobilgeräte sendet.
Um das Senden von Alarmen, E-Mails und Push-Benachrichtigungen an Smartphone zu implementieren, wurden die folgenden Änderungen im Code des Indikators vorgenommen:
- Es wurden neue Inputvariablen in die Eingabeparametern des Indikators hinzugefügt
input uint NumberofBar=1;//Nummer des Balkens für das Signal input bool SoundON=true; //Alarme aktivieren input uint NumberofAlerts=2;//Anzahl von Alarmen input bool EMailON=false; //Aktivieren das Senden eines Signals per E-Mail input bool PushON=false; //Aktivieren das Senden eines Signals an Mobilgerät
- Am Ende des Codes des Indikators wurden drei neue Funktionen hinzugefügt: BuySignal(), SellSignal() und GetStringTimeframe()
//+------------------------------------------------------------------+ //| Buy signal function | //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // Text des Namens des Indikators für E-Mails und Push-Benachrichtigungen double &BuyArrow[], // Indikator-Puffer mit Buy-Signalen const int Rates_total, // die aktuelle Anzahl von Balken const int Prev_calculated, // die Anzahl der Balken auf dem vorherigen Tick const double &Close[], // Schlusskurs const int &Spread[]) // Spread { u//--- 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("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); } u//--- } //+------------------------------------------------------------------+ //| Sell signal function | //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // Text des Namens des Indikators für E-Mails und Push-Benachrichtigungen double &SellArrow[], // Indikator buffer with sell signals const int Rates_total, // die aktuelle Anzahl von Balken const int Prev_calculated, // die Anzahl der Balken auf dem vorherigen Tick const double &Close[], // Schlusskurs const int &Spread[]) // Spread { u//--- 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("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); } u//--- } //+------------------------------------------------------------------+ //| Getting the timeframe as a string | //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- }
- Es wurden einige Aufrufe der BuySignal() und SellSignal() Funktionen nach den Zyklen der Berechnungen des Indikators im OnCalculate() Block hinzugefügt
u//--- BuySignal("PPO_Sign",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("PPO_Sign",SellBuffer,rates_total,prev_calculated,close,spread); u//---
wobei BuyBuffer und SellBuffer die Namen der Indikator-Puffern für das Speichern von Buy- und Sell-Signalen sind. Als leere Werte sind entweder Nullen oder EMPTY_VALUE in den Indikator-Puffern zu setzen.
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 in den Ordner <terminal_data_folder>\MQL5\Include). Die Verwendung der Klassen wurde im Artikel "Bildung von Kursreihenmittelwerten für Zwischenberechnungen ohne zusätzliche Puffer" ausführlich beschrieben.
Dieser Indikator wurde ursprünglich in MQL4 geschrieben und am 08.03.2008 in der Code Base veröffentlicht.
Abb.1. Der PPO_SignAlert Indikator aus dem Chart
Abb.2. Der PPO_SignAlert Indikator. Generierung eines Alarms.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/16108

Der Balance of Power (BOP) Indikator als farbiges Histogramm der Stärke und der Richtung des aktuellen Trends.

Das Exp_RAVI_Histogram Ausbruchssystem basierend auf Signalen des RAVI_Histogram Oszillators.

Der Exp_i-SpectrAnalysis_RVI EA basiert auf den vom i-SpectrAnalysis_RVI Oszillator generierten Signalen.

Die Instanz der Klasse gibt solche Daten wie Bid, Ask, High, Low, Schlusskurse und Eröffnungskurse der aktuellen oder einer in den Parametern angegebenen Kerze sowie die Eröffnungszeit der Kerze zurück.