Там, кажется, ошибка в расчете små в коде ниже ... может кто-то указать, где ..Simple Moving Average в PHP - Ошибка
/** * Простая скользящая средняя (сма) * *
Скользящее среднее - это индикатор, показывающий среднее значение цены цен в течение определенного периода времени. При вычислении скользящей средней производится математический анализ среднего значения безопасности в течение заданного периода времени. По мере изменения цены безопасности ее средняя цена движется вверх или вниз.
* *Простая или средняя арифметическая скользящая средняя рассчитывается путем добавления цены закрытия ценной бумаги в течение ряда периодов времени (например, 12 дней), а затем деления этой суммы на количество периодов времени. Результатом является средняя цена за безопасность в течение периода времени. Простые скользящие средние дают равный вес каждой ежедневной цене.
* *формула:
* * - SUM (Закрывает из п периодов)/п */<?php
$data = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
class sma
{
/**
* @var double[]
*/
private $sma;
/**
* @param double[] $data
* @param int $range
* @return double[]
*/
function get($data, $range)
{
$position = 0;
while (empty($data[ $position ])) {
$position++;
}
$i = $position;
while (true) {
if (empty($data[ $i + $range - 1 ])) {
break;
}
$temp_sum = 0;
for ($j = $i; $j < $i + $range; $j++) {
$temp_sum += $data[ $j ];
}
$this->sma[ $i + $range - 1 ] = $temp_sum/$range;
$i++;
}
return $this->sma;
}
}
$mysma = new sma();
$mysma->get($data,5); $sma = $mysma->get();
echo mysma;
?>
Также см расчета в другом коде, кажется, проще .. несколько примеров здесь .. если кто-то сделал это в php аналогично .. ??
(defn moving-average
[coll n]
(cond
(< n 1) nil
(= n 1) coll
:else (let [sums (reductions + 0 coll)]
(map #(/ (- %1 %2) n) (drop n sums) sums))))
(time (doall (moving-average coll n)))
# "Elapsed time: 9.184 msecs"
Кроме того, это ..
double[] MovingAverage(int period, double[] source)
{
var ma = new double[source.Length];
double sum = 0;
for (int bar = 0; bar < period; bar++)
sum += source[bar];
ma[period - 1] = sum/period;
for (int bar = period; bar < source.Length; bar++)
ma[bar] = ma[bar - 1] + source[bar]/period
- source[bar - period]/period;
return ma;
}
«Там, кажется, ошибка в вычислении små в код ниже "и ошибка? –
диапазон должен быть меньше .. да 5, изменено .. ошибка есть нет выхода .. он переходит в цикл .. "" Предупреждение: Отсутствует аргумент 1 для sma :: get(), вызываемый в P: \ MOWES WAMP REL \ MOWES \ www \ sma.php в строке 51 и определен в P: \ MOWES WAMP REL \ MOWES \ www \ sma.php в строке 28 Внимание! Отсутствует аргумент 2 для sma :: get(), вызываемый в P: \ MOWES WAMP REL \ MOWES \ www \ sma.php в строке 51 и определен в P: \ MOWES WAMP REL \ MOWES \ www \ sma.php в строке 28 Неустранимая ошибка: Максимальное время выполнения 120 секунд превышено в P: \ MOWES WAMP REL \ MOWES \ www \ sma.php в строке 31 "" – Ajmal
Вывод '[4 => 3,5 => 4,6 => 5 и т. Д.]', Когда вы удаляете '$ mysma- > get(); 'call и' var_dump ($ mysma-> get ($ data, 5); '. –