App-idxdb
view release on metacpan or search on metacpan
- [ux] Add shortcut alias -g for --graph.
- [dox] Update example in Synopsis.
0.006 2021-06-17 Released-By: PERLANCAR; Urgency: medium
- Add subcommand: stocks-by-foreign-ownership.
- [ux] Replace usage of DateTime outside of functions with
Time::Local::More, to reduce startup overhead for tab completion.
- [ux] [subcommand daily] Add option --fields-price-and-afnb (Close
and AccumForeignNetBuy).
0.005 2021-06-16 Released-By: PERLANCAR; Urgency: medium
- [ux] [subcommand daily] Use secondary y axes for fields 2, 3, ...
so we can plot different scales e.g. closing price (3000-5000) vs
"Data::Sah::Coerce::perl::To_date::From_obj::time_moment" : "0",
"Data::Sah::Coerce::perl::To_date::From_str::iso8601" : "0",
"Data::Sah::Coerce::perl::To_date::From_str::natural" : "0",
"Data::Sah::Compiler::perl::TH::array" : "0.907",
"Data::Sah::Compiler::perl::TH::bool" : "0.907",
"Data::Sah::Compiler::perl::TH::date" : "0.907",
"Data::Sah::Compiler::perl::TH::str" : "0.907",
"Data::Sah::Filter::perl::Finance::SE::IDX::check_stock_code_listed" : "0",
"Data::Sah::Filter::perl::Path::expand_tilde_when_on_unix" : "0",
"Data::Sah::Filter::perl::Path::strip_slashes_when_on_unix" : "0",
"DateTime" : "0",
"File::HomeDir" : "0",
"File::Temp" : "0.2307",
"File::chdir" : "0",
"JSON::MaybeXS" : "0",
"Log::ger" : "0.038",
"Perinci::CmdLine::Any" : "0",
"Sah::Schema::dirname" : "0",
"Sah::Schema::idx::listed_stock_code" : "0",
"Time::Local::More" : "0",
"perl" : "5.010001",
Data::Sah::Coerce::perl::To_date::From_obj::time_moment: '0'
Data::Sah::Coerce::perl::To_date::From_str::iso8601: '0'
Data::Sah::Coerce::perl::To_date::From_str::natural: '0'
Data::Sah::Compiler::perl::TH::array: '0.907'
Data::Sah::Compiler::perl::TH::bool: '0.907'
Data::Sah::Compiler::perl::TH::date: '0.907'
Data::Sah::Compiler::perl::TH::str: '0.907'
Data::Sah::Filter::perl::Finance::SE::IDX::check_stock_code_listed: '0'
Data::Sah::Filter::perl::Path::expand_tilde_when_on_unix: '0'
Data::Sah::Filter::perl::Path::strip_slashes_when_on_unix: '0'
DateTime: '0'
File::HomeDir: '0'
File::Temp: '0.2307'
File::chdir: '0'
JSON::MaybeXS: '0'
Log::ger: '0.038'
Perinci::CmdLine::Any: '0'
Sah::Schema::dirname: '0'
Sah::Schema::idx::listed_stock_code: '0'
Time::Local::More: '0'
perl: '5.010001'
Makefile.PL view on Meta::CPAN
"Data::Sah::Coerce::perl::To_date::From_obj::time_moment" => 0,
"Data::Sah::Coerce::perl::To_date::From_str::iso8601" => 0,
"Data::Sah::Coerce::perl::To_date::From_str::natural" => 0,
"Data::Sah::Compiler::perl::TH::array" => "0.907",
"Data::Sah::Compiler::perl::TH::bool" => "0.907",
"Data::Sah::Compiler::perl::TH::date" => "0.907",
"Data::Sah::Compiler::perl::TH::str" => "0.907",
"Data::Sah::Filter::perl::Finance::SE::IDX::check_stock_code_listed" => 0,
"Data::Sah::Filter::perl::Path::expand_tilde_when_on_unix" => 0,
"Data::Sah::Filter::perl::Path::strip_slashes_when_on_unix" => 0,
"DateTime" => 0,
"File::HomeDir" => 0,
"File::Temp" => "0.2307",
"File::chdir" => 0,
"JSON::MaybeXS" => 0,
"Log::ger" => "0.038",
"Perinci::CmdLine::Any" => 0,
"Sah::Schema::dirname" => 0,
"Sah::Schema::idx::listed_stock_code" => 0,
"Time::Local::More" => 0,
"strict" => 0,
Makefile.PL view on Meta::CPAN
"Data::Sah::Coerce::perl::To_date::From_obj::time_moment" => 0,
"Data::Sah::Coerce::perl::To_date::From_str::iso8601" => 0,
"Data::Sah::Coerce::perl::To_date::From_str::natural" => 0,
"Data::Sah::Compiler::perl::TH::array" => "0.907",
"Data::Sah::Compiler::perl::TH::bool" => "0.907",
"Data::Sah::Compiler::perl::TH::date" => "0.907",
"Data::Sah::Compiler::perl::TH::str" => "0.907",
"Data::Sah::Filter::perl::Finance::SE::IDX::check_stock_code_listed" => 0,
"Data::Sah::Filter::perl::Path::expand_tilde_when_on_unix" => 0,
"Data::Sah::Filter::perl::Path::strip_slashes_when_on_unix" => 0,
"DateTime" => 0,
"File::HomeDir" => 0,
"File::Spec" => 0,
"File::Temp" => "0.2307",
"File::chdir" => 0,
"IO::Handle" => 0,
"IPC::Open3" => 0,
"JSON::MaybeXS" => 0,
"Log::ger" => "0.038",
"Perinci::CmdLine::Any" => 0,
"Sah::Schema::dirname" => 0,
:version=0.604
[Prereqs]
perl=5.010001
strict=0
warnings=0
Browser::Open=0
Chart::Gnuplot=0
Color::RGB::Util=0.600
ColorTheme::Distinct::WhiteBG=0
DateTime=0
;!lint_prereqs assume-used "undetected"
DBD::SQLite=0
DBI=0
DBIx::Util::Schema=0
File::chdir=0
File::HomeDir=0
File::Temp=0.2307
JSON::MaybeXS=0
Log::ger=0.038
Perinci::CmdLine::Any=0
lib/App/idxdb.pm view on Meta::CPAN
'x.name.singular' => 'stock',
schema => ['array*', of=>'idx::listed_stock_code*', min_len=>1], # XXX allow unlisted ones too in the future
req => 1,
pos => 0,
slurpy => 1,
},
);
our %argsopt_filter_date = (
date_start => {
schema => ['date*', 'x.perl.coerce_to' => 'DateTime', 'x.perl.coerce_rules'=>['From_str::natural']],
tags => ['category:filtering'],
default => ($today - 30*86400),
cmdline_aliases => {
'week' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 7*86400; $_[0]{date_end} = $today}},
'1week' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 7*86400; $_[0]{date_end} = $today}},
'month' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 30*86400; $_[0]{date_end} = $today}},
'1month' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 30*86400; $_[0]{date_end} = $today}},
'2month' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 60*86400; $_[0]{date_end} = $today}},
'3month' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 90*86400; $_[0]{date_end} = $today}},
'6month' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 180*86400; $_[0]{date_end} = $today}},
'ytd' => {is_flag=>1, code=>sub {$_[0]{date_start} = $startofyear; $_[0]{date_end} = $today}},
'year' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 365*86400; $_[0]{date_end} = $today}},
'1year' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 365*86400; $_[0]{date_end} = $today}},
'2year' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 2*365*86400; $_[0]{date_end} = $today}},
'3year' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 3*365*86400; $_[0]{date_end} = $today}},
'5year' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today- 5*365*86400; $_[0]{date_end} = $today}},
'10year' => {is_flag=>1, code=>sub {$_[0]{date_start} = $today-10*365*86400; $_[0]{date_end} = $today}},
},
},
date_end => {
schema => ['date*', 'x.perl.coerce_to' => 'DateTime', 'x.perl.coerce_rules'=>['From_str::natural']],
tags => ['category:filtering'],
default => $today,
},
);
my $sch_ownership_field = ['str*'=>{in=>\@ownership_fields, 'x.in.summaries'=>[map {$ownership_fields{$_}} @ownership_fields]}];
my $sch_daily_field = ['str*'=>{in=>\@daily_fields}];
our %argopt_field_ownership = (
field => {
lib/App/idxdb.pm view on Meta::CPAN
_
args => {
%args_common,
gudangdata_path => {
schema => 'dirname*',
req => 1,
},
},
};
sub update {
require DateTime;
require DBIx::Util::Schema;
require JSON::MaybeXS;
my %args = @_;
my $gd_path = $args{gudangdata_path};
my $state = _init(\%args, 'rw');
my $dbh = $state->{dbh};
my $now = DateTime->now;
UPDATE_META:
{
my $table_exists = DBIx::Util::Schema::table_exists($dbh, 'meta');
last if $table_exists;
log_info "Creating meta table ...";
$dbh->do("CREATE TABLE meta (name TEXT PRIMARY KEY, value TEXT)");
}
my $sth_sel_meta = $dbh->prepare("SELECT value FROM meta WHERE name=?");
( run in 0.399 second using v1.01-cache-2.11-cpan-05444aca049 )