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

[amibroker] Re: median calculation



PureBytes Links

Trading Reference Links


To be more precise, the Lookback period n may be calculated to give 
[at least] 3 Peaks/Troughs.
You should use a Lookback period higher to ensure that the 2nd and 
the 3rd Peak/Trough will exist.

y=Cum(1);Ly=LastValue(y);
Osc=StochD(); 
Limit=100000;mm=0;
Peak1=Ref(Osc,-1)==HHV(Osc,3) ;//your Peak condition
Trough1=Ref(Osc,-1)==LLV(Osc,3) ;//your trough condition
//a small loop to calculate the minimum Lookback period mm
for(m=1;m<1000;m++)
{
if(LastValue(Min(Sum(Peak1,m),Sum(Trough1,m)))==3)
{mm=m;m=1000;}
}
x=IIf(Peak1 ,Ref(Osc,-1),-Limit);
n=mm+1;//set any Lookback period > mm
x=IIf(y>Ly-n,x,-Limit);
xmax=LastValue(Highest(x));
x=IIf(x==xmax,-Limit,x);
xmax=LastValue(Highest(x));
medH=xmax;
x=IIf(x==xmax,-Limit,x);
xmax=LastValue(Highest(x));
medH=(medH+xmax)/2;
xx=IIf(Trough1 ,Ref(Osc,-1),Limit);
xx=IIf(y>Ly-n,xx,Limit);
xxmin=LastValue(Lowest(xx));
xx=IIf(xx==xxmin,Limit,xx);
xxmin=LastValue(Lowest(xx));
medL=xxmin;
xx=IIf(xx==xxmin,Limit,xx);
xxmin=LastValue(Lowest(xx));
medL=(medL+xxmin)/2;
Title="Lookback period >"+WriteVal(mm,1.0)+", medH="+WriteVal(medH)
+", medL="+WriteVal(medL);
Plot(Osc,"",1,8);
Plot(IIf(y>Ly-n, medH,Null),"",4,1);Plot(IIf(y>Ly-
n,medL,Null),"",5,1);

Dimitris
--- In amibroker@xxxxxxxxxxxxxxx, "DIMITRIS TSOKAKIS" <TSOKAKIS@xxxx> 
wrote:
> 
> For an oscillator Osc, supposed in the range [-100,000,100,000] the 
> respective code will be
> 
>  y=Cum(1);Ly=LastValue(y);
> Osc=StochD(); //your Oscillator here
> Limit=100000;
> x=IIf(Ref(Osc,-1)==HHV(Osc,3),Ref(Osc,-1),-Limit);
> n=50;//the lookback period
> x=IIf(y>Ly-n,x,-Limit);
> xmax=LastValue(Highest(x));
> x=IIf(x==xmax,-Limit,x);
> xmax=LastValue(Highest(x));
> medH=xmax;
> x=IIf(x==xmax,-Limit,x);
> xmax=LastValue(Highest(x));
> medH=(medH+xmax)/2;
> xx=IIf(Ref(Osc,-1)==LLV(Osc,3),Ref(Osc,-1),Limit);
> xx=IIf(y>Ly-n,xx,Limit);
> xxmin=LastValue(Lowest(xx));
> xx=IIf(xx==xxmin,Limit,xx);
> xxmin=LastValue(Lowest(xx));
> medL=xxmin;
> xx=IIf(xx==xxmin,Limit,xx);
> xxmin=LastValue(Lowest(xx));
> medL=(medL+xxmin)/2;
> Title="medH="+WriteVal(medH)+", medL="+WriteVal(medL);
> Plot(Osc,"",1,8);
> Plot(IIf(y>Ly-n, medH,Null),"",4,1);Plot(IIf(y>Ly-
> n,medL,Null),"",5,1);
> 
> Note that you will need enough bars n in order to have at least 3 
> Peaks/Troughs.
> Dimitris
> --- In amibroker@xxxxxxxxxxxxxxx, "DIMITRIS TSOKAKIS" 
<TSOKAKIS@xxxx> 
> wrote:
> > 
> > DC,
> > If I understand your description, if x is a Peak value[ according 
> to 
> > your Peak definition] then your median x is the average of the 
2nd 
> > and 3rd highest x for the last n=20 days. 
> > I will try the descriptive way:
> > 1. Define x
> > 2. Find the highest x and make it zero
> > 3. Find the next highest x. Save it and then make it zero.
> > 4. Find the next highest x. Save it and 
> > 5. Calculate the median as an average of the saved values.
> > This can be done with
> > 
> > y=Cum(1);Ly=LastValue(y); 
> > x=IIf(Ref(H,-1)==HHV(H,3),Ref(H,-1),0);//your Peak definition
> > n=20;//the lookback period
> > x=IIf(y>Ly-n,x,0);
> > xmax=LastValue(Highest(x));//find the highest x
> > x=IIf(x==xmax,0,x);//and make it 0
> > xmax=LastValue(Highest(x));//find the next highest x
> > medH=xmax;//save it
> > x=IIf(x==xmax,0,x);//and make it 0
> > xmax=LastValue(Highest(x));//find the next highest x
> > medH=(medH+xmax)/2;//calculate the median
> > //Repeat the same procedure for troughs
> > xx=IIf(Ref(L,-1)==LLV(L,3),Ref(L,-1),100000);
> > xx=IIf(y>Ly-n,xx,100000);
> > xxmin=LastValue(Lowest(xx));
> > xx=IIf(xx==xxmin,100000,xx);
> > xxmin=LastValue(Lowest(xx));
> > medL=xxmin;
> > xx=IIf(xx==xxmin,100000,xx);
> > xxmin=LastValue(Lowest(xx));
> > medL=(medL+xxmin)/2;
> > Title="medH="+WriteVal(medH)+", medL="+WriteVal(medL);
> > 
> > The medH, medL are already defined and may be used in Plot 
> statements 
> > or further calculations.
> > 
> > I tried to avoid loops for better [?] understanding.
> > Dimitris
> > --- In amibroker@xxxxxxxxxxxxxxx, <dennisconn@xxxx> wrote:
> > > Hi to all,
> > > 
> > > I want to thank everyone who's responded for their help - I 
> really 
> > do appreciate the fact that you've been willing to take the time 
to 
> > help with this.
> > > 
> > > But there's been some confusion as to the nature of my median 
> > calculation request, so I'm posting this in an attempt to better 
> > define the nature of the problem.
> > > 
> > > For those who are familiar with Joe Dinapoli's Oscillator 
> > Predictor, that is what I'm attempting to recreate in AFL. For 
> those 
> > who are not familiar with it, his Predictor calculates a price at 
> > which one would take profits in a highly overbought or oversold 
> > condition, based on the average overbought or oversold level of 
an 
> > oscillator. In other words, if a person knows ahead of time the 
> price 
> > at which a market would be highly overbought or oversold, a pre-
> > placed order to exit at that price will catch spike moves and get 
> one 
> > out BEFORE the market takes back the profits one has. Using only 
> > daily charts, Joe looks for the average value of the three 
highest 
> > peaks to determine a reasonable approximation of the average 
> > realistic overbought level. He does the same for the three lowest 
> > troughs to determine the average realistic oversold level.
> > > 
> > > *** I prefer to use the median value of the last four peaks (or 
> > troughs) in order to eliminate the most extreme values from the 
> > calculation. ***
> > > 
> > > His lookback range is roughly six months (120 bars) or so. The 
> > oscillator he uses is non-normalized, so the troughs will ALL be 
> > negative values.
> > > 
> > > For my purposes, I define a peak in the oscillator as the 
highest 
> > value reached during an excursion above zero. A trough is the 
> lowest 
> > value reached during an excursion below zero. With that in mind, 
I 
> > have already created two arrays; one array contains all the 
peaks, 
> > the other contains the troughs. If a given day in either array is 
> NOT 
> > a peak or trough based on the above definition, then that day's 
> array 
> > element = ZERO. So here's an example of what my trough array 
would 
> > look like over the last 20 bars:
> > > 
> > > 0, 0, -11, 0, 0, 0, -13, 0, -7, 0, -9, 0, 0, 0, -4, 0, -12, 0, 
> 0, -2
> > > 
> > > Here is the brainteaser (to me):
> > > 
> > > Let's assume my lookback range is just these last 20 bars; 
> > obviously, the four lowest troughs are -11, -13, -9, and -12. I 
> need 
> > to find a way to pick those four values out of the array in order 
> to 
> > find the median value (which will equal -11.5).
> > > 
> > > That's IT - that's ALL I'm trying to do - I'm pretty sure I can 
> > figure out everything else I need to do.
> > > 
> > > Now I know it's possible to allow the user to input the number 
> > manually, by way of "Param", and that's all well and good. But I 
> want 
> > to program it for user convenience (as well as cutting down on 
user 
> > error), and also be able to plot the resulting OB/OS price 
> > predictions as bands on the price chart (which will be all the 
more 
> > effective when Tomasz gets around to allowing plotting of 
> indicators 
> > beyond the last bar!).
> > > 
> > > Anyway, again, ALL I need is a bit of direction on the median 
> > calculation in order to have the formula handle everything in the 
> > Oscillator Predictor's output.
> > > 
> > > If I ever get this figured out, or someone else does, I'll be 
> sure 
> > to post it to the AFL library - this could be a very useful tool 
> for 
> > capturing profits, especially if the output correlates with some 
> > other projection method, like Cardwell's positive and negative 
> > reversals in the RSI, or Fibonacci projections, or whatever other 
> > tool.
> > > 
> > > If you've managed to read this far, then...
> > > 
> > > Thanks again & best regards,
> > > 
> > > DC
> > > 
> > > [Non-text portions of this message have been removed]





------------------------ Yahoo! Groups Sponsor --------------------~--> 
Make a clean sweep of pop-up ads. Yahoo! Companion Toolbar.
Now with Pop-Up Blocker. Get it for free!
http://us.click.yahoo.com/L5YrjA/eSIIAA/yQLSAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

Check AmiBroker web page at:
http://www.amibroker.com/

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/