PureBytes Links
Trading Reference Links
|
Here is a version I have:
//Peak Oscillator by Cynthia KASE
//Version 1.0, 7/07/2002
Per1=30;
RWH=(H-Ref(L,-Per1))/(ATR(Per1)*sqrt(Per1));
RWL=(Ref(H,-Per1)-L)/(ATR(Per1)*sqrt(Per1));
Pk=WMA((RWH-RWL),3);
MN=MA(Pk,Per1);
SD=StDev(Pk,Per1);
Val1=IIf(MN+(1.33*SD)>2.08,MN+(1.33*SD),2.08);
Val2=IIf(MN-(1.33*SD)<-1.92,MN-(1.33*SD),-1.92);
ln1=IIf(Ref(Pk,-1)>=0 AND Pk>0,Val1,0);
ln2=IIf(Ref(Pk,-1)<=0 AND Pk<0,Val2,0);
Red=IIf(Ref(Pk,-1)>Pk,Pk,0);
Green=IIf(Pk>Ref(Pk,-1),Pk,0);
Plot(red,"RED",4,2+4);
Plot(Green,"GREEN",5,2+4);
Plot(ln1,"LN1",5,styleDots);
Plot(ln2,"ln2",4,styleDots);
Anthony
----- Original Message -----
From: "treliff" <treliff@xxxxxxxxx>
To: <amibroker@xxxxxxxxxxxxxxx>
Sent: Friday, March 26, 2004 12:25 AM
Subject: [amibroker] KASE PeakOscillator
> Byron, Ram and others interested, here is what I've come up with
> re.
> the KASE PeakOscillator and PeakOut Lines. I am quite confident that
> this code captures the essence of Kase's measurements but less
> confident that code efficiency can't be improved.
>
> Traders using momentum, not averse to math and not yet familiar with
> Kase's work I recommend to take a look. For me it is the first
> purely technical indicator that caught my serious interest. Always
> turned off by fixed lookbacks I found Kase's approach very
> refreshing: with adaptive lookbacks and a very sound statistical
> foundation her work truly stands out in my opinion.
>
> The use of functions in the code makes me personally see things
> clearer and as I understood these do not slow things down I use them
> wherever applicable (Dimitris I twisted your dynamic st.dev code
> into a function as well).
>
> This one could replace the "out-moded MACD" (Kase quote),
> though has
> a very different foundation. For those interested in details Kase
> explains most (but not all) in a bunch of articles free available at
>
> http://www.kaseco.com/articles_etc/articles.htm
>
> under "primarily trading related" esp. the 2 articles "the best
> momentum indicators" and "the two faces of momentum".
>
> Read the remarks after the code for some explanations.
>
> /* code start */
>
> /*
> Definition of 3 different standard deviation measurements.
> SD_pop is the population or biased version, similar to AFL StDev.
> SD_sam is the sample or non-biased version which Kase describes in
> her book and assumedly uses in her indicators.
> SD_nnc is the non-centered version in which not the distances
> between the values and the mean are squared but instead the values
> themselves. Though not formally a standard deviation it appears used
> by traders especially for measuring short-term volatility in strong
> trends.
> */
>
> function SD_pop(input,n)
> { return sqrt( (n*Sum(input^2,n)-(Sum(input,n))^2) / n^2 ); }
>
> function SD_sam(input,n)
> { return sqrt( (n*Sum(input^2,n)-(Sum(input,n))^2) / (n^2-n) ); }
>
> function SD_nnc(input,n)
> { return sqrt( Sum(input^2,n) / n ); }
>
> /* Set your preferred standard deviation measurement SD */
> function SD(input,n) { return SD_pop(input,n); }
> //function SD(input,n) { return SD_sam(input,n); }
> //function SD(input,n) { return SD_nnc(input,n); }
>
> /* Set minimum and maximum lookbacks */
> minLB = 8;
> maxLB = 65;
>
> /* Set percentiles for PeakOut lines using numbers between 81 and 99
> */
> PCcycl = 98;
> PChist = 90;
>
> /* Definition of Kase PeakOscillator KPO */
>
> function Kup(n)
> { return log(H/Ref(L,-n)); }
>
> function Kdn(n)
> { return log(Ref(H,-n)/L); }
>
> function Kvol(n)
> { return SD(log(Ref(C,-1)/C), n); }
>
> function KSDIup(n)
> { return Kup(n)/(Kvol(n)*sqrt(n)); }
>
> function KSDIdn(n)
> { return Kdn(n)/(Kvol(n)*sqrt(n)); }
>
> maxKSDIup = KSDIup(minLB);
> for (i=minLB+1;i<=maxLB;i++)
> { maxKSDIup = IIf(KSDIup(i)>maxKSDIup,KSDIup(i),maxKSDIup); }
>
> maxKSDIdn = KSDIdn(minLB);
> for (i=minLB+1;i<=maxLB;i++)
> { maxKSDIdn = IIf(KSDIdn(i)>maxKSDIdn,KSDIdn(i),maxKSDIdn); }
>
> KPO = maxKSDIup - maxKSDIdn;
>
> /* 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 t(x)
> { return 1 / (1+0.2316419*x); }
>
> function HAS(x)
> { return 1 - (exp(-0.5*x^2)/sqrt(2*3.141592654))*(0.31938153*t(x)-
> 0.356563782*t(x)^2+1.781477937*t(x)^3-1.821255978*t(x)
> ^4+1.330274429*t(x)^5); }
>
> function g(x)
> { return (2*HAS(x)-1)*100; }
>
> if (PCcycl<81) PCcycl=81;
> if (PCcycl>99) PCcycl=99;
>
> THcycl=1.3;
> for (i=0.01;i<=1.3;i=i+0.01)
> {
> if ( g(i+1.3)>=PCcycl AND g(i+1.29)<PCcycl )
> THcycl = THcycl + i;
> else
> THcycl = THcycl;
> }
>
> if (PChist<81) PChist=81;
> if (PChist>99) PChist=99;
>
> THhist=1.3;
> for (i=0.01;i<=1.3;i=i+0.01)
> {
> if ( g(i+1.3)>=PChist AND g(i+1.29)<PChist )
> THhist = THhist + i;
> else
> THhist = THhist;
> }
>
> 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);
>
> /* Plots */
>
> GraphXSpace = 3;
>
> Plot(POmax,"PeakOutMAX",colorRed,styleLine);
> Plot(POmin,"PeakOutMIN",colorBlue,styleLine);
>
> Col = IIf(abs(KPO)>=abs(POmax) AND Ref(abs(KPO),1)<Ref(abs
> (POmax),1),colorViolet,IIf(abs(KPO)>=abs(POmin) AND Ref(abs(KPO),1)
> <Ref(abs(POmin),1),colorPink,colorGreen));
> Plot(KPO,"KPeakOsc",Col,styleHistogram|styleThick);
>
> //Plot(UPcycle,"UPcycle",colorGreen,styleLine|styleDots);
> //Plot(DNcycle,"DNcycle",colorRed,styleLine|styleDots);
>
> /* code end */
>
> Remarks:
>
> First, as Byron mentioned the code posted earlier by Wayne is not
> looking for the optimum up/down cyclelength but uses Param to
> manually set different lookbacks. The code also sets one lookback
> for both up and down trends. This is definitely not in line with
> Kase: the power is in looping for the strongest up and strongest
> downtrend separately.
>
> Further the PeakOsc there is smoothed with a 3-period WMA. I
> don't
> know who initiated this but Kase indeed (in BridgeTrader) says:
> "the
> PeakOscillator is the difference between KSDIup and KSDIdn with some
> smoothing added". Nowhere could I find how she implements this
> smoothing but I guess that is the WMA. To me it seemed somewhat
> irrational to top off so much statistical scrutiny with some
> arbitrary WMA with a fixed lookback. Also it turned out this WMA
> somehow interfered with the SD calculations for some very weird
> plots. Two reasons for not smoothing the KPO.
>
> My code is partly a loop-version of Byron's, but in his code
> there
> was one mistake that pretty sure was generated by a "mistake"
> in the
> BridgeTrader article and also refers to point 6 of his earlier
> remarks (which I did not comprehend then but now I do): Kvol in his
> code has a fixed StDev period of 9 which is incorrect. Instead this
> period should run along with the lookback:
>
> Kvol(n) = SD(log(Ref(C,-1)/C), n)
>
> because, looking e.g. at KSDIup(n)
>
> log(H/Ref(L,-n)) / (SD(log(Ref(C,-1)/C), n)*sqrt(n))
>
> the numerator here measures how far this market went "up" (in
> log)
> while the denominator measures exactly one standard deviation of the
> move this market should have made if it were a random process;
> that's why Kvol has to adjust to the lookback.
>
> If the oscillator > 2 then the market has moved more than 2
> stdev's,
> which has a 5% chance of happening, while if > 3 chances are only
> 0.3%, so in that case we can be more confident that traders
> are "pushing" this market out of randomness into trendiness.
> However
> these %'s are only valid for very large samples and make less
> sense
> when the sample size gets smaller.
>
> It's really like a coin toss 20 times and after 10 tosses
> counting 9
> heads: something's wrong ("this coin is trending"). Is
> it? Perhaps
> not and it's just a coincidence. And of course, counting 90 heads
> after 100 tosses gives just a bit more confidence than 9 heads out
> of 10 tosses.
>
> Byron's point 3 referred to the ability to warn for peaks: if
> things
> get too extreme that should be signaled by the PeakOut lines. Kase
> uses not a break of these lines (which in fact confirms a strong
> trend) but a pullback after an earlier break as a signal of a
> (temporary) pause or possible reversal. In the plot these are
> colored pink for POmin and violet for POmax.
>
> In calculating POcycl and POhist (the max of which is POmax and the
> min is POmin) Kase uses respectively "the 98th percentile of the
> local distribution of the oscillator over the last 30 bars or so"
> ("or so" is literally hers) and "the 90th percentile over
> 80 years
> of commodity history". 30-bars-or-so is not in my dictionary and
> it
> seemed natural instead to measure the SD over exactly the length of
> the current strongest trend, up or down, as determined by dynamic
> CYCL variable.
>
> For POhist I think Kase somehow averaged all her historical data and
> uses this fixed number in her software but here I think we can both
> simplify and improve by measuring the 90th percentile for that
> particular market we are working on. Of course the more history is
> loaded the more reliable this measurement will be. It seems a good
> idea to increase this percentile especially when there is less
> history and the 90th gives too many signals. I enabled setting both
> percentiles (as well as the lookbacks) in the code to facilitate
> this and backtesting. I wondered why the normal distribution is not
> in the AFL library but since it isn't I had to clutter the code
> with
> the Hastings approximation.
>
> At the end of the code I also added a plot for UPcycle and DOWNcycle
> which display the max KSDI cyclelengths: how many bars to lookback
> for the strongest up and down trend at that moment. They give some
> further insight in the mechanics of this indicator (better plot
> these in a separate pane).
>
> Look forward to any comments or ideas.
>
> -treliff
>
>
> --- In amibroker@xxxxxxxxxxxxxxx, "Byron Porter" <bporter@xxxx>
> wrote:
> > Treliff and Owen - Thanks for the info on the Kase Book.
> > Wayne - Thanks for the Kase code. I have some different
> interpretations
> > but I do not know if mine are correct.
> >
> > Treliff,
> > I have attached 3 afls to this response and sent a copy to your
> yahoo
> > email in the hopes that you will be sure to get a copy - I think
> we are
> > on different time zones so we may only get respond once a day - I
> live
> > in Houston -6 GMT
> >
> > 1. I have used the log versions and the 2 bar average of kase
> ideas in
> > my afl
> > 2. The non Log form is the Random Walk Index which is an Amibroker
> built
> > in function see RWI, RWIHI, RWILO. I was looking for the code to
> see
> > how it was coded but have not been able to find it. I think a
> small
> > modification to RWI code would be the Kase indicator. I'll bet it
> has
> > the loop you are looking for.
> > 2. The Param approach is not my understanding to look back
> problem. My
> > understanding is that at each bar you look back 8 to 65 bars do the
> > calcs and then pick the max. I have implemented this without
> using a
> > loop but if things become more complicated, a loop may be required
> and a
> > cleaner code.
> > 3. The think the look back is searching for the peaks for an
> uptrend and
> > a trough for a down trend and the oscillator takes the difference
> > between the two to determine which is controlling. The bigger the
> > difference the stronger the trend either up or down. Is that what
> you
> > are saying below? Could you elaborate on your concern. I think
> Kase is
> > looking for peak not trends.
> >
> > Kase now uses a loop, within a certain range of lookbacks (15-
> 100
> > in
> > Wayne's code I think), to find the strongest down-trend and
> the
> > strongest up-trend, and takes the max to determine THE trend.
> > Though
> > a huge improvement over fixed-lookback indicators, I still
> hesitate
> >
> > because if the strongest downtrend is established as 2.8
> while
> > looking back 98 bars, and the strongest uptrend as 2.7
> looking back
> >
> > 15 bars, then this would be defined as a downtrend. Seems
> > questionable to me.
> >
> > 4. I see what you are saying about looping with a weighting
> system. I
> > am not a mathematician so I don't always know the proper
> statistical way
> > to go about approaching a problem, but here is the way I see it.
> There
> > are 2 things going on at the same time, 1) variation about the
> mean -
> > the Brownian motion or the Random Walk and then 2) there is the
> trend.
> > I think the goal is to try to separate the variation from the
> trend.
> > Statistically, mathematically, how do we do this?
> >
> > 5. One thing about Kases work that I have not run across is the
> use of
> > volume. It seems that we have a limited amount of information to
> work
> > with - Open, high ,low ,close and we do get volume. There is talk
> in
> > the Kase reference document(www.fini.com/kase/k0.ntm) that talks
> about
> > using ticks to create your bars during a day. I guess I have been
> > wondering how to use volume in this method. I use Esignal for
> Forex
> > data and they provide a volume but my understanding that it is not
> > really volume but something like tick count which is as close as
> they
> > could get to "volume" because there is no central place to really
> get
> > the volume in the Forex market.
> >
> > 6. Another issue that I have been thinking about in the Forex
> market is
> > that activity varies considerably during the 24 hr day. At times
> when
> > say the Asian and European markets are both open there is more
> > volatility than when just the US market is open. Should there be
> some
> > way to account for time of day. Should volatility be measure for 9
> > periods back as suggested by Kase or should you take the
> volatility at
> > the same time of day for say 9 days back. Statistically would
> that help
> > separate variation from trend.
> >
> > 7. one of the things that I noticed in the code provided by Wayne
> was in
> > the Kase DevStops- the look back period was dev1 was 30 and dev2
> was 10
> > and dev3 was 21. I think those were picked up from the Kase
> manual. I
> > think that L1=30 is the look back length for all the devs. The L2
> = 10
> > and L3 = 21 is to be used in 2 moving averages that tell you when
> to
> > change your plot of stops from long positions to short positions.
> What
> > do you think? Kase recommends 30 bars for intraday and 20 bars
> for
> > daily, Is there a statistical reason for this. It all gets back to
> > "fixed look back" periods.
> >
> > Thanks for the thought provoking information.
> > Please look at my afls and see if there are any questionable
> > interpretations of Kase ideas.
> >
> > Byron
> >
> >
> > -----Original Message-----
> > From: treliff [mailto:treliff@x...]
> > Sent: Wednesday, March 10, 2004 12:51 AM
> > To: amibroker@xxxxxxxxxxxxxxx
> > Subject: [amibroker] Re: I need some loop-... / KASE indicators
> >
> >
> > Byron, Kase's book is even less revealing than her articles when it
> > comes to math and codes. I purchased it after reading the
> > articles but don't regret that in view of the value of her ideas.
> > The good thing is, her smoke and mirrors force you to really dig
> in
> > and fully understand the reasoning before even attempting to write
> a
> > code.
> >
> > Sometimes she sounds pretty obnoxious, like when referring to "the
> > out-moded MACD" (not to mention those silly moving
> > avg's) but
> > in my opinion she has a right to speak.
> >
> > Re. her PeakOscillator (I did not study her Dev.Stop yet) it is
> > worth noting that it appears she has replaced her initial trend
> > measurement based on ATR, with one that uses what is called
> > Historical Volatility. Specifically where in previous articles
> (and
> > in the book) she uses e.g.
> >
> > (C-Ref(C,-n)) / ATR*sqrt(n)
> >
> > in later articles she uses
> >
> > log(C/Ref(C,-n)) / StDev(log(C/Ref(C,-1),n)*sqrt(n)
> >
> > (Note: in fact she uses H or L instead of C in the left side of
> the
> > equation and splits in an UP and DOWN index.)
> >
> > I find the second approach much more interesting (but don't
> confuse
> > interesting with profitable:-). Wayne's code (thanks Wayne) seems
> to use
> > the ATR approach, but that could probably be easily
> > converted. The programming is not my strongest side but at first
> > glance it seems this code uses Param in order to "loop".
> >
> > Instead of focusing on code though I'd like to share some thoughts
> on
> > the Kase approach. To recapitulate:
> >
> > Using any bar as starting point and looking back n periods there
> is
> > this undeniable "n-period statistical trend" that is defined
> > as the
> > 2nd formula above and measures how far the market has moved in
> > relation to its volatility: if this formula = 1 than the market
> > moved within exactly 1 standard deviation, which should happen
> about
> > 67% of the time etc. As a math-man, I find this a very, very
> strong
> > concept, by far the best when it comes to trend measurement.
> >
> > Kase now uses a loop, within a certain range of lookbacks (15-100
> in
> > Wayne's code I think), to find the strongest down-trend and the
> > strongest up-trend, and takes the max to determine THE trend.
> Though
> > a huge improvement over fixed-lookback indicators, I still
> hesitate
> > because if the strongest downtrend is established as 2.8 while
> > looking back 98 bars, and the strongest uptrend as 2.7 looking
> back
> > 15 bars, then this would be defined as a downtrend. Seems
> > questionable to me.
> >
> > My thought therefore was to take all trends (the 15-bar trend, 16-
> bar
> > trend etc) and weigh these in a sensible manner, which implies
> > preferably not with fixed weights, but also in some loop-style
> > manner and let the market speak. The code I needed help with was
> the
> > first step in this direction.
> >
> > I am interested in any further thoughts, ideas and test results,
> > also re. the original KASE codes as initiated by Wayne.
> >
> > Rgds,
> > Treliff
> >
> >
> >
> > Send BUG REPORTS to bugs@xxxx
> > Send SUGGESTIONS to suggest@xxxx
> > -----------------------------------------
> > 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
>
>
>
> 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
>
>
>
>
>
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/
|