手把手教你如何来玩儿转经典指标 MACD
Posted Mike_Leigh
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教你如何来玩儿转经典指标 MACD相关的知识,希望对你有一定的参考价值。
手把手教你如何来玩儿转经典技术指标 MACD
准备工作
下载并安装 Technical Analysis Library - 技术分析库
这货就是咱们偶尔看到的TaLib库,非常强大,应用面非常的广泛。但是呢,安装它有个麻烦事儿就是不能通过pip的形式来安装。但是大家不用紧张,我每次装机都要走这个步骤的。
-
首先呢我们去这个网址,或者你能找到别的来源也可以的。
-
然后我们用
ctrl + f
来寻找Ta-Lib库的位置。需要注意的是中间有个横线或减号,忘记打是搜不到的。 -
点击以后你会看到一个类似于这个结构的文件列表
-
cp##代表的是你的python版本,win32是32位版,win_amd64是64位版,看你需要那种来自行下载。我目前用的是
TA_Lib‑0.4.24‑cp39‑cp39‑win_amd64.whl
意思是:我用的Ta-Lib版本是0.4.24版,我的Python是3.9.X版的,我的系统是64位的。 -
下载好文件进入到你的下载目录的CMD模式下,然后输入
pip install TA_Lib‑0.4.xx‑cp##‑cp##‑win_amd64.whl
xx和##请按照自己的文件去输入。 -
然后我们就安装好了。
上干货,MACD 代码
我们来看看代码的书写格式
macdDIFF, macdDEA, macd = talib.MACDEXT(data['close], fastperiod=12, fastmatype=1, slowperiod=26, slowmatype=1, signalperiod=9, signalmatype=1)
是不是很简单?我用的数值是默认的12-26-9,大家也可以根据自身需求来进行调整,譬如我最近很喜欢用10-23-8等等。
封装及调用 MACD
很多朋友可能是第一次看我的文章,我之前有分享过如何从tushare库来下载存储股票信息文件。那么存储的csv文件在这个场景就可以运用的上了。不了解的朋友可以去看我之前分享的文章。
import talib
import pandas as pd
import numpy as np
import tushare as ts
def MACD(data, fastperiod=10, slowperiod=23, signalperiod=8):
df_macd = get_data(data)
df_macd = df_macd.sort_values(by=['trade_date'], ascending=True).dropna()
df_macd = df_macd.loc[:, ['trade_date', 'ts_code', 'close']]
df_macd['close'] = [float(x) for x in df_macd['close']]
# columns = list(df_macd.columns) + ['dif', 'dea', 'macd', 'macd5', 'gold', 'dead']
columns = list(df_macd.columns) + ['dif', 'dea', 'macd', 'gold', 'dead']
macdDIFF, macdDEA, macd = talib.MACDEXT(df_macd['close'],
fastperiod=fastperiod,
fastmatype=1,
slowperiod=slowperiod,
slowmatype=1,
signalperiod=signalperiod,
signalmatype=1)
df_macd['dif'] = macdDIFF
df_macd['dea'] = macdDEA
df_macd['macd'] = macd * 2
# df_macd['macd5'] = df_macd['macd'].rolling(5).mean()
df_macd['dif_1'] = df_macd['dif'].shift(1)
df_macd['dea_1'] = df_macd['dea'].shift(1)
df_macd['gold'] = np.where((df_macd['dif_1'] < df_macd['dea_1']) & (df_macd['dif'] > df_macd['dea']), 1, 0)
df_macd['dead'] = np.where((df_macd['dif_1'] > df_macd['dea_1']) & (df_macd['dif'] < df_macd['dea']), 1, 0)
return df_macd[columns]
逐行讲解代码的运用
df_macd = get_data(data)
data就是我们需要导入的csv股票文件数据。df_macd = df_macd.sort_values(by=['trade_date'], ascending=True).dropna()
调整文件的排序,以日期为正序的顺序来排列,并且过滤掉NaN没有数值的行。df_macd = df_macd.loc[:, ['trade_date', 'ts_code', 'close']]
MACD只是需要收盘价即可,缩小dataframe,如果你的运算量大的话,这样可以稍微有点点提速。df_macd['close'] = [float(x) for x in df_macd['close']]
我们要把收盘价的数值属性调整为float来进行运算,避免不必要的麻烦或者报错。columns = list(df_macd.columns) + ['dif', 'dea', 'macd', 'gold', 'dead']
提前设置好列名称,以后方便调用。df_macd['dif'] = macdDIFF
给短线列赋值。df_macd['dea'] = macdDEA
给长线列赋值。df_macd['macd'] = macd * 2
给MACD差值列赋值,长短线差值2倍。df_macd['dif_1'] = df_macd['dif'].shift(1)
短线列向下错开一天用于判定金叉死叉。df_macd['dea_1'] = df_macd['dea'].shift(1)
长线列向下错开一天用于判定金叉死叉。df_macd['gold'] = np.where((df_macd['dif_1'] < df_macd['dea_1']) & (df_macd['dif'] > df_macd['dea']), 1, 0)
金叉判定,昨天短线比长线小,今天短线比长线大。df_macd['dead'] = np.where((df_macd['dif_1'] > df_macd['dea_1']) & (df_macd['dif'] < df_macd['dea']), 1, 0)
反之,死叉判定,昨天短线比长线大,今天短线比长线小。return df_macd[columns]
最后将梳理好的dataframe返回给我来调用。这里大家可以根据自身的需求来进行修改。
加料 MACD5 又是什么?!
有些朋友可能看到了我注释掉了 MACD5这行代码。df_macd['macd5'] = df_macd['macd'].rolling(5).mean()
这又是个什么呢?这是在计算 MACD 在过去5天里的平均值,有些技术流派喜欢看这个数值,如果 MACD5 > MACD,并且出现金叉的时候,或许这是一个稍微更有说服力的买点?大家可以切磋交流。
以上是关于手把手教你如何来玩儿转经典指标 MACD的主要内容,如果未能解决你的问题,请参考以下文章