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 に答える