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.
|