MACD、KDJ、DMA等常用技术指标的python实现

目录MACD指标简介计算方法指标含义python代码实现MACD指标简介MACD又称为异同移动平均线,用来度量不同频率移动平均线的变化情况。MACD指标主要包括3根线,分别为DIF、DEA和MACD。计算方法12日EMA:EMA(12) = 2/(12+1) * 今日收盘价(12) + 11/(12+1) * 昨日EMA(12)26日EMA:EMA(26) = 2/(26+1) * 今日收盘价(26) + 25/(26+1) * 昨日EMA(26)DIFF:DIFF=EMA(12) - EMA
摘要由CSDN通过智能技术生成

MACD指标

简介

MACD又称为异同移动平均线,用来度量不同频率移动平均线的变化情况。MACD指标主要包括3根线,分别为DIF、DEA和MACD。

计算方法

12 日 E M A : E M A ( 12 ) = 2 12 + 1 ∗ 今 日 收 盘 价 ( 12 ) + 11 12 + 1 ∗ 昨 日 E M A ( 12 ) 12日EMA:EMA(12) = \frac{2}{12+1} * 今日收盘价(12) + \frac{11}{12+1} * 昨日EMA(12) 12EMA:EMA(12)=12+12(12)+12+111EMA(12)
26 日 E M A : E M A ( 26 ) = 2 26 + 1 ∗ 今 日 收 盘 价 ( 26 ) + 25 26 + 1 ∗ 昨 日 E M A ( 26 ) 26日EMA:EMA(26) = \frac{2}{26+1} * 今日收盘价(26) + \frac{25}{26+1} * 昨日EMA(26) 26EMA:EMA(26)=26+12(26)+26+125EMA(26)
D I F F : D I F F = E M A ( 12 ) − E M A ( 26 ) DIFF:DIFF=EMA(12) - EMA(26) DIFFDIFF=EMA(12)EMA(26)
D E A : D E A = 2 9 + 1 ∗ 今 日 D I F F + 8 9 + 1 ∗ 昨 日 D E A DEA: DEA = \frac{2}{9+1} * 今日DIFF + \frac{8}{9+1} * 昨日DEA DEA:DEA=9+12DIFF+9+18DEA
M A C D : M A C D = 2 ∗ ( D I F F − D E A ) MACD:MACD = 2 * (DIFF-DEA ) MACDMACD=2(DIFFDEA)

指标含义

DIFF表示长周期均线和短周期均线的差值,DIFF > 0则表示短周期均线处于长周期均线上方,DIFF < 0则表示短周期均线处于长周期均线下方。DEA是DIFF的简单移动平均线,MACD是移动平均线和移动平均线的移动平均线的差值。

在应用过程中,常用其中的MACD指标或其中多个组合进行判断。

同时使用DIFF和DEA进行判断

当DIFF>0时,说明短周期均线处于长周期均线上方,近期价格呈现上涨趋势;当DEA>0时,说明短周期均线在近几期一直处于长周期均线的上方。如果DIFF上穿DEA,表示DIFF近期也处于上涨趋势,这两者叠加,说明该标的近期价格已经处于一个很高的价位。

若单独使用MACD指标

和同时使用DIFF和DEA相差不大,MACD是将DIFF和DEA差值以数值的形式表现出来。MACD有绿柱和红柱,柱体越长,说明近期价格上涨或下跌的程度越强,可以视作上涨或下跌力量的强弱。

python代码实现

在python中可以利用第三方库talib计算MACD指标,但发现怎么都无法和通达信等行情软件对上,所以自己按照原理写了一个。

由于原始数据难以获得,所以以下代码基于掘金量化平台的sdk查询标的原始数据。如果本地有数据或有其他的数据来源,只需要将data数据集变成输入参数,将函数中获取data的部分删除即可。

这里用到pandas库里面特别好用的两个函数:rolling/expanding和ewm,前者是滚动窗口,后者是求加权平均。rolling(N)可以实现每N个求一次平均,expanding(N)可以实现从N个窗口开始,求逐渐扩大窗口的平均。

# coding=utf-8
from __future__ import print_function, absolute_import
from gm.api import *
import pandas as pd
import numpy as np

def MACD(symbol, start_time, end_time):

    '''计算MACD指标
        输入参数:symbol <- str      标的代码 (2005年以前上市的不可用)
                start_time <- str  起始时间
                end_time <- str    结束时间
        输出数据:
                macd <- dataframe  macd指标,包括DIFF、DEA、MACD

    '''
    
    # 取历史数据,取到上市首日
    data = history(symbol=symbol, frequency='1d', start_time='2005-01-01', end_time=end_time, fields='symbol,bob,close',
                   df=True)
                   
    # 将数据转化为dataframe格式
    data['bob'] = data['bob'].apply(lambda x: x.strftime('%Y-%m-%d')).tolist()

    # 计算EMA(12)和EMA(16)
    data['EMA12'] = data['close'].ewm(alpha=2 / 13, adjust=False).mean()
    data['EMA26'] 
  • 16
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值