qzhjiang
qzhjiang
具体见我发在聚宽社区的文章: [通达信WMA函数及FORCAST函数的Python实现] ( https://www.joinquant.com/view/community/detail/35525)
2021年11月12日修改 ```Python def slope(S, N): # type: (np.ndarray, int) -> np.ndarray """ 通达信SLOPE。返S序列N周期回线性回归斜率,N暂时不支持变量。 """ return pd.Series(S).rolling(window=N).apply(lambda y: np.polyfit(range(N), y, deg=1)[0], raw=False).values ```
你改过之后的与原来写的无差别,仍然是错误的。 我上面提出的正确写法,你可以自己验证,也可以看看我的这篇文章: [通达信转Python神器——myTT库](https://www.joinquant.com/view/community/detail/a6cc7d1fb73a57dbac4b77044a33b15d?type=1)
return pd.Series(S).ewm(alpha=M/N, adjust=True).mean().values return pd.Series(S).ewm(com=(N-M)/M, adjust=True).mean().values 这两个写法才是等价的。 推导过程如下: 已知: alpha =1/(1+com) 又知道,SMA正确的alpha是M/N alpha = M/N 容易求出: com = N/M-1=(N-M)/M 详细验证过程请见: 通达信转Python神器——myTT库,https://www.joinquant.com/view/community/detail/a6cc7d1fb73a57dbac4b77044a33b15d?type=1
上面的sumbars函数有错误,漏掉了一条语句。 ` A = np.flipud(A) # 倒转(第一版漏了)` 在A为数组的情况下会出错。 现在更正过来了,请用这个正确的版本: ```Python def sumbarsFast(X, A): # type: (np.ndarray, Optional[np.ndarray, float, int]) -> np.ndarray """ 通达信SumBars函数的Python实现 SumBars函数将X向前累加,直到大于等于A, 返回这个区间的周期数。例如SUMBARS(VOL, CAPITAL),求完全换手的周期数。 :param X: 数组。被累计的源数据。 源数组中不能有小于0的元素。...
> 感谢分享,我看两个函数里还有FOR循环 不是完全的向量化实现,请问速度如何? 是的,我的水平无法消灭这个循环,但速度还是很快的了。20W条记录,大概是784ms。