//+------------------------------------------------------------------+ //| Qualitative Quantitative Estimation Indicator for Metatrader 4 | //| Copyright © 2006Roman Ignatov | //| mailto:roman.ignatov@gmail.com | //+------------------------------------------------------------------+ //mod alerts #property copyright "Copyright © 200 Roman Ignatov" #property link "mailto:roman.ignatov@gmail.com" #property indicator_separate_window #property indicator_buffers 2 #property indicator_color1 Red #property indicator_style1 STYLE_SOLID #property indicator_width1 2 #property indicator_color2 Yellow #property indicator_style2 STYLE_DOT extern int SF = 5; // original 5 extern int RSI_Period = 14; // original 14 extern double DARFACTOR = 4.236; //original 4.236 extern bool BoxAlertON = false; extern bool SoundAlertON = true; extern bool EmailAlertON = false; extern int alertDelayBars = 0; extern string soundfile = "stops.wav"; //ok.wav/alert.wav/short.wav double alertboxTag,alertsoundTag,alertmailTag; int Wilders_Period; int StartBar; double TrLevelSlow[]; double AtrRsi[]; double MaAtrRsi[]; double Rsi[]; double RsiMa[]; int init() { Wilders_Period = RSI_Period * 2 - 1; if (Wilders_Period < SF) StartBar = SF; else StartBar = Wilders_Period; IndicatorBuffers(6); SetIndexBuffer(0, RsiMa); SetIndexStyle(0, DRAW_LINE); SetIndexLabel(0, "Value 1"); SetIndexDrawBegin(0, StartBar); SetIndexStyle(1, DRAW_LINE); SetIndexBuffer(1, TrLevelSlow); SetIndexLabel(1, "Value 2"); SetIndexDrawBegin(1, StartBar); SetIndexBuffer(2, AtrRsi); SetIndexBuffer(3, MaAtrRsi); SetIndexBuffer(4, Rsi); IndicatorShortName(StringConcatenate("QQE(", SF, ")")); return(0); } int start() { int counted, i; double rsi0, rsi1, dar, tr, dv; if(Bars <= StartBar) return (0); counted = IndicatorCounted(); if(counted < 1) for(i = Bars - StartBar; i < Bars; i++) { TrLevelSlow[i] = 0.0; AtrRsi[i] = 0.0; MaAtrRsi[i] = 0.0; Rsi[i] = 0.0; RsiMa[i] = 0.0; } counted = Bars - counted - 1; for (i = counted; i >= 0; i--) Rsi[i] = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, i); for (i = counted; i >= 0; i--) { RsiMa[i] = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i); AtrRsi[i] = MathAbs(RsiMa[i + 1] - RsiMa[i]); } for (i = counted; i >= 0; i--) MaAtrRsi[i] = iMAOnArray(AtrRsi, 0, Wilders_Period, 0, MODE_EMA, i); i = counted + 1; tr = TrLevelSlow[i]; rsi1 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i); while (i > 0) { i--; rsi0 = iMAOnArray(Rsi, 0, SF, 0, MODE_EMA, i); dar = iMAOnArray(MaAtrRsi, 0, Wilders_Period, 0, MODE_EMA, i) * DARFACTOR; dv = tr; if (rsi0 < tr) { tr = rsi0 + dar; if (rsi1 < dv) if (tr > dv) tr = dv; } else if (rsi0 > tr) { tr = rsi0 - dar; if (rsi1 > dv) if (tr < dv) tr = dv; } TrLevelSlow[i] = tr; rsi1 = rsi0; string message= Symbol()+" M"+Period()+" "+DoubleToStr(Close[0],4); // Bid +DoubleToStr(Close[0],4) int b=i+alertDelayBars; if(RsiMa[b]> TrLevelSlow[b] && RsiMa[b+1]< TrLevelSlow[b+1]) { if (BoxAlertON && alertboxTag!=Time[b]) { Alert("QQE Cross: Trend going Up on ",message); alertboxTag = Time[b]; } if (EmailAlertON && alertmailTag!=Time[b]) { SendMail("QQEA","QQECross: Trend going Up on "+message); alertmailTag = Time[b]; } if (SoundAlertON && alertsoundTag!=Time[b]) { PlaySound (soundfile); alertsoundTag = Time[b]; } } if(RsiMa[b]< TrLevelSlow[b] && RsiMa[b+1]> TrLevelSlow[b+1]) { if (BoxAlertON && alertboxTag!=Time[b]) { Alert("QQE Cross: Trend going Down on ",message); alertboxTag = Time[b]; } if (EmailAlertON && alertmailTag!=Time[b]) { SendMail("QQEA","QQECross: Trend going Down on "+message); alertmailTag = Time[b]; } if (SoundAlertON && alertsoundTag!=Time[b]) { PlaySound (soundfile); alertsoundTag = Time[b]; } } } return(0); }
Sample
Analysis
Market Information Used:
Series array that contains close prices for each bar
Series array that contains open time of each bar
Indicator Curves created:
Implements a curve of type DRAW_LINE
Indicators Used:
Relative strength index
Moving average indicator
Custom Indicators Used:
Order Management characteristics:
Other Features:
It issuies visual alerts to the screen
It sends emails