PureBytes Links
Trading Reference Links
|
Graham,
Here is the original post to set this up....I had
this working before, but now I can not seem to get it working.
thanks
Anthony
From: Dimension
<dimension@xxxx> Date: Mon Nov 29, 2004 12:23 am
Subject: COM DLL to read fundamental data from web site
The
following dll will allow a user to pull financial data from various websites
for use in your AFL studies. Thanks to Anthony Faragasso, who had
asked about this and helped to create and test (since I don't have VB6 to
compile).
<<...>> <<...>>
Quick Start:
1) dowload the dll and save to some local direcotry 2) Register the dll.
>From Windows desktop: select Start->Run, then, in the dialogue that
appears type "regsvr32 <path to dll>". Where <path to dll>
is the where you saved the dll to (i.e. "regsvr32
C:\Amibroker\ComAddIns\SecurityFinancials.dll" ) regsvr32
D:\Program
Files\AmiBroker\Plugins\SecurityFinancials.dll
3) Download and save the
DataDefs.ini file. 4) Add the following snippet to your AFL code to test all
is well:
sf = CreateObject("SecurityFundamentals.Fundamentals");
//NOTE: 'C:\\Projects\\SecurityFundamentals\\DataDefs.ini' should be
changed to where ever you saved the DataDefs.ini
file
sf.scrapeFundamentals ("Yahoo",
"C:\\Projects\\SecurityFundamentals\\DataDefs.ini", Name ( ) ); flot =
sf.getData( "Float" ); pctInsdrHlds = sf.getData( "PctInsdrHld" ) ;
AddColumn( IIF( flot == "", null, flot ) , "Float" ); AddColumn( IIF(
pctInsdrHlds == "", null, pctInsdrHlds ) , "Insdr Holdings" ); Filter =
1;
More detailed docs...
Retrieving Fundamental data for a
Symbol in AFL: 1)There are a couple of ways to use this dll, you can set
indiviudal properties or you can use a one liner to tell the dll everything
it needs to know to read data from a sie. The easiest is probably just
using the one liner to tell the object everything it needs to know to
retrieve the desired data. To do this, you would call use the
scrapeFundamentals method.
2) scrapeFundamentals (<Site>,
<ConfigFile>, <Ticker>)
Site is the same of site entry in
the DataDefs file. Remember that the DataDefs.ini file allows you to
configure retrieval from different site. The sample DataDefs.ini file
contains Yahoo as an example, but you could add configure the dll to read
from other site as well. In the case of the sample DataDefs.ini file,
the value for <Site> would be "Yahoo". <ConfigFile> is the
path + file name of the config file that defines a site to look for data and
how to read the data from that site. The DataDefs.ini is an example file
that could be used here <Ticker> is the symbol we will be pulling
fundamental/financial data for 3) use getFloat(<data name>) method
to retrieve data defined in the DataDefs.ini file. 4) example of
usage in AFL:
sf =
CreateObject("SecurityFundamentals.Fundamentals"); sf.scrapeFundamentals ("Yahoo",
"C:\\Projects\\SecurityFundamentals\\DataDefs.ini", Name ());
flot = sf.getData( "Float"
); pctInsdrHlds = sf.getData(
"PctInsdrHld" ) ; AddColumn( IIF(
flot =="", null, flot ) ,
"Float"); AddColumn( IIF(
pctInsdrHlds =="", null, pctInsdrHlds ) , "Insdr Holdings");
Filter
= 1;
Modifying DataDefs to add additional dataItems: Data that will
be pulled are defined in the DataDefs.ini file. It is possible to pull
data from any site, as long as there is a way to identify how to parse that
data. In the sample DataDefs.ini file, I am using
finance.yahoo.com and there are some pre-loaded data reading instructions in
there already, but other data can be added. The best way to explain
how is to go thru an example.
Let's see how we can modify this file to
pull Market Cap shown here: http://finance.yahoo.com/q/ks?s=MSFT (Changes at each step are highlisted in bold)
1) Open the DataDef file: 2) Observe the what is the last line. In
the datadefs.ini file, the last data item was "Data8, Float". 3) Cut and
paste that line below the line starting with Data8, so you would end up
with: DATA8 = DivDate||| DT |||
Dividend Date.*?>.*?>(.*?)<
DATA8 = DivDate||| DT |||
Dividend Date.*?>.*?>(.*?)< 4) I now need to increment the data
number so it remains sequential. Change the last DATA8 to DATA9, so I would
end up with this:
DATA8 =
DivDate||| DT ||| Dividend Date.*?>.*?>(.*?)<
DATA9 = DivDate||| DT |||
Dividend Date.*?>.*?>(.*?)< 5) I am trying to scrape Market Cap, so
I need to give it a meaningful "identifier". Change DivDate to
something like "MarketCap" (this can be anything you want, but this value
will be what you use when you call getData("<dataitem>") from
AFL). So we end up with something
like:
DATA8 = DivDate||| DT
||| Dividend Date.*?>.*?>(.*?)<
DATA9 = MarketCap||| DT |||
Dividend Date.*?>.*?>(.*?)< 6) Next I need to define what can kind
of data I am reading. There are 4 types allowed: NUM, NUM_ABBR, PCT,
DT. NUM = numeric. PCT = a percentage data item. DT =
date. And NUM_ABBR are abbreviated numbers (where the number is
followed by a M (millions ) or B (billions). In the case of Market Cap
on the yahoo page, we see that it is one of those abbreviated numbers, so we
the datatype we want to use is NUM_ABBR. Cap I would change the
pattern string to:
DATA8 =
DivDate||| DT ||| Dividend Date.*?>.*?>(.*?)<
DATA9 = MarketCap||| NUM_ABBR |||
Market Cap.*?>.*?>(.*?)< 7) finally I need to tell the Fundamentals
object how to find MktCap. On the page at the URL above, we see that all
data are shown in a two column table. The left being the data name and the
right being the value. So for Market Cap I would change the pattern string
to:
DATA8 = DivDate||| DT
||| Dividend Date.*?>.*?>(.*?)<
DATA9 = MarketCap||| DT |||
Market Cap.*?>.*?>(.*?)< 8) Note: the app actually uses something
called regular rexpressions to do it's searches (that is what the last
paramter of each line is, a regular expression pattern). This is for
advanced users and is what allows flexibility in searching various
sites. However, I should note…this dll has only been tested on Yahoo's
site.
Sample INI FILE
DataDefs.ini
[Yahoo] URL =
"">http://finance.yahoo.com/q/ks?s= DATA0 = Float ||| NUM_ABBR |||
Float.*?>.*?>(.*?)< DATA1 = OutShares ||| NUM_ABBR ||| Shares
Outstanding.*?>.*?>(.*?)< DATA2 = Avg3MVolume ||| NUM ||| Average
Volume.*?3 month.*?>.*?>(.*?) < DATA3 = Avg10DVolume ||| NUM |||
Average Volume.*10 day.*?>.*?>(.*?)< DATA4 = PctInsdrHld ||| PCT |||
% Held by Insiders.*?>.*?>(.*?)< DATA5 = PctInstHld ||| PCT ||| %
Held by Institutions.*?>.*?>(.*?)< DATA6 = ShareShort ||| NUM_ABBR
||| Shares Short.*?>.*?>(.*?)< DATA7 = DivYield||| PCT ||| Dividend
Yield.*?>.*?>(.*?)< DATA8 = DivDate||| DT ||| Dividend
Date.*?>.*?>(.*?)<
----- Original Message -----
Sent: Sunday, January 08, 2006 9:20
PM
Subject: Re: [amibroker] Addcolumn
argument trouble
I can only guess not knowing what the function is you are
using to get Flot value If Flot can be "" then it is text, ion which
case you need addtextcolumn, and you would need use writeif not iif. Or if
it is numbers that appear as text then change it to a number strtonum,
then you can have it in addcolumn If it is numbers then flot cannot be
"", but would be null or zero
-- Cheers Graham AB-Write
>< Professional AFL Writing Service Yes, I write AFL code to your
requirements http://e-wire.net.au/~eb_kavan/ab_write.htm
On
1/9/06, Anthony Faragasso <ajf1111@xxxxxxxx> wrote: > >
Hello, > > Looking at the image file...can anyone point out the
problem in the 2 Addcolumn() lines...I can not seem to see
it.. > > Thank you > Anthony > > 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 > > > > > > >
SPONSORED LINKS > Investment management software Real estate investment
software Investment property software > Software support Real estate
investment analysis software Investment software > >
________________________________ YAHOO! GROUPS
LINKS > > > Visit your group "amibroker" on the
web. > > To unsubscribe from this group, send an email
to: > amibroker-unsubscribe@xxxxxxxxxxxxxxx > >
Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service. > To unsubscribe from this group, send an email
to: > amibroker-unsubscribe@xxxxxxxxxxxxxxx > >
Your use of Yahoo! Groups is subject to the Yahoo! Terms of
Service. > Your use of Yahoo! Groups is subject to the Yahoo!
Terms of Service. > >
________________________________
>
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
SPONSORED LINKS
YAHOO! GROUPS LINKS
|
|