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

Re: [amibroker] AFL formula for CCI



PureBytes Links

Trading Reference Links




Dave,
 
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 = <FONT 
color=#ff00ff>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)      <FONT 
face="Courier New">tm = mean[ i ]; <FONT 
face="Courier New">     
 <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">;   
    for<FONT 
    face="Courier New">( i = range ; i < BarCount; i++ 
    )   {      result[ i ] = <FONT 
    color=#ff00ff>0;  <FONT 
    color=#008000>    <FONT face="Courier New" 
    color=#008000>// the mean is not 'moving' over the range (outside the 
    loop)      tm = 
    mean[ i ]; <FONT 
    face="Courier New">     
     <FONT 
    face="Courier New">for( j = <FONT 
    color=#ff00ff>0; j < range; j++ 
    )     
     {        result[ i ] = result[ 
    i ] + abs( 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,daveSend BUG REPORTS to 
        bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
        suggest@xxxxxxxxxxxxx-----------------------------------------Post 
        AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web 
        page: <A 
        href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
        group FAQ at:<A 
        href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
        Your use of Yahoo! Groups is subject to <A 
        href="">http://docs.yahoo.com/info/terms/ 
        Send BUG REPORTS to bugs@xxxxxxxxxxxxxSend 
        SUGGESTIONS to 
        suggest@xxxxxxxxxxxxx-----------------------------------------Post 
        AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web 
        page: <A 
        href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
        group FAQ at: <A 
        href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
        Your use of Yahoo! Groups is subject to the <A 
        href="">Yahoo! Terms of 
        Service. Send BUG REPORTS to 
      bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
      suggest@xxxxxxxxxxxxx-----------------------------------------Post 
      AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: 
      <A 
      href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
      group FAQ at: <A 
      href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
      Your use of Yahoo! Groups is subject to the <A 
      href="">Yahoo! Terms of Service. 
      Send BUG REPORTS to bugs@xxxxxxxxxxxxxSend 
    SUGGESTIONS to 
    suggest@xxxxxxxxxxxxx-----------------------------------------Post 
    AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: 
    <A 
    href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
    group FAQ at: <A 
    href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
    Your use of Yahoo! Groups is subject to the <A 
    href="">Yahoo! Terms of Service. 
    Send 
  BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to 
  suggest@xxxxxxxxxxxxx-----------------------------------------Post 
  AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A 
  href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check 
  group FAQ at: <A 
  href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html 
  Your use of Yahoo! Groups is subject to the <A 
  href="">Yahoo! Terms of Service. 







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.