MACD 源码定义

要理解MACD ,首先要理解指数衰减加权平均,下文有EMA源码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Nov 12 16:36:02 2018

@author: lg
"""

import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
import talib

df=ts.get_k_data('600600')
def EMA(ps,period=5,exp=0.1):
    
    ewma=pd.Series(0.0,index=ps.index)
    ewma[period-1]=ps[:period].mean()
    
    for i in range(period,len(ps)):
        ewma[i] =exp*ps[i]+(1-exp)*ewma[i-1]
        
    return ewma

ps=df.close
ema=EMA(ps)
DIF=EMA(ps,12,2/(12+1))-EMA(ps,26,2/(26+1))
DEA=EMA(DIF,9,2/(9+1))
MACD=DIF-DEA

def mplot(DIF,DEA,MACD,CUT=300):
#    CUT=300
    plt.subplot(211)
    plt.plot(DIF[CUT:],\
          label="DIF",color='k')
    plt.plot(DEA[CUT:], label="DEA",\
            color='b',linestyle='dashed')
    plt.title("信号线DIF与DEA")
    plt.legend()
    plt.subplot(212)
    plt.bar(left=MACD[CUT:].index,\
            height=MACD[CUT:],\
            label='MACD',color='r')
    plt.legend()

 
mplot(DIF,DEA,MACD,CUT=500)

用talib 实现结果是一样的

dif, dea, macd = talib.MACD(df['close'].values, fastperiod=12, slowperiod=26, signalperiod=9)
dif=pd.Series(dif)
dea=pd.Series(dea)
macd=pd.Series(macd)
mplot(dif,dea,macd,CUT=500)

在这里插入图片描述

这是一个 Python 实现的 MACD 指标计算及背离判断的示例代码: ```python import pandas as pd import numpy as np def macd(df, fast=12, slow=26, signal=9): """Calculate MACD indicator""" exp1 = df['Close'].ewm(span=fast, adjust=False).mean() exp2 = df['Close'].ewm(span=slow, adjust=False).mean() macd = exp1 - exp2 signal = macd.ewm(span=signal, adjust=False).mean() histogram = macd - signal return macd, signal, histogram def macd_divergence(df, fast=12, slow=26, signal=9): """Detect MACD divergence""" macd, signal, histogram = macd(df, fast, slow, signal) close = df['Close'] # Check bullish divergence bullish_div = ((macd.diff() > 0) & (histogram.diff() < 0) & (close.diff().rolling(5).sum() > 0)) # Check bearish divergence bearish_div = ((macd.diff() < 0) & (histogram.diff() > 0) & (close.diff().rolling(5).sum() < 0)) return bullish_div, bearish_div # 示例用法 df = pd.read_csv('data.csv') bullish_div, bearish_div = macd_divergence(df) print(bullish_div) print(bearish_div) ``` 这个代码使用了 Pandas 库来处理时间序列数据,并且定义了两个函数,一个用于计算 MACD 指标,另一个用于检测背离。在 `macd()` 函数中,我们使用了 Pandas 的指数加权平均函数 `ewm()` 来计算快线和慢线的移动平均值,并且用它们的差值来计算 MACD 指标。在 `macd_divergence()` 函数中,我们使用了 Pandas 的滚动求和函数 `rolling()` 来计算收盘价的变化量,并且用它来判断背离。最后,我们可以使用这个代码来读取一个包含股票价格数据的 CSV 文件,并且计算出其中的背离情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值