[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [amibroker] AFL formula for CCI



PureBytes Links

Trading Reference Links




<SPAN 
class=364114818-12102003>thanks tomasz, that did it, much 
appreciated.
<SPAN 
class=364114818-12102003> 
<SPAN 
class=364114818-12102003>one thing you said interested me, about how the AFL you 
presented was "how it is implemented in AB already". does that mean that the 
built in indicators are coded in AFL somehow? I had assumed they were C++ or 
whatever language the main program was written in. if they are AFL, is there any 
way we can replace them with modified versions like this? <SPAN 
class=364114818-12102003>if not, perhaps some future version of AB will allow 
that. 
<SPAN 
class=364114818-12102003> 
<SPAN 
class=364114818-12102003>the ability to use array parameters with  the full 
suite of built in indicators would be also good, as has already been 
noted.
<SPAN 
class=364114818-12102003> 
<SPAN 
class=364114818-12102003>dave
<BLOCKQUOTE 
>
  Oh well, the formula I have given presented how it is 
  implemented in AB already
  since you were trying incorrect code for 
  MeanDev.
   
  It is easy to modify the code I provided to variable period 
  as it involves only
  replacing range (scalar) with range[ i ] (indexed array 
  element)
   
   
  
  
  function<FONT 
  face="Courier New"> MeanDev( array, mean, range ){  result = 
  0<FONT 
  face="Courier New">;   
  for<FONT 
  face="Courier New">( i = LastValue( Highest( range ) ) ; i < 
  BarCount; i++ )   {     
   result[ i ] = 0<FONT 
  face="Courier New">;      
  // the mean is not 
  'moving' over the range (outside the loop)     
   tm = mean[ i ]; <FONT 
  color=#800000>     
   <FONT 
  face="Courier New">for( j = <FONT 
  color=#ff00ff>0; j < range[ i ]; j++ 
  )      {       
   result[ i ] = result[ i ] + abs<FONT 
  face="Courier New">( array[ i - j ] - tm );     
   }       <FONT 
  face="Courier New"> result[ i ] = result[ i ]/range[ i 
  ];   }    
  return result;}
  n = <FONT face="Courier New" 
  color=#ff00ff>20;
  SMATP = <FONT 
  color=#0000ff>MA(Avg,n);<FONT 
  color=#008000>//1,2
  MD = MeanDev( Avg, SMATP, n );
  CCIx = (Avg - SMATP) / (<FONT 
  face="Courier New">0.015 * MD);<FONT 
  color=#008000>//5,6,7
  Plot<FONT 
  face="Courier New">(CCIx,<FONT 
  color=#ff00ff>"CCIx",colorGreen,styleLine);<FONT 
  color=#0000ff>
  Plot(<FONT 
  color=#0000ff>CCI(n),<FONT 
  color=#ff00ff>"CCI",colorRed,styleLine);
  Best regards,Tomasz Janeczkoamibroker.com
  <BLOCKQUOTE 
  >
    ----- Original Message ----- 
    <DIV 
    >From: 
    Dave Merrill 
    
    To: <A title=amibroker@xxxxxxxxxxxxxxx 
    href="">amibroker@xxxxxxxxxxxxxxx 
    Sent: Sunday, October 12, 2003 2:38 
    PM
    Subject: RE: [amibroker] AFL formula 
    for CCI
    
    <SPAN 
    class=324330312-12102003>thanks tomasz, <FONT 
    face="Courier New" color=#0000ff size=2>but 
    it's still not working when I pass an array for the CCIx period, which 
    is the end result I'm looking for. I still get the same error "Error 3. 
    Condition in IF, WHILE, FOR statements has to be Numeric or Boolean 
    type."
    <SPAN 
    class=324330312-12102003> 
    <SPAN 
    class=324330312-12102003>any further ideas?
    <SPAN 
    class=324330312-12102003> 
    <SPAN 
    class=324330312-12102003>here my actual code:
    <SPAN 
    class=324330312-12102003> 
    <SPAN 
    class=324330312-12102003>==============
    <SPAN 
    class=324330312-12102003>function MeanDev(array, mean, range) 
    { result = 0; for(i = range; i < BarCount; i++) 
    {  result[i] = 0; // the mean is not 'moving' over the 
    range (outside the loop)  tm = mean[i];   for(j 
    = 0; j < range; j++) {   result[i] = result[i] + 
    abs(array[i - j] - tm);  }  result[i] = 
    result[i] / range;  } return result;}function 
    CCIx(period) { SMATP = MA(Avg, period); MD = MeanDev(Avg, 
    SMATP, period); result = (Avg - SMATP) / (0.015 * 
    MD); return result;}
    <SPAN 
    class=324330312-12102003><SPAN 
    class=324330312-12102003>==============
    <SPAN 
    class=324330312-12102003><SPAN 
    class=324330312-12102003> 
    <SPAN 
    class=324330312-12102003><SPAN 
    class=324330312-12102003>dave
    <SPAN 
    class=324330312-12102003><SPAN 
    class=324330312-12102003> 
    <BLOCKQUOTE 
    >
      The mean deviation in CCI requires that SMATP does NOT 
      move over the period.
      In your 
      MD = Sum(Abs(SMATP - 
      avg), period);
       
      SMATP is 
      moving.
       
      You can not code itwith 
      SUM or MA. You must use looping for that.
       
       
      
      function<FONT 
      face="Courier New"> MeanDev( array, mean, range ){  result = 
      0<FONT 
      face="Courier New">;   
      <FONT 
      color=#800000>for( 
      i = range ; i < BarCount; i++ )   
      {      result[ i ] = <FONT 
      color=#ff00ff>0<FONT 
      face="Courier New">;      
      // the mean is not 
      'moving' over the range (outside the loop)     
       tm = mean[ i ]; <FONT 
      color=#800000>     
       <FONT 
      face="Courier New">for( j = 
      0; j < 
      range; j++ )     
       {        result[ i ] = 
      result[ i ] + abs<FONT 
      face="Courier New">( array[ i - j ] - tm );     
       }       <FONT 
      face="Courier New"> result[ i ] = result[ i 
      ]/range;   }  
        return 
      result;}
      n = <FONT face="Courier New" 
      color=#ff00ff>20;
      SMATP = <FONT 
      color=#0000ff>MA(Avg,n);<FONT 
      color=#008000>//1,2
      MD = MeanDev( Avg, SMATP, n 
      );
      CCIx = (Avg - SMATP) / (<FONT 
      face="Courier New">0.015 * MD);<FONT 
      color=#008000>//5,6,7
      Plot<FONT 
      face="Courier New">(CCIx,<FONT 
      color=#ff00ff>"CCIx",colorGreen,styleLine);<FONT 
      color=#0000ff>
      Plot<FONT 
      face="Courier New">(CCI(n),<FONT 
      color=#ff00ff>"CCI",colorRed,styleLine);
       
      Best regards,Tomasz Janeczkoamibroker.com
      <BLOCKQUOTE 
      >
        ----- Original Message ----- 
        <DIV 
        >From: 
        Dave 
        Merrill 
        To: <A 
        title=amibroker@xxxxxxxxxxxxxxx 
        href="">amibroker@xxxxxxxxxxxxxxx 
        
        Sent: Sunday, October 12, 2003 7:24 
        AM
        Subject: RE: [amibroker] AFL 
        formula for CCI
        
        <SPAN 
        class=806081305-12102003>thanks for jumping in 
        graham.
        <SPAN 
        class=806081305-12102003> 
        <SPAN 
        class=806081305-12102003>first, I think AB's Avg is (H+L+C)/3, so we 
        don't need to calculated it again.
        <SPAN 
        class=806081305-12102003> 
        <SPAN 
        class=806081305-12102003>second, I think the problem we're both having 
        is the mean deviation code. my loop version sums, over 20 days, the 
        absolute values of the difference between TODAY'S SMATP and the typical 
        price of that day.
        <SPAN 
        class=806081305-12102003> 
        <SPAN 
        class=806081305-12102003>this non-loop version is close, not the results 
        it gives, but conceptually:
        <SPAN 
        class=806081305-12102003> 
        <SPAN 
        class=806081305-12102003>  MD = Sum(Abs(SMATP - avg), 
        period);
        <SPAN 
        class=806081305-12102003> 
        <SPAN 
        class=806081305-12102003>what's wrong I think is that for each day being 
        summed, it uses the SMATP value for that day, same as it uses the avg 
        value for that day. but as I said above, it needs the avg for each day, 
        but the SMATP value used should always be from the current day, the one 
        being calculated, not the value on each of the previous (Period) 
        days.
        <SPAN 
        class=806081305-12102003> 
        <SPAN 
        class=806081305-12102003>any more ideas? not just you graham, 
        but anyone?
        <SPAN 
        class=806081305-12102003> 
        <SPAN 
        class=806081305-12102003>dave
        <BLOCKQUOTE 
        >This 
          isn't an exact match, I tried to check against the description in 
          ABhelp files but couldn't quite follow it.I am missing 
          something, just not certain what.TP = (H+L+C)/3;SMATP = 
          MA(TP,20);MD = MA(abs(TP - SMATP),20);CCIx = (TP - SMATP) / 
          (0.015 * 
          MD);Plot(CCIx,"CCIx",colorGreen,styleLine);Plot(CCI(20),"CCI",colorRed,styleLine);Cheers,Graham<A 
          href="">http://groups.msn.com/ASXShareTrading<A 
          href="">http://groups.msn.com/FMSAustralia 
          -----Original Message-----From: Dave Merrill 
          [mailto:dmerrill@xxxxxxx] Sent: Sunday, 12 October 2003 12:22 
          PMTo: amibroker@xxxxxxxxxxxxxxxSubject: [amibroker] AFL 
          formula for CCIre the earlier discussion of using arrays 
          as paremters to built-inindicators, I need a version of the CCI 
          that can take an array for itsperiod.here's a description 
          of how the 20-period CCI is calculated, 
          fromStockCharts.com:  1) Calculate today's Typical Price 
          (TP) = (H+L+C)/3 where H = high; L =low, and C = close.  
          2) Calculate today's 20-day Simple Moving Average of the Typical 
          Price(SMATP).  3) Calculate today's Mean Deviation. 
          First, calculate the absolute valueof the difference between 
          today's SMATP and the typical price for each ofthe past 20 days. 
          Add all of these absolute values together and divide by 20to find 
          the Mean Deviation.  4) The final step is to apply the 
          Typical Price (TP), the Simple MovingAverage of the Typical Price 
          (SMATP), the Mean Deviation and a Constant(.015) to the following 
          formula:      CCI = (Typical Price - 
          SMATP) / (.015 x Mean Deviation)according to my tests, this 
          matches the built-in CCI exactly:  MD = 
          0;      // MD is Mean Deviation  
          for(i = 0; i < period; i++) {    MD = MD + 
          Abs(SMATP - Ref(avg, -i));  }  MD = MD / 
          period;can anyone see how to do the same thing with AFL array 
          processing instead ofthe 
        loop?thanks,dave






Yahoo! Groups Sponsor


  ADVERTISEMENT 









Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx 
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html



Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.