App-Chart

 view release on metacpan or  search on metacpan

lib/App/Chart/Suffix/LJ.pm  view on Meta::CPAN

                              tier             => 4,
                              type             => 4,
                              symbol           => 8,
                              isin             => 20,
                              name             => 40,
                              dividend         => '15.',
                              note_num         => 10,
                              average_price    => '15.',
                              change           => '15.',
                              percent_change   => '15.',
                              last_date        => 10,
                              bid              => '15.',
                              offer            => '15.',
                              high             => '15.',
                              low              => '15.',
                              open             => '15.',
                              close            => '15.',
                              volume           => 12,
                              volume_offmarket => 12,
                              turnover         => 12,
                              turnover_bas     => 12,
                              IF_1             => 15,
                              IF_2             => 15,
                              IF_percent       => 15,
                              note             => 10,
                              shares_issued    => 12,
                              dividend_date    => 10,
                              p_e              => 10,
                              principle        => 20,
                              interest         => 20,
                              coupon_num       => 5,
                              market_discount  => 15,
                              name_and_city    => 80,
                              trading_mode     => 5,
                              market_maker_cont => 5,
                              transactions      => 15,
                              num_units         => 15,
                              turnover_nonblock => 15);
      $elem = $L0020->($line);

      # bid/offer -1 for market order
      if ($elem->{'bid'}   eq '-1') { delete $elem->{'bid'}; }
      if ($elem->{'offer'} eq '-1') { delete $elem->{'offer'}; }

      # empty when no trades, show 0 instead of letting it go undef in
      # crunch_h() as if no data
      if ($elem->{'volume'} eq '') {
        $elem->{'volume'} = 0;
      }

      # dividend date is empty, apparently, otherwise would show "ex" as note
      #
      # other notes:
      # A - cross
      # B - block trades
      # o - utilized tax allowance
      # S - temporary suspension
      # Z - temporary halt
      # * - 10% limit move
      # NP - data not received
      # D - shareholders meeting will decide dividend
      # V - interim dividend
      # Q - P/E calculated prev year, without Q two years before
      #
      if ($elem->{'note'} =~ /Z/ || $elem->{'note'} =~ /S/) {
        $elem->{'halt'} = 1;
      }
      if ($elem->{'note'} =~ /\*/) {
        if ($elem->{'change'} >= 0) {
          $elem->{'limit_up'} = 1;
        } else {
          $elem->{'limit_down'} = 1;
        }
      }
      if ($elem->{'note'} =~ /D/) {
        $elem->{'dividend_to_be_advised'} = 1;
      }
    }

    if ($elem) {
      $elem->{'symbol'} .= '.LJ';

      # as of May 2007 the change field is empty, but the change % field is
      # supplied
      if ($elem->{'close'} ne ''
          && exists $elem->{'change'} && $elem->{'change'} eq '') {
        $elem->{'change'} = percent_change_to_change
          ($elem->{'close'}, $elem->{'percent_change'});
      }
      push @data, { %$elem };
    }
  }
  return $h;
}

sub make_parser {
  my @desc = @_;
  my @field_list;
  my @space_list;
  my @decimal_list;
  my $format = '';
  my $i = 0;
  while (@desc) {
    my $space_field = "space_$i";
    push @field_list, $space_field;
    push @space_list, $space_field;
    $i++;
    $format .= 'A1';

    my $field = shift @desc;
    push @field_list, $field;
    my $width = shift @desc;
    if ($width =~ s/\.$//) { push @decimal_list, $field; }
    $format .= "A$width";
  }
  return sub {
    my ($line) = @_;
    my %elem;
    @elem{@field_list} = unpack $format, $line;
    foreach (values %elem) {
      s/^ +//;



( run in 1.460 second using v1.01-cache-2.11-cpan-39bf76dae61 )