Finds stocks which have rallied, gapped upwards, and then had
an inside day.
Usually leads to a resumption of the rally. The search
returns 1 for Ok and 0 for not ok.
- RallyWithVol()
- Inside()
- GapUp()
(Go
Top) |
Looks for out of range move where the close equals the high.
Suggests more buying pressure.
The search returns 1 for Ok and 0 for not ok.
(Go
Top) |
Lb:=Input("Look-Back Period?",3,100,21);
Alpha:=2/(LB+1);
Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;
RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+
(Alpha*(C+Bot-Ref(Bot,-1)));
RMTA;
{TOSC}
Lb:=Input("Look-Back Period?",3,100,21);
Alpha:=2/(LB+1);
Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;
RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+
(Alpha*(C+Bot-Ref(Bot,-1)));
TOSC:=RMTA-Mov(C,lb,E);
TOSC;
Is the name of an article in the December issue of TASC,
written by Dennis Meyers. In it he describes what he calls " The
Recursive Moving Trend Average" . I wont go into all the article
right now, but here is my translation of his math (for Metastock
6.5) :
{Recursive Moving Trend Average}
Lb:=Input("Look-Back Period?",3,100,21);
Alpha:=2/(LB+1);
Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;
RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+
(Alpha*Abs(C+Bot-Ref(Bot,-1)));
RMTA;
He then explains how to make an oscillator by subtracting an
Exponential MA form the Recursive MA...... again here is the
code:
{TOSC}
Lb:=Input("Look-Back Period?",3,100,21);
Alpha:=2/(LB+1);
Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;
RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+
(Alpha*Abs(C+Bot-Ref(Bot,-1)));
TOSC:=RMTA-Mov(C,lb,E);
TOSC;
Here is the code for System Testing;
Buy Long:
Lb:=opt1;
ent:=3;
Alpha:=2/(LB+1);
Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;
RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+
(Alpha*Abs(C+Bot-Ref(Bot,-1)));
TOSC:=RMTA-Mov(C,lb,E);
Cross(tosc,(0-Abs(ent)))
Sell short:
Lb:=opt1;
ent:=3;
Alpha:=2/(LB+1);
Bot:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+C;
RMTA:=(1-Alpha)*(If(Cum(1)<Lb,C,PREV))+
(Alpha*Abs(C+Bot-Ref(Bot,-1)));
TOSC:=RMTA-Mov(C,lb,E);
Cross((0+Abs(ent)),tosc1)
Opt1 is the look- back periods, of 3 to 30, and Opt2 is the
entry value of the oscillator, 0 to 5.
Now, after all the hours spent on figuring out the code, I have
discovered that the RMTA plots very similar to the DEMA, oh
well............
(Go
Top) |
SIGNAL FORMULAS
Enter Long:
Periods := 21;
UpperBand := STEBandTop(CLOSE,Periods,1) ;
Sum(CLOSE > UpperBand,3) = 3 AND LinRegSlope(CLOSE,21) > 0
AND ROC(Correl(CLOSE,Cum(1) ,21,0),2,$) >= .2
Close Long:
Periods := 21;
LowerBand := STEBandBot(CLOSE,Periods,1.5) ;
SellSignal1 := Sum(CLOSE < LowerBand,3) = 3;
SellSignal2 := CLOSE < (1-.18) * HHV(HIGH,Periods + 1) AND
HIGH < LowerBand;
SellSignal1 OR SellSignal2
STOPS
Maximum Loss: LONG ONLY
10.00 Percent
(Go
Top) |
LookBack := Input("Look Back Periods",1,1000,10);
Resistance :=ValueWhen(1,Cross(Mov(C, LookBack,
S),C),HHV(H, LookBack));
Support :=ValueWhen(1,Cross(C,Mov(C, LookBack,
S)),LLV(L, LookBack));
Resistance;
Support;
(Go
Top) |
PrCnt:=Input("Percentage",0,100,10);
LookBack:= Input("Look Back Periods",1,1000,10);
Resistance:=ValueWhen(1,Cross(Mov(C,LookBack,S),C),HHV(H,LookBack));
Support:=ValueWhen(1,Cross(C,Mov(C,LookBack,S)),LLV(L,LookBack));
Resistance * ((100-prcnt)/100);
Support * ((prcnt/100)+1);
(Go
Top) |
ENTER LONG:
ROC(Mov(C,12,E),1,%)>0 AND ROC(Mov(C,60,E),1,%)>0
EXIT LONG:
(ROC(Mov(C,12,E),1,%)<0 AND ROC(Mov(C,60,E),1,%)>0)
OR
(ROC(Mov(C,12,E),1,%)>0 AND ROC(Mov(C,60,E),1,%)<0)
SHORT:
ROC(Mov(C,12,E),1,%)<0 AND ROC(Mov(C,60,E),1,%)<0
EXIT SHORT:
(ROC(Mov(C,12,E),1,%)<0 AND ROC(Mov(C,60,E),1,%)>0)
OR
(ROC(Mov(C,12,E),1,%)>0 AND ROC(Mov(C,60,E),1,%)<0)
{Ref(c,-1) gives yesterday's close today. So all values are
shifted to the
right!}
(Go
Top) |
{place in filter section}
C>MOV(C,5,E) AND C>MOV(C,200,E) AND CROSS(RSI(14),30)
(Go
Top) |
{RSI(9) DIVERGENCE BUY:}
If(RSI(9) >= HHV(RSI(9),19) AND CLOSE <HHV(CLOSE,19), 1,0) OR
If(CLOSE <= LLV(CLOSE,19) AND RSI(9) > LLV(RSI(9),19), 1,0)
{RSI(9) DIVERGENCE SELL:}
If(CLOSE >= HHV(CLOSE,19) AND RSI(9)<HHV(RSI(9),19),1,0) OR
If(RSI(9) <= LLV(RSI(9),19) AND CLOSE > LLV(CLOSE,19),1,0)
{You can substitute any formula for the "RSI(9)"}
(Go
Top) |
{A simple exploration filter formula for finding a bullish
divergence
between the RSI and the price is shown below. To find a bearish
divergence,
replace > with <. The differences in the trough function was
found through
an optimization routine and they may not be the best values for
your
application.}
Ref(RSI(14),-1)>Trough(1,RSI(14),.8)
AND
Ref(CLOSE,-1)<Trough(1,CLOSE,.2)
(Go
Top) |
RSI(13) - 50 {offset the RSI to +-50}
(Go
Top) |
Ruggiero's rules for trend mode quoting his table 4.9:
1. If ADX crosses above 25, then the market is trending.
2. If ADX crosses below 20, then the market is consolidating.
3. If ADX crosses below 45 from above, then the market is
consolidating.
4. If ADX rises from below 10 on 3 out of 4 days, then the
market will start
to trend.
5. If a trend is based on rule 4, it remains in effect until the
5 day
difference in ADX is less than 0.
Ruggiero employs a 14 day ADX but that is based on T-Bonds data.
He suggests employing the above rules as a filter. I make the
indicator take the value +1 if trending, a -1 if consolidating
according to the above criteria but I guess the zero is for the
grey area
in between. Anyway according to definition: If a market is not
trending it must be consolidating. However the zero may contain
additional useful information. Ruggiero suggests tweaking the
threshold values.
periods:=Input("Periods?",1,63,14);
If((ADX(periods)>25 AND (BarsSince(Cross(45,ADX(periods))) >
BarsSince(Cross(ADX(periods),25)))) OR (ADX(periods) > 10 AND
Ref(ADX(periods),-4)<10 AND
(ADX(periods)-Ref(ADX(periods),-5)>0)), 1,
If(ADX(periods)<20 OR ((BarsSince(Cross(45,ADX(periods))) <
BarsSince(Cross(ADX(periods),25))) AND ADX(periods) < 45),-1,0))
(Go
Top) |
The following formulas, for the Random Walk
Index, were constructed using information from the article
"Are There Persistent Cycles", by E. Michael Poulos, in the
September 1992 TASC.
All formulas are needed.
MetaStock Windows versions:
Random Walk Index:
Max( ( Ref(HIGH,-1) - LOW ) / ( ( Ref(Sum
(Atr ( 1 ) ,2 ),-1) / 2) * Sqrt( 2 ) ) ,Max( (Ref(HIGH,-2) -LOW)
/ ( ( Ref(Sum (Atr ( 1 ),3),-1) / 3) * Sqrt( 3 ) ), Max(
(Ref(HIGH,-3) - LOW) / ( (Ref(Sum (Atr( 1 ) ,4) ,-1) / 4) *
Sqrt( 4 ) ) , Max( ( Ref( HIGH,-4) - LOW) / ( (Ref(Sum(Atr( 1
),5),-1) / 5) * Sqrt( 5 ) ), Max( (Ref(HIGH,-5) - LOW) / ( (Ref(
Sum( Atr ( 1 ),6),-1) / 6 ) * Sqrt( 6 ) ), Max( ( Ref(HIGH,-6)
-LOW) / ( (Ref( Sum( Atr( 1 ),7),-1) / 7) * Sqrt( 7 ) ),
Max((Ref(HIGH,-7)-LOW) / ( (Ref(Sum (Atr( 1 ),8),-1) / 8) *
Sqrt(8) ), (Ref(HIGH,-8)-LOW) / ( (Ref(Sum (Atr (1),9),-1) / 9)
* Sqrt( 9 ) ) ) ) ) ) ) ) )
(Go
Top) |
The following formula plots a percent rate of
change between a specific date and today. The user is prompted
for the specific date.This will only work in MetaStock™ for
Windows 95/NT version 6.5 (or higher) or in MetaStock
Professional.
Construct the formula in the Indicator Builder, giving it the
name shown below in bold. All the text after "FORMULA:" and
before "*END OF FORMULA*" below should be placed in the Formula
field in the Indicator Builder. Once the indicator has been
created, you can drag it out of the Indicator Quicklist for
placement in an inner-window of your chart.
NAME: ROC Since a Date
FORMULA:
Day1 := Input("Day",1,31,4);
Month1 := Input("Month",1,12,1);
Year1 := Input("Year",1900,2400,1999);
100 * (CLOSE - ValueWhen(1,DayOfMonth() = Day1 AND Month() =
Month1 AND Year() = Year1, CLOSE))/ ValueWhen(1,DayOfMonth() =
Day1 AND Month() = Month1 AND Year() = Year1,CLOSE)
(Go
Top) |
In MetaStock 6.0 it’s easy to create the
Regression Oscillator and the Slope/Close Indicator from Richard
Goedde’s article, "Market timing with the regression
oscillator", which appears in the March 97 issue of Technical
Analysis Stocks and Commodities magazine.
First choose Indicator Builder from the Tools
menu and enter the following formulas:
Regression Oscillator
100 * (CLOSE/ LinearReg(CLOSE,63)-1)
Slope/Close
10000* LinRegSlope(CLOSE,63)/CLOSE
Next drag each of these formulas from the
Indicator QuickList and drop them on the heading of a chart. To
create horizontal lines, click the right mouse button while the
mouse pointer is positioned over the Regression Oscillator to
display the shortcut menu. Choose Regression Oscillator
Properties. On the Horizontal lines page add horizontal lines at
14, 0, and -14.
You can use The Explorer to perform the
screen mentioned in the article. First choose The Explorer from
the Tools menu, next create a new Exploration with the following
information:
Column A
Name: Reg Osc
Formula: Fml("Regression Oscillator")
Column B
Name: Slp/Cls
Formula: Fml("Slope/Close")
Filter
Formula: ColB > 50 and ColA >-15 and ColA < -5
Choose OK and then Explore to run the
Exploration. For MetaStock for Windows 5.x users the
instructions are the same except enter the following custom
indicator in place the ones mentioned earlier.
Regression Oscillator
100 * (CLOSE/ ((63 * Sum(Cum(1) * C,63) - Sum(Cum(1),63) *
Sum(C,63)) / (63 * Sum(Pwr(Cum(1),2),63) -
Pwr(Sum(Cum(1),63),2)) * Cum(1) + (Mov(C,63,S) -
Mov(Cum(1),63,S) * (63 * Sum(Cum(1) * C,63) - Sum(Cum(1),63) *
Sum(C,63)) / (63 * Sum(Pwr(Cum(1),2),63) -
Pwr(Sum(Cum(1),63),2))))-1)
Slope/Close
10000* ((63 * Sum(Cum(1) * C,63) - Sum(Cum(1),63) * Sum(C,63)) /
(63 * Sum(Pwr(Cum(1),2),63) - Pwr(Sum(Cum(1),63),2)))/CLOSE
(Go
Top) |
This custom RSI will allow you to select
which price data to use when you plot it. The standard RSI uses
the close value as Welles Wilder did when he created the
indicator. This custom indicator will allow you to use the other
price fields including volume.
Q:=Input("Time Periods",1,1000,14);
B:=Input("Field: 1=Close, 2=Open, 3=High,
4=Low, 5=Volume",1,5,1);
Z:=If(B=1,Wilders(If(ROC(C,1,$)>0,ROC(C,1,$),0),LastValue(Q)),If(B=2,Wilders(If(ROC(O,1,$)>0,ROC(O,1,$),0),LastValue(Q)),If(B=3,Wilders(If(ROC(H,1,$)>0,ROC(H,1,$),0),LastValue(Q)),If(B=4,Wilders(If(ROC(L,1,$)>0,ROC(L,1,$),0),LastValue(Q)),Wilders(If(ROC(V,1,$)>0,ROC(V,1,$),0),LastValue(Q))))));
Y:=If(B=1,Wilders(If(ROC(C,1,$)<0,Abs(ROC(C,1,$)),0),LastValue(Q)),If(B=2,Wilders(If(ROC(O,1,$)<0,Abs(ROC(O,1,$)),0),LastValue(Q)),If(B=3,Wilders(If(ROC(H,1,$)<0,Abs(ROC(H,1,$)),0),LastValue(Q)),If(B=4,Wilders(If(ROC(L,1,$)<0,Abs(ROC(L,1,$)),0),LastValue(Q)),Wilders(If(ROC(V,1,$)<0,Abs(ROC(V,1,$)),0),LastValue(Q))))));
RS:=Z/Y;
100-(100/(1+RS))
(Go
Top) |
The following formulas were taken from the
article "The relative volatility index," written by Dorsey,
Donald, in the June 93 issue of Technical Analysis of STOCKS &
COMMODITIES.
Taken from Stocks & Commodities, V. 11:6
(253-256): The Relative Volatility Index by Donald Dorsey
"The RVI is simply the relative strength
index (RSI) with the standard deviation over the past 10 days
used in place of daily price change. Because most indicators use
price change for their calculations, we need a confirming
indicator that uses a different measurement to interpret market
strength. The RVI measures the direction of volatility on a
scale of zero to 100. Readings above 50 indicate that the
volatility as measured by the 10-day standard deviation of the
closing prices is more to the upside. Readings below 50 indicate
that the direction of volatility is to the downside. The initial
testing indicates that the RVI can be used wherever you might
use the RSI and in the same way, but the specific purpose of
this study is to measure the RVI's performance as a confirming
indicator."
The RVI was designed to measure the direction
of volatility. It calculates price strength by measuring
volatility rather than price change.
All of the following formulas are required:
@RVI Down
((PREV*13)+If(ROC(C,1,%)<0,Stdev(C,10),0))/14
@RVI Up
((PREV*13)+If(ROC(C,1,%)>0,Stdev(C,10),0))/14
@RVI
(100*Fml("@RVI Up"))/(Fml("@RVI
Up")+Fml("@RVI Down"))
(Go
Top) |
In their book The New Technical Trader,
Chande & Kroll introduce the r2 indicator. They state
that "the primary use of r2 is as a confirming
indicator" and that "it is a lagging indicator that shows the
strength of the trend."
In MetaStock the r2 formula is:
Pwr(Corr(Cum( 1 ),C,14,0),2)
They also present a smoothed r2
which would be:
Mov(Pwr(Corr(Cum( 1 ),C,14,0),2)*100,14,S)
For interpretation refer to Chande & Kroll's
book, as stated above.
Note: The r-squared indicator is built into
MetaStock for Windows version 6.0 and later.
(Go
Top) |
Rule of 7 Down Objective
If((ROC(C,12,%)>-1.5),If((ROC(C,12,%)>-3),
If((ROC(C,12,%)>-4.5),((H-(H-L)*1.75)),((H-(H-L)*2.33))),((H-(H-L)*3.5))),(H-(H-L)))
Rule of 7 Up Objective
If((ROC(C,12,%)>1.5),If((ROC(C,12,%)>3),
If((ROC(C,12,%)>4.5),(((H-L)*1.75)+L),(((H-L)*2.33)+L)),(((H-L)*3.5)+L)),((H-L)+L))
Rule of 7 Oscillator
Fml("Rule of 7 UP Objective") -
Fml("Rule of 7 DOWN Objective")
(Go
Top) |
To create Rainbow Charts in MetaStock for Windows, open any
chart, drop the moving average indicator from the Indicator
QuickList, and drop it in the same inner windows as the price
bars. Enter two for the Periods and simple for the Method. Next
plot a second moving average on the first moving average by
dragging a moving average from the QuickList and dropping it on
the first moving average (Note: The first moving average should
turn light purple before you release the mouse button). If you
dropped it correctly the Parameters dialog should say
‘Indicator’ for the Price Field. Click OK to accept two periods
and simple as the parameters. Change the colour of this moving
average as desired. Now plot a third moving average of the
second moving average by repeating these steps. Continue this
until you have ten moving averages. Choose Yes if MetaStock
prompts you about plotting a duplicate indicator.
To save you time, Equis have created a template that allows you
to bypass these steps. You can download this template directly
off of the Equis web site. Download this file to the Charts
folder (e.g. C:\Program Files\Equis\MetaStock\Charts) in your
MetaStock folder. Open any chart and then click on your right
mouse button while the pointer is located on the chart. Choose
Apply Template from the Chart Shortcut menu and choose the
Rainbow Chart template. You should now have a chart with ten
different coloured moving averages.
Next choose Indicator Builder from the Tools menu and enter the
following formulas.
Rainbow Max |
Max(Mov(C,2,S),
Max(Mov(Mov(C,2,S),2,S),
Max(Mov(Mov(Mov(C,2,S),2,S),2,S),
Max(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),
Max(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),
Max(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),
Max(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),
Max(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),
Max(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)))))))))) |
|
Rainbow Min |
Min(Mov(C,2,S),
Min(Mov(Mov(C,2,S),2,S),
Min(Mov(Mov(Mov(C,2,S),2,S),2,S),
Min(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),
Min(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),
Min(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),
Min(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),
Min(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),
Min(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)))))))))) |
|
Rainbow Oscillator |
100 * (CLOSE -
((Mov(C,2,S)+
Mov(Mov(C,2,S),2,S)+
Mov(Mov(Mov(C,2,S),2,S),2,S) +
Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S) +
Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S)
+
Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S)
+
Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S)+
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)+
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S)+
Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(Mov(C,2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S),2,S))
/10))/(HHV(C,10)-LLV(C,10)) |
|
Lower Rainbow Band |
-100 * (Fml("Rainbow Max")
- Fml("Rainbow Min")) /
(HHV(C,10) - LLV(C,10)) |
|
Upper Rainbow Band |
100 * (Fml("Rainbow Max") -
Fml("Rainbow Min")) /
(HHV(C,10) - LLV(C,10)) |
|
Plot the Rainbow Oscillator in a new inner window of your
chart with the ten moving averages, by dropping the custom
indicator from the QuickList onto the chart’s heading. Right
click on the Rainbow Oscillator and choose properties, then
change the Style to a histogram. Now plot the Lower Rainbow Band
and the Upper Rainbow Band in the same inner window as the
Rainbow Oscillator. If the scaling dialog appears when plotting
these indicators, choose ‘Merge with Scale on Right.’ Change the
colors of the Upper and Lower Rainbow Bands as desired. Now save
this as a new template by choosing Save As from the File Menu
and changing the File Type to template, so you can easily apply
it to any chart.
(Go
Top) |
A series of four trading systems, using the Regress Slope as
basis and combining with other indicators.
1. Regress Slope: Signal
Formulas |
Enter
Long:
|
Alert(RSquared(C,21) < 0.15,21) AND
LinRegSlope(C,34) > opt1 AND
HHV(LinRegSlope(C,34),5) =
HHV(LinRegSlope(C,34),13) AND
HHV(MFI(55),5) = HHV(MFI(55),13) AND
HHV(TSF(C,55),5) = HHV(TSF(C,55),13) |
Close
Long: |
LLV(TSF(C,55),5) = LLV(TSF(C,55),13) AND
LinRegSlope(C,34) < opt1 |
Enter
Short:
|
Alert(RSquared(C,21) < 0.15,13) AND
LinRegSlope(C,34) < opt2 AND
LLV(LinRegSlope(C,34),5) =
LLV(LinRegSlope(C,34),13) AND
LLV(MFI(55),5) = LLV(MFI(55),13) AND
LLV(TSF(C,144),5) = LLV(TSF(C,144),13) |
Close
Short: |
HHV(TSF(C,144),5) = HHV(TSF(C,144),13) |
|
Optimization Variables |
OPT1: Min = -0.10
Max = 0.00 Step = 0.10 |
OPT2: Min = -0.20
Max = 0.00 Step = 0.10 |
STOPS: ALL OFF |
|
2. Regress Slope/CMO - All:
Signal Formulas |
Enter
Long:
|
Alert(RSquared(C,21) < 0.15,21) AND
LinRegSlope(C,34) > opt1 AND
HHV(LinRegSlope(C,34),5) =
HHV(LinRegSlope(C,34),13) AND
CMO(C,55) > 0 AND
C = HHV(C,5) |
Close
Long: |
LinRegSlope(C,34) < opt1 AND
CMO(C,55) < 0 AND
C = LLV(C,5) |
Enter
Short:
|
Alert(RSquared(C,21) < 0.15,13) AND
LinRegSlope(C,34) < opt2 AND
LLV(LinRegSlope(C,34),5) =
LLV(LinRegSlope(C,34),13) AND
CMO(C,55) < 0 AND
C = LLV(C,5) |
Close
Short: |
LinRegSlope(C,34) > opt2 AND
CMO(C,55) > 0 AND
C = HHV(C,5) |
|
Optimization Variables |
OPT1: Min = -0.10
Max = 0.00 Step = 0.10 |
OPT2: Min = -0.20
Max = 0.00 Step = 0.10 |
STOPS: ALL OFF |
|
3. Regress Slope/Qstick - (OHLC
Rqd): Signal Formulas |
Enter
Long:
|
Alert(RSquared(C,21) < 0.15,21) AND
LinRegSlope(C,34) > opt1 AND
HHV(LinRegSlope(C,34),5) =
HHV(LinRegSlope(C,34),13) AND
Qstick(55) > opt1 AND
HHV(Qstick(55),5) = HHV(Qstick(55),13)
AND C=HHV(C,5) |
Close
Long: |
LinRegSlope(C,34) < opt1 AND
Qstick(55) < opt1 AND
C = LLV(C,5) |
Enter
Short:
|
Alert(RSquared(C,21) < 0.15,13) AND
LinRegSlope(C,34) < opt2 AND
LLV(LinRegSlope(C,34),5) =
LLV(LinRegSlope(C,34),13) AND
Qstick(55) < opt2 AND
LLV(Qstick(55),5) = LLV(Qstick(55),13)
AND C = LLV(C,5) |
Close
Short: |
LinRegSlope(C,34) > opt2 AND
Qstick(55) > opt2 AND
C = HHV(C,5) |
|
Optimization Variables |
OPT1: Min = -0.10
Max = 0.00 Step = 0.10 |
OPT2: Min = -0.10
Max = 0.00 Step = 0.10 |
STOPS: ALL OFF |
|
4. Regress Slope/CCI/TSF - All:
Signal Formulas |
Enter
Long:
|
Alert(RSquared(C,21) < 0.15,21) AND
LinRegSlope(C,34) > opt1 AND
HHV(LinRegSlope(C,34),5) =
HHV(LinRegSlope(C,34),13) AND
HHV(CCI(55),5) = HHV(CCI(55),13) AND
CCI(55) > 0 AND
HHV(TSF(C,55),5) = HHV(TSF(C,55),13)
AND C = HHV(C,5) |
Close
Long: |
LLV(TSF(C,55),5) = LLV(TSF(C,55),13) AND
LinRegSlope(C,34) < opt1 AND
CCI(55) < 0 AND
C = LLV(C,5) |
Enter
Short:
|
Alert(RSquared(C,21) < 0.15,13) AND
LinRegSlope(C,34) < opt2 AND
LLV(LinRegSlope(C,34),5) =
LLV(LinRegSlope(C,34),13) AND
LLV(CCI(55),5) = LLV(CCI(55),13) AND
LLV(TSF(C,144),5) = LLV(TSF(C,144),13)
AND C = LLV(C,5) |
Close
Short: |
HHV(TSF(C,144),5) = HHV(TSF(C,144),13)
AND
C = HHV(C,5) |
|
Optimization Variables |
OPT1: Min = -0.10
Max = 0.00 Step = 0.10 |
OPT2: Min = -0.20
Max = 0.00 Step = 0.10 |
STOPS: ALL OFF |
|
(Go
Top) |
{ Smoothed RSI indicator v1.1 }{ Internal sine-weighted
smoothing }{ Automatic historically-valid RSI peak/trough
boundaries}{ Boundary crossover signals: +1=Long, -1=Short}{
©Copyright 2004 Jose Silva }{ josesilva22@yahoo.com }
{ user input }
pds:=1/Input("RSI periods",1,2520,10);
plot:=Input("plot: [1]-RSI, [2]-Long/Short signals",1,2,1);
{ RSI up/down average components }
x:=If(C>Ref(C,-1),C-Ref(C,-1),0);
y:=If(C<Ref(C,-1),Ref(C,-1)-C,0);
up:=PREV*(1-pds)+x*pds;
dw:=PREV*(1-pds)+y*pds;
{ sine-weighted internal smoothing }
s1:=Sin(30)*up;
s2:=Sin(60)*Ref(up,-1);
s3:=Sin(90)*Ref(up,-2);
s4:=Sin(60)*Ref(up,-3);
s5:=Sin(30)*Ref(up,-4);
up:=(s1+s2+s3+s4+s5)/(Sin(30)*2+Sin(60)*2
+Sin(90));
S1:=Sin(30)*dw;
S2:=Sin(60)*Ref(dw,-1);
S3:=Sin(90)*Ref(dw,-2);
S4:=Sin(60)*Ref(dw,-3);
S5:=Sin(30)*Ref(dw,-4);
dw:=(s1+s2+s3+s4+s5)/(Sin(30)*2+Sin(60)*2
+Sin(90));
{ RSI indicator }
dw:=If(dw=0,.000001,dw);
RS:=100-100/(1+up/dw);
{ automatic RSI peak/trough boundaries }
pk:=Ref(RS,-1)>Ref(RS,-2) AND Ref(RS,-1)>RS
AND Alert(Ref(C,-1)>Ref(C,-2)
AND Ref(C,-1)>C,2) {AND Ref(RS,-1)>50};
pkVal:=ValueWhen(1,pk,Ref(RS,-1));
pkAvg:=Cum(pkVal)/Cum(pkVal>-1);
tr:=Ref(RS,-1)<Ref(RS,-2) AND Ref(RS,-1)<RS
AND Alert(Ref(C,-1)<Ref(C,-2)
AND Ref(C,-1)<C,2) {AND Ref(RS,-1)<50};
trVal:=ValueWhen(1,tr,Ref(RS,-1));
trAvg:=Cum(trVal)/Cum(trVal>-1);
{ RSI peak/trough boundary cross signals }
up:=Cross(trAvg,RS);
dw:=Cross(RS,pkAvg);
signals:=up-dw;
{ alternative RSI peak/trough signals }
{up:=Ref(RS,-1)<Ref(RS,-2) AND Ref(RS,-1)<RS
AND Ref(RS,-1)<trAvg;
dw:=Ref(RS,-1)>Ref(RS,-2) AND Ref(RS,-1)>RS
AND Ref(RS,-1)>pkAvg;
signals:=up-dw;}
{ plot }
If(plot=1,pkAvg,0);
If(plot=1,trAvg,0);
If(plot=1,RS,signals)
(Go
Top) |
{ Stochastic-normalized RSI v1.0 }{ josesilva22@yahoo.com }
pds1:=Input("RSI periods",2,252,21);
pds2:=Input("Stochastic periods",2,252,63);
x:=Input("use Open=1 High=2 Low=3 Close=4 Volume=5 P=6",1,6,4);
plot:=Input("plot Stoch-RSI=1, RSI=2, both=3",1,3,1);
x:=If(x=1,O,If(x=2,H,If(x=3,L,If(x=5,V,If(x=6,P,C)))));
Rs:=RSI(x,pds1);
{MetaStock versions earlier than v7.2, use:}
{Rs:=RSI(pds1);}
StochRsi:=(Rs-LLV(Rs,pds2))/
(HHV(Rs,pds2)-LLV(Rs,pds2)+.000001)*100;
If(plot=3,Rs,50);
If(plot=2,Rs,StochRsi)
(Go
Top) |
{ Random trade generator v2.5 }{ ©Copyright 2001-2004 Jose
Silva }{ josesilva22@yahoo.com }
{Download Random.dll from http://www.traderhelp.net and
place in MetaStock External Function DLLs folder}
{Plot indicator in its own window below price chart & refresh
screen to generate new trades}{Buy signal: +1, Sell signal:
-1}{Smaller signals: secondary buy/sell events}
{user input}
x:=Input("Frequency of random trades (0-100%)",
0,100,10);
seed:=Input("Randomizer seed = 1~1000000, none =
0",0,1000000,0)-1;
{trade generator engine}
y:=ExtFml("Random.Number",seed);
z:=(100-x)/2;
Buy:=y>50+z;
Sell:=y<50-z;
{trade organizer}
Init:=Cum(Buy+Sell>-1)=1;
BuyInit:=Cum(Buy)=1;
flag:=BarsSince(Init OR Buy)
<BarsSince(Init OR Sell)+BuyInit;
signals:=(BuyInit AND Alert(BuyInit=0,2)
OR flag AND Alert(flag=0,2))
-(flag=0 AND Alert(flag,2));
BuySm:=Buy AND signals<1;
SellSm:=Sell AND signals>-1;
{signals display}
0;(BuySm-SellSm)*.3;signals
Random Strategy market test report
Market Trade $ Profit test for four random strategies, as at
Close Fri 23/01/2004.
Tested on 475 ASX All Ords stocks; Avg test period: 8.25 years
of data (2075 days); $10K starting capital for each stock; 1%
Entry/Exit Slippage, $34 brokerage each way.
Buy & Hold: +$22,699 (+227%) avg profit per stock
Entry on Open of day one
Exit on Close of last day
Strategy 1: -$7,540 (-75.4%) avg profit per stock
==========
Random entry (10% of max signals) set at seed 1
Random exit (10% of max signals) set at seed 1
Exit 2: -$10,794 (-107.9%) avg profit per stock
======
Random entry (10% of max signals) set at seed 1
2% Trailing StopLoss exit
Exit 3: -$6,851 (-68.5%) avg profit per stock
======
Random entry (10% of max signals) set at seed 1
5% Trailing StopLoss exit
Exit 4: +$647 (+6.5%) avg profit per stock
======
Random entry (10% of max signals) set at seed 1
10% Trailing StopLoss exit
(Go
Top) |
|