Here are the major features of a system I
developed to do a Top Down Approach.
The system is written in C# and SQL
Server.
I am just starting to use the system and
am looking for others to review and comment.
FED-1 = Purpose:
·
Using a top down approach (Market, Sector, Industry,
Stock) to stock buying and selling.
·
Organize and categorize Stocks within Sets of Markets,
Sectors, Industry Groups, and Group of Stocks.
·
Grouped Basket is defined as a set of Stocks organized
into Sector All, Sectors, and Industry Groups.
·
Ungrouped Basket is defined as a list of Stocks
assocaited to one group, i.e., Exchange Traded Funds (ETF) or Dow Industrials
Index (DJI).
FED-2 = For each Set calculate the following Basket Data:
·
Average Price for PriceOpen, PriceHigh, PriceLow,
PriceClose.
·
Volume Sum which equals sum of all Stock Volumes.
·
Volume Average which equals the average of Volume Sum
over a time period.
·
Volume Change Percentage which equals
(Volume Sum[Today]
– Volume Sum[Yesterday])/ Volume Sum[Yesterday]
·
Price Change which equals PriceClose[Today] –
PriceClose[Yesterday]
·
Price Change Percentage which equals Price Change /
PriceClose[Yesterday]
FED-3 = For each Set calculate the following Basket SIFT Data:
·
TotalPriceChangePct which equals Basket Data Price
Change Percentage
·
TotalPriceChangePctAccum which equals TotalPriceChangePctAccum
+ TotalPriceChangePct
·
TotalPriceChangePctAvg which equals the average of
TotalPriceChangePctAccum over a time period.
·
TotalPriceChangePctAccum over the last
5,10,20,40,50,200 periods.
·
Number of Advancing, Declining, Unchanged, and Total
Issues
·
Percentage of Advancing, Declining, and Unchanged
Issues
·
Moving Average of Advancing and Declining Issues over
a time period
·
Advancing, Declining, Unchanged, and Total Volume
·
Advancing, Declining, and Unchanged Volume Percentage
·
Advancing and Declining Volume Moving Average
·
Number of Stocks making NewHighs and NewLows
·
Percenatge of Stocks making NewHighs and NewLows
·
Moving Average of Stocks making NewHighs and NewLows
·
Compute the Directional Movement values of DIPlus,
DIMinus, ADX, ADXR.
·
Advancing Directional Movement which equals number of Stocks
with DIPlus > DIMinus
·
Declining Directional Movement which equals number of
Stocks with DIMinus > DIPlus
·
Percentage of Advancing Directional Movement Stocks
·
Percentage of Declining Directional Movement Stocks
·
Number of Issues Above and Below 5,10,20,40,50,200 day
moving average.
·
Percenatge of Issues Above and Below 5,10,20,40,50,200
day moving average.
·
Moving Average of Number of Issues Above and Below
5,10,20,40,50,200 day moving average.
FED-4 = Reports
SIFT Stats – Grouped
Sector vs SectorAll
Industry vs SectorAll
Industry vs Sector
Ticker vs SectorAll
Ticker vs Sector
Ticker vs Industry
SIFT Stats – Ungrouped
Ticker vs SectorAll
FED-5 = Export Data
Basket Data – Grouped
Basket Data – Ungrouped
Basket Data – Grouped - Downloader Format by
Industry and by Sector
Basket Data – Ungrouped - Downloader Format
SIFT Data – Grouped
SIFT Data – Ungrouped
SIFT Data – Grouped - Downloader Format by
Industry and by Sector
SIFT Data – Ungrouped - Downloader Format
FED-6 = Plot Data
Plot
data in AmiBroker.
Download
symbol data using Reuter’s The Downloader into Metastock formatted files.
Convert
Basket data to Metastock format.
For
each Grouped Basket export symbols into broker.sectors, broker.industries, industry_tickerlist.txt
For
each Ungrouped Basket export symbols into WatchList txt file
Create
new database and import industry_tickerlist.txt and WatchList files.
Configure
Database Settings, Metastock PlugIn, Metastock data folders for Tickers and
Baskets
Tab
1: DiDiff, DMI, Fast Stochastic, Price (Price Channel(10), MovAvg(10,20,50)),
Volume
Tab
2: PriceChangePctAccum, AdvDecIssueMovAvg, AdvDecDM, AdvDecVolumeMovAvg,
NewHighsLowMovAvg
Tab
3: PriceChangePctAccum, DMI, DiDiff
Tab 4: Price, IssuesAboveBelow005MovAvg,
IssuesAboveBelow010MovAvg, IssuesAboveBelow020MovAvg, IssuesAboveBelow040MovAvg
From:
amibroker@xxxxxxxxxxxxxxx [mailto:amibroker@xxxxxxxxxxxxxxx] On Behalf Of danclark_public
Sent: Thursday, July 14, 2005 4:17
PM
To: amibroker@xxxxxxxxxxxxxxx
Subject: [amibroker] Re: Question
on RS, possibly for Tomasz
Steve,
I would be very much interested! While
I can't say that Sector
rotation is the silver bullet, I'm seeing a pretty
good correlation
between Sector and Industry rotation, and
individual stock prices.
Many thanks,
Dan.
--- In amibroker@xxxxxxxxxxxxxxx, "Steve
Dugas" <sjdugas@xxxx> wrote:
> Hi Dan,
>
> There was a guy, Jayson Casavant, who posted
a lot of his work on
sector
> rotation and analysis here a couple of years
ago ( Anyone know
where Jayson
> went? He was very helpful here! ). I still
haven't found the time
to study
> it in depth, but I remember that it looked
pretty good and I know
that I
> saved all these posts. He was using TC2K or
QP2 or both, if I
remember
> right. If you are interested, I will look
through my saved posts
and forward
> this stuff to you - just let me know. Or, you
could search the
archives for
> posts by him related to sector
rotation/analysis. I think it is
the type of
> stuff that you are interested in doing.
>
> Steve
>
> ----- Original Message -----
> From: "danclark_public"
<dan_public@xxxx>
> To: <amibroker@xxxxxxxxxxxxxxx>
> Sent: Thursday, July 14, 2005 1:59 PM
> Subject: [amibroker] Re: Question on RS,
possibly for Tomasz
>
>
> Jason,
>
> This is VERY interesting. I'm
working thorough your code now and
> will comment more this evening (I'm US PDT).
>
> Regarding the first set of array variables...
>
> One thing I did notice is that your
"aa" and "ab" varibles are
based
> on the "MA(ROC...". I.e., the
"a." variables.
>
> For example, here are the first instances of
the "a" and "aa"
> variables:
>
> a = MA(ROC(C,5),5);
> aa = Ref(MA(ROC(C,5),5),-5);
>
> I believe that you can change the code to:
>
> a = MA(ROC(C, 5), 5);
> aa = Ref(a , -5);
>
> Besides being a bit simpler (I like simple),
I think it will run a
> bit faster because the "a..." array
variables have already been
> set. It doesn't need to recalculate
"MA(ROC...".
>
> I made the change in the code and got the
same output. What do you
> think?
>
>
> Some thoughts on using the results...
>
> One of the things that I'm thinking about is
to categorize Sectors
> and Industries with this code.
The categories might be:
>
> Strong
> Strong getting weaker
> Weak
> Weak getting stronger
>
> Then, based on the categorization, copy the
sector and industry
> symbols into Watchlists with the same
names. Since stock symbols
> are mapped to industry and sector symbols,
they can be used in
stock
> scans and run fast.
>
> For example, find stocks where:
>
> 1) long term price trend is UP, and
> 2) short term price trend is DOWN, and
> 3) money flow indicators (OBV, A/D, Twiggs,
etc.) are UP, and
> 4) stock's Industry is in the "Weak
getting stronger" Watchlist,
and
> 5) stock's Sector is in the "Weak
getting stronger" Watchlist.
>
> I think the logic wouldn't be boolean, but a
weighting structure
> like you have. E.g., maybe give it 10
points for each of the
> criteria it meets. There are obviously
lot's of variations, but in
> general, more points = better potential.
>
> What do you think?
>
> Regards,
>
> Dan.
>
> --- In amibroker@xxxxxxxxxxxxxxx, Jason Hart
<jayhart_1972@xxxx>
> wrote:
> >
> > Dan,
> >
> > The full code is listed below.
This is a "dashboard" so to speak
> of what the different sectors are doing, a
top down look. I'm more
> of a top down investor vs bottom up so this
fits my style better.
> What I typically do is run it against an ETF
watchlist of about 150
> different ETFs and then I'll also run it
against a WL that has 450
> of my favorite mutual funds.
> >
> > This is more of a rotational trading
tool. I don't use this
> exploration with individual stocks, I think
it is more useful for
> ETFs and funds. What I'll try to do
with this code is to invest in
> 3-5 ETFs/Funds that are in the top 25% in
terms of strength.
> However, if you want more octane and less
diversification, you can
> also see which sector funds/ETFs are the
strongest and buy the
> individual stocks that these funds hold.
> >
> > The code is still a work in progress but
I'll explain what some
of
> the outputs are. The first column
"TotalB" is derived from
> differing ROC periods and where the ETF is
trading relative to
> different MAs. If it is trading above
MAs it gets more points and
> vice versa. I was comparing it to other
indicators and it is very
> similar to Martin Pring's "KST"
indicator.
> >
> > RSC is similar to TotalB but it
incorporates some other momentum
> components into the ranking. I'm still
working on this one
> >
> > "B -10" is what the TotalB was
10 days ago and the "difference"
> column is the difference between the two
columns. What I look for
> in the difference column is maybe some bottom
feeding opportunities
> where there is a big swing in the score of an
ETF that has been
> struggling. I haven't looked into how
effective this is in great
> detail. A current example is the BHH
ETF but I'm not to keen on
the
> sector.
> >
> > Then the RS columns list current RS, RS
10 days ago and RS 20
days
> ago. If the RS is greater than the
previous n periods it is green
> and if the RS is lower then it is RED.
> >
> > "ST SD"
is a shorter term measure of standard deviation and then
> the "hist SD" is the short term
less the historical StDev. Thus,
if
> you get a negative value in the "hist
SD" column then the security
> is trading at a lower volatility level
relative to its historical
> average. I like these two columns b/c
they can help determine your
> asset weightings. Say you have two
investment candidates: security
> one with a SD over 30 and the second at a SD
of 15.....then you can
> weight your decisions based on how much
octane you want. If you
> want less octane you could do a 75% / 25%
security2 / security 1
> weighting. Or if you want more octane
have a greater weighting in
> security 1 with the 30 SD.
> >
> > The ROC columns are for visual purposes
and can help you quickly
> determine how strong a stock is. If all
three ROC columns are
green
> then the security is strong. What I do
here is look at the shorter
> term ROC. Say the longer term ROCs are
green but the shorter term
> ROC is yellow or Red then that could be an
indication that the
> current trend is weakening or there is a
change in trend altogether
> on the horizon.....then the opposite is
true. If LT ROCs are red
> but the ST ROC is yellow or green then it is
showing ST strength
and
> it could be reversing.
> >
> > YTD, 30D%, 10d%, etc are the % change
for those periods
> >
> > SPX and Nasdaq columns are the
securities correlation to the S&P
> 500 and Nasdaq composite
> >
> > Finally EMA 170 & 50: shows if
the security is rising relative
to
> its 170 and 50 day MAs. If it is 1 then
it is rising, if it is 0
> then the stock is falling relative to these
MAs.
> >
> > I think I got it all covered. Like
I said this is still a work
in
> progress and would appreciate any
feedback. The first few columns
> of the exploration are all relatively the
same. What I would like
> to do is incorporate some sort of ranking in
this scan the uses a
> combination of the three outputs. I
haven't figured out the
ranking
> part yet. I saw the "osaka plug in /
ranking" posts from last week
> but I haven't had time to work with them yet.
> >
> > Jason
> >
> > _______________________________
> >
> > //Filter=Cross(PDI(14),MDI(14)) AND
StochD(14) < 50;
> >
> > Filter = C > 0;
> >
> > a= MA(ROC(C,5),5);
> >
> > a1 = MA(ROC(C,10),5);
> >
> > a2= MA(ROC(C,20),5);
> >
> > a3=MA(ROC(C,50),5);
> >
> > a4=MA(ROC(C,100),5);
> >
> > a5 = MA(ROC(C,200),5);
> >
> > aa = Ref(MA(ROC(C,5),5),-5);
> >
> > aa1 = Ref(MA(ROC(C,10),5),-5);
> >
> > aa2 = Ref(MA(ROC(C,20),5),-5);
> >
> > aa3 = Ref(MA(ROC(C,50),5),-5);
> >
> > aa4 = Ref(MA(ROC(C,100),5),-5);
> >
> > aa5 = Ref(MA(ROC(C,200),5),-5);
> >
> > ab = Ref(MA(ROC(C,5),5),-10);
> >
> > ab1 = Ref(MA(ROC(C,10),5),-10);
> >
> > ab2 = Ref(MA(ROC(C,20),5),-10);
> >
> > ab3 = Ref(MA(ROC(C,50),5),-10);
> >
> > ab4 = Ref(MA(ROC(C,100),5),-10);
> >
> > ab5= Ref(MA(ROC(C,200),5),-10);
> >
> >
> >
> > x0 = (a+aa+ab)*.35;
> >
> > x1 = (a1+aa1+ab1)*.65;
> >
> > x2 = (a2+aa2+ab2)*(1.65);
> >
> > x3 = (a3+aa3+ab3)*(1.75);
> >
> > x4 = (a4+aa4+ab4)*(1.5);
> >
> > x5 = (a5+aa5+ab5)*(.65);
> >
> > b = (C - MA(C,20))/C;
> >
> > b1 = (C-MA(C,50))/C;
> >
> > b2 = (C-MA(C,100))/C;
> >
> > b3 = (C-MA(C,200))/C;
> >
> > bb = (b*1.7)*100;
> >
> > bb1 = (b1*2.0)*100;
> >
> > bb2 = (b2*1.2)*100;
> >
> > bb3 = (b3*(1.2))*100;
> >
> > z = x0+x1+x2+x3+x4+x5+bb+bb1+bb2+bb3;
> >
> > b = 1041231;
> >
> > a=DateNum()==b;
> >
> > i=ValueWhen(a,C);
> >
> > ii = ((C-i)/i)*100;
> >
> > week = ((C - Ref(C,-5))/ Ref(C,-5))*100;
> >
> > Mth = ((C- Ref(C,-30))/Ref(C,-30))*100;
> >
> > tenday = ((C -
Ref(C,-10))/Ref(C,-10))*100;
> >
> > Oneday = ((C -
Ref(C,-1))/Ref(C,-1))*100;
> >
> > j = Foreign("!spx", "c");
> >
> > j1 = RelStrength("!spx");
> >
> > j2 =
RelStrength("!spx")/Ref(j1,-20);
> >
> > j3 =
RelStrength("!spx")/Ref(j1,-30);
> >
> > j4 =
RelStrength("!spx")/Ref(j1,-50);
> >
> > j5 =
RelStrength("!spx")/Ref(j1,-100);
> >
> > j6 = RelStrength("!spx")/Ref(j1,-120);
> >
> > j7 =
RelStrength("!spx")/Ref(j1,-150);
> >
> > j8 =
RelStrength("!spx")/Ref(j1,-200);
> >
> > mamPeriod = 13;
> >
> > mam = 100*(Close/MA(Close, (2*mamPeriod)
+1) -1);
> >
> > mom= MA(MAm,5)*100;
> >
> > vol1 = StDev(log(C/Ref(C,-1)),720) *
sqrt(260)*100;
> >
> > vol2 = StDev(log(C/Ref(C,-1)),20) *
sqrt(260)*100;
> >
> > vol3 = StDev(log(C/Ref(C,-1)),50) *
sqrt(260)*100;
> >
> > vol4 = StDev(log(C/Ref(C,-1)),90) *
sqrt(260)*100;
> >
> > Vol5 = (Vol2 + Vol3+ Vol4)/3;
> >
> > Vol6 = Vol5-Vol1;
> >
> > Final = (j2*1) + (j3*1.2) +
(j4*1.3)+(j5*1.4) + (j6*1.5) +
> (j7*1.7) + (j8*1.7);
> >
> > Combined = (.50*final)+(.5*z);
> >
> > CombinedI= (.35*final)+(.35*z)+(.3*mom);
> >
> > CombinedII=MA(CombinedI,25);
> >
> >
> >
> > //Filter = CombinedI > CombinedII AND
Cross(PDI(14),MDI(14)) AND
z-
> Ref(z,-5) > 20;
> >
> > //Filter = final > 10 AND
Cross(PDI(14),MDI(14));
> >
> > PositionSize = -25;
> >
> > Buy = final > 10 AND
Cross(PDI(14),MDI(14)) AND z-Ref(z,-10) > 15
> AND ADX(14) > Ref(ADX(14),-5);
> >
> > Sell = Cross(MDI(14),PDI(14)) OR
Cross(Signal(),MACD());
> >
> > ApplyStop( stopTypeNBar, stopModeBars,
70, True );
> >
> >
AddTextColumn(FullName(),"Name",5);
> >
> > ro11 = MA(ROC(C,20),10);
> >
> > ro1 = MA(ROC(C,50),10);
> >
> > ro2 = MA(ROC(C,120),10);
> >
> > AddColumn(z,"TotalB");
> >
> > AddColumn(CombinedII,"RSC");
> >
> > AddColumn(Ref(z,-10), "B -10
dys");
> >
> > AddColumn(z-Ref(z,-10),
"difference");
> >
> >
AddColumn(final,"RS",1.2,colorDefault,IIf(final==0,colorBlue,IIf
>
(final>=Ref(final,-10),colorGreen,colorRed)));
> >
> > AddColumn(Ref(final,-10),"10
days",1.2,colorDefault,IIf
>
(final==0,colorBlue,IIf(Ref(final,-10)>=Ref(final,-
> 20),colorGreen,colorRed)));
> >
> > AddColumn(Ref(final,-20),"20
days",1.2,colorDefault,IIf
>
(final==0,colorBlue,IIf(Ref(final,-20)>=Ref(final,-
> 30),colorGreen,colorRed)));
> >
> > AddColumn(Vol5,"ST SD");
> >
> > AddColumn(vol6,"Hist SD");
> >
> > AddColumn(ro11,
"ROC20",1.2,colorDefault,IIf(ro11>0 AND
> ro11<5,colorYellow,IIf(ro11 > 5
,colorGreen,colorRed)));
> >
> >
> >
> >
> >
> > AddColumn(ro1,
"ROC50",1.2,colorDefault,IIf(ro1>0 AND
> ro1<5,colorYellow,IIf(ro1 > 5
,colorGreen,colorRed)));
> >
> > AddColumn(ro2,
"ROC120",1.2,colorDefault,IIf(ro2>0 AND
> ro2<5 ,colorYellow,IIf(ro2 > 5
,colorGreen,colorRed)));
> >
> > AddColumn(ii,
"YTD%",1.2,colorDefault,IIf(ii>
> 0 ,colorGreen,colorRed));
> >
> > AddColumn(Mth, "30d
%",1.2,colorDefault,IIf(Mth>
> 0 ,colorGreen,colorRed));
> >
> > AddColumn(tenday, "10d
%",1.2,colorDefault,IIf(tenday > 0.005 AND
> tenday < 0.009 ,colorYellow,IIf(tenday
> 0 ,colorGreen,colorRed)));
> >
> > AddColumn(week, "5d
%",1.2,colorDefault,IIf(week > 0.005 AND week
> < 0.009 ,colorYellow,IIf(week > 0
,colorGreen,colorRed)));
> >
> > AddColumn(oneDay, "1d
%",1.2,colorDefault,IIf(oneDay > 0.005 AND
> oneDay < 0.009 ,colorYellow,IIf(oneDay
> 0 ,colorGreen,colorRed)));
> >
> >
RS1=Foreign("!spx","C");
> >
> > RS2 =
Foreign("!comp","C");
> >
> > Corr1 = ROC(RS1,1);
> >
> > Corr2 = ROC(C,1);
> >
> > Corr3 = ROC(RS2,1);
> >
> > Corr4 = ROC(C,1);
> >
> >
> >
> > test=Correlation(corr1,Corr2,20);
> >
> > test1=Correlation(Corr3,Corr4,30);
> >
> > test=Correlation(Corr1,Corr2,125);
> >
> > test1=Correlation(Corr3,Corr4,125);
> >
> > AddColumn(test,"SPX");
> >
> > AddColumn(test1,"Nasdaq");
> >
> > rising = EMA(C,170) >
Ref(EMA(C,170),-47);
> >
> > rising1 = EMA(C,50) >
Ref(EMA(C,50),-25);
> >
> > rising ==1;
> >
> > rising1==1;
> >
> > AddColumn(rising,"ema 170");
> >
> > AddColumn(rising1,"ema 50");
> >
> >
> >
> >
> > __________________________________________________
> > Do You Yahoo!?
> > Tired of spam? Yahoo! Mail has the
best spam protection around
> > http://mail.yahoo.com
>
>
>
>
>
> Please note that this group is for discussion
between users only.
>
> To get support from AmiBroker please send an
e-mail directly to
> SUPPORT {at} amibroker.com
>
> For other support material please check also:
> http://www.amibroker.com/support.html
>
>
> Yahoo! Groups Links
Please note
that this group is for discussion between users only.
To get support from AmiBroker please send an
e-mail directly to
SUPPORT {at} amibroker.com
For other support material please check also:
http://www.amibroker.com/support.html
---- LSpots keywords ?>---- HM ADS ?>
Please note that this group is for discussion between users only.
To get support from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
For other support material please check also:
http://www.amibroker.com/support.html
---- LSpots keywords ?>
---- HM ADS ?>
YAHOO! GROUPS LINKS