import talib def main(): LastBarTime = 0 while(true): records = exchange.GetRecords() BarTime = records[-1][“Time”] ext.PlotRecords(records, " ") if LastBarTime != BarTime: kama = talib.KAMA(records, 30) Log(kama[30]) Log(kama[kama.length-1]) LastBarTime = BarTime 尝试了一下KAMA指标,用JS的话能跑起来,用py的话就报错“line 9, in main TypeError: Argument ‘real’ has incorrect type (expected numpy.ndarray, got OOO00)” 这个。求指导怎么修改。
另外我自己按指标的定义写了一下KAMA指标的实现代码: 方向(DIR) = 收盘价 - n日前收盘价 波动率(VIR) = sum(abs(收盘价 - 上一个交易日收盘价), n) 效率(ER) = 方向 / 波动率 快速 = 2 / (n1 + 1) 慢速 = 2 / (n2 + 1) 平滑(CS) = 效率 * (快速 - 慢速) + 慢速 系数(CQ) = 平滑 * 平滑 KAMA = 指数加权平均(动态移动平均(收盘价, 系数), 2) (最后这一步 有的介绍里面是按这个算的: 当前KAMA = 前一KAMA + SC x (Price - 前一KAMA) )
找了很久也没看到最后一步中的“前一KAMA”是哪里来的,当计算第一KAMA值的时候,是不存在前一个KAMA值的吧?是我的这个算法弄错了么? 请各位大神指点要怎么弄。
发明者量化-小小梦 ```talib.KAMA(records.Close,30)``` FMZ API文档上有Python调用的例子。 /upload/asset/16abd34635f22397a31c.png
xaifer48 谢谢
发明者量化-小小梦 把数据构造成函数要求的参数即可。报错信息上提示的:expected numpy.ndarray,
xaifer48 可以了,谢谢梦总。还想请教一下,这个传入的参数也是一个数组么?如果我自己定义一个数组作为参数,也可以计算KAMA么? 为啥是写成records.Close,不用带下标么?比如records[i].Close。求指点,谢谢!