PHP原生实现股票MACD指标算法

        日前用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($macd['dea'], $dif, $signalPeriod);
	$bar = round(($dif - $dea) * 2, 2);
	$data = [
		'fast' => $fast,
		'slow' => $slow,
		'dif' => round($dif, 2),
		'dea' => $dea,
		'bar' => $bar
	];
	return $data;
}

其中以EMA方式计算,所需ema函数如下:

	/* 
	EMA($X, $N),也叫EXPMA
	$X的$N日指数移动平均(Exponential Moving Average)
    2/($N+1)为固定权重系数
	*/
	function ema($pre, $X, $N){
		if(empty($pre)) $pre = 0;
		$Y = ($X * 2 + $pre * ($N - 1)) / ($N + 1);
		return round($Y, 3);
	}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值