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
AroonOscillatorSignAlert - Indikator für den MetaTrader 5
- Ansichten:
- 728
- Rating:
- Veröffentlicht:
- 2016.12.22 12:58
- Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Ein Pfeilsignal Indikator, basierend auf dem AroonOscillator Oszillator, welcher die überkauften und überverkauften Bereiche verlässt. Der Indikator sendet Alarme, E-Mails und Push-Benachrichtigungen an Mobilgeräte.
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
BuySignal("iWPRSign",BuyBuffer,rates_total,prev_calculated,close,spread); SellSignal("iWPRSign",SellBuffer,rates_total,prev_calculated,close,spread);
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.
Abb.1. Der AroonOscillatorSignAlert Indikator auf dem Chart
Abb.2. Der AroonOscillatorSignAlert Indikator. Generierung eines Alarms.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/15942
Ein senkrechtes Histogramm mit der Verteilung von Highs.
MinPriceDistributionEin senkrechtes Histogramm mit der Verteilung von Tiefs.
Der ADXDMI Indikator mit der Option, Zeitrahmen in den Eingabeparametern auszuwählen.
Exp_ADXDMIDas Exp_ADXDMI Handelssystem, basierend auf Signalen des ADXDMI Indikators.