The Robert Krauz article I read described the ECO as "a
double smoothed ratio of the difference between the close(C) and
open(O) of each bar, and the difference between the high(H) and
low(L) prices for each bar" originally created by William Blau.
FWI my interpretation is:
{ECO[Ergodic Candlestick Oscillator]}
(MOV(MOV(C-O,5,E))26,E)/MOV(MOV(H-L,5,E))26,E))*100
(Go
Top) |
Mov((H+L)/2,5,S)-Mov((H+L)/2,34,S)
(Go
Top) |
Mov(C,5,S)-Mov(C,35,S)
{from Jan Robert Wolansky}
{TIMESERIES TRIX - by Joe Luisi}
{published in S&C - TASC article "Playing Trix" by Joe Luisi
(June 1997) and
to be used on weekly data}
CLA:=TRIX(3);
CLB:=Ref(TRIX(3),-1);
CLC:=Mov(TRIX(3),8,TIMESERIES);
CLD:=Ref(Mov(TRIX(3),8,TIMESERIES),-1);
SHORT:=When(CLA,>,CLC) AND When(CLB,<,CLD) AND
When(CLA,<,0)AND When(CLA,>,-2);
LONG:=When(CLA,<,CLC) AND When(CLB,>,CLD) AND
When(CLA,>,0)AND When(CLA,<,+2);
If(LONG>0,+1,
If(SHORT>0,-1,PREVIOUS))
(Go
Top) |
As far as using MetaStock for identifying waves, use a 5/34
histogram for
finding wave 4, the end of wave 3 and for help with identifying
wave 1/2,
which apparently Advanced Get uses extensively. You can write
MetaStock
explorations/templates/experts, etc., with this indicator; e.g.,
explorations to find the peaks and troughs of the 5/34
histogram.
The version of the indicator I use in MetaStock v6.52 is:
Mov(OscP(5,34,E,$),5,S)
-150 days minimum of data.
The peaks of the histogram help identify waves 1, 3 and 5 and
troughs for
waves 2 and 4. Use MetaStock line studies (both trendlines,
channels and
fib retracements) for additional wave identification/analysis.
Of course,
you can label the waves with the text box.
(Go
Top) |
avoid using when the market has no clear direction --
enter long
mov(c,5,e)>mov(c,21,e) and
ref(mov(c,5,e),-1)<=ref(mov(c,21,e),-1)
exit long
mov(c,5,e)<mov(c,21,e) and
ref(mov(c,5,e),-1)>=ref(mov(c,21,e),-1)
(Go
Top) |
{The End Point Moving Average was introduced in the October
95 issue of
Technical Analysis of Stocks & Commodities in the article "The
End Point
Moving Average", by Patrick E. Lafferty. The exact formula for
the End Point
Moving average is as follows:}
( 14 * Sum( Cum( 1 ) * C,14 ) - Sum( Cum( 1 ),14) * Sum( C,14) )
/ (14
* Sum( Pwr( Cum( 1 ),2),14 ) - Pwr( Sum( Cum( 1 ),14 ),2 ) ) *
Cum( 1 )
+ (Mov(C,14,S) - Mov( Cum( 1 ),14,S) * (14 * Sum( Cum( 1 ) *
C,14) -
Sum( Cum( 1 ),14 ) * Sum( C,14) ) / (14 * Sum( Pwr( Cum( 1 ),2
),14) -
Pwr( Sum( Cum( 1 ),14 ),2 ) ) )
{The above formula plots the last value of a linear regression
line of the
previous 14 periods. The Time Series Forecast (TSF) takes this
value and the
slope of the regression line to forecast the next day and then
plots this
forecasted price as today's value. from Equis.}
(Go
Top) |
I am trying to use the MetaStock Explorer to find all stocks
with the following:
1. c - mov(c,60,s)<0
2. Above condition should be in place for 20 days/
I use c - Mov(c,60,s)<0 but how do I write the Exploration?
from wsb
Use (C - Mov(C,60,S))<0 AND Ref((C - Mov(C,60,S))<0),-1) AND ...
Ref((C -Mov(C,60,S))<0),-19)
where ... stands for all Ref( x,-i) with i between 2 and 18.
(Go
Top) |
Wilders(TR,periods) = Mov(TR,2*periods-1,E)
(Go
Top) |
This is the calculation:
Take todays volume * 50 and find the square root of that number.
Then divide 2.5 by your result. Then take the result of dividing
by 2.5 and * todays close. Write this figure down.
Then plot a 10 day moving average of this figure. This is the
fundamental calculation which we shall call a.
Take the value for a and take it away from the lowest value of
itself over the past 5 days. Add up these results for the past 3
days. This number is called b.
Now take the highest value for a over the past 5 days and
subtract the lowest value for a, also over the past 5 days. Call
this number c.
Finally, divide b by c and multiply the answer by 100. (phew!)
Simple Interpretation:
Excel Confidence % should oscillate between 0 and 100, usually
at the extreme ends of the scale. A value of 0 indicates no
confidence in the market going up, whilst 100 indicates perfect
confidence in the market going up. Although this obviously isn't
the holy grail of indicators, it does offer some insight into
what the market is thinking and how one can measure investor
sentiment.
You might like to add a slower version of this (just increase
the 3 day and 5 day calculations to something you believe to be
appropriate - try 7 & 15) and trade the crossovers, as with
stochastics.
You can also just trade the values ie 90 or higher, buy, 10 or
lower, sell.
Metastock code for Excel Confidence %:
(Sum(
Mov(C * (2.5/ Sqrt(50 * V)),10,S)-
LLV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5), 3 ) /
Sum(
HHV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5) -
LLV(Mov(C * (2.5/ Sqrt(50 * V)),10,S),5), 3) ) * 100
(Go
Top) |
A:=Close
B:{Breakout}(H-L)>ATR(9)
C:{Signal}Ref(C,-2)<=Mov(C,50,S) and
Ref(C,-1)>Mov(C,50,S) OR Ref(C,-1)<=Mov(C,50,S) and
C>Mov(C,50,S)
D:{entry}HHV(H,2)+.125
E:{Stop}If(Ref(C,-2)<=Mov(C,50,S) and
Ref(C,-1)>Mov(C,50,S),Ref(C,-1)-1,If(Ref(C,-1)<=Mov(C,50,S)
and C>Mov(C,50,S),C-1,0))
Filter:ColB and ColC
(Go
Top) |
A:=Close
B:{Breakout}(H-L)>ATR(9)
C:{Signal}Ref(C,-2)>=Mov(C,50,S) and
Ref(C,-1)<Mov(C,50,S) OR Ref(C,-1)>=Mov(C,50,S) and
C<Mov(C,50,S)
D:{entry}LLV(L,2)-.125
E:{Stop}If(Ref(C,-2)>=Mov(C,50,S) and
Ref(C,-1)<Mov(C,50,S),Ref(C,-1)-1,If(Ref(C,-1)>=Mov(C,50,S)
and C<Mov(C,50,S),C-1,0))
Filter:ColB and ColC
(Go
Top) |
A trading system based on work of Bill Williams
Enter Long:
Cross(C,Fml("chaos green bl")) AND Fml("chaos green bl") >
Fml("chaos blue bl")
Close Long:
Cross(Fml("chaos green bl"),C) AND Fml("chaos blue bl") >
Fml("chaos green bl")
I tested this on several different stocks and it shows
potential. I really
haven't spent too much time on it yet so I'm not yet sure of the
significance of the other indicators. The above was just what I
could throw together based upon what my eyes on the chart with
the indicators showed me.
(Go
Top) |
In MetaStock 5.x for Windows there is a way
to plot the end points of a linear regression line with channels
+/- 2 Standard Deviations.
Here are the three formulas:
*Linear Regression (14):
(14 * Sum(Cum(1) * C,14) - Sum(Cum(1),14)* Sum(C,14)) /(14 *
Sum(Pwr(Cum(1),2),14) - Pwr(Sum(Cum(1),14),2)) * Cum(1) +
(Mov(C,14,S) - Mov(Cum(1),14,S) * (14 * Sum(Cum(1) * C,14) -
Sum(Cum(1),14) * Sum(C,14))/(14 * Sum(Pwr(Cum(1),2),14) -
Pwr(Sum(Cum(1),14),2)))
*Linear Regression Lower Band:
Fml( "*Linear Regression (14)" ) - 2* Stdev( Fml( "*Linear
Regression (14)" ) ,14)
*Linear Regression Upper:
Fml( "*Linear Regression (14)" ) + 2* Stdev( Fml( "*Linear
Regression (14)" ) ,14)
(Go
Top) |
{ Exponential Moving Average v2.2 }{ EMA periodicity shortens
on low bar count }{ ©Copyright 2003-2004 Jose Silva }{
josesilva22@yahoo.com }
pds:=Input("EMA periods",1,2520,21);
x:=Input("use Open=1 High=2 Low=3 Close=4 WClose=5 P=6",1,6,4);
shift:=Input("EMA vertical shift %", -100,100,0)/100+1;
plot:=Input("[1]EMA, [2]Crossover signals", 1,2,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,P,C)))));
pds:=If(pds>Cum(IsDefined(x)), Cum(IsDefined(x)),pds);
Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));
Ema:=Ema*shift;
signals:=Cross(x,Ema)-Cross(Ema,x);
If(plot=2,signals,Ema)
(Go
Top) |
{ ATR volatility-adjusted, dyn-period EMA v2.1 }
{ Positive sensitivity: EMA periodicity shortens on high ATR
volatility - increases on low ATR volatility }
{ Negative sensitivity: EMA periodicity shortens on low ATR
volatility - increases on high ATR volatility }
{ [1]EMA: ATR volatility-adjusted EMA }
{ [2]Dyn periods: EMA periodicity used }
{ [3]ATR vlty: ATR volatility 0~100% }
{ [4]Signals: EMA/price crossover signals }
{ ©Copyright 2004 Jose Silva }{ josesilva22@yahoo.com }
pds:=Input("EMA avg periods",1,2520,21);
sens:=Input("ATR volatility sensitivity (+100 to
-100)%",-100,100,100)/100;
pdsVlty:=Input("ATR volatility sampling periods",2,2520,126);
pdsATR:=Input("ATR periods",1,2520,10);
x:=Input("[1]Open [2]High [3]Low [4]Close [5]Vol
[6]P",1,6,4);
plot:=Input("[1]EMA, [2]Dyn periods, [3]ATR vlty,
[4]Signals",1,4,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
ATRvlty:=(ATR(pdsATR)-LLV(ATR(pdsATR),pdsVlty)) /(HHV(ATR(pdsATR),pdsVlty)-LLV(ATR(pdsATR),pdsVlty)+.000001);
multi:=If(ATRvlty<=.5,10*Power(ATRvlty,3.4739)+.1,10*Power(ATRvlty,3.32)+.000001);
multi:=If(sens>0,1/multi,multi);
multi:=If(multi<1,1-(1-multi)*Abs(sens),(multi-1)*Abs(sens)+1);
pds:=pds*multi;
pds:=If(pds>Cum(IsDefined(x))-(pdsVlty+pdsATR),Cum(IsDefined(x))-(pdsVlty+pdsATR),pds);
pds:=If(pds<1,1,pds);
ATREma:=x*2/(pds+1)+PREV*(1-2/(pds+1));
signals:=Cross(x,ATREma)-Cross(ATREma,x);
If(plot=2,pds,If(plot=3,ATRvlty*100,
If(plot=4,signals,ATREma)))
(Go
Top) |
{ Bollinger Band volatility-adjusted, dynamic-period EMA v1.1
}
{ Positive sensitivity: EMA periodicity shortens on high BB
volatility - increases on low BB volatility }
{ Negative sensitivity: EMA periodicity shortens on low BB
volatility - increases on high BB volatility }
{ [1]EMA: BB volatility-adjusted EMA }
{ [2]Dyn periods: EMA periodicity used }
{ [3]BB vlty: BB volatility 0~100% }
{ [4]Signals: EMA/price crossover signals }
{ ©Copyright 2004 Jose Silva }{
http://users.bigpond.com/prominex/pegasus.htm }
pds:=Input("EMA avg periods",1,2520,21);
sens:=Input("BB volatility sensitivity (+100 to
-100)%",-100,100,75)/100;
pdsVlty:=Input("BB volatility sampling periods",2,2520,126);
pdsBB:=Input("Bollinger Band periods",2,2520,10);
x:=Input("[1]Open [2]High [3]Low [4]Close [5]Vol
[6]P",1,6,4);
plot:=Input("[1]EMA, [2]Dyn periods, [3]BB vlty,
[4]Signals",1,4,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
y:=(BBandTop(x,pdsBB,S,2)-BBandBot(x,pdsBB,S,2))/Mov(x,pdsBB,S);
BBvlty:=(y-LLV(y,pdsVlty))/(HHV(y,pdsVlty)-LLV(y,pdsVlty)+.000001);
multi:=If(BBvlty<=.5,10*Power(BBvlty,3.4739)+.1,10*Power(BBvlty,3.32)+.000001);
multi:=If(sens>0,1/multi,multi);
multi:=If(multi<1,1-(1-multi)*Abs(sens),(multi-1)*Abs(sens)+1);
pds:=pds*multi;
pds:=If(pds>Cum(IsDefined(x))-(pdsVlty+pdsBB),Cum(IsDefined(x))-(pdsVlty+pdsBB),pds);
pds:=If(pds<1,1,pds);
BBema:=x*2/(pds+1)+PREV*(1-2/(pds+1));
signals:=Cross(x,BBema)-Cross(BBema,x);
If(plot=2,pds,If(plot=3,BBvlty*100,If(plot=4,signals,BBema)))
(Go
Top) |
{ Cycle-adaptive Exponential Moving Avg v1.1 }{ EMA
periodicity determined by historical price cycle based on ZigZag
cycles }{ ©Copyright 2004 Jose Silva }{ josesilva22@yahoo.com }
pr:=Input("ZigZag cycle reversal %",0,100,5);
choose:=Input("EMA periods based on: [1]Cycle, [2]Cycle
Avg",1,2,1);
multi:=Input("EMA periodicity: Cycle/Avg length x",.1,100,2);
x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,6);
shift:=1+Input("EMA vertical shift %",-100,100,0)/100;
plot:=Input("[1]EMA [2]Signals [3]Cycle [4]CyAvg
[5]CyStdDev",1,6,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
zz:=Zig(x,pr,%);
zzpk:=Ref(zz,-1)>zz AND Ref(zz,-1)>Ref(zz,-2);
zztr:=Ref(zz,-1)<zz AND Ref(zz,-1)<Ref(zz,-2);
PkTr:=zzpk OR zztr;CycleLen:=PkTr*(Ref(BarsSince(PkTr),-1)+1);
CycleCount:=Cum(PkTr)-1;
CycleCount:=If(CycleCount=0,.000001,CycleCount);
CycleLenAvg:=Cum(CycleLen)/CycleCount;
pds:=If(choose=1,ValueWhen(1,CycleLen>0 AND
CycleCount>0,CycleLen),CycleLenAvg)*multi;
Init:=CycleCount=1 AND Alert(CycleCount<1,2);
pds:=
If(pds>BarsSince(Init),BarsSince(Init),pds);
pds:=If(pds<1,1,pds);
Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));
Ema:=Ema*shift;
signals:=Cross(x,Ema)-Cross(Ema,x);
If(plot=1,Ema,If(plot=2,signals,
If(plot=3,CycleLen,
If(plot=4,CycleLenAvg,
If(plot=5,Stdev(CycleLen,21),pds)))))
(Go
Top) |
{ Filtered Exponential Moving Average v1.1 }{ EMA ignores
prices outside min/max % zone }{ EMA periodicity shortens on low
bar count }{ ©Copyright 2004 Jose Silva }{ josesilva22@yahoo.com
}
{ User inputs }
pds:=Input("EMA periods",1,2520,21);
minCh:=Input("Minimum % price change", 0,100,2)/100;
maxCh:=Input("Maximum % price change", 0,100,5)/100;
x:=Input("use Open=1 High=2 Low=3 Close=4 WClose=5 P=6",1,6,4);
shift:=Input("EMA vertical shift %", -100,100,0)/100+1;
plot:=Input("[1]EMA, [2]Crossover signals", 1,2,1);
{ Price field selection }
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),If(x=6,P,C)))));
{ Price filter }
change:=Abs(x/Ref(x,-1)-1);
filter:=change>=minCh AND change<=maxCh;
x:=ValueWhen(1,filter,x);
{ Reduce periodicity on low bar count }
pds:=If(pds>Cum(IsDefined(x)), Cum(IsDefined(x)),pds);
{ EMA formula }
Ema:=x*2/(pds+1)+PREV*(1-2/(pds+1));
{ EMA shift }
Ema:=Ema*shift;
{ EMA crossover signals }
signals:=Cross(x,Ema)-Cross(Ema,x);
{ Plot EMA on price chart }
If(plot=2,signals,Ema)
(Go
Top) |
{ Pivotal Exponential Moving Average v1.0 }{ EMA based on
trough/peak support/resistance }
{ Options:
[1] Composite EMA: (Upper+Lower)/2;
[2] Upper EMA band based on peaks;
Lower EMA band based on troughs;
[3] EMA shifts to Upper/Lower on crossovers }
{ ©Copyright 2004 Jose Silva }{ josesilva22@yahoo.com }
pds:=Input("EMA periods",1,2520,21)/2;
plot:=Input("EMA: [1]Composite, [2]Upper/Lower,
[3]Long/Short",1,3,1);
spread:=Input("Upper/Lower EMA bands shift %", 0,100,2)/200;
x:=Input("use: [1]Close, [2]High/Low, [3]P", 1,3,1);
xpk:=If(x=1,C,If(x=2,H,P));
pk:=xpk<Ref(xpk,-1) AND Ref(xpk,-1)>Ref(xpk,-2);
pkVal:=ValueWhen(1,pk,Ref(xpk,-1));
xtr:=If(x=1,C,If(x=2,L,P));
tr:=xtr>Ref(xtr,-1) AND Ref(xtr,-1)<Ref(xtr,-2);
trVal:=ValueWhen(1,tr,Ref(xtr,-1));
pkpds:=If(pds>Cum(pk),Cum(pk),pds);
pkpds:=If(pkpds<1,1,pkpds);
pkEma:=pkVal*2/(pkpds+1)+PREV*(1-2/(pkpds+1));
pkEma:=pkEma*(1+spread);
trpds:=If(pds>Cum(tr),Cum(tr),pds);
trpds:=If(trpds<1,1,trpds);
trEma:=trVal*2/(trpds+1)+PREV*(1-2/(trpds+1));
trEma:=trEma*(1-spread);
Ema:=(pkEma+trEma)/2;
LngShtEma:=If(C>=Ema,trEma,pkEma);
If(plot=1,Ema,If(plot=2,trEma,LngShtEma));
If(plot=1,Ema,If(plot=2,pkEma,LngShtEma))
(Go
Top) |
{RSI-volatility adjusted, dynamic-period EMA v2}{ Tightens
EMA on RSI over-bought/sold levels, increases EMA periods on low
RSI volatility }{ ©Copyright 2003-2004 Jose Silva }{
josesilva22@yahoo.com }
pds:=Input("EMA periods",1,2520,21);
pdsRs:=Input("RSI periods",2,252,21);
x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);
shift:= 1+Input("vertical shift %",-100,100,0)/100;
plot:=Input("EMA=1, dyn EMA pds=2, RSI volatility=3,
signals=4",1,4,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
RSvoltl:=Abs(RSI({x,}pdsRs)-50)+1;
multi:=(5+100/pdsRs) /(.06+.92*RSvoltl+.02*Power(RSvoltl,2));
pds:=pds*multi;
pds:=If(pds>Cum(IsDefined(x))-pdsRS, Cum(IsDefined(x))-pdsRS,pds);
pds:=If(pds<1,1,pds);
RsVEma:=x*2/(pds+1)+PREV*(1-2/(pds+1));
signals:=Cross(x,RsVEma)-Cross(RsVEma,x);
If(plot=2,pds,If(plot=3,(RSvoltl-1)*2, If(plot=4,signals,RsVEma*shift)))
(Go
Top) |
{ EMA slope % v2.0, +/- 0~100% }{ ©Copyright 2003 Jose Silva
}{ josesilva22@yahoo.com }
pds:=Input("EMA periods",2,2520,21);
x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
EMA:=Mov(x,pds,E);
EMAprev:=Ref(EMA,-1);
y:=Min(EMA,EMAprev)/Max(EMA,EMAprev);
EMAratio:=(If(EMA>EMAprev,2-y,y)-1)*100;
EMAper:=If(EMAratio<0,Atan(EMAratio,1)-360, Atan(EMAratio,1))*10/9;
signal:=Mov(EMAper,pds,E);
0;signal;EMAper
(Go
Top) |
{ Volatility-adjusted, dynamic-period EMA v2.4 }{ EMA
periodicity shortens on high volatility, increases on low
volatility }{ ©Copyright 2003-2004 Jose Silva }{
josesilva22@yahoo.com }
pds:=Input("EMA periods",1,2520,21);
x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);
shift:=1+Input("EMA vertical shift %", -100,100,0)/100;
plot:=Input("EMA=1, Volatility=2, Dyn EMA pds=3,
Crossovers=4",1,4,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
Vt:=Stdev(x,5)/Mov(Stdev(x,5),10,S);
pds:=pds*.75/(Vt+.1);
pds:=If(pds>Cum(IsDefined(x))-13, Cum(IsDefined(x))-13,pds);
pds:=If(pds<1,1,pds);
VtEma:=x*2/(pds+1)+PREV*(1-2/(pds+1));
VtEma:=VtEma*shift;
signals:=Cross(x,VtEma)-Cross(VtEma,x);
If(plot=2,Vt*10,If(plot=3,pds, If(plot=4,signals,VtEma)))
(Go
Top) |
{ Volume adjusted, dynamic-period EMA v2.3 }{ EMA periodicity
shortens on high volume, increases on low volume }{ ©Copyright
2003-2004 Jose Silva }
{ josesilva22@yahoo.com }
pds:=Input("EMA periods",1,2520,21);
VAvgPds:=Input("Volume sample periods",2,252,21);
x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);
shift:=1+Input("EMA vertical shift %", -100,100,0)/100;
plot:=Input("EMA=1, Dyn EMA pds=2, Vol avg=3,
Crossovers=4",1,4,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
MovVol:=Mov(V,VAvgPds,E);
VolRatio:=Min(V,MovVol)/Max(V,MovVol);
VolAvg:=If(V>MovVol,2-VolRatio,VolRatio);
multi:=.75/(.1+.32*VolAvg+.58*Power(VolAvg,4));
pds:=pds*multi;
pds:=If(pds>Cum(IsDefined(x))-VAvgPds, Cum(IsDefined(x))-VAvgPds,pds);
pds:=If(pds<1,1,pds);
VlEma:=x*2/(pds+1)+PREV*(1-2/(pds+1));
VlEma:=VlEma*shift;
signals:=Cross(x,VlEma)-Cross(VlEma,x);
If(plot=2,pds,If(plot=3,VolAvg*50, If(plot=4,signals,VlEma)))
(Go
Top) |
{ True weekly Close Exponential Mov Avg v4.0 }{ Plot on Daily
or Weekly charts }{ References indicator "Calendar Week counter"
}{ Plot is independent of any missing chart data }{ ©Copyright
2003-2004 Jose Silva }{ josesilva22@yahoo.com }
pds:=Input("Weekly EMA periods",1,520,4);
shift:=1+Input("EMA vertical shift %", -100,100,0)/100;
plot:=Input("plot: [1] EMA, [2] Crossover signals",1,2,1);
y:=Fml("Calendar Week counter");
Wkchart:=LastValue(Cum(y=ValueWhen(2,1,y)))=0;
NuWk:=y>ValueWhen(2,1,y);
pds:=If(pds>Cum(NuWk),Cum(NuWk),pds);
WkCl:=ValueWhen(1,NuWk,ValueWhen(2-Wkchart,1,C));
WkEma:=ValueWhen(1,NuWk,PREV)*(1-2/(pds+1))+WkCl*2/(pds+1);
WkEma:=WkEma*shift;
signals:=Cross(C,WkEma)-Cross(WkEma,C);
If(plot=2,signals,WkEma)
(Go
Top) |
{ Triggers Long (+1) & Short (-1) signals at crossover of
triple EMAs within x periods }{ josesilva22@yahoo.com }
pdsLong:=Input("Long crossover within x periods",1,252,2);
pdsShort:=Input("Short crossover within x periods",1,252,3);
short:=Input("short EMA periods",1,252,5);
medium:=Input("medium EMA periods",2,1008,10);
long:=Input("long EMA periods",3,2520,20);
x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
goLong:=
Alert(Cross(Mov(x,short,E),
Mov(x,medium,E)),pdsLong)
AND
Alert(Cross(Mov(x,medium,E),
Mov(x,long,E)),pdsLong);
goShort:=
Alert(Cross(Mov(x,medium,E),
Mov(x,short,E)),pdsShort)
AND
Alert(Cross(Mov(x,long,E),
Mov(x,medium,E)),pdsShort);
goLong-goShort
(Go
Top) |
{Dr A. Elder's AutoEnvelope interpretation v1.0}
{ User inputs }
pds:=Input("EMA periods",1,252,21);
pdsBak:=Input("lookback periods",1,252,42);
x:=Input("use: Open=1, High=2, Low=3, Close=4, WClose=5",1,5,4);
plot:=Input("[1]AutoEnvelope, [2]Long signals, [3]All
signals",1,3,1);
delay:=Input("Entry/Exit signals delay",0,5,0);
{ Price field }
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,WC(),C))));
{ Envelope bands }
Avg:=Mov(x,pds,E);
hiAvg:=HHV(H,pdsBak);
loAvg:=LLV(L,pdsBak);
shift:=
Mov(If(hiAvg>Avg,hiAvg-Avg,Avg-loAvg),pds,E);
UpperBand:=Avg+shift;
LowerBand:=Avg-shift;
{ Envelope signals }
In:=Cross(x,LowerBand);
Out:=Cross(x,UpperBand);
Init:=Cum(In+Out>-1)=1;
InInit:=Cum(In)=1;
flag:=BarsSince(Init OR In)
<BarsSince(Init OR Out)+InInit;
signals:=Ref((InInit AND Alert(InInit=0,2)
OR flag AND Alert(flag=0,2))
-(flag=0 AND Alert(flag,2)),-delay);
{ Plot envelope on price chart }
If(plot=1,UpperBand,If(plot=2,signals,In-Out));
If(plot=1,Avg,If(plot=2,0,0));
If(plot=1,LowerBand,If(plot=2,signals,In-Out))
(Go
Top) |
{ Dr Elder's Impulse system interpretation v1.1}{ Plot
signals on own window below daily chart }
{ Variables user-input }
pdsNoEntry:=Input("No entry x periods from last exit",0,21,5);
pdsW:=Input("Weekly EMA periods",1,520,13)*5;
pdsD:=Input("Daily EMA periods",1,252,13);
pdsShort:=Input("Shorter MACD periods",
1,252,12);
pdsLong:=Input("Longer MACD periods",2,2520,26);
pdsSignal:=Input("MACD trigger signal periods",
2,252,9);
tradeDelay:=0;
{ Indicators }
EmaW:=Mov(C,pdsW,E);
EmaD:=Mov(C,pdsD,E);
Mac:=Mov(C,pdsShort,E)-Mov(C,pdsLong,E);
MacTrig:=Mov(Mac,pdsSignal,E);
Hist:=Mac-MacTrig;
{ System logic }
Out:={EmaW<Ref(EmaW,-1)
AND }EmaD<Ref(EmaD,-1)
AND Hist<Ref(Hist,-1);
In1:=EmaW>Ref(EmaW,-1)
AND EmaD>Ref(EmaD,-1)
AND Hist>Ref(Hist,-1);
In:=In1 AND BarsSince(Out)>pdsNoEntry;
{ System signals }
Init:=Cum(In+Out>-1)=1;
InInit:=Cum(In)=1;
flag:=Ref(BarsSince(Init OR In)
<BarsSince(Init OR Out)+InInit,-tradeDelay);
signals:=(InInit AND Alert(InInit=0,2)
OR flag AND Alert(flag=0,2))
-(flag=0 AND Alert(flag,2));
{ Plot }
0;signals
(Go
Top) |
{ ©Copyright 2001 Jose Silva }
Column A: +% incrs
TtlDays:=LastValue(Cum(1));
FirstDay:=If(TtlDays>252,TtlDays-252,1);
FirstCl:=ValueWhen(1,Cum(1)=FirstDay,C);
Int((C/FirstCl-1)*10000)/100
Column B: today
Close
Column C: 52w back
TtlDays:=LastValue(Cum(1));
FirstDay:=If(TtlDays>252,TtlDays-252,1);
ValueWhen(1,Cum(1)=FirstDay,C)
Column D: $ t/over
Int(WC()*V)
Column E: months
Int(LastValue(Cum(1)/21))
Column F: weeks
Int((LastValue(Cum(1))
-Int(LastValue(Cum(1)/21))*21)/5)
Filter:
colA > 0
AND colD > 10000
(Go
Top) |
|