PureBytes Links
Trading Reference Links
|
Yeah,
I´d be interested as well!
Jayson,
again: please allow one more day to appreciate (and
understand!) what you said!
Thaaaaaaannnxxxxx again a whole lot in the
meantime
Markus
<BLOCKQUOTE
>
----- Original Message -----
<DIV
>From:
<A title=jcasavant@xxxxxxxxxxxx
href="">Jayson
To: <A title=amibroker@xxxxxxxxxxxxxxx
href="">amibroker@xxxxxxxxxxxxxxx
Sent: Thursday, April 24, 2003 6:46
PM
Subject: RE: [amibroker] Re: Creating
IM200 indices - JAYSON
downhillspeedster<SPAN
class=865573316-24042003>,
<SPAN
class=865573316-24042003>
<FONT
color=#0000ff>Interesting. I
am unfamiliar with Fosbacks book. Could you perhaps summarize why this is the
Only correct way?
Jayson
<FONT face=Tahoma
size=2>-----Original Message-----From: downhillspeedster
[mailto:downhillspeedster@xxxxxxxxx]Sent: Thursday, April 24, 2003
11:19 AMTo: <A
href="">amibroker@xxxxxxxxxxxxxxxSubject:
[amibroker] Re: Creating IM200 indices - JAYSONHere
are two afl code fragments to create an index based on average day over
day % change of each component in the index and display the same index in
Indicator Builder. It is the only correct way to build an unweighted index
(see Fosback's classic 'Stock Market Logic' for more
info).Enjoy!downhillspeedsterAddtoComposite Code
Fragement to Create an Index// Here we do an arithmetic market
averageCompFlag = 3;Temp28 = "~" + MarketSymbol + "_Indx"
;CloseDelta = (C-Ref(C,-1))/Ref(C,-1);OpenDelta =
(O-C)/C;LowDelta = (L-C)/C;HighDelta =
(H-C)/C;AddToComposite(CloseDelta, Temp28 , "C" , flags =
LastValue(CompFlag)); AddToComposite(OpenDelta, Temp28 , "O" , flags =
LastValue(CompFlag)); AddToComposite(LowDelta, Temp28 , "L" , flags =
LastValue(CompFlag)); AddToComposite(HighDelta, Temp28 , "H" , flags =
LastValue(CompFlag)); // add one to Open Interest field (we use this
field as a totals counter)AddToComposite( 1, Temp28 , "I" , flags =
LastValue(CompFlag)); // ****Indicator Builder
code fragment for reconstructing the index:InitialIndexValue =
1000; // USER DEFINED INDEX INITIAL VALUE// set the value of the index for
the bar prior to the first bar_N(Temp = "~" + MarketSymbol + "_Indx"
); NoDataBit = IIf (IsEmpty(Foreign(Temp,"I")) OR
IsEmpty(Foreign(TempV,"C")) OR
(Foreign(Temp,"I")) == 0 OR (Foreign(TempV,"C")) == 0 , 1, 0
);IndxClose = IIf(NoDataBit, -1E10, (Foreign(Temp, "C")/
Foreign(Temp,"I")) ); IndxLow = IIf(NoDataBit, -1E10,
(Foreign(Temp, "L")/ Foreign(Temp,"I")) ); IndxHigh =
IIf(NoDataBit, -1E10, (Foreign(Temp, "H")/ Foreign(Temp,"I")) );
IndxOpen = IIf(NoDataBit, -1E10, (Foreign(Temp, "O")/
Foreign(Temp,"I")) ); EnableScript("VBscript");<%'
//VBscript code begins
here'
/********************************************************************************************/
'// set the value of the index for the first
barInitialIndexValue = AFL("InitialIndexValue")'// the below
error check fixes the scan if the current stock's first bar is > the
date range selected '// by the user as the first bar. Without this
error check, you get the run time error:'// 'subscript out of
range: k';'// The real solution is to change the current stock to a stock
with valid data for the date range selected vbStartBar =
AFL("mystartbar")If vbStartBar = 0 Then vbStartBar =
1End IfvbClose = AFL("IndxClose")vbOpen =
AFL("IndxOpen")vbLow = AFL("IndxLow")vbHigh = AFL("IndxHigh")vbVol
= AFL("IndxVol")ResultsClose = AFL("IndxClose")ResultsOpen =
AFL("IndxOpen")ResultsLow = AFL("IndxLow")ResultsHigh =
AFL("IndxHigh")ResultsVol = AFL("IndxVol")Redim
ResultsClose(Ubound(VbClose))Redim ResultsOpen(Ubound(VbClose))Redim
ResultsLow(Ubound(VbClose))Redim ResultsHigh(Ubound(VbClose))For m
= Lbound(VbClose) to (vbStartBar-2) Step 1 ResultsClose(m) =
InitialIndexValue ResultsOpen(m) = InitialIndexValue
ResultsLow(m) = InitialIndexValue ResultsHigh(m)
= InitialIndexValue Nextk = vbStartBar-1
ResultsClose(k) = (vbClose(k)+1)
*InitialIndexValueResultsOpen(k) =
(vbOpen(k)+1)*InitialIndexValueResultsLow(k) =
(vbLow(k)+1)*InitialIndexValueResultsHigh(k) =
(vbHigh(k)+1)*InitialIndexValueFor i = vbStartBar to Ubound(VbClose)
Step 1 ResultsClose(i) =
(vbClose(i)+1)*ResultsClose(i-1) ResultsOpen(i) =
(vbOpen(i)+1)*ResultsClose(i) ResultsLow(i) =
(vbLow(i)+1)*ResultsClose(i) ResultsHigh(i) =
(vbHigh(i)+1)*ResultsClose(i)Next AFL.Var("AvgClose") =
ResultsCloseAFL.Var("AvgOpen") = ResultsOpenAFL.Var("AvgLow") =
ResultsLowAFL.Var("AvgHigh") = ResultsHigh'//
********************************************************************************************/
%>PlotOHLC( AvgOpen, AvgHigh, AvgLow, AvgClose, " ",
color=BarColors, ) ; --- In
amibroker@xxxxxxxxxxxxxxx, "Jayson" <jcasavant@xxxx> wrote:>
> Markus,> > see answers below...> > Hello
Jayson,> > don´t ya worry!> > You´ve already
helped me a great deal in understanding the "basix" of>
Addtocomposite.> > 1./ somehow my indices have been stored in
-->markets-->market253 AND group> 253. While I understand the
latter, I don´t understand the former. Is this a> MUST?>
> I think markets 253 is equivalent to All your stocks and tickers. I
am not> sure what you are doing but I tend to break that group into
watch lists for> testing and explorations. For instance you could
create a watch list of Nas> 100 stocks. This watchlist would
contain stocks that reside in the new list> AND market
253........> > 2./ I used the "x" option for the field code,
figuring that would enable me> to make a bar chart from it (since
OHLC are updated). But this is NOT the> case. I get only. No way to
produce a bar chart as in HGS/QP2 from it?? I> thought of
generating 4 ATC´s (one for Open, one for High etc.) but how to>
bring those together in one index bar for each trading day> (((
> > Yes you may plot candles but think about what you were
trying to do....> > AddToComposite(C,sym,"X");
would not this populate closing value through out all the fields?
try......> > > AddToComposite(C,sym,"C");>
AddToComposite(O,sym,"O");> AddToComposite(H,sym,"H");>
AddToComposite(L,sym,"L");> AddToComposite(1,sym,"V"); >
> Plotting your ticker now will show the appropriate OHLC data.
Unfortunately if you have any holes in your data they may cause
misleading candles. By dividing the values by the number of
calculations in each composite you can smooth these errors. To plot
this create a custom indicator> > > C= c /V;>
O= o /V;> H= h /V;> L= L /V;> > Plot(C,"Sector
Index",colorWhite,styleCandle);> > or better yet..If you want to
plot your index in the same chart as a component stock try........>
> sym="~"+SectorID(1);> C=Foreign(sym,"C")/V;>
O=Foreign(sym,"o")/V;> H=Foreign(sym,"h")/V;>
L=Foreign(sym,"l")/V;> > Plot(C,"Sector
Index",colorWhite,styleCandle); For separate window or
add |styleownscale for the same window > > AB will determine
what sector (or industry in your case) the stock belongs to then
automatically plot the index for that stock. I use this approach daily to
compare the stocks RSI and the sectors or the stocks momentum and the
sectors or to measure the stocks correlation to the sectors etc>
> > > > > 3./ It
makes me wonder that the newly created indices (in our case the IM200´s)
have to be updated EVERY day MANULY(running the scan). Is there no
workaround for this (i.e. store the calculated day somewhere and onl
update the LAST session as with regular stock data??). > >
The calculations needed require a look at your whole universe. Just save
your scan and run it... think of it as part 2 of your daily update. It
take but a moment. IMO this feature alone is worth the price of admission
to AB. I used to do all this work as a QP scan then export to excel, sort,
calculate and import to metastock. If I missed a day I had to rewrite the
scan to get yesterdays data etc, etc. With AB the composite is re-created
each day so if I miss a day, no problem. If QP makes an adjustment, no
problem. > > I have one scan that creates all my sector
composites, all my industry composites, and several market breadth
composites. It takes my old P600 system about 2 minutes to do the work
then AB even sends them to the appropriate watch list for further
analysis. Super feature........> > Regards,> >
jayson > > Highly appreciate your help!!!!>
> Thanx> > Markus> -----
Original Message ----- > From: Jayson >
To: amibroker@xxxxxxxxxxxxxxx > Sent: Thursday, April 24,
2003 6:38 AM> Subject: RE: [amibroker] Creating IM200
indices - JAYSON> > >
JMarkus,> > I have been gone most
of the afternoon. Sorry to leave you hanging. Answers below......>
> Jayson > -----Original
Message-----> From: funnybiz@xxxx
[mailto:funnybiz@xxxx]> Sent: Wednesday, April 23, 2003
5:26 PM> To: amibroker@xxxxxxxxxxxxxxx>
Subject: Re: [amibroker] Creating IM200 indices - JAYSON> >
> Anthony,> > thanks for
s> tepping in here.> > If I may:>
> 1./ does Jayson´s SYM variable refer to the array part of
the> addtocomposite> function. If so, why is it not
put in parenthesis (though this results in> an>
error).> > The line> >
sym="~"+sectorid(1)> > looks at each stock you scan
and places "~" + the sector ID for that stock> in its place. If,
for instance the stock resides in the Utilities Sector> then AB
notes this and returns sym= "~Utilities". Addtocomposite grabs
this> shorthand and Therefore the next line>
AddToComposite(C,sym ,"C"); becomes
addtocomposite(c,"~utilities","C");> > This is
repeated for each stock scanned. addtocomposite then simply looks>
to the stocks sectorid and places the data in the appropriate ticker>
> > > > 2./ sym="~"+SectorID(1);//
this does sectors for industry groups use>
industryid(0)> I don´t understand Jayson´s remark here:
WHICH stocks does that include? I> want to include all
stocks belonging to the same of the 200 industry> groups.>
> Sectorid(1) returns the 12 sectors (Capital goods,
utilities, financials> etc) If you want industry groups then
replace that line with> >
sym="~"+industryID(1);> > Ab will look at all the
stocks in your scan. All the stocks with with the> same industryID
will be counted in the appropriate composite Ticker.>
> 3./ if I wanted to create an index for all the 200 used
industry groups> (Quotes Plus Two), would I have to
write this code 200 times??> > No... See above... AB
does all the grunt work for you...> > 4./ would I
have to run the scan EVEREY day to bring my Addtocomposites
up> to date?> > Yes. the scan
will create/update all 200 industry groups and store them in> group
253 (the default location for your Composites. You may also create>
watch lists of these tickers to separate them. For instance I have a>
watchlist with just the 12 sectors, a second for the industry group
tickers> etc....> > 5./ I added "flag=16"
which gave me an error. How do I have to specify if>
I> want to use addtocomposite in exploration mode?>
> flag=16 is a description.... just add comma
16> AddToComposite(C,sym ,"C" ,16 );> >
> > Many thanks for your help!>
> Markus> > ----- Original
Message -----> From: "Anthony Faragasso"
<ajf1111@xxxx>> To:
<amibroker@xxxxxxxxxxxxxxx>> Sent: Wednesday, April
23, 2003 8:37 PM> Subject: Re: [amibroker] Creating IM200
indices - JAYSON> > > > Also...do not
forget to add this dummy line...which is needed for>
scanning.> >> >
Buy=0;> >> >>
>> > Send BUG REPORTS to
bugs@xxxx> > Send SUGGESTIONS to
suggest@xxxx> >
-----------------------------------------> > Post
AmiQuote-related messages ONLY to:
amiquote@xxxxxxxxxxxxxxx> > (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)>
> --------------------------------------------> >
Check group FAQ at:> <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html>
>> > Your use of Yahoo! Groups is subject to>
<A
href="">http://docs.yahoo.com/info/terms/>
>> >> > > >
> Send BUG REPORTS to bugs@xxxx> Send
SUGGESTIONS to suggest@xxxx>
-----------------------------------------> Post
AmiQuote-related messages ONLY to:
amiquote@xxxxxxxxxxxxxxx> (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)>
--------------------------------------------> Check group
FAQ at:> <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms
of Service.> > > Send BUG REPORTS to
bugs@xxxx> Send SUGGESTIONS to
suggest@xxxx>
-----------------------------------------> Post
AmiQuote-related messages ONLY to:
amiquote@xxxxxxxxxxxxxxx> (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)>
--------------------------------------------> Check group
FAQ at:> <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms
of Service.> > >
Yahoo! Groups Sponsor> > > > > >
Send BUG REPORTS to bugs@xxxx> Send SUGGESTIONS to suggest@xxxx>
-----------------------------------------> Post AmiQuote-related
messages ONLY to: amiquote@xxxxxxxxxxxxxxx> (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)>
--------------------------------------------> Check group FAQ
at:> <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html>
> Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service.Send BUG REPORTS to
bugs@xxxxxxxxxxxxxSend SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the <A
href="">Yahoo! Terms of Service.
Send
BUG REPORTS to bugs@xxxxxxxxxxxxxSend SUGGESTIONS to
suggest@xxxxxxxxxxxxx-----------------------------------------Post
AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx (Web page: <A
href="">http://groups.yahoo.com/group/amiquote/messages/)--------------------------------------------Check
group FAQ at: <A
href="">http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the <A
href="">Yahoo! Terms of Service.
Yahoo! Groups Sponsor
Send BUG REPORTS to bugs@xxxxxxxxxxxxx
Send SUGGESTIONS to suggest@xxxxxxxxxxxxx
-----------------------------------------
Post AmiQuote-related messages ONLY to: amiquote@xxxxxxxxxxxxxxx
(Web page: http://groups.yahoo.com/group/amiquote/messages/)
--------------------------------------------
Check group FAQ at: http://groups.yahoo.com/group/amibroker/files/groupfaq.html
Your use of Yahoo! Groups is subject to the Yahoo! Terms of Service.
|