|
QStick |
|
QStick |
|
QStick |
|
QStick |
|
QStick |
|
QStick |
|
QStick |
|
QStick |
The Indicator QStick was developed by Tushar S. Chande and published book, The New Technical Trader. The QStick indicator was developed to quantify the information displayed in candlestick charting. The book - The New Technical Trader present a bold new array of dynamic, price-based, and risk control indicators that provide timely, reliable answers to the difficult analytic challenges of pattern recognition, variable indicator length, and price projection.The ChangeQStick indicator represents the moving average of the difference between the opening and closing prices of a security, in our case the currency pair. To quantify this mathematically, the ChangeQStick indicator calculates the average difference between the closing price and the opening price(See mathematical formula). As with other technical "momentum" indicators, the ChangeQStick indicator can be traded in several ways. Entry signals - Buy could be generated when the value crosses zero - upwards or Sell - in the opposite case. In addition, divergences from the price can indicate overbought or oversold conditions, which may signify an upcoming trend reversal. The Qstick like many other technical indicators provides a number of trading signals, including to Crossovers (the ChangeQStick oscillates above and below the 0 line), Extreme Levels, Divergence (between the price of the security and the indicator). If you need to reliably project prices under different market conditions, estimate risk on new positions, create stops to cut your losses, or plot momentum swing failures, ChangeQStick is the true indicator.
Mathematical Formula:
QStick = MAx (Close - Open)
MAx = Chosen MA of the difference (Close - Open)
ChangeQStick MQ4 Code Base (Copy Code)
//+------------------------------------------------------------------+
//| ChandeQStick_v1.mq4 |
//| Copyright © 2006, TrendLaboratory Ltd. |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//| E-mail: igorad2004@list.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, TrendLaboratory Ltd."
#property link "http://finance.groups.yahoo.com/group/TrendLaboratory"
//----
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 LightBlue
#property indicator_color2 Orange
#property indicator_width1 3
#property indicator_width2 3
#property indicator_level1 0
//---- input parameters
extern int Length =8; // Period of evaluation
extern int MA_Mode=0; // MA mode : 0-SMA,1-EMA,2-SMMA,3-LWMA
//---- buffers
double CQS_Up[];
double CQS_Dn[];
double Diff[];
double CQS[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
IndicatorBuffers(4);
SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,CQS_Up);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,CQS_Dn);
SetIndexBuffer(2,Diff);
SetIndexBuffer(3,CQS);
//---- name for DataWindow and indicator subwindow label
string short_name="ChandeQStick("+Length+","+MA_Mode+")";
IndicatorShortName(short_name);
SetIndexLabel(0,"CQS Up");
SetIndexLabel(0,"CQS Down");
//----
SetIndexDrawBegin(0,Length);
SetIndexDrawBegin(1,Length);
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int shift, limit, counted_bars=IndicatorCounted();
//----
/*
if ( counted_bars < 0 ) return(-1);
if ( counted_bars ==0 ) limit=Bars-Length-1;
if ( counted_bars < 1 )
for(int i=1;i<Length;i++)
{
CQS_Up[Bars-i]=0;
CQS_Dn[Bars-i]=0;
CQS[Bars-i]=0;
Diff[Bars-i]=0;
}
if(counted_bars>0) limit=Bars-counted_bars;
*/
//---- last counted bar will be recounted
if(counted_bars>0) counted_bars--;
limit=Bars-counted_bars;
//----
for( shift=limit; shift>=0; shift--)
Diff[shift]=Close[shift]-Open[shift];
//----
for( shift=limit; shift>=0; shift--)
{
CQS[shift]=iMAOnArray(Diff,0,Length,0,MA_Mode,shift);
if (CQS[shift]>=CQS[shift+1]) {CQS_Up[shift]=CQS[shift];CQS_Dn[shift]=0;}
else
if (CQS[shift]<CQS[shift+1]) {CQS_Dn[shift]=CQS[shift];CQS_Up[shift]=0;}
}
//----
return(0);
}
//+------------------------------------------------------------------+