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 )