1

脚本从 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 知识也无济于事。

4

1 回答 1

2

首先,对代码的一些注释:

  1. 您似乎没有使用strict。你应该。

  2. 您似乎认为践踏整个DBI命名空间是可以的。它不是。

  3. 您应该使用占位符而不是插入到 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";
}
于 2010-04-07T13:09:25.123 回答