ChandeQStik_v1
Download scriptThe ChandeQStick indicator is designed to provide traders with a visual representation of momentum and price action trends by analyzing the relationship between a candle's opening and closing prices. Unlike standard indicators that might only look at price points, this tool focuses on the "body" of each price candle to determine the strength and direction of the market movement.
Core Logic and Methodology
The indicator operates through a three-step logical process:
1. Measuring Individual Candle Movement First, the script calculates the raw difference between the closing price and the opening price for every individual candle on the chart. This identifies whether a specific period ended higher or lower than it began, effectively stripping away "wicks" (price extremes) to focus purely on the actual progress made during that timeframe.
2. Smoothing the Data To prevent the indicator from reacting too wildly to minor, insignificant price fluctuations (market noise), the script applies a Moving Average to those calculated differences. Users can choose between different types of averages (such as Simple, Exponential, Smoothed, or Linear Weighted). This smoothing process creates a more fluid "momentum line" that reveals the underlying trend of the market’s strength over a specific period.
3. Determining Trend Direction Finally, the script compares the current smoothed value against the previous one to determine the direction of the momentum:
- Upward Momentum: If the current smoothed value is higher than the previous one, the indicator registers an upward trend (displayed in Blue).
- Downward Momentum: If the current smoothed value is lower than the previous one, the indicator registers a downward trend (displayed in Red).
How to Interpret the Results
By monitoring these shifts, traders can identify when momentum is accelerating or decelerating. The tool provides a clear visual distinction between bullish and bearish pressure, helping to filter out "choppy" price action and highlighting sustained moves in either direction based on the user-defined period length.
//+------------------------------------------------------------------+
//| 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 Blue
#property indicator_color2 Red
#property indicator_width1 2
#property indicator_width2 2
#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_LINE,STYLE_SOLID);
SetIndexBuffer(0,CQS_Up);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID);
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);
}
//+------------------------------------------------------------------+
Comments