hi droskill and riskosborn
 
Thanks a lot friends for fast action and coding, it is ok and on.
Once again droskill, salute your spirit.
By the way what range of index you feel should be used to decide on choppy zone 
to avoid trading.
best regards,
rvlv

--- On Sun, 9/6/09, Rick Osborn <[email protected]> wrote:


From: Rick Osborn <[email protected]>
Subject: Re: [amibroker] Re: Request afl code for choppy market index 
(pleaselook here for tradestation
To: [email protected]
Date: Sunday, September 6, 2009, 11:54 AM


  




I think the problem may be with the first line
What happens if you change it to 
Period = Param("Period" ,30,1,300, 1);
 







From: droskill <drosk...@yahoo. com>
To: amibro...@yahoogrou ps.com
Sent: Sunday, September 6, 2009 11:53:13 AM
Subject: [amibroker] Re: Request afl code for choppy market index (pleaselook 
here for tradestation

  

I looked at the Tradestation code and translated as follows - but it does not 
return a value between 0 and 100 - not sure why it should based on the 
calculation - but I may have it wrong:

Period = Param("Period" ,1,30,300, 1);

denom = HHV(High,Period) - LLV(Low,Period) ;
num = abs(Ref(Close, Period - 1) - Close);

Choppy = IIf(num != 0, (num/denom)* 100, 0);

Plot(Choppy, "ChoppyMarketsIn dex",colorBlue, styleLine) ;

--- In amibro...@yahoogrou ps.com, "rvlv" <r...@...> wrote:
>
> Hi afl experts,
> 
> 
> We often hear that a trader needs to avoid choppy markets.
> I find no formula in amibroker to deal with it as far as I know.
> If there is any,please let me know-thanks for the help.
> 
> If any experienced afl coder can help, I request them please convert
> the following tradestation code into amibroker formula and blige!
> It will be great help.
> 
> In metatrader there is a formula to this purpose called 
> TRO_MM_CMI
> ------------ ----
> METRADER CODE 
> }// if
> } // for
> 
> 
> for(int x=0;x<tfnumber; x++)
> {
> 
> int hh = Highest(symbol, tframe[x] ,MODE_HIGH, periodLength+ 1,0);
> int ll = Lowest(symbol, tframe[x] ,MODE_LOW, periodLength+ 1,0); 
> 
> HH = iHigh(symbol, tframe[x] ,hh) ; 
> LL = iLow(symbol, tframe[x] ,ll) ; 
> 
> 
> 
> 
> close = iClose(symbol, tframe[x] ,0) ; 
> pclose = iClose(symbol, tframe[x] ,periodLength- 1) ; 
> 
> denom = (HH - LL) / point ;
> num = (pclose - close) / point ;
> num = MathAbs(num) ;
> ChoppyMarketIndex = 0.0 ;
> 
> 
> 
> if(denom > 0 ) 
> {
> ChoppyMarketIndex = 100 * (num / denom) ; // 100 * (num / denom)
> }
> 
> 
> 
> CMI[x] = ChoppyMarketIndex;
> 
> 
> if (ChoppyMarketIndex > Trendy )
> { 
> theArrowLONG[ x] = ArrowHeadUp ;
> theColorLONG[ x] = UpColor ;
> }
> else if (ChoppyMarketIndex < Choppy )
> {
> theArrowLONG[ x] = ArrowHeadDn ;
> theColorLONG[ x] = DownColor ; 
> }
> else 
> {
> theArrowLONG[ x] = ArrowHeadRt ;
> theColorLONG[ x] = FlatColor ;
> } 
> ------------ --------- --------- --------- --------- ---------
> 
> Tradestation code is here
> ------------ --------- --------- --------- --------- ---
> {Choppy Market Index Function
> This function returns a value from 0 to 100.
> A lower value denotes higher market indecisiveness (choppiness) ,
> whereas a higher value denotes a trending market.
> The only input is the number of bars that we look back.}
> 
> Inputs: periodLength( Numeric);
> Vars: num(0),denom( 1);
> if(periodLength< >0) then
> begin
> denom = Highest(High, periodLength) – Lowest(Low,periodLe ngth);
> num = Close[periodLength- 1] – Close;
> num = AbsValue(num) ;
> ChoppyMarketIndex = 0.0;
> if(denom<>0) then ChoppyMarketIndex = num/demon*100;
> end;
> 
> ------------ --------- --------- --------- --------- -----
> Did you notice how this function was made up of other functions (building 
> blocks)? We calculated the denom (denominator) by using the Highest and 
> Lowest functions. We calculated the num (numerator) by using AbsValue 
> (returns the absolute value of a number) functions. The only confusing 
> snippet of code in this function is probably:
> 
> 
> Code:
> Close[periodLength- 1] – Close
> You may be asking why we subtracted 1 from the periodLength. 
> This is a great question. If you incorporate today's closing price into a 
> calculation, then the closing price 30 days ago would be referenced by 
> Close[29]. Remember that Close[1] is yesterday's closing price not today's. 
> Since we want our index to flow between 0 and positive 100, we remove the 
> negative sign of a down move in the market. We are only interested in 
> absolute distances.
> 
> Here is what I came up with, but not sure it is coded correctly:
> 
> ------------ --------- --------- --------- --------
> Code:
> double ChoppyMarketIndex( int periodLength)
> {
> double num = 0;
> double denom = 0;
> if(periodLength != 0)
> {
> denom = High[iHighest( Symbol(), PERIOD_D1, MODE_HIGH, periodLength, 0)] - 
> Low[iLowest( Symbol(), PERIOD_D1, MODE_LOW, periodLength, 0)];
> num = Close[periodLength- 1] - Close[1];
> num = MathAbs(num) ;
> }
> if(denom != 0)
> {
> return(NormalizeDou ble(num/denom* 100,0));
> }
> }
> 
> ------------ --------- --------- --------- ------
> 
> in anticipation of a quick help,
> thanks for your time and helping spirit,
> regards
> rvlv
>

















      

Reply via email to