StepChoppy_v1[1].2
Download scriptThe StepChoppy indicator is a visual analysis tool designed to help traders identify the current strength, quality, and potential direction of a market trend. Rather than just showing you where the price is going, it categorizes the "mood" of the market into eight distinct stages, divided equally between upward and downward movements.
By analyzing the relationship between different moving averages and momentum oscillators (specifically a specialized Relative Strength Index), the script classifies the market into four levels of intensity for both buying and selling pressures:
Upward Trend Analysis
When the indicator detects a bullish bias, it uses a color-coded histogram to show how "healthy" that move is:
- Strong UpTrend: Indicates high momentum where the price is moving aggressively upward with consistent strength.
- Retrace UpTrend: Suggests the market is still in an uptrend but is currently experiencing a minor pullback or breather.
- Choppy UpTrend: Signals that the upward movement has lost its clean trajectory and is becoming unstable or inconsistent.
- Be Ready to Change UpTrend: A warning sign indicating that the bullish momentum is exhausting and a reversal or significant slowdown may be imminent.
Downward Trend Analysis
Conversely, when the indicator detects a bearish bias, it identifies the following stages of decline:
- Strong DownTrend: Shows a powerful, high-momentum move toward lower prices.
- Retrace DownTrend: Indicates the market is in a downtrend but is currently seeing a temporary relief bounce or slight recovery.
- Choppy DownTrend: Signals that the下跌 (downward) movement is becoming erratic and lacks clear direction.
- Be Ready to Change DownTrend: Warns the trader that the bearish pressure is fading and the market may be preparing to pivot.
How it Works for the User
The logic functions by comparing "Fast" and "Slow" momentum signals against specialized trend averages. If the signals align perfectly with a strong trend, the indicator highlights the most aggressive category. As those signals begin to weaken or contradict one another, the indicator shifts through the middle categories (Retrace and Choppy) until it finally reaches the "Ready to Change" warning state.
In simple terms, this tool acts as a visual filter, helping you distinguish between a high-quality trend that is safe to trade and a "choppy" or exhausted market where trading might be risky.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| StepChoppy_v1.mq4 |
//| Copyright © 2006, Forex-TSD.com |
//| Written by IgorAD,igorad2003@yahoo.co.uk |
//| http://finance.groups.yahoo.com/group/TrendLaboratory |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Forex-TSD.com "
#property link "http://www.forex-tsd.com/"
#property indicator_separate_window
#property indicator_minimum -0.05
#property indicator_maximum 1.05
#property indicator_buffers 8
//---- input parameters
int Length=10;
double StepSizeFast=5;
double StepSizeSlow=15;
int MAPeriod=1;
int Price=0;
int Mode=2;
//---- buffers
double UpBuffer1[];
double UpBuffer2[];
double UpBuffer3[];
double UpBuffer4[];
double DnBuffer1[];
double DnBuffer2[];
double DnBuffer3[];
double DnBuffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
SetIndexStyle(0,DRAW_HISTOGRAM,0,3,MediumBlue);
SetIndexStyle(1,DRAW_HISTOGRAM,0,3,DodgerBlue);
SetIndexStyle(2,DRAW_HISTOGRAM,0,3,LightBlue);
SetIndexStyle(3,DRAW_HISTOGRAM,0,3,Aqua);
SetIndexStyle(4,DRAW_HISTOGRAM,0,3,Crimson);
SetIndexStyle(5,DRAW_HISTOGRAM,0,3,Tomato);
SetIndexStyle(6,DRAW_HISTOGRAM,0,3,Orange);
SetIndexStyle(7,DRAW_HISTOGRAM,0,3,Yellow);
SetIndexBuffer(0,UpBuffer1);
SetIndexBuffer(1,UpBuffer2);
SetIndexBuffer(2,UpBuffer3);
SetIndexBuffer(3,UpBuffer4);
SetIndexBuffer(4,DnBuffer1);
SetIndexBuffer(5,DnBuffer2);
SetIndexBuffer(6,DnBuffer3);
SetIndexBuffer(7,DnBuffer4);
//----
string short_name="StepChoppy";
IndicatorShortName(short_name);
SetIndexLabel(0,"Strong UpTrend");
SetIndexLabel(1,"Retrace UpTrend");
SetIndexLabel(2,"Choppy UpTrend");
SetIndexLabel(3,"Be ready to change UpTrend");
SetIndexLabel(4,"Strong DownTrend");
SetIndexLabel(5,"Retrace DownTrend");
SetIndexLabel(6,"Choppy DownTrend");
SetIndexLabel(7,"Be ready to change DownTrend");
//----
SetIndexDrawBegin(0,Length);
SetIndexDrawBegin(1,Length);
SetIndexDrawBegin(2,Length);
SetIndexDrawBegin(3,Length);
SetIndexDrawBegin(4,Length);
SetIndexDrawBegin(5,Length);
SetIndexDrawBegin(6,Length);
SetIndexDrawBegin(7,Length);
//----
return(0);
}
//+------------------------------------------------------------------+
//| StepChoppy_v1 |
//+------------------------------------------------------------------+
int start()
{
int i,counted_bars=IndicatorCounted();
double RSI, FastRSI, SlowRSI, StepMA, UpTrendMA, DnTrendMA;
//----
if(Bars<=Length) return(0);
//---- initial zero
if(counted_bars<1)
for(i=1;i<=Length;i++)
{
UpBuffer1[Bars-i]=0.0;
UpBuffer2[Bars-i]=0.0;
UpBuffer3[Bars-i]=0.0;
UpBuffer4[Bars-i]=0.0;
DnBuffer1[Bars-i]=0.0;
DnBuffer2[Bars-i]=0.0;
DnBuffer3[Bars-i]=0.0;
DnBuffer4[Bars-i]=0.0;
}
//----
if ( counted_bars > 0 ) int limit=Bars-counted_bars;
if ( counted_bars ==0 ) limit=Bars-Length-1;
for(i=limit;i>=0;i--)
{
UpTrendMA = iCustom(NULL,0,"StepMA_v7",Length,1.0,0,0,0,0,true,2,0,1,i);
DnTrendMA = iCustom(NULL,0,"StepMA_v7",Length,1.0,0,0,0,0,true,2,0,2,i);
RSI=iCustom(NULL,0,"StepRSI_v5.2",Length,StepSizeFast,MAPeriod,Price,Mode,0,i);
FastRSI=iCustom(NULL,0,"StepRSI_v5.2",Length,StepSizeFast,MAPeriod,Price,Mode,1,i);
SlowRSI=iCustom(NULL,0,"StepRSI_v5.2",Length,StepSizeSlow,MAPeriod,Price,Mode,1,i);
UpBuffer1[i] =UpBuffer1[i+1];
UpBuffer2[i] =UpBuffer2[i+1];
UpBuffer3[i] =UpBuffer3[i+1];
UpBuffer4[i] =UpBuffer4[i+1];
DnBuffer1[i] =DnBuffer1[i+1];
DnBuffer2[i] =DnBuffer2[i+1];
DnBuffer3[i] =DnBuffer3[i+1];
DnBuffer4[i] =DnBuffer4[i+1];
if (FastRSI > SlowRSI && RSI > FastRSI && UpTrendMA!=EMPTY_VALUE)
{UpBuffer1[i] = 1.0;UpBuffer2[i] = 0.0;UpBuffer3[i] = 0.0;UpBuffer4[i] = 0.0;
DnBuffer1[i] = 0.0;DnBuffer2[i] = 0.0;DnBuffer3[i] = 0.0;DnBuffer4[i] = 0.0;}
else if (FastRSI > SlowRSI && RSI < FastRSI && UpTrendMA!=EMPTY_VALUE)
{UpBuffer1[i] = 0.0;UpBuffer2[i] = 1.0;UpBuffer3[i] = 0.0;UpBuffer4[i] = 0.0;
DnBuffer1[i] = 0.0;DnBuffer2[i] = 0.0;DnBuffer3[i] = 0.0;DnBuffer4[i] = 0.0;}
else if (FastRSI < SlowRSI && RSI > FastRSI && UpTrendMA!=EMPTY_VALUE)
{UpBuffer1[i] = 0.0;UpBuffer2[i] = 0.0;UpBuffer3[i] = 1.0;UpBuffer4[i] = 0.0;
DnBuffer1[i] = 0.0;DnBuffer2[i] = 0.0;DnBuffer3[i] = 0.0;DnBuffer4[i] = 0.0;}
else if (FastRSI < SlowRSI && RSI < FastRSI && UpTrendMA!=EMPTY_VALUE)
{UpBuffer1[i] = 0.0;UpBuffer2[i] = 0.0;UpBuffer3[i] = 0.0;UpBuffer4[i] = 1.0;
DnBuffer1[i] = 0.0;DnBuffer2[i] = 0.0;DnBuffer3[i] = 0.0;DnBuffer4[i] = 0.0;}
else if (FastRSI < SlowRSI && RSI < FastRSI && DnTrendMA!=EMPTY_VALUE)
{UpBuffer1[i] = 0.0;UpBuffer2[i] = 0.0;UpBuffer3[i] = 0.0;UpBuffer4[i] = 0.0;
DnBuffer1[i] = 1.0;DnBuffer2[i] = 0.0;DnBuffer3[i] = 0.0;DnBuffer4[i] = 0.0;}
else if (FastRSI < SlowRSI && RSI > FastRSI && DnTrendMA!=EMPTY_VALUE)
{UpBuffer1[i] = 0.0;UpBuffer2[i] = 0.0;UpBuffer3[i] = 0.0;UpBuffer4[i] = 0.0;
DnBuffer1[i] = 0.0;DnBuffer2[i] = 1.0;DnBuffer3[i] = 0.0;DnBuffer4[i] = 0.0;}
else if (FastRSI > SlowRSI && RSI < FastRSI && DnTrendMA!=EMPTY_VALUE)
{UpBuffer1[i] = 0.0;UpBuffer2[i] = 0.0;UpBuffer3[i] = 0.0;UpBuffer4[i] = 0.0;
DnBuffer1[i] = 0.0;DnBuffer2[i] = 0.0;DnBuffer3[i] = 1.0;DnBuffer4[i] = 0.0;}
else if (FastRSI > SlowRSI && RSI > FastRSI && DnTrendMA!=EMPTY_VALUE)
{UpBuffer1[i] = 0.0;UpBuffer2[i] = 0.0;UpBuffer3[i] = 0.0;UpBuffer4[i] = 0.0;
DnBuffer1[i] = 0.0;DnBuffer2[i] = 0.0;DnBuffer3[i] = 0.0;DnBuffer4[i] = 1.0;}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments