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

[amibroker] Re: median calculation



PureBytes Links

Trading Reference Links


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/