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

[amibroker] adjusting split data



PureBytes Links

Trading Reference Links

An efficiency improvement in the Kase PeakOscillator code posted 
earlier.

My enthusiasm about picking up the looping stuff spun out of control 
and made me loop thinks unnecessarily. In the PeakOut lines part of 
the KPO code we need to turn our set PeakOut percentiles into 
standard deviations (PC cycle into THcycle and PChist into THhist, 
TH for threshold). For that we iterated through the standard 
deviations to reach the set PeakOut percentiles using the formula

percentile = ( 2*N(stdev) – 1 )*100

and using the Hastings formula to approximate N(ormal distribution).

However we'd be better off using the INVERSE normal distribution
and calculate the standard deviations directly:

stdev = N-1(0.5*(Percentile/100 + 1))

Just like Hastings is a polynomial approximation for the 
distribution itself, there are approximations for the inverse 
distribution. This eliminates the loop and creates a straightforward 
calculation.

For who's interested I used an approximation I found on page 4 of

http://www.math.toronto.edu/almgren/mmf/monte-carlo-02/notes2.pdf  

Although I think values below 80 hardly make sense (I had previously 
limited to 81 in order to somewhat limit the # of loops) there is 
now no more theoretical limitation to the settings of PCcycl and 
PChist, you can choose any number between 1 and 99 so in the 
beginning of the code you can change that line to

/* Set percentiles for PeakOut lines using numbers between 1 and 99 
*/

Below is PeakOut part of the code including the correction.

/* Definition of PeakOut lines POmax and POmin */

UPcycle = minLB;
for (i=minLB+1;i<=maxLB;i++)
{ UPcycle = IIf(KSDIup(i)==maxKSDIup,i,UPcycle); } 

DNcycle = minLB;
for (i=minLB+1;i<=maxLB;i++)
{ DNcycle = IIf(KSDIdn(i)==maxKSDIdn,i,DNcycle); } 

function f(x)
{ return sqrt(-2*log(1-x)) ; }

function g(x)
{ return f(x) - (2.515517 + 0.802853*f(x) + 0.010328*f(x)^2) / (1 + 
1.432788*f(x) + 0.189269*f(x)^2 + 0.001308*f(x)^3) ; }

function NDSINV(x)
{ return IIf(0<x AND x<0.5, -g(1-x), IIf(0.5<=x AND x<1, g(x), 
0)) ; }

if (PCcycl<1) PCcycl=1;
if (PCcycl>99) PCcycl=99;
if (PChist<1) PChist=1;
if (PChist>99) PChist=99;

THcycl = NDSINV(0.5*(PCcycl/100+1));
THhist = NDSINV(0.5*(PChist/100+1));

CYCL = IIf(KPO>=0,UPcycle,DNcycle);
MNcycl = MA(KPO,CYCL);
SDcycl = SD(KPO,CYCL);
Vcycl1 = MNcycl + THcycl*SDcycl;
Vcycl2 = MNcycl - THcycl*SDcycl;
POcycl = IIf(KPO>0,Vcycl1,IIf(KPO<0,Vcycl2,0));

HIST = BarIndex()-maxLB+1;
MNhist = MA(KPO,HIST);
SDhist = SD(KPO,HIST);
Vhist1 = MNhist + THhist*SDhist;
Vhist2 = MNhist - THhist*SDhist;
POhist = IIf(KPO>0,Vhist1,IIf(KPO<0,Vhist2,0));

POmax = IIf(abs(POcycl)>abs(POhist),POcycl,POhist);
POmin = IIf(abs(POcycl)<abs(POhist),POcycl,POhist);

/* end */

-treliff



------------------------ Yahoo! Groups Sponsor ---------------------~-->
Buy Ink Cartridges or Refill Kits for your HP, Epson, Canon or Lexmark
Printer at MyInks.com.  Free s/h on orders $50 or more to the US & Canada.
http://www.c1tracking.com/l.asp?cid=5511
http://us.click.yahoo.com/mOAaAA/3exGAA/qnsNAA/GHeqlB/TM
---------------------------------------------------------------------~->

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 
Yahoo! Groups Links

<*> To visit your group on the web, go to:
     http://groups.yahoo.com/group/amibroker/

<*> To unsubscribe from this group, send an email to:
     amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
     http://docs.yahoo.com/info/terms/