[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Fundamentals in a TXT file



PureBytes Links

Trading Reference Links

yes,

That will get me started,

thanks.

jb
----- Original Message -----
From: "Mike Eggleston" <mikee@xxxxxxxxxxxx>
To: "Jim Bronke" <jvbronke@xxxxxxxxxxx>
Cc: <omega-list@xxxxxxxxxx>
Sent: Friday, April 25, 2003 11:24 AM
Subject: Re: Fundamentals in a TXT file


: 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