手把手教你如何来玩儿转经典指标 MACD

Posted Mike_Leigh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手教你如何来玩儿转经典指标 MACD相关的知识,希望对你有一定的参考价值。

手把手教你如何来玩儿转经典技术指标 MACD

准备工作

下载并安装 Technical Analysis Library - 技术分析库

这货就是咱们偶尔看到的TaLib库,非常强大,应用面非常的广泛。但是呢,安装它有个麻烦事儿就是不能通过pip的形式来安装。但是大家不用紧张,我每次装机都要走这个步骤的。

  1. 首先呢我们去这个网址,或者你能找到别的来源也可以的。

  2. 然后我们用ctrl + f来寻找Ta-Lib库的位置。需要注意的是中间有个横线或减号,忘记打是搜不到的。

  3. 点击以后你会看到一个类似于这个结构的文件列表

  4. 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位的。

  5. 下载好文件进入到你的下载目录的CMD模式下,然后输入pip install TA_Lib‑0.4.xx‑cp##‑cp##‑win_amd64.whl xx和##请按照自己的文件去输入。

  6. 然后我们就安装好了。

上干货,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]

逐行讲解代码的运用

  1. df_macd = get_data(data) data就是我们需要导入的csv股票文件数据。
  2. df_macd = df_macd.sort_values(by=['trade_date'], ascending=True).dropna()调整文件的排序,以日期为正序的顺序来排列,并且过滤掉NaN没有数值的行。
  3. df_macd = df_macd.loc[:, ['trade_date', 'ts_code', 'close']]MACD只是需要收盘价即可,缩小dataframe,如果你的运算量大的话,这样可以稍微有点点提速。
  4. df_macd['close'] = [float(x) for x in df_macd['close']]我们要把收盘价的数值属性调整为float来进行运算,避免不必要的麻烦或者报错。
  5. columns = list(df_macd.columns) + ['dif', 'dea', 'macd', 'gold', 'dead']提前设置好列名称,以后方便调用。
  6. df_macd['dif'] = macdDIFF给短线列赋值。
  7. df_macd['dea'] = macdDEA给长线列赋值。
  8. df_macd['macd'] = macd * 2给MACD差值列赋值,长短线差值2倍。
  9. df_macd['dif_1'] = df_macd['dif'].shift(1) 短线列向下错开一天用于判定金叉死叉。
  10. df_macd['dea_1'] = df_macd['dea'].shift(1)长线列向下错开一天用于判定金叉死叉。
  11. df_macd['gold'] = np.where((df_macd['dif_1'] < df_macd['dea_1']) & (df_macd['dif'] > df_macd['dea']), 1, 0)金叉判定,昨天短线比长线小,今天短线比长线大。
  12. df_macd['dead'] = np.where((df_macd['dif_1'] > df_macd['dea_1']) & (df_macd['dif'] < df_macd['dea']), 1, 0)反之,死叉判定,昨天短线比长线大,今天短线比长线小。
  13. return df_macd[columns]最后将梳理好的dataframe返回给我来调用。这里大家可以根据自身的需求来进行修改。

加料 MACD5 又是什么?!

有些朋友可能看到了我注释掉了 MACD5这行代码。df_macd['macd5'] = df_macd['macd'].rolling(5).mean()这又是个什么呢?这是在计算 MACD 在过去5天里的平均值,有些技术流派喜欢看这个数值,如果 MACD5 > MACD,并且出现金叉的时候,或许这是一个稍微更有说服力的买点?大家可以切磋交流。

以上是关于手把手教你如何来玩儿转经典指标 MACD的主要内容,如果未能解决你的问题,请参考以下文章

手把手教你Linux玩转Oracle数据库,哎,就是玩儿

MACD柱线与价格的经典战法

股票--MACD指标

Pytthon实战------黑白老照片上色,手把手教你用Python怎么玩儿!

股票中的MACD中的DIFF和DEA是啥意思

Linux技术学习,教你玩儿转MySQL