2010-04-07 15 views
1

腳本從mysql中提取數據:如何使用Math :: Business :: EMA和DBI計算Perl中的指數移動平均值?

$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知識沒有幫助。

回答

2

首先,在代碼中的一些註釋:

  1. 你似乎沒有使用strict。你應該。

  2. 你似乎認爲可以踐踏DBI命名空間。不是這樣。

  3. 您應該使用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"; 
} 
+0

謝謝你的建議。有時間瞭解佔位符。 – Dustin 2010-04-07 13:27:07