trader_stddev doesn't work. This is why trader_bbands doesn't work as well.
function standard_deviation(array $a, $sample = false)
{
$n = count($a);
if ($n === 0) {
trigger_error("The array has zero elements", E_USER_WARNING);
return false;
}
if ($sample && $n === 1) {
trigger_error("The array has only 1 element", E_USER_WARNING);
return false;
}
$mean = array_sum($a) / $n;
$carry = 0.0;
foreach ($a as $val) {
$d = ((double) $val) - $mean;
$carry += $d * $d;
};
if ($sample) {
--$n;
}
return sqrt($carry / $n);
}
trader_stddev($data, $period) {
$stds = [];
$current = [];
foreach ($data as $i => $close) {
$current[] = $close;
if ($i < $period) {
$stds[$i] = false;
} else {
$stds[$i] = standard_deviation($current);
array_shift($current);
}
}
return $stds;
}