脚本从mysql中提取数据:
$DBI::result = $db->prepare(qq{
SELECT close
FROM $table
WHERE day <= '$DATE'
ORDER BY day DESC
LIMIT $EMA
});
$DBI::result->execute();
while($row = $DBI::result->fetchrow) {
print "$row\n";
};
以下示例结果:
1.560 1.560 1.550...
但我需要使用Math::Business::EMA计算出EMA;而且我不确定如何在保持准确性的同时计算出来。 EMA是加权的,我缺乏Perl知识并没有帮助。
答案 0 :(得分:2)
首先,对代码的一些评论:
您似乎没有使用strict。你应该。
您似乎认为可以遍历DBI
命名空间。事实并非如此。
您应该使用placeholders而不是插入到SQL字符串中。
现在,对于实际任务(未经测试的代码):
my $averager = Math::Business::EMA->new;
$averager->set_days(3);
my $sth = $db->prepare(sprintf q{
SELECT close
FROM %s
WHERE day <= ?
ORDER BY day DESC
LIMIT ?
}, $table);
$sth->execute($DATE, $EMA); # what is $EMA?
while ( my $row = $sth->fetchrow_arrayref ) {
$averager->insert( $row->[0] );
my $avg = $averager->query;
$avg = 'n/a' unless defined $avg;
print "$avg\n";
}