日前用boaPHP做云选股系统,股票技术指标计算一般都用TA-LIB库,其对python用户支持很好,作为PHP用户我找到php-trader扩展,其也是基于TA-LIB库的,奈何文档很少。
其中一个较常用的股票技术指标MACD,用它算出来结果的和通达信、同花顺上不一致,查阅相关资料,需要从股票上市第一天的数据开始计算。
这就会有个新问题,每次盘中实时选股都要将一只股票30年的数据带进去计算一遍,效率太低。干脆直接用PHP实现MACD算法,后续也可以用C语言实现将其封装成PHP的扩展。
计算MACD的函数:通过前一个macd值就可以计算当前的,无需每次从上市第一天开始算,如果前一个macd值为null,则为上市第一天。将计算出来的MACD结果保存,供下次使用,以此循环。首次需要全量计算,以后每次用前一次保存的结果代入计算。
/*
计算MACD指标
$macd:传入保存的前一个macd值,就可以直接计算当前的,上市第一天这个值传入null
$close:当前股价或收盘价
返回值:当前计算出来的macd值,可以保存作为下次传入
*/
function macd($macd, $close, $fastPeriod = 12, $slowPeriod = 26, $signalPeriod = 9){
$fast = ema($macd['fast'], $close, $fastPeriod);
$slow = ema($macd['slow'], $close, $slowPeriod);
$dif = $fast - $slow;
$dea = ema(