一开始还想着如何实现MACD指标的计算,结果Google了一下发现talib里面已经有封装好了的MACD函数,功能也挺全面,就直接拿过来用了。不过比较麻烦的一点是,talib中MACD函数的第一个参数“real”需要1维的NumPy Array,所以我在这个的转换上花了不少心思。
为了得到real参数应有的数据类型,首先使用get_price函数,并将is_panel设置成1,这样输出的结果会是Panel对象。使用values属性以及NumPy中的squeeze()函数可以获得一个2维的NumPy Array并拓平为1维形式(去掉了一层括号)。这样就能获得满足要求的参数。
剩下就是计算MACD的常用方法了。不过MACD函数已经是一个非常普遍而且可能有点被滥用的策略了……我也没有用这个函数实现其他更复杂的功能。不过按照我目前的知识水平来说可能暂时到这里,等学会了更多再来研究更深层的关于MACD函数的实现。
def isMACDGold(stock_symbols):
df = get_price("600300.SH",fields=['close'],bar_count=5,fre_step='1d',skip_paused=True,is_panel=1).values
# 将df转换为1维NumPy Array
df = np.squeeze(df)
# 计算MACD
macd, signal, _ = tb.MACD(df, 12, 26, 9)
# 检查是否为金叉
if (macd[-1] > signal[-1]) and (macd[-2] < signal[-2]):
return True # 是
else:
return False # 不是