qqq
Download scriptThis script provides a sophisticated technical analysis tool designed to help traders identify momentum and potential trend shifts in the financial markets. By blending different types of mathematical measurements, it attempts to smooth out market "noise" to provide a clearer picture of price action.
Core Logic & Methodology
The indicator operates by layering three distinct types of calculations to create a comprehensive visual output:
- Momentum Tracking: At its foundation, the script utilizes a standard Relative Strength Index (RSI). This measures the speed and change of price movements to determine if an asset is overbought, oversold, or trending.
- Smoothing & Averaging: To prevent the indicator from reacting too wildly to minor price fluctuations, the script applies several layers of "moving averages" to the RSI data. This ensures that the lines you see on your chart represent sustained trends rather than temporary spikes.
- Volatility Analysis: The script incorporates a "Trailing" logic influenced by volatility. It calculates the rate of change between different price points and adjusts its levels based on these fluctuations. This allows the indicator to dynamically react to how fast or slow the market is moving at any given moment.
Visual Elements
The tool renders two primary lines in a separate window below your main chart:
- Primary Trend Line: A solid line that represents the smoothed momentum of the asset.
- Trailing Level: A dotted line that acts as a dynamic reference point, helping traders visualize potential boundaries or shifts in market direction.
A central "Level" (defaulted at 50) is also established. This serves as a neutral zone; when the trend line crosses above or below this specific mark, it indicates a shift in momentum from bearish to bullish (or vice versa).
Automated Notifications
One of the key features of this script is its proactive alert system. The logic constantly monitors the "Trend Line" as it moves relative to the chosen Alert Level. When a crossover occurs—meaning the price momentum has officially shifted across the threshold—the script can trigger multiple notifications simultaneously:
- Visual Alerts: Pop-up messages on your trading platform.
- Audio Alerts: Sound files to grab your attention immediately.
- Email Notifications: Direct alerts sent to your registered email address (if enabled) to keep you informed even when you are away from your desk.
Summary for the User
In simple terms, this script acts as a "smart filter." It looks at price momentum, smooths out the erratic movements of the market using advanced averaging, and tracks how volatile the price is currently being. It then tells you exactly when the trend has changed enough to be significant by notifying you the moment the indicator crosses your designated threshold.
//+------------------------------------------------------------------+
//| Qualitative Quantitative Estimation Indicator with Alerts |
//| Copyright © 2006 Roman Ignatov |
//| mailto:roman.ignatov@gmail.com |
//| |
//| V1. Completed by Roman Ignatov 2006 (roman.ignatov@gmail.com) |
//| V2. Completed by Tim Hyder 2008 |
//| a) Complete Code rewrite |
//| b) Added Audio, Visual and eMail alerts |
//| |
//| Copyright © 2008, Tim Hyder aka Hiachiever |
//| |
//| PO BOX 768, Hillarys, Western Australia, Australia, 6923 |
//| |
//| GIFTS AND DONATIONS ACCEPTED |
//| All my indicators should be considered donationware. That is |
//| you are free to use them for your personal use, and are |
//| under no obligation to pay for them. However, if you do find |
//| this or any of my other indicators help you with your trading |
//| then any Gift or Donation as a show of appreciation is |
//| gratefully accepted. |
//| |
//| Gifts or Donations also keep me motivated in producing more |
//| great free indicators. :-) |
//| |
//| PayPal - hiachiever@gmail.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2008 Tim Hyder"
#property link "mailto:hiachiever@gmail.com"
//----
#define vers "09.Feb.2008"
#define major 1
#define minor 0
//----
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_style1 STYLE_SOLID
#property indicator_width1 2
#property indicator_color2 Yellow
#property indicator_style2 STYLE_DOT
#property indicator_level1 50
#property indicator_levelcolor Aqua
#property indicator_levelstyle STYLE_DOT
//----
extern string NOTESETTINGS=" --- INDICATOR SETTINGS ---";
extern int SF=5;
extern string NOTEALERTS=" --- Alerts ---";
extern int AlertLevel=50;
extern bool MsgAlerts=true;
extern bool SoundAlerts=true;
extern string SoundAlertFile="alert.wav";
extern bool eMailAlerts=false;
//----
int RSI_Period=14;
int Wilders_Period;
int StartBar, LastAlertBar;
datetime LastAlertTime;
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, STYLE_SOLID, 2);
SetIndexLabel(0, "Value 1");
SetIndexDrawBegin(0, StartBar);
SetIndexStyle(1, DRAW_LINE, STYLE_DOT);
SetIndexBuffer(1, TrLevelSlow);
SetIndexLabel(1, "Value 2");
SetIndexDrawBegin(1, StartBar);
SetIndexBuffer(2, AtrRsi);
SetIndexBuffer(3, MaAtrRsi);
SetIndexBuffer(4, Rsi);
IndicatorShortName(StringConcatenate("QQE(", SF, ")"));
//----
LastAlertBar=Bars-1;
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) * 4.236;
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;
}
if ((RsiMa[i+1]<AlertLevel && RsiMa[i]>AlertLevel) ||(RsiMa[i+1]>AlertLevel && RsiMa[i]<AlertLevel) )
{
string base=Symbol()+ ", TF: " + TF2Str(Period());
string Subj=base + ", " + AlertLevel + " level Cross Up";
if (RsiMa[i+1]>AlertLevel && RsiMa[i]<AlertLevel) Subj=base + " " + AlertLevel + " level Cross Down";
string Msg=Subj + " @ " + TimeToStr(TimeLocal(),TIME_SECONDS);
if (Bars>LastAlertBar)
{
LastAlertBar=Bars;
DoAlerts(Msg,Subj);
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
void DoAlerts(string msgText,string eMailSub)
{
if (MsgAlerts) Alert(msgText);
if (SoundAlerts) PlaySound(SoundAlertFile);
if (eMailAlerts) SendMail(eMailSub, msgText);
}
//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+
string TF2Str(int period)
{
switch(period)
{
case PERIOD_M1: return("M1");
case PERIOD_M5: return("M5");
case PERIOD_M15: return("M15");
case PERIOD_M30: return("M30");
case PERIOD_H1: return("H1");
case PERIOD_H4: return("H4");
case PERIOD_D1: return("D1");
case PERIOD_W1: return("W1");
case PERIOD_MN1: return("MN");
}
return(Period());
}
//+------------------------------------------------------------------+
Comments