暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

技术指标代码学习一:MACD

量化分析之路 2020-03-26
2257

     我们都知道 炒股有很多技术指标 什么MACD KDJ RSI CCI等很多很多 那么技术指标到底大数据回测之后是否有用 学习指标可能不会给我们带来收益。但总归知道它时怎么运作的 还是有一定道理的。
     今天就先来学习 很常用的指标MACD。


 MACD指标是什么 对于不想看公式得人来说 MACD有两条线  

一条是快线(DIF) 一条是慢线(DEA) 还有下方中间的红蓝柱子 (MACD)柱

 

一般的用法:

 当快线 和慢线  都大于0  并处于上升趋势 则为多头行情 持仓

 当快线 和慢线  都小于0  并处于下降趋势 则为空头行情  空仓

 

 MACD金叉  快线由下向上穿过慢线    上图中下方红色箭头   则为买入信号

MACD死叉   快线由上向下穿过慢线   上图中下方绿色箭头  则为卖出信号


计算MACD

那么MACD是怎么计算得到的呢

 

首先我们知道

 

MA(moving average):是指股价收盘价的多日平均,MA5 MA10等

 

第一步计算EMA

EMA:则需要给每天的最高最低等价位数值做一个权重处理,然后再平均。实际EMA更具平均价值。  EMA(X,N) = Y=(2*X+(N-1)*Y’)/(N+1) 

举个例子 上市第2天的EMA(收盘价,5)  这股票的第一天收盘价是13.36,第二天是12.02 

 

MA为 (13.36+12.02)/2 = 12.69。

EMA5 = EMA(X,5) = (2*12.02+(5-1)*13.36)/(5+1)=12.91333.

求EMA的方法我们就已经知道了。

 

第二步 计算DIF值

 

快线DIF的计算方法  DIF=今日EMA(12)-今日EMA(26)

 

第三步 计算DEA的值

 

慢线 DEA = EMA(DIF,9)

 

第四部 计算MACD柱

MACD柱 = (DIF -DEA)*2


基本用法

1. MACD金叉:DIFF 由下向上突破 DEA,为买入信号。

2. MACD死叉:DIFF 由上向下突破 DEA,为卖出信号。

3. MACD 绿转红:MACD 值由负变正,市场由空头转为多头。

4. MACD 红转绿:MACD 值由正变负,市场由多头转为空头。

5. DIF 与 DEA 均为正值,即都在零轴线以上时,大势属多头市场,DIFF 向上突破 DEA,可作买入信号。

6. DIF 与 DEA 均为负值,即都在零轴线以下时,大势属空头市场,DIFF 向下跌破 DEA,可作卖出信号。

7. 当 DEA 线与 K 线趋势发生背离时为反转信号。

8. DEA 在盘整局面时失误率较高,但如果配合RSI 及KDj指标可适当弥补缺点。

简单来说就像上图展示的  快线上穿 买入   下穿 卖出。那么是不是所有的股票这么操作都会有收益呢 就需要跑回测。


首先第一步 准备操作 这次我用的基准时中证500

import talib
import numpy as np


start = '2019-01-01' # 回测起始时间
end = '2020-01-01' # 回测结束时间
universe = DynamicUniverse('ZZ500') # 证券池,支持股票、基金、期货、指数四种资产
benchmark = 'ZZ500' # 策略参考标准
freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测
refresh_rate = 1 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟

# 配置账户信息,支持多资产多账户
accounts = {
'fantasy_account': AccountConfig(account_type='security', capital_base=10000000)
}


max_history_window = 60
fastperiod = 12
slowperiod = 26
signalperiod = 9 #signal平滑周期



def initialize(context):
pass

# 每个单位时间(如果按天回测,则每天调用一次,如果按分钟,则每分钟调用一次)调用一次
def handle_data(context):
timing(context)


复制

第二步 选择出MACD金叉的股票 买入持有 。  在MACD死叉时卖出。

def timing(context):
return timing_based_MACD(context)

def timing_based_MACD(context):
## 策略 DIF上穿DEA买入 DIF下穿DEA卖出
## 仓位控制 每只股票最大仓位10000元
account = context.get_account('fantasy_account')
current_universe = context.get_universe(exclude_halt=True)
history = context.history(symbol=current_universe, time_range=max_history_window, attribute='closePrice', freq='d',rtype='array')
security_position = account.get_positions()
cash = account.cash

#获取buy_list
buy_list = []
for sec in current_universe:
close = history[sec]['closePrice']
DIF,DEA,MACD = talib.MACD(close,fastperiod =fastperiod ,slowperiod = slowperiod ,signalperiod = signalperiod )
if MACD[-2]<0 and MACD[-1]>0 and sec not in security_position:
buy_list.append(sec)
elif MACD[-2]>0 and MACD[-1]<0 and sec in security_position:
account.order_pct_to(sec,0)
cash += security_position[sec].amount * context.current_price(sec)

#执行交易
d = min(len(buy_list),int(cash)//100000)
log.info(buy_list)
log.info(d)
for sec in buy_list[:d]:
account.order_pct_to(sec, 1.0/d)
复制

看了下回测 勉强  19-20年跟上大盘。表现一般  可能还有很多地方我考虑不全面 。今天的目标是知道这个指标怎么用。


  • 特点

    1)追踪趋势。
追踪趋势。注意价格的趋势,并追随这个趋势,不轻易放弃。如果从股价的图表中能够找出上升或下降趋势线,那么,MA的曲线将保持与趋势线方向一致,能消除中间股价在这个过程中出现的起伏。原始数据的股价图表不具备这个保持追踪趋势的特性。
2)稳定性。
通常愈长期的移动平均线,愈能表现安定的特性,即移动平均线不轻易往上往下,必须股价涨势真正明朗了,移动平均线才会往上延伸,而且经常股价开始回落之初,移动平均线却是向上的,等到股价下滑显著时,才见移动平均线走下坡,这是移动平均线最大的特色。愈短期的移动平均线,安定性愈差,愈长期移动平均线,安定性愈强,但也因此使得移动平均线有延迟反应的特性。
3)滞后性。
在股价原有趋势发生反转时,由于MA的追踪趋势的特性,MA的行动往往过于迟缓,调头速度落后于大趋势。这是MA的一个极大的弱点。等MA发出反转信号时,股价调头的深度已经很大了。
4)助涨助跌性。
助涨助跌性。当股价突破了MA时,无论是向上突破还是向下突破,股价有继续向突破方面再走一程的愿望,这就是MA的助涨助跌性。
5)依靠性。
6)支撑线和压力线的特性

复制
  • 特征分析

    1.多头稳定上升
当多头市场进入稳定上升时期,10MA、21MA、68MA向右上方推升,且三线多头排列(排列顺序自上而下分别为10MA、21MA、68MA)、略呈平行状。

2.技术回档
当10MA由上升趋势向右下方拐头而下,而21MA仍然向上方推升时,揭示此波段为多头市场中的技术回档,涨势并未结束。

3.由空转多
股市由空头市场进入多头市场时,10MA首先由上而下穿越K线图(注意是K线图),处于k线图的下方(即股价站在10MA之上),过几天21MA、68MA相继顺次,由上往下穿越K线图(既股价顺次站在21MA、68MA之上)。

4.股价盘整
股价盘整时10MA与21MA交错在一起,若时间拉长68MA也会粘合在一起。

5.盘高与盘低
股价处于盘局时若10MA往右上方先行突破上升,则后市必然盘高;若10MA往右下方下降时,则后市必然越盘越低。

6.空头进入尾声
空头市场中,若68MA能随10MA于21MA之后,由上而下贯穿K线图(既股价站在68MA之上),则后市会有一波强劲的反弹,甚至空头市场至此已接近尾声。

7.由多转空
若21MA随10MA向右下方拐头而下,68MA也开始向右下方反转时,表示多头市场既将结束,空头市场既将来临。

8.跌破10MA
当市场由多头市场转入空头市场时,10MA首先由下往上穿越K线图,到达K线图的上方(股价跌破10MA),过几天30MA、68MA相继顺次由下往上穿越K线图,到达K线图的上方。

9.移动平均线依次排列
空头市场移动平均线均在K线图之上,且排列顺序从上而下依次是68MA、21MA、10MA。

10.反弹开始
空头市场中,若移动10MA首先从上而下穿越K线图时(K线图在上方,10MA在下方)既股价站在10MA之上,是股价在空头市场反弹的先兆。

11.反弹趋势增强
空头市场中,若21MA也继10MA之后,由上而下穿越K线图,且10MA位于21MA之上(既股价站在21MA之上,10MA、21MA多头排列),则反弹趋势将转强。

12.深幅回档
若21MA随10MA向右下方拐头而下,68MA仍然向右上方推升时,揭示此波段为多头市场中的深幅回档。应以持币观望或放空的策略对应。

复制


文章转载自量化分析之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论