Good indicator for determining when choppy market

 

I need something that can detect when the market is choppy. Is there anything I can do for this? Anyone know a good way of determining this? Thanks

 

Ok, I never saw this.

https://www.mql5.com/en/forum/173815

I like it but how can I use it in an EA ?

How do I say

IF trend = downtrend

or

If trend = uptrend

using StepChoppyv1.2.mq4 ?

If someone can help, I would appreciate it. If I make good EA, I'll post it.

//+------------------------------------------------------------------+

//| 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 "https://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=0.0;

UpBuffer2=0.0;

UpBuffer3=0.0;

UpBuffer4=0.0;

DnBuffer1=0.0;

DnBuffer2=0.0;

DnBuffer3=0.0;

DnBuffer4=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 =UpBuffer1;

UpBuffer2 =UpBuffer2;

UpBuffer3 =UpBuffer3;

UpBuffer4 =UpBuffer4;

DnBuffer1 =DnBuffer1;

DnBuffer2 =DnBuffer2;

DnBuffer3 =DnBuffer3;

DnBuffer4 =DnBuffer4;

if (FastRSI > SlowRSI && RSI > FastRSI && UpTrendMA!=EMPTY_VALUE)

{UpBuffer1 = 1.0;UpBuffer2 = 0.0;UpBuffer3 = 0.0;UpBuffer4 = 0.0;

DnBuffer1 = 0.0;DnBuffer2 = 0.0;DnBuffer3 = 0.0;DnBuffer4 = 0.0;}

else if (FastRSI > SlowRSI && RSI < FastRSI && UpTrendMA!=EMPTY_VALUE)

{UpBuffer1 = 0.0;UpBuffer2 = 1.0;UpBuffer3 = 0.0;UpBuffer4 = 0.0;

DnBuffer1 = 0.0;DnBuffer2 = 0.0;DnBuffer3 = 0.0;DnBuffer4 = 0.0;}

else if (FastRSI FastRSI && UpTrendMA!=EMPTY_VALUE)

{UpBuffer1 = 0.0;UpBuffer2 = 0.0;UpBuffer3 = 1.0;UpBuffer4 = 0.0;

DnBuffer1 = 0.0;DnBuffer2 = 0.0;DnBuffer3 = 0.0;DnBuffer4 = 0.0;}

else if (FastRSI < SlowRSI && RSI < FastRSI && UpTrendMA!=EMPTY_VALUE)

{UpBuffer1 = 0.0;UpBuffer2 = 0.0;UpBuffer3 = 0.0;UpBuffer4 = 1.0;

DnBuffer1 = 0.0;DnBuffer2 = 0.0;DnBuffer3 = 0.0;DnBuffer4 = 0.0;}

else if (FastRSI < SlowRSI && RSI < FastRSI && DnTrendMA!=EMPTY_VALUE)

{UpBuffer1 = 0.0;UpBuffer2 = 0.0;UpBuffer3 = 0.0;UpBuffer4 = 0.0;

DnBuffer1 = 1.0;DnBuffer2 = 0.0;DnBuffer3 = 0.0;DnBuffer4 = 0.0;}

else if (FastRSI FastRSI && DnTrendMA!=EMPTY_VALUE)

{UpBuffer1 = 0.0;UpBuffer2 = 0.0;UpBuffer3 = 0.0;UpBuffer4 = 0.0;

DnBuffer1 = 0.0;DnBuffer2 = 1.0;DnBuffer3 = 0.0;DnBuffer4 = 0.0;}

else if (FastRSI > SlowRSI && RSI < FastRSI && DnTrendMA!=EMPTY_VALUE)

{UpBuffer1 = 0.0;UpBuffer2 = 0.0;UpBuffer3 = 0.0;UpBuffer4 = 0.0;

DnBuffer1 = 0.0;DnBuffer2 = 0.0;DnBuffer3 = 1.0;DnBuffer4 = 0.0;}

else if (FastRSI > SlowRSI && RSI > FastRSI && DnTrendMA!=EMPTY_VALUE)

{UpBuffer1 = 0.0;UpBuffer2 = 0.0;UpBuffer3 = 0.0;UpBuffer4 = 0.0;

DnBuffer1 = 0.0;DnBuffer2 = 0.0;DnBuffer3 = 0.0;DnBuffer4 = 1.0;}

}

//----

return(0);

}

//+------------------------------------------------------------------+

 

Nevermind.

Anyway, if it says "ready to change : Downtrend"

That means that an uptrend is about to take place, right?

 

Choppiness index (2 versions)

chop_idx1.mq4

chop_idx.mq4

Files:
Reason: