大家好,欢迎来到IT知识分享网。
一、MACD指标入门
1.1、MACD指标的特点
(1)MACD指标来源于股价的指数移动平均线EMA,具有均线指标稳定/能追随趋势的特点,可以对市场动能做出客观的反映。同时,MACD指标去掉了均线有时频繁发出假信号的缺陷,使得指标在对中长期趋势的把握上准确率较高,深受趋势型投资者的欢迎。
(2)MACD指标实际上围绕两个离差值进行分析,是市场动能最直接的反映。两个离差值,一个是DIFF线,是快慢均线的差值,可以理解为股价上涨或下跌的速度;另一个是MACD柱线,是快慢DIFF线的差值(DIFF-DEA),可以理解为股价上涨或下跌的加速度。
(3)MACD指标的滞后性:该指标剔除了股价短期上下波动的影响,主要反映市场中长期趋势,对股价短期走势的反映往往较为滞后,远不如K线形态那样及时。
(4)MACD指标不适合超短线投资者使用,不适合在盘整行情中使用。在盘整行情中,MACD指标一般会围绕着零轴上下运动,频繁发出交易信号,这些信号大多属于无效信号。
1.2、DIFF和DEA线
(1)DIFF线与DEA线的计算过程
(2)DIFF线和DEA线的用法
DIFF值 | DIFF位置 | DEA值 | DEA位置 | 市场状态 | 操作 |
---|---|---|---|---|---|
大于0 | 向上移动 | 大于0 | 向上移动 | 上涨动能强劲,股价处于多头行情 | 做多或持股待涨 |
小于0 | 向上移动 | 小于0 | 向上移动 | 上涨动能正在增加,可能会出现上涨走势,但是否反转还需要继续观察 | 少量买入股票或观望 |
大于0 | 向下移动 | 大于0 | 向下移动 | 下跌动能逐步增加,股价可能出现下跌趋势,但是否反转还需要继续观察 | 卖出部分股票或观望 |
小于0 | 向下移动 | 小于0 | 向下移动 | 下跌动能强劲,股价处于下跌趋势 | 持币观望 |
1.3、MACD柱线
(1)MACD柱线的由来
(2)MACD柱线的用法
柱线是对DIFF线变化快慢程度(DIFF线与DEA线的差值)的一种度量,而DIFF线则是对股价变动快慢程度的一种度量,因此可以把柱线看作为股价涨跌的加速度,并由此来理解它的各种用法。
MACD柱颜色 | MACD柱趋势 | 市场状态 | 操作 |
---|---|---|---|
红色 | 持续发散 | 表明上涨动能较强,股市处于急速上涨行情中 | 持股待涨或短线买入 |
红色 | 持续收敛 | 表明上涨动能开始衰减,投资者要警惕下跌趋势形成 | 当MACD柱变色或柱线与股价顶背离,就可离场 |
MACD柱颜色 | MACD柱趋势 | 市场状态 | 操作 |
---|---|---|---|
绿色 | 持续发散 | 表明市场正处于急速下跌阶段 | 持币观望或卖出股票 |
绿色 | 持续收敛 | 表明市场下跌动能衰减 | 等柱线变色或者柱线与股价出现底背离的时候,少量进行长线战略建仓,等上涨趋势确定后,再大举入场 |
二、MACD指标的作用和使用法则
2.1、四大作用
2.1.1判断股价涨跌趋势
DIFF状态 | 市场状态 | 操作 |
---|---|---|
由下向上穿过零轴 | 上涨趋势已经初步形成 | 分批建仓 |
穿过零轴后冲高回落在零轴得到支撑,再次向上 | 上涨趋势已经彻底形成 | 买入 |
由上向下穿过零轴 | 下跌趋势已经初步形成 | 部分卖出 |
向下穿过后反弹确认,之后再次下跌 | 下跌趋势已经彻底形成 | 卖出 |
DIFF状态 | 股价状态 | 市场状态 | 操作 |
---|---|---|---|
DIFF线与股价底背离 | 股价突破前期重要阻力位 | 表明上涨趋势已经初步形成,有时股价突破之后会有一个回抽确认过程,这是上涨趋势彻底形成的标志 | 买入 |
DIFF线与股价顶背离 | 股价跌破前期重要支撑位 | 表明下跌趋势已经初步形成,有时股价跌破之后会有一个反弹确认过程,这是下跌趋势彻底形成的标志 | 卖出 |
2.1.2 寻找买卖点
买卖点是指技术指标所发出的关于买进和卖出股票的信号。利用MACD指标寻找买卖点,可以有多种方法,常见的有DIFF线和DEA线与股价的背离、DIFF线和DEA线的交叉、MACD柱的背离、DIFF线和DEA线的形态等。
2.1.3寻找转支撑/阻力位
寻找支撑/阻力位是MACD指标的另一个重要作用,它主要通过以下两个方法来实现:
指标 | 说明 |
---|---|
零轴 | 当DIFF线在零轴下方运行时,零轴对其有重要的阻力作用;而一旦DIFF线突破零轴,零轴对它就具有重要的支撑作用。这种支撑和阻力作用在实战中往往构成重要买卖点。 |
DEA线 | DEA线因为是DIFF线的9日移动平均线,所以对DIFF线具有一定的支撑、阻碍作用。MACD指标买卖点中,“拒绝金叉卖点”和“拒绝死叉买点”都是根据DEA线的支撑和阻力作用而来的。 |
投资者要注意的是,当DIFF线长时间围绕着零轴窄幅震荡时,表明在股价走势中,两条快慢均线正缠绕到一起,市场正处于盘整状态。那么DIFF线围绕零轴震荡的区间一旦被突破,也会有重要的支撑或阻碍作用。
2.2、使用技巧
2.2.1 趋势第一
MACD指标作为判断市场趋势的重要工具,在使用的过程中,首先要注意的就是利用该指标判断市场趋势。
DIFF | DEA值 | 市场状态 | 操作 |
---|---|---|---|
零轴上方 | 零轴上方 | 上涨趋势 | 持股待涨或逢低加仓 |
零轴附近波动 | 零轴附近波动 | 盘整状态 | 高抛低吸或持币观望 |
零轴下方 | 零轴下方 | 下跌趋势 | 持币观望 |
2.2.2 多周期共振
2.2.3参数的修改
对股价变动的反应滞后,买卖价位有时不太理想,这是MACD指标的一个缺陷,改变这种情况的方法之一就是通过改变指标参数,使得MACD指标对走势的反应变得灵敏一些。投资者可以在实际使用中自行验证,比如修改位5/34/5,5/10/30等。但修改参数虽然能让灵敏度提高,但可靠性会有所降低,需要综合考虑。
2.2.4 多指标配合
2.2.5形态法则
4、MACD指标实操练习
结合DIFF线/MACD柱线以及股价状态,我制定了如下策略,随机选择一些股票看看实战效果如何:
DEA状态 | 股价状态 | MACD状态 | 市场状态 | 操作 |
---|---|---|---|---|
向下移动 | 顶背离 | 由红转绿 | 下跌动能十分强劲 | 卖出 |
向上移动 | 底背离 | 由绿转红 | 上涨趋势形成 | 分批买入,底背离买入一次,MACD变色买入一次,DIFF穿过零轴买入一次,共三次 |
我们以海康威视的股票为例,先定义一个存储策略函数的py文件,代码如下:
import numpy as np import pandas as pd import talib from gm.api import * import datetime import matplotlib.pyplot as plt """ MACD指标 TALIB金融库中提供的MACD函数与国内实际使用的不同,因此转换为国内常用的形式; MACD称为异同移动平均线,是从双指数移动平均线发展而来的; 由快的指数移动平均线(EMA12)减去慢的指数移动平均线(EMA26)得到快线DIF,再用2×(快线DIF-DIF的9日加权移动均线DEA)得到MACD柱。 MACD的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。 MACD的变化代表着市场趋势的变化,不同K线级别的MACD代表当前级别周期中的买卖趋势。 """ def MACD_CN(close, fastperiod = 12, slowperiod = 26, signalperiod = 9): macdDIFF,macdDEA,macd = talib.MACDEXT(close,fastperiod = fastperiod,fastmatype=1,slowperiod = slowperiod,slowmatype =1,signalperiod =signalperiod,signalmatype =1) #平滑异同移动平均线(可控制移动平均算法) macd = macd * 2 return macdDIFF,macdDEA,macd """ MACD指标买入策略 策略1:当DEA大于0时,且MACD由绿转红的时刻触发买入操作; """ def MACD_strategy_buy_simple1(close, fastperiod=12, slowperiod=26, signalperiod=9,strategy_buy_num=1): macdDIFF, macdDEA, macd = MACD_CN(close, fastperiod=12, slowperiod=26, signalperiod=9) signal = 0 # 标志位,0代表无动作,1代表买入 #策略1:当DEA大于0时,且MACD由绿转红的时刻触发买入操作; if strategy_buy_num == 1: if macdDEA[-1] > 0 and macd[-1]*macd[-2] < 0: signal = 1; return signal """ MACD指标卖出策略 策略1:当DEA小于0时,且MACD由红转绿的时刻触发卖出操作; """ def MACD_strategy_sell_simple1(close, fastperiod=12, slowperiod=26, signalperiod=9,strategy_sell_num=1): macdDIFF, macdDEA, macd = MACD_CN(close, fastperiod=12, slowperiod=26, signalperiod=9) signal = 0 # 标志位,0代表无动作,1代表卖出 #策略1:当DEA小于0时,且MACD由红转绿的时刻触发卖出操作; if strategy_sell_num == 1: if macdDEA[-1] < 0 and macd[-1]*macd[-2] < 0: signal = 1 return signal
之后再建立一个运行的主函数:
# coding=utf-8 from __future__ import print_function, absolute_import, unicode_literals from gm.api import * import datetime import numpy as np import talib import pandas as pd import MACD_strategy import pandas as pd import matplotlib.pyplot as plt ''' 示例策略仅供参考,不建议直接实盘使用。 行业轮动策略 逻辑:以场内ETF基金代表,按照月收益率进行排序,选择收益率最高的10只ETF基金进行买入,每月进行一次调仓换股 ''' def init(context): #股票代码 context.index = "SZSE.002415" #买入股票的标志位 context.buy_signal = 0 #卖出股票的MFI阈值 context.sell_signal = 0 # 每日定时任务 schedule(schedule_func=algo, date_rule='1d', time_rule='09:30:00') # schedule(schedule_func=algo_zhiyingzhisun, date_rule='1d', time_rule='09:31:00') #根据盈利亏损值止盈止损 def algo(context): # 当天日期 now_str = context.now.strftime('%Y-%m-%d') # 获取上一个交易日及上一周交易日 last_day = get_previous_n_trading_dates(exchange='SHSE', date=now_str, n=1)[0] # 获取历史交易数据 data = history_n(symbol=context.index, frequency="1d", count=100, end_time=last_day, fields="high, low, close, volume", fill_missing="last", adjust=ADJUST_PREV, df=True) # 从dataframe中提取数据 close = data["close"].values context.buy_signal = MACD_strategy.MACD_strategy_buy_simple1(close=close, fastperiod=12, slowperiod=26, signalperiod=9, strategy_buy_num=1) context.sell_signal = MACD_strategy.MACD_strategy_sell_simple1(close=close, fastperiod=12, slowperiod=26, signalperiod=9,strategy_sell_num=1) if context.buy_signal == 1: print("买入") order_target_percent(symbol=context.index, percent=1, order_type=OrderType_Market,position_side=PositionSide_Long) if context.sell_signal == 1: print("卖出") order_target_percent(symbol=context.index, percent=0, order_type=OrderType_Market,position_side=PositionSide_Long) def algo_zhiyingzhisun(context): now_str = context.now.strftime('%Y-%m-%d') print(now_str+"执行策略2") positions = get_position() for position in positions: symbol = position['symbol'] price = position["price"] #当前行情价格 vwap = position["vwap"] #持仓均价 # print(position) if (price - vwap)/vwap < -0.1: #当亏损大于10%,止损 order_target_percent(symbol=symbol, percent=0, order_type=OrderType_Market, position_side=PositionSide_Long) print(symbol+"止损"+now_str) elif (price - vwap)/vwap > 0.4: #当盈利大于30%,止盈 order_target_percent(symbol=symbol, percent=0, order_type=OrderType_Market, position_side=PositionSide_Long) print(symbol+"止盈"+now_str) def on_order_status(context, order): # 标的代码 symbol = order['symbol'] # 委托价格 price = order['price'] # 委托数量 volume = order['volume'] # 目标仓位 target_percent = order['target_percent'] # 查看下单后的委托状态,等于3代表委托全部成交 status = order['status'] # 买卖方向,1为买入,2为卖出 side = order['side'] # 开平仓类型,1为开仓,2为平仓 effect = order['position_effect'] # 委托类型,1为限价委托,2为市价委托 order_type = order['order_type'] if status == 3: if effect == 1: if side == 1: side_effect = '开多仓' else: side_effect = '开空仓' else: if side == 1: side_effect = '平空仓' else: side_effect = '平多仓' order_type_word = '限价' if order_type == 1 else '市价' print('{}:标的:{},操作:以{}{},委托价格:{},委托数量:{}'.format(context.now, symbol, order_type_word, side_effect, price, volume)) def on_backtest_finished(context, indicator): print('*' * 50) print('回测已完成,请通过右上角“回测历史”功能查询详情。') if __name__ == '__main__': ''' strategy_id策略ID,由系统生成 filename文件名,请与本文件名保持一致 mode实时模式:MODE_LIVE回测模式:MODE_BACKTEST token绑定计算机的ID,可在系统设置-密钥管理中生成 backtest_start_time回测开始时间 backtest_end_time回测结束时间 backtest_adjust股票复权方式不复权:ADJUST_NONE前复权:ADJUST_PREV后复权:ADJUST_POST backtest_initial_cash回测初始资金 backtest_commission_ratio回测佣金比例 backtest_slippage_ratio回测滑点比例 backtest_match_mode市价撮合模式,以下一tick/bar开盘价撮合:0,以当前tick/bar收盘价撮合:1 ''' run(strategy_id='自己的策略ID', filename='MACD_strategy_test.py', mode=MODE_BACKTEST, token='自己的token码', backtest_start_time='2012-03-01 09:00:00', backtest_end_time='2024-08-01 15:00:00', backtest_adjust=ADJUST_PREV, backtest_initial_cash=, backtest_commission_ratio=0.0001, backtest_slippage_ratio=0.0001, backtest_match_mode=1)
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/137614.html