PureBytes Links
Trading Reference Links
|
George,
Just a couple of points about your post.
You mention that the code is for a stochastic oscillator.
I'm not sure that is what you have. It is a indeed a stochastic
oscillator but it has been rewritten in a way that it has been
smoothed differently than a standard stochastic oscillator. It uses
exponential smoothing and smoothes the scaling value. It has also
been given a second normalization in the A2 variable. See below for
help file definitions of the oscillator and the momentum index:
If your intent is for a custom stochastic then there is no problem
with using it. We can also make the corrections that you requested
using that indicator.
The first problem that I noticed was in the scaling of the cross
indicators. The scaling for the stochastic is 0 to 100. The scaling
for the cross was 0 to 1. This means that the signal would have been
very difficult to see when plotted. By changing the scale the signals
are easily seen. This was done by multiplying the signals by 100.
Next problem was when the signal should occur. Did you want the
signal when you went into overbought/oversold or came out of those
zones. If you want the signals when you go into those zones then the
code below will work.
Finally there is the question of using separate variables for the
overbought/oversold and their crosses. It is really redundant to do
this but can certainly be done if you so desire.
{George's Custom Stochastic}
X:=Input("LENGTH OF STOCHASTIC",5,30,5);
Y:=Input("OVERBOUGHT",60,100,80);
Z:=Input("OVERSOLD",0,40,20);
A:=Input("CROSS OVERBOUGHT",60,100,80);
B:=Input("CROSS OVERSOLD",0,40,20);
P2:=Mov(((C-LLV(L,X))/(HHV(H,X)-LLV(L,X)))*100,3,E);
A2:=Mov(((P2-LLV(P2,X))/(HHV(P2,X)-LLV(P2,X)))*100,3,E);
A2; P2; Y; Z;
Cross(A2,A)*100; {cross above overbought}
Cross(B,A2)*100; {cross below oversold}
{end}
DEFINITIONS FROM METASTOCK HELP FILES:
The following formula calculates a 13,25,2 Stochastic Momentum Index.
100 * ( Mov( Mov(C - (0.5 * ( HHV(H,13) + LLV(L,13))),25,E),2,E) /
(0.5*Mov( Mov( HHV(H,13) - LLV(L,13),25,E),2,E)))
The following formula calculates a 5-period %K Stochastic Oscillator
with 3-period slowing: (sum( C - llv(L,5), 3 ) / sum(hhv(H,5) - llv
(L,5), 3) ) * 100
This next formula calculates a 3-period %D of the %K in the preceding
formula.
mov( stoch(5,3), 3, S )
--------------end------------------
The stochastic is really just another way of saying that you are
normalizing.
The formula to normalize an indicator is:
{Normalized Indicator}
Ind:= {your indicator here};
Npds:=Input("norm periods",1,500,48);
Norm:=(Ind-LLV(Ind,Npds))
/(HHV(Ind,Npds)-LLV(Ind,Npds)+.0000001)*100;
Norm;
In the case of the Stochastic we use
(C-llv(L,5) /(hhv(H,5) - llv(L,5)
The indicator is the relationship of the close to the highest high
and lowest low for the last 5 days.
We can see from the Sochastic Oscillator definition that it uses a 3
day average to derive its value. We know that Sum(x,3) and Mov(x,3,S)
are the same thing.
In order to change to exponential smoothing we could rewrite the
formula to
(mov(C-llv(L,5),3,E) / mov(hhv(H,5) - llv(L,5),3,E)) * 100
or we could smooth like this
A:= (C-llv(L,5)) /(hhv(H,5) - llv(L,5));
(mov(A,3,E))*100
Notice that in the indicators that I just wrote that I multplied by
100 after performing the mathmatical operations. In George's formula
the scaling is performed before the smoothing. Does it matter? In
this case there is very little difference. My preference though is to
scale after not before the smoothing. The reason is to derive a true
vision of the smoothing effect. In this case since I was multiplying
by 100 very little difference was noted. The same would hold true if
I had also scaled by either 1 or 10.
Now lets look at the P2 and A2 variables. The formula is:
P2:=Mov(((C-LLV(L,X))/(HHV(H,X)-LLV(L,X)))*100,3,E);
A2:=Mov(((P2-LLV(P2,X))/(HHV(P2,X)-LLV(P2,X)))*100,3,E);
In P2 we have a exponential stochastic. In A2 we are normalizing the
P2 stochastic and further smoothing using exponential smoothing. I
really see no problem with this as long as you understand that you
are normalizing the stochastic. I would though like to see a longer
normalizing period. You could double or triple the smoothing periods.
This could be an input variable.
One more change is to eliminate the Cross Overbought/Oversold levels.
Unless you really want separate levels for the cross functions there
is really no need for them since you can use the levels which you
have set in the overbought/oversold input variables.
In version 2 you will note the changes which I have discussed above.
{George's Custom Stochastic version2}
X:=Input("LENGTH OF STOCHASTIC",5,30,5);
A:=Input("Normalize None 1 Double Sto 2 Triple Sto 3",1,3,2);
Y:=Input("OVERBOUGHT",60,100,80);
Z:=Input("OVERSOLD",0,40,20);
P2:=Mov(((C-LLV(L,X))/(HHV(H,X)-LLV(L,X))),3,E)*100;
A2:=Mov(((P2-LLV(P2,X*A))/(HHV(P2,X*A)-LLV(P2,X*A))),3,E)*100;
A2; P2; Y; Z;
Cross(A2,Y)*100; {cross above overbought}
Cross(Z,A2)*100; {cross below oversold}
{end}
George, thanks for sharing your indicator with us. Hopefully you will
find some of the ideas that I have outlined useful.
Preston
--- In equismetastock@xxxxxxxxxxxxxxx, "georgeabraham3"
<georgeabraham3@xxx> wrote:
>
>
>
> Hi,
>
> Reg: Coding request.
>
> The following is the coding for a stochastic oscillator:
>
> X:=Input("LENGTH OF STOCHASTIC",5,20,5);
> Y:=Input("OVERBOUGHT",60,100,80);
> Z:=Input("OVERSOLD",0,40,20);
>
> P2:=Mov(((C-LLV(L,X))/(HHV(H,X)-LLV(L,X)))*100,3,E);
> A2:=Mov(((P2-LLV(P2,X))/(HHV(P2,X)-LLV(P2,X)))*100,3,E);
> A2;
>
> Y;
> Z;
>
> Can any one please help me to code using the input function,
> (so that the length of the stochastic oscillator, over bought and
> the over sold values can be changed) for Cross(80,stochastic
> oscillator) and also Cross(stochastic oscillator,20). The code I
> wrote is given below:
>
> X:=Input("LENGTH OF STOCHASTIC",5,30,5);
> Y:=Input("OVERBOUGHT",60,100,80);
> Z:=Input("OVERSOLD",0,40,20);
> A:=Input("CROSS OVERBOUGHT",60,100,80);
> B:=Input("CROSS OVERSOLD",0,40,20);
>
> P2:=Mov(((C-LLV(L,X))/(HHV(H,X)-LLV(L,X)))*100,3,E);
> A2:=Mov(((P2-LLV(P2,X))/(HHV(P2,X)-LLV(P2,X)))*100,3,E);
> A2;
>
> Y;
> Z;
> Cross(80,P2);
> Cross(P2,20);
>
> This code does not give the results. Can any one please correct my
> mistake?
> Thanks in advance.
>
> George.
>
Yahoo! Groups Links
<*> To visit your group on the web, go to:
http://groups.yahoo.com/group/equismetastock/
<*> Your email settings:
Individual Email | Traditional
<*> To change settings online go to:
http://groups.yahoo.com/group/equismetastock/join
(Yahoo! ID required)
<*> To change settings via email:
mailto:equismetastock-digest@xxxxxxxxxxxxxxx
mailto:equismetastock-fullfeatured@xxxxxxxxxxxxxxx
<*> To unsubscribe from this group, send an email to:
equismetastock-unsubscribe@xxxxxxxxxxxxxxx
<*> Your use of Yahoo! Groups is subject to:
http://docs.yahoo.com/info/terms/
|