Finance-Quant

 view release on metacpan or  search on metacpan

lib/Finance/Quant.pm  view on Meta::CPAN

use Carp;
use File::Copy;
use Data::Dumper;
use File::Spec::Functions;
use File::Path;
use Time::Local;
use File::Fetch;
use HTML::TreeBuilder;
use Text::Buffer;
use File::Find;
use Finance::Optical::StrongBuy;
use MIME::Base64;
use GD::Graph::lines;
use Finance::Quant;
use Statistics::Basic qw(mean);
use List::Util qw(max min sum);

our $DEBUG = 10;
our $DEBUG_TO_SYSLOG=1;
our $LOGGER_EXE="/usr/bin/logger";
our @directories = qw(download ibes-strong-buy ratings symbols charts backtest);
our %files;
our $current="Finance-Quant";
our $dir = File::Spec->tmpdir();
our ($recurse, $name, $case,$linenums,$quick_start, $use_regex,$seeking,$textbuffer,$textview,$cancel) =(1,1,1,1,1,1,1,undef,undef); ##< patch

our $memd = new Cache::Memcached {
'servers' => [ "127.0.0.1:11211"],
'debug' => 0,
'compress_threshold' => 10_000,
} or warn($@);


our $sources = {
      'TIME_SALES'           => "http://www.nasdaq.com/symbol/%s/time-sales",
      'RT_QUOTE'             => "http://www.nasdaq.com/symbol/%s/real-time",
      'NASDAQ_SYMBOLS'       => "ftp://ftp.nasdaqtrader.com/symboldirectory/nasdaqlisted.txt",
      'NASDAQ_COMMUNITY'     => "http://www.nasdaq.com/symbol/%s/real-time",
      'IBES_ICON'            => "http://content.nasdaq.com/ibes/%s_Smallcon.jpg",
      'GURU'                 => "http://www.nasdaq.com/symbol/%s/guru-analysis",
      #'IBES_RECOMMENDATIONS' => "http://www.nasdaq.com/symbol/%s/recommendations",
      #'IBES_ANALYST'         => "http://www.nasdaq.com/symbol/%s/analyst-research",
      'YAHOO_CHART'          => "http://chart.finance.yahoo.com/z?s=%s&t=3m&q=c&l=on&z=l&p=b,p,v,m20&a=m26-12-9&lang=en-US&region=US"
    };
sub recommended {
    my $class = shift;
    my $config = {};
    my $self = $class->new($config);
       $self->{config}->{'ibes'} = {SP500=>1,NYSE=>1,AMEX=>0,NASDAQ=>1,CUSTOM=>0},
       $self->{config}->{'swing-entry'} = {DAX=>1,TECHDAX=>1,MDAX=>1,SP500=>1};
       $self->{config}->{'sector-data'}         = 1;
       $self->{config}->{'markets'}             = 1;
       $self->{config}->{'yahoo-charts'}        = 1;
       $self->{config}->{'nasdaq-user-rating'}  = 1;
       $self->{config}->{'nasdaq-guru-rating'}  = 1;
       $self->{config}->{'sources'}  = $sources;
    $self->createDataDir();
    $self->_init();
    return $self;
}
sub updateSymbols {
    my $self = shift;
    $self->getNasdaqSymbols(File::Spec->tmpdir(),$self->{config}->{sources}->{NASDAQ_SYMBOLS});
}
sub _init{
    my $self = shift;
    $self->{config}->{sources} = $sources;
    my $syms = Finance::Quant::Symbols->new();
    my @DATA = @{$syms->{symbols}};
    
    foreach(@DATA){
      if(defined($self->{config}->{'ibes'}->{$_->[0]}) &&
         $self->{config}->{'ibes'}->{$_->[0]} == 1)  {
         $self->{config}->{'ibes'}->{$_->[0]} = $_->[1];
         if($_->[0] eq "NASDAQ"){
            $self->{config}->{'ibes'}->{NASDAQ}=$self->updateSymbols();
         }
      }
    }
    $self->{'sector-summary'} = {
        summary=>[Finance::Google::Sector::Mean::sectorsummary()],
        quotes=>[Finance::NASDAQ::Markets::sector()]
    } unless(!$self->{config}->{'sector-data'});
    $self->{'indices'} =  {
        quotes=>[Finance::NASDAQ::Markets::index()]
    }unless(!$self->{config}->{'markets'});
}



sub new {
    my $class = shift;
    my $symbol = shift;
    my $date = gmtime;
    my @e = split " ",$date;# =~ s/ /_/g;
  
    if(defined($e[2]) && (length $e[2]) == 1) {
      $e[2] = "0".$e[2];
    }
    my $downfolder  = "$e[4]-$e[1]-$e[2]"; 
    my $self = bless {
        config=>{'ibes'=>{CUSTOM=>$symbol},sources  => $sources},
        optical=>Finance::Optical::StrongBuy->new($dir),
        #testthread=>testthread->new($dir,10,$downfolder),
        downfolder=>$downfolder,
        dir=>$dir,
        date=>$date,
    }, $class;
#
#


    $self->{config}->{'nasdaq-guru-rating'}  = 1;
    $self->{textbuffer} = new Text::Buffer(-file=>'my.txt');
    
    $self->Dbg(2,"CREATED INSTANCE of $self");        
    
    return $self;
}




( run in 0.757 second using v1.01-cache-2.11-cpan-600a1bdf6e4 )