domenica 9 ottobre 2011

php array_sum (costruire una media mobile)

Uno dei primi problemi che ho incontrato nel costruire il sito www.minifibts.it è stato quello di maneggiare una serie abbastanza lunga di dati, le quotazioni dei titoli dal 2006 ad oggi, sono 5 anni per circa 240 giorni/anno sono praticamente 1000 e costruire una media mobile che per ogni giornata di borsa fornisca il valore della media mobile di n giornate precedenti.

//Definizioni

$dimmedia = 20; // media a 20 giorni
$valori_x_media = array(0);
$media_mobile = array(0);

$itot = 0; // indice per la memorizzazione di tutte le giornate
$i = 0; // indice per la memorizzazione dei valori per la media mobile
// il ciclo while legge tutta la tabella
while ($row = mysql_fetch_array($result))
{
$valori_x_media [$i] = $row[0] // memorizzo il singolo valore per la media
if (($itot > ($dimmedia - 1)) // per i primi 19 valori manca la media a 20 giorni
{$media_mobile[$itot] = array_sum($valori_x_media) / ($dimmedia);
$i = $i + 1;
if ($i > ($dimmedia - 1)
{$i = 0}
$itot = $itot + 1;
}

In questo modo una volta riempiti i primi 20 valori, si ricomincia da capo e il programma sostisuisce il primo [0] con il 21esimo, il secondo [1] con il 22 esimo e via dicendo, in questo modo la funzionen array_sum legge sempre i 20 valori dell'array, e calcola la media mobile per la giornata $itot.

Le media mobili calcolate originano i dati che trasformati in grafici sono come quelle linee rosse gialle azzurre e blu che compaiono nel grafico sottostane. (clicca sul grafico per ingrandirlo)

Nessun commento:

Posta un commento