PureBytes Links
Trading Reference Links
|
I'm trying to combine two separate scans into an exploration that
will give me:
1. stocks fitting into a nice up-trending linear regression
channel and,
2. give me the relative strength of the sector for each of the
selections.
I'm the furthest thing from a programmer and have shamelessly lifted
the two programs below from the AFL Library (thanks to Pat Hargus &
Brian Mitchell for posting the code below-would never have cranked
that out myself)
My problem is-how do I get the Relative Strength program to take the
IndustryID number and generate a RS value based on all the 198
sectors in the QP3 universe (which I already have in a watchlist)??
Ideally, I would like to run the scan for stocks in a different
watchlist and then sort the picks by the Sector RS value. Since I
use QP3 I would somehow have to "tell" the program to add "!ID"
before the sector number.
The (hijacked) code is below; hopefully the solution is simple (I've
never managed to get my head around this ever-dreaded looping
business).
Many thanks in advance for any help rendered.
Chuck
//
LR Scan
SetBarsRequired(10000,10000);
P = ParamField("Price field",-1);
Daysback = Param("Period for Linear Regression Line",50,1,100,1);
shift = Param("Look back period",0,0,100,1);
// =============================== Math
Formula==============================================================
======
x = Cum(1);
lastx = LastValue( x ) - shift;
aa = LastValue( Ref(LinRegIntercept( p, Daysback), -shift) );
bb = LastValue( Ref(LinRegSlope( p, Daysback ), -shift) );
y = Aa + bb * ( x - (Lastx - DaysBack +1 ) );
LRLine = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y,
Null );
// ========================== compute 1st SD
Channel==============================================================
=
SDP = Param("Standard Deviation",1.5, 0, 6, 0.1);//Default=1.5
SD = SDP/2;
width = LastValue( Ref(SD*StDev(p, Daysback),-shift) ); // THIS IS
WHERE THE WIDTH OF THE CHANELS IS SET
SDU = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y+width ,
Null ) ;
SDL = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-width ,
Null ) ;
// ========================== Compute 2d SD
Channel==============================================================
==
SDP2 = Param("2d Standard Deviation",2.0, 0, 6, 0.1);//Default=2.0
SD2 = SDP2/2;
width2 = LastValue( Ref(SD2*StDev(p, Daysback),-shift) ); // THIS
IS WHERE THE WIDTH OF THE CHANELS IS SET
SDU2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx,
y+width2 , Null ) ;
SDL2 = IIf( x > (lastx - Daysback) AND BarIndex() < Lastx, y-
width2 , Null ) ;
// ============================ Buy/Sell
Criteria=============================================================
=======
Uplimit=Close<SDU2;
Lolimit=Close>SDL2;
Slope=(Y-Ref(Y,-Daysback))/Ref(Y,-Daysback);
C1=Sum(Uplimit,Daysback)==Daysback;
C2=Sum(Lolimit,Daysback)==Daysback;
C3=MA(Volume,10)>80000;//Volume filter
C4=Slope>0.03;//Slope filter
C5=(Low>Ref(Low,-1)) OR (Close>Ref(Close,-1));//want price just
starting up (today>yesterday)
C6=(C5 + Ref(Low, -2)>Ref(Low,-3)) OR (Ref(Close,-2)>Ref(Close,-
3));//this line looks for 2 sequential days up.(knocks out ~ 15% of
picks)
Buy=C1 AND C2 AND C3 AND C4 AND C5 AND C6;
//Sell=0;
//========================================================Below is
Sector Relative Strength
code=================================================================
======
EnableRotationalTrading();
SetOption("WorstRankHeld", 5);
PositionSize = -100;
PositionScore = 0;
WatchlistNum = 1;//Default is 1
Filter=1;//default is 1;
NumColumns=0;
function CalculatePosition(st, Lt1, Lt2, Lt3, Lt4, Lt5, Lt6)
{
score=0;
if(st > Lt1) score++;
if(st > Lt2) score++;
if(st > Lt3) score++;
if(st > Lt4) score++;
if(st > Lt5) score++;
if(st > Lt6) score++;
return score;
}
// walk through the watchlist grabbing all the symbols to calculate
RS vs ourself.
List =CategoryGetSymbols(categoryWatchlist, WatchlistNum);
for(i=0; (sym = StrExtract(List, i)) != "";i++)
{
if(sym != Name())
{
f = RelStrength(sym);
st3 = EMA(f, 3);
st5 = EMA(f, 5);
st8 = EMA(f, 8);
st12 = EMA(f, 12);
st15 = EMA(f, 15);
Lt30 = EMA(f, 30);
Lt35 = EMA(f, 35);
Lt40 = EMA(f, 40);
Lt45 = EMA(f, 45);
Lt50 = EMA(f, 50);
Lt60 = EMA(f, 60);
z=BarCount - 1;
// uncomment the following if you want to do some
backtesting or if you like waiting around
// a long time for the exploration to complete
//for(z=0;z < BarCount;z++)
{
PositionScore[z] = PositionScore[z] +
CalculatePosition(st3[z], Lt30[z],
Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
PositionScore[z] = PositionScore[z] +
CalculatePosition(st5[z], Lt30[z],
Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
PositionScore[z] = PositionScore[z] +
CalculatePosition(st8[z], Lt30[z],
Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
PositionScore[z] = PositionScore[z] +
CalculatePosition(st12[z], Lt30[z],
Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
PositionScore[z] = PositionScore[z] +
CalculatePosition(st15[z], Lt30[z],
Lt35[z], Lt40[z], Lt45[z], Lt50[z], Lt60[z]);
}
}
}
//AddTextColumn(FullName(), "Name");
//AddColumn(PositionScore[BarCount - 1], "RS");
//===================================================================
=======Explore===============================
Filter=Buy;
NumColumns=12;
Column0Name="Name";
Column0=FullName();
Column1Name="Sumuplimit";
Column1=Sum(uplimit,Daysback);
Column2Name="SumLoLimit";
Column2=Sum(Lolimit,Daysback);
Column3Name="Close";
Column3=Close;
Column4Name="Slope";
Column4=Slope;
Column5Name="1YrProjEPSGrowth";
Column5=GetExtraData("Yr1ProjEPSGrowth");
Column6Name="Price/Earn Growth";
Column6=GetExtraData("PEG");
Column7Name="Yesterday's Proximity";
Column7=Low/Ref(SDL2,-1);
Column8Name="Todays Proximity";
Column8=Low/SDL2;
Column9Name="Close>50DMA";
Column9=Sum(Close>MA(50,Close),Daysback);
Column10Name="Industry Name";
Column10=IndustryID(1);
Column11Name="Industry #";
Column11=IndustryID(0);
//AddTextColumn(FullName(), "Name");
AddColumn(PositionScore[BarCount - 1], "RS");
------------------------ Yahoo! Groups Sponsor --------------------~-->
Put more honey in your pocket. (money matters made easy).
http://us.click.yahoo.com/r7D80C/dlQLAA/cosFAA/GHeqlB/TM
--------------------------------------------------------------------~->
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
<*> 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/
|