2010-04-07 4 views
1

Script extrait des données de MySQL:Comment utiliser Math :: Business :: EMA avec DBI pour calculer des moyennes mobiles exponentielles en 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"; 
}; 

avec les résultats de l'exemple suivant:

1.560 
1.560 
1.550...

Mais je dois travailler l'EMA en utilisant Math::Business::EMA; et je ne suis pas sûr de savoir comment calculer cela tout en maintenant la précision. L'EMA est pondérée et mon manque de connaissance de Perl n'aide pas.

Répondre

2

D'abord, quelques commentaires sur le code:

  1. Vous ne semblez pas être en utilisant strict. Vous devriez.

  2. Vous semblez penser que vous pouvez piétiner partout dans l'espace de noms DBI. Ce n'est pas.

  3. Vous devez utiliser placeholders au lieu d'interpoler dans la chaîne SQL.

Maintenant, pour la tâche réelle (code non testé):

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

Merci pour les conseils. le temps d'en apprendre davantage sur les espaces réservés. – Dustin

Questions connexes