在 python3里面的修正:
同花顺和通达信等软件中的SMA
用于 python3 ,python3 map 函数不直接返回列表 ,用 在map前面加list
import talib as tl
import numpy as np
import functools #python 3 内置已经去掉 reduce函数,要从functools 引入
def SMA_CN(close, timeperiod) :
close = np.nan_to_num(close)
return functools.reduce(lambda x, y: ((timeperiod - 1) * x + y) / timeperiod, close)
同花顺和通达信等软件中的KDJ
def KDJ_CN(high, low, close, fastk_period, slowk_period, fastd_period) :
kValue, dValue = tl.STOCHF(high, low, close, fastk_period, fastd_period=1, fastd_matype=0)
kValue = np.array(list(map(lambda x : SMA_CN(kValue[:x], slowk_period), range(1, len(kValue) + 1))))
dValue =np.array(list(map(lambda x : SMA_CN(kValue[:x], fastd_period), range(1, len(kValue) + 1))))
jValue = 3 * kValue - 2 * dValue
func = lambda arr : np.array([0 if x < 0 else (100 if x > 100 else x) for x in arr])
kValue = func(kValue)
dValue = func(dValue)
jValue = func(jValue)
return kValue, dValue, jValue
同花顺和通达信等软件中的RSI
def RSI_CN(close, timeperiod) :
diff = list(map(lambda x, y : x - y, close[1:], close[:-1]))
diffGt0 = list(map(lambda x : 0 if x < 0 else x, diff))
diffABS = list(map(lambda x : abs(x), diff))
diff = np.array(diff)
diffGt0 = np.array(diffGt0)
diffABS = np.array(diffABS)
diff = np.append(diff[0], diff)
diffGt0 = np.append(diffGt0[0], diffGt0)
diffABS = np.append(diffABS[0], diffABS)
rsi = list(map(lambda x : SMA_CN(diffGt0[:x], timeperiod) / SMA_CN(diffABS[:x], timeperiod) * 100
, range(1, len(diffGt0) + 1) ))
return np.array(rsi)
# 同花顺和通达信等软件中的MACD
def MACD_CN(close, fastperiod, slowperiod, signalperiod) :
macdDIFF, macdDEA, macd = tl.MACDEXT(close, fastperiod=fastperiod, fastmatype=1, slowperiod=slowperiod, slowmatype=1, signalperiod=signalperiod, signalmatype=1)
macd = macd * 2
return macdDIFF, macdDEA, macd
2016-12-03