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

Re: [amibroker] AFL formula for CCI



PureBytes Links

Trading Reference Links




Dave,
 
No, they are written in C++, but since AFL resembles C++ in 
some areas I was able to almost copy-paste code fragment
from C source (of course removing some stuff required 
by C++ like declarations).
 
You *can* replace built-in functions with your custom ones but 
ONLY from plugin DLL. 
 
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 8:57 
  PM
  Subject: RE: [amibroker] AFL formula for 
  CCI
  
  <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( 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 
    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 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<FONT 
        face="Courier New">( i = range ; i < BarCount; i++ 
        )   {      result[ i ] = 
        0<FONT 
        face="Courier New">;  <FONT 
        color=#008000>    <FONT face="Courier New" 
        color=#008000>// the mean is not 'moving' over the range (outside the 
        loop)      <FONT 
        face="Courier New">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 
        face="Courier New">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 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.