pandas 计算kama 均线
原址:Python Pandas Kaufman Adaptive Moving Average (KAMA)--在Pandas或Cython中进行递归计算 - IT宝库 (itbaoku.cn)
1 import pandas 2 import pandas.stats.moments 3 import numpy as np 4 def kama(price, n=10, pow1=2, pow2=30): 5 ''' kama indicator ''' 6 ''' accepts pandas dataframe of prices ''' 7 8 absdiff = abs(price - price.shift(1) ) 9 10 erNum = ( price - price.shift(n) ) 11 erDen = pandas.stats.moments.rolling_sum(absdiff,n) 12 ER = erNum / erDen 13 SC = ( ER*(2.0/(pow1+1)-2.0/(pow2+1.0))+2/(pow2+1.0) ) ** 2.0 14 15 answer = np.zeros(SC.size) 16 N = len(answer) 17 first_value = True 18 19 for i in range(N): 20 if SC[i] != SC[i]: 21 answer[i] = np.nan 22 else: 23 if first_value: 24 answer[i] = price[i] 25 first_value = False 26 else: 27 answer[i] = answer[i-1] + SC[i] * (price[i] - answer[i-1]) 28 return answer 29 30