Как я могу использовать Math :: Business :: EMA с DBI для вычисления экспоненциальных скользящих средних в Perl? - PullRequest
1 голос
/ 07 апреля 2010

Скрипт извлекает данные из 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...

Но мне нужно разработать EMA, используя Math :: Business:: EMA ;и я не уверен, как рассчитать это при сохранении точности.EMA взвешен, и мое отсутствие знаний Perl не помогает.

1 Ответ

2 голосов
/ 07 апреля 2010

Сначала несколько комментариев по коду:

  1. Вы, похоже, не используете строгий . Вы должны.

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