个中一个较常用的股票技能指标MACD,用它算出来结果的和通达信、同花顺上不一致,查阅干系资料,须要从股票上市第一天的数据开始打算。

这就会有个新问题,每次盘中实时选股都要将一只股票30年的数据带进去打算一遍,效率太低。
干脆直接用PHP实现MACD算法,后续也可以用C措辞实现将其封装成PHP的扩展。

打算MACD的函数:通过前一个macd值就可以打算当前的,无需每次从上市第一天开始算,如果前一个macd值为null,则为上市第一天。
只须要将前一个MACD结果保存,共下次利用就行了。

股票phpPHP原生实现股票MACD指标算法 Ruby

/打算MACD指标$macd:传入保存的前一个macd值,就可以直接打算当前的$close:当前股价或收盘价/function macd($macd, $close, $fastPeriod = 12, $slowPeriod = 26, $signalPeriod = 9){if($macd){$fast = ema($macd['fast'], $close, $fastPeriod);$slow = ema($macd['slow'], $close, $slowPeriod);$dif = $fast - $slow;$dea = ema($macd['dea'], $dif, $signalPeriod);$bar = round(($dif - $dea) 2, 2);$data = ['fast' => $fast,'slow' => $slow,'dif' => round($dif, 2),'dea' => $dea,'bar' => $bar];}else{//初始值:上市第一天$data = ['fast' => $close,'slow' => $close,'dif' => 0,'dea' => 0,'bar' => 0];}return $data;}

个中以EMA办法打算,所需ema函数如下:

function ema($pre, $number, $period){$ema = $pre ($period - 1)/($period + 1) + $number 2/($period + 1);return round($ema, 3); // 把稳这里的精度,保留3位小数点可以达到和通达信等交易软件同等}