PureBytes Links
Trading Reference Links
|
On Fri, 25 Apr 2003, Jim Bronke wrote:
> Wow,
>
> What a response! But I am in a stroller here. I would know how to run this
> if it meant cutting and pasting in to an Easylanguage program, but I am
> assuming that to use this I have to in some way load this in to a Perl
> program or editor?
>
> Jim
>
>
> : Hi Jim!
> :
> : On Fri, 25 Apr 2003, Jim Bronke wrote:
> :
> : > thanks Mike,
> : >
> : > I haven't used Perl, but I suppose I could learn. It would be good
> : > especially if I could save some money. Does this basicly mean I would
> run a
> : > loop that would enter the symbol and then write the response to my own
> text
> : > file?
> : >
> : > ----- Original Message -----
> : > From: "Mike Eggleston" <mikee@xxxxxxxxxxxx>
> : > To: "Jim Bronke" <jvbronke@xxxxxxxxxxx>
> : > Cc: <omega-list@xxxxxxxxxx>
> : > Sent: Friday, April 25, 2003 10:00 AM
> : > Subject: Re: Fundamentals in a TXT file
> : >
> : >
> : > : On Fri, 25 Apr 2003, Jim Bronke wrote:
> : > :
> : > : >
> : > : > Does anyone know of a good data service provider that can give their
> : > : > customers fundamental data for stocks in a text file. I would want
> it to
> : > be
> : > : > all in one file.
> : > : >
> : > :
> : > : Is yahoo's fundamental stock data good enough? You can easily pull the
> : > : data using perl, then write the data to disk.
> : > :
> : > : Mike
> : >
> : >
> : >
> :
> : Here is the basic code. This code accepts on the command line a list of
> : symbols you want to retrieve the fundamental data for. The script
> : pulls the data then writes that data to a local database. For what you
> : mentioned the latter part of the script is changed to write to a file
> : instead of to the database.
> :
> : First the unmodified script:
> :
> : -----------------
> : #!/usr/bin/perl
> :
> : # $Id: gi.pl,v 1.1 2001/04/24 12:17:23 mikee Exp mikee $
> : # $Log: gi.pl,v $
> : # Revision 1.1 2001/04/24 12:17:23 mikee
> : # Initial revision
> : #
> :
> : use Finance::Quote;
> : use Data::Dumper;
> : use DBI;
> : use Date::Manip;
> :
> : package gi;
> :
> : sub expand {
> : my($val) = shift;
> : $val =~ s/^\+//o;
> : if($val =~ /\d+B$/) {
> : $val =~ s/[,A-z]//g;
> : $val *= 1000000000;
> : } elsif($val =~ /\d+M$/) {
> : $val =~ s/[,A-z]//g;
> : $val *= 1000000;
> : } elsif($val =~ /\d+K$/) {
> : $val =~ s/[,A-z]//g;
> : $val *= 1000;
> : } elsif($val =~ /\d+\%$/) {
> : $val =~ s/[,A-z%]//g;
> : $val /= 100;
> : }
> : $val
> : }
> :
> : $dbh = DBI->connect("DBI:Pg:dbname=stocks", undef, undef, {'RaiseError' =>
> 1});
> :
> : $argv = join(' ', @ARGV);
> : $argv =~ tr/[a-z]/[A-Z]/;
> : @ARGV = split(' ', $argv);
> : $stmt = $dbh->prepare("select id from info where symbol = ?");
> : foreach $symbol (@ARGV) {
> : $rc = $stmt->execute($symbol);
> : if($rc > 0) {
> : warn "symbol '$symbol' found; symbol not inserted";
> : } else {
> : push(@symbols, $symbol);
> : }
> : }
> : $stmt->finish();
> :
> : $q = Finance::Quote->new();
> : %quotes = $q->yahoo(@symbols);
> :
> : $stmt = $dbh->prepare("insert into info (id, symbol, name, pe, eps, cap,
> low52, high52, "
> : . "dividend, earnings, avg_vol, pct_chg, net_chg, ask, bid, lastbid) "
> : . "values (nextval('infoseq'), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?,
> ?)");
> :
> : foreach $symbol (@symbols) {
> : print "$symbol\n";
> : @a = split(/\s*-\s*/o, $quotes{$symbol, 'year_range'});
> : $low52 = $a[0] =~ /^\d+\.\d+$/o ? $a[0] : 0;
> : $high52 = $a[1] =~ /^\d+\.\d+$/o ? $a[1] : 0;
> : my $key;
> : foreach $key (keys %quotes) {
> : $quotes{$key} = &expand($quotes{$key});
> : #print "$key = $quotes{$key}\n";
> : }
> : #print "\n";
> : $stmt->execute($symbol, $quotes{$symbol, 'name'}, $quotes{$symbol, 'pe'},
> : $quotes{$symbol, 'eps'},
> : $quotes{$symbol, 'cap'}, $low52, $high52, $quotes{$symbol, 'div'},
> : 0, $quotes{$symbol, 'avg_vol'}, $quotes{$symbol, 'p_change'},
> : $quotes{$symbol, 'net'},
> : $quotes{$symbol, 'ask'} ? $quotes{$symbol, 'ask'} : 0,
> : $quotes{$symbol, 'bid'} ? $quotes{$symbol, 'bid'} : 0,
> : $quotes{$symbol, 'last'});
> :
> : $stmt->finish();
> : }
> : $dbh->disconnect();
> :
> : -----------------
> :
> : Then the modified script. I have not tested this script.
> :
> : -----------------
> : #!/usr/bin/perl
> :
> : # $Id: gi.pl,v 1.1 2001/04/24 12:17:23 mikee Exp mikee $
> : # $Log: gi.pl,v $
> : # Revision 1.1 2001/04/24 12:17:23 mikee
> : # Initial revision
> : #
> :
> : use Finance::Quote;
> : use Data::Dumper;
> : use Date::Manip;
> :
> : package gi;
> :
> : sub expand {
> : my($val) = shift;
> : $val =~ s/^\+//o;
> : if($val =~ /\d+B$/) {
> : $val =~ s/[,A-z]//g;
> : $val *= 1000000000;
> : } elsif($val =~ /\d+M$/) {
> : $val =~ s/[,A-z]//g;
> : $val *= 1000000;
> : } elsif($val =~ /\d+K$/) {
> : $val =~ s/[,A-z]//g;
> : $val *= 1000;
> : } elsif($val =~ /\d+\%$/) {
> : $val =~ s/[,A-z%]//g;
> : $val /= 100;
> : }
> : $val
> : }
> :
> : $q = Finance::Quote->new();
> : %quotes = $q->yahoo(@ARGV);
> :
> : foreach $symbol (@ARGV) {
> : open(OUT, "> $symbol.fd") or die "$0: unable to write to file $symbol.df:
> $!";
> :
> : @a = split(/\s*-\s*/o, $quotes{$symbol, 'year_range'});
> : $low52 = $a[0] =~ /^\d+\.\d+$/o ? $a[0] : 0;
> : $high52 = $a[1] =~ /^\d+\.\d+$/o ? $a[1] : 0;
> : my $key;
> : foreach $key (keys %quotes) { # convert M to millions
> : $quotes{$key} = &expand($quotes{$key});
> : #print "$key = $quotes{$key}\n";
> : }
> : print OUT join("\n",
> : 'Name ' . $quotes{$symbol, 'name'},
> : 'PE ' . $quotes{$symbol, 'pe'},
> : 'EPS ' . $quotes{$symbol, 'eps'},
> : 'Cap ' . $quotes{$symbol, 'cap'},
> : 'Low52 ' . $low52,
> : 'High52 ' . $high52,
> : 'Dividend ' . $quotes{$symbol, 'div'},
> : 'AvgVol ' . $quotes{$symbol, 'avg_vol'},
> : 'PctChg ' . $quotes{$symbol, 'p_change'},
> : 'NetChg ' . $quotes{$symbol, 'net'},
> : 'Ask ' . $quotes{$symbol, 'ask'} ? $quotes{$symbol, 'ask'} : 0,
> : 'Bid ' . $quotes{$symbol, 'bid'} ? $quotes{$symbol, 'bid'} : 0,
> : 'Last ' . $quotes{$symbol, 'last'}), "\n";
> :
> : close OUT;
> : }
> : -----------------
> :
>
>
>
Pull a perl interpreter to your machine. Cut-n-paste this script to notepad
and to disk. Then run the script. The easiest way to pull a perl intrepreter
is going to http://www.cygnus.com and pulling setup.exe. In setup.exe let it
select the stuff it wants, but also make sure in the intrepreter section that
you select perl. The setup program will pull all the stuff and install it. It
will make a shortcut on your desktop. Starting that shortcut will start the
Bash command interpreter. Bash is the unix equivilant to cmd.exe in windows.
Decide where you want the files to be store. I will assume a c:\tmp directory.
Here's what you do:
$ cd /cygdrive/c
$ mkdir tmp
$ cd tmp
$ perl SYMBOLSCRIPT.pl F AMR MSFT SUNW LU XOM RHAT TXU
$ ls -l
you'll see files for each of the symbols. To get out of bash type exit.
Don't type the '$ ' for each command. The '$ ' is the unix form of a command
prompt (c:\ in dos).
Does that help?
Mike
|