App-Chart
view release on metacpan or search on metacpan
doc/weights.pl view on Meta::CPAN
#!/usr/bin/perl -w
# Copyright 2007, 2009, 2010, 2011, 2016, 2017 Kevin Ryde
# This file is part of Chart.
#
# Chart is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free
# Software Foundation; either version 3, or (at your option) any later
# version.
#
# Chart is distributed in the hope that it will be useful, but WITHOUT ANY
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License
# along with Chart. If not, see <http://www.gnu.org/licenses/>.
use strict;
use warnings;
use Carp;
use Data::Dumper;
use Getopt::Long;
use List::Util qw(min max);
use POSIX qw(floor ceil);
my $option_verbose = 0;
my $option_txt = 1;
my $option_png = 1;
my $option_eps = 0;
GetOptions ('eps' => sub {
$option_eps = 1;
$option_png = 0;
$option_txt = 0;
})
or exit 1;
#-----------------------------------------------------------------------------
# misc
sub write_file {
my ($filename, $content) = @_;
open my $out, '>', $filename or die;
print $out $content or die;
close $out or die;
}
#-----------------------------------------------------------------------------
# text graph
# (define (multiple? n d)
# (integer? (/ n d)))
sub text_plot {
my ($basename, $data) = @_;
my $y_zero_pos = 20;
my $x_step = (@$data < 30 ? 2 : 1);
my $x_max = @$data + 3;
my $width = $x_step * ($x_max + 1);
my $data_max = max (@$data);
my $data_min = min (@$data);
my $data_range = $data_max - $data_min;
$data_max += $data_range * 0.05;
$data_min -= $data_range * 0.05;
$data_range = $data_max - $data_min;
my $y_factor = ($data_range < 11 ? 2.0
: $data_range < 22 ? 1.0
: 0.5);
my $y_tick_step = ($y_factor >= 2.0 ? 2
: $y_factor >= 1.0 ? 5
: 10);
my $out_x_base = -4;
my $out_y_base = -30;
my @out;
# foreach my $out (make_array #\space '(_4 75) '(_30 60))))
doc/weights.pl view on Meta::CPAN
$exif->ExtractInfo($filename) or die;
$exif->SetNewValue ('Title', $title);
$exif->SetNewValue ('Author', 'Kevin Ryde');
$exif->SetNewValue ('Copyright', <<'HERE');
Copyright 2007, 2009, 2010, 2011 Kevin Ryde
This file is part of Chart.
Chart is free software; you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by the Free
Software Foundation; either version 3, or (at your option) any later
version.
Chart is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
details.
You should have received a copy of the GNU General Public License
along with Chart. If not, see <http://www.gnu.org/licenses/>.
HERE
$exif->SetNewValue ('CreationTime',
POSIX::strftime ('%a, %d %b %Y %H:%M:%S %z',
localtime(time)));
$exif->SetNewValue ('Software', 'Chart doc/weights.pl, and gnuplot');
$exif->SetNewValue
('Homepage', 'http://user42.tuxfamily.org/chart/index.html');
$exif->WriteInfo($filename) or die;
}
sub weights {
my %opt = @_;
my $description = $opt{'description'}
|| croak "weights: missing 'description'";
my $basename = $opt{'basename'}
|| croak "weights: missing 'basename'";
my $method = $opt{'method'};
my $parameters = $opt{'parameters'} || [ $opt{'N'} ];
my $show_count = $opt{'show_count'};
# (proc (calc_proc count))
my $warmup = 30 * $show_count;
my @input = ((0) x $warmup,
100,
(0) x ($show_count - 1));
my $in_series = ConstantSeries->new (array => \@input);
my $ma_series = $in_series->$method (@$parameters);
my $hi = $ma_series->hi;
$ma_series->fill (0, $hi);
my $output = $ma_series->array($opt{'array'}||'values');
my @weights = @{$output}[$warmup .. $hi];
if ($option_verbose) {
print "$basename: ",Data::Dumper->Dump([\@weights],['weights']);
}
if (abs($weights[-1]) >= 1) {
print "$basename: last weight $weights[-1]\n";
# exit 1;
}
if ($option_txt) {
text_plot ($basename, \@weights);
}
if ($option_png || $option_eps) {
gnuplot_run ($basename, \@weights);
}
if ($option_png) {
my $params = ($opt{'N'} ? "N=$opt{'N'}" : join(',', @$parameters));
mung_png ("$basename.png", "$description, $params")
}
}
#------------------------------------------------------------------------------
# weights (description => "MACD weights",
# basename => "chart-macd-weights",
# method => 'MACD',
# parameters => [12,26],
# show_count => 40);
#
# weights (description => "MACD histogram weights",
# basename => "chart-macd-histogram-weights",
# method => 'MACD',
# array => 'histogram',
# parameters => [12,26,9],
# show_count => 40);
weights (description => "Exponential moving average weights",
basename => "chart-ema-weights",
method => 'EMA',
N => 15,
show_count => 30);
weights (description => "EMA of EMA weights",
basename => "chart-ema-2-weights",
method => sub {
my ($parent, $N) = @_;
return $parent->EMA($N)->EMA($N);
},
N => 10,
show_count => 30);
weights (description => "EMA of EMA of EMA weights",
basename => "chart-ema-3-weights",
method => sub {
my ($parent, $N) = @_;
return $parent->EMA($N)->EMA($N)->EMA($N);
},
N => 10,
show_count => 38);
( run in 1.356 second using v1.01-cache-2.11-cpan-39bf76dae61 )