楼主: JoinQuant
1681 0

[源码分享] MACD+波动率过滤+追踪止损 期货择时汇总 [推广有奖]

  • 0关注
  • 23粉丝

等待验证会员

博士生

18%

还不是VIP/贵宾

-

威望
0
论坛币
105 个
通用积分
18.1313
学术水平
12 点
热心指数
9 点
信用等级
9 点
经验
3401 点
帖子
97
精华
0
在线时间
134 小时
注册时间
2015-9-9
最后登录
2020-3-18

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币

MACD 是常用的技术指标。广泛应用于股票期货等投资品类中。本文抱着实验的心态,通过 MACD 被使用最普遍的的方法对该指标在中国商品期货市场的择时效果进行验证。


我们还加入了波动率过滤,和追踪止损模块,希望以此验证指标的有效性,同时在验证过程中对传统方法进行调整,以期获得更好的绩效。


MACD简介

MACD分为三根线,分别是快速线 DIF,慢速线 DEA,信号线 MACD


计算方法为:


DIF = EMA(〖Price〗_i) - EMA(〖Price〗_j)

DEA = EMA(〖DIF〗_n)

MACD = 2 * (DIF - DEA)

Price:资产价格

i:短周期参数

j:长周期参数

n:DEA 周期参数

EMA:指数平均


策略使用方法

使用的是最普遍,也是最简单的 MACD 方法。即金叉买入,死叉卖出。


对于金叉和死叉的判定,也是众说纷纭。


1、最传统保守的论点是:金叉,快速线 DIF,慢速线DEA同时大于 0,且DIF上穿 DEA,MACD 由负数变为正数;死叉:快速线 DIF,慢速线DEA同时小于 0,且DIF 下穿 DEA,MACD 由正数变为负数。


2、而另一种观点认为:并不需要限制DIF和DEA的符号,只需要 DIF 上下穿 DEA 就可以判定金叉和死叉。


3、还有一种观点:是我们最终放出来的这个代码,就是 DIF 和 DEA 都大于 0 时候做多,反之都小于 0 做空。


1.png


在我们的模型中,我们最初使用了传统观点,因为无论是实际测试还是从逻辑出发推测,传统观点的严格性都能更好的界定价格突破的真实性。


之后发现,使用改进方法也确实取得了更好的绩效表现。但是做参数变化时,我们发现,其实更加有效的模块,是追踪止损。

小编有话说:聚宽已经实现了期货实盘,详情参见文末推荐阅读。有兴趣的朋友可以了解一下~


模型参数

一个好的策略首先就是要保证尽可能维持数据的鲁棒性。因此我们在对策略进行优化的过程,只对MACD中快速线周期,慢速线周期和信号线周期三个参数进行调整,其他条件都保持默认,因此来防止策略得过度拟合。


1、模型多参数下绩效表现:


2.png


我们可以看到,经过多组参数的测试。每个参数组都取得了正收益,说明该模型的确具有一定的择时能力。而事实上,表现最差的一组模型我们使用的是 13,26,9 的 MACD 原始默认参数。而其他参数组使用的参数周期均更短。因此我们判断, MACD 模型对于短期价格突破的预测能力更敏感。


2、模型多参数下最佳组绩效表现:


当参数 fastperior=3,slowperiod=7,signalperiod=7 时,模型取得了最好的绩效和 Sharpe Radio。绩效曲线如下:


3.png


模型调整

出于进一步探究的目的,我们对策略进行了一些调整,希望能取得更好的效果,各调整方法与有效性分析如下。


使用 80-20 周期波动率过滤方法:


80-20 方法,即计算 80 日到当前每一日的 20 日波动率,求平均,然后用当前 20 日波动率和这个平均值做对比,如果当前 20 日波动率更大,就认为该品种目前波动率过大趋势不明,该品种就不参与交易。


代码表达如下(实测效果并不好):


4.png


使用截面波动率过滤方法:


截面波动率过滤方法即,计算全市场所有品种波动率Z分位数的均值,然后用当前品种波动率的 Z 分位数和这个平均值做对比,如果波动率更大,就认为该品种目前波动率过大趋势不明,该品种就不参与交易。


代码表达如下:


5.png


更新后模型的绩效得到了一些提升,上图不是很直观,我们直接使用数据进行绩效比:


6.png


可以看到绩效在几个参数下都有所所提升。说明截面波动率过滤方法达到了我们希望达到的效果。


下图为截面过滤后 MACD 策略收益风险矩阵图:


7.png


鉴于过滤前数据缺失,而且过滤后柱状图并未显示具体数值,观察起来比较困难,我们直接出示绩效对比结论。过滤对于夏普比率的提升,最大回撤的减少并没有显著帮助,但是过滤后的策略绩效得到了提升。说明过滤过滤掉了不容易跟踪趋势的品种,存在一些效果。


模型截面波动率过滤后多参数下最佳参数组绩效表现:


8.png


最终,当我们想公开这些测试结论的时候,我发现回测中有 3 个问题:


1、手续费设置较低,所以我们改为万分之1单边手续费+万分之 1 滑点(在很多品种上,差不多就是 1 跳),然后重新测试了性能,结果绩效差异不大。


2、某些时刻,截面持仓数量会达到 20 个品种,此时,对每个品种在ATR头寸部分,分配 0.05 的资金量,会造成其他品种不够用。所以,我调整为 0.01,要知道海龟交易系统才 0.01。所以调整后,收益和回撤,都发生了下降,但是收益风险比、夏普比率这些值,没有变化,因为期货是保证金交易,我们只是用了更少资金,收益和回撤,都会等比例下降。


3、某些波动率太低的品种,常年无法择时获得正收益的品种,没必要去交易,为什么不剔除这些品种呢?就像股票模型的黑名单一样,这里不存在什么幸存者偏差,这些品种从基本面、交割制度、市场博弈层面就是存在问题的,完全可以剔除。说的就是这几个:'ZN','SN','BU','A','CF','OI','AP','JM','FG'


看看结果吧:


9.png





点击【阅读原文】,获取完整源代码~



二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝


您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jr
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-20 12:13