如何使用Math :: Business :: EMA和DBI计算Perl中的指数移动平均线?

时间:2010-04-07 11:53:55

标签: perl finance stocks

脚本从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知识并没有帮助。

1 个答案:

答案 0 :(得分:2)

首先,对代码的一些评论:

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

  2. 您似乎认为可以遍历DBI命名空间。事实并非如此。

  3. 您应该使用placeholders而不是插入到SQL字符串中。

  4. 现在,对于实际任务(未经测试的代码):

    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";
    }