策略回测报告——动量策略

策略全称:简单动量策略
策略简称:动量策略
策略函数:signal_simple_mtm

一、 策略背景
动量指标(MTM)也称为动力指标(Momentum Index)。
在证券市场上有类似于物理学上的恒速原理的现象:如果股价的上涨(下跌)趋势在继续,则股价的上涨(下跌)速度会大体保持一致。
动量指标(MTM)正是从股票的恒速原理出发,考察股价的涨跌速度,以股价涨跌速度的变化分析股价趋势的指标。
信号构建方法1:
  1.MTM=当日收盘价-N日前收盘价
  2.MTMMA=MTM的M日移动平均
  3.参数N一般设置为12日参数M一般设置为6
应用法则
  1.MTM从下向上突破MTMMA,为短期买入信号。
  2.MTM从上向下跌破MTMMA,为短期卖出信号。
  3.股价在上涨行情中创出新高点,而MTM未能配合上升,出现背离,为卖出信号;股价在下跌行情中走出新低点,而MTM未能配合下降,出现背离,为买入信号。
  4.若股价与MTM在低位同步上升,显示短期将有反弹行情;若股价与MTM在高位同步下降,则显示短期可能出现股价回落。
  缺点:震荡趋势中,MTMMA附近开平仓太频繁

信号构建方法2:
1、MTM=(当日收盘价-N日前收盘价)/ N日前收盘价
2、上轨:p/100 , 下轨:-p/100
3、MTM突破上下轨开仓
信号构建方法3:
构建方法2基础上加个MTMMA作为中轨,平仓
缺点:多一个参数
信号构建方法4:
基于MTMMA构建子布林
1、MTM=(当日收盘价-N日前收盘价)/ N日前收盘价(注意:和构建方法1不同,这里是比例)
1.1 J神对MTM进行一次平滑得到mtm_mean,然后再计算median
2.MTMMA=MTM的M日移动平均(median)
3.计算std mtm到mtmma标准差
4、设置倍数(常数,或者自适应)
本质就是上涨速度(n天价格变动)大于一个值,认为可以开仓

二、 策略的逻辑和本质
1、策略为什么赚钱?
基础假设:速度会延续(趋势)
2、策略赚的是什么钱?
开仓信号出现后,close同向趋势延续的钱
3、在什么情况下会失效?
开仓信号出现后,持仓状态(MTM没有降到平仓位置),close持平或下降

N日前处于盘整(close差不多),近日处于突破后盘整(当日附近close差不多),也能保持一段时间开仓,但不盈利
N日前处于下跌(close下降),近日处于反转后盘整或小幅下跌,mtm也保持为正
N日前处于小幅上涨,近日处于盘整,会更快平仓
总之,动量策略适合突破后有延续性趋势的行情,震荡行情是失效的

3.1个别参数有限期失效
简单自适应动量策略(非布林上下轨)(伪自适应版)
注意:df.loc[df[‘mtm’] > df[‘up_p’]/100, ‘signal_long’] = 1
生成信号时,有个/100,这里相当于一个参数,没有完全自适应
但/100的效果还相当不错,对应简单动量策略的p值,是要比较小的,在比较小的p值上就开仓
与0做分界线比较,0做分界,无效开仓太多

spot:2017-08-17 04:00:00 至2021-08-31 23:55:00(全部)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
37 [760] 798.652080 40.0 40.0 80.0 4.258945 -0.740367 5.752476 0.0 2021-07-16 08:00:00
8 [180] 416.679496 157.0 155.0 312.0 3.474211 -0.796166 4.363679 0.0 2021-06-03 20:00:00
38 [780] 330.673038 27.0 24.0 51.0 3.224525 -0.811912 3.971520 0.0 2021-07-22 08:00:00
spot:2017-08-17 04:00:00 至2020-08-31 23:55:00(魔2期标准)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
37 [760] 72.090135 36.0 36.0 72.0 3.132348 -0.650742 4.813499 0.0 2019-08-28 20:00:00
4 [100] 72.195490 197.0 199.0 396.0 3.134350 -0.785001 3.992795 0.0 2018-01-29 00:00:00
38 [780] 44.879141 21.0 19.0 40.0 2.531257 -0.655567 3.861171 0.0 2019-08-28 20:00:00
8 [180] 20.382184 118.0 116.0 234.0 1.717915 -0.703183 2.443056 0.0 2017-11-14 04:00:00
2020-03-13 03:00:00 至 2021-09-04 23:55:00 (312后,近期)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
8 [180] 36.612703 51.0 50.0 101.0 10.898383 -0.796166 13.688590 0.0 2021-06-03 20:00:00
16 [340] 23.956646 16.0 18.0 34.0 7.887684 -0.767430 10.278053 0.0 2021-08-01 16:00:00
14 [300] 22.028770 23.0 22.0 45.0 7.389336 -0.722400 10.228873 0.0 2021-05-23 20:00:00
三个时间段,180是穿越牛熊的参数

简单自适应动量策略(非布林上下轨)(真自适应版)
如果要自适应,就是一组样本里,比较贴近0值的数,这个数值
回测过程中发现用max描述,值太大,出信号太少
用min描述有负数,只能用在下轨
想把p自适应掉,选取mtm动量正值里最小的作为开多条件(反之负值里最大的为开空条件)
严格意义上来说,这里还不算完全自适应,还有个与0的比较,如果与1比较呢?

df['up_p'] = df[df['mtm'] > 0]['mtm'].rolling(window=n).min()  # 自适应计算p
df['up_p'].fillna(method='ffill', inplace=True)	# 不用fill,mtm>0时一定会有up_p值

回测中发现:
因为up_p选择大于0的最低点,一出现mtm正数,基本都会开仓,除非第一次出现的n天内最低值,这时mtm=up_p,不会开仓

spot:2017-08-17 04:00:00 至2021-08-31 23:55:00(全部)在这里插入图片描述

两个参数高原180附近和750附近
df[‘mtm’] > 1
在这里插入图片描述
df[‘mtm’] > 2
在这里插入图片描述
df[‘mtm’] > 3

在这里插入图片描述

df[‘mtm’] > 4
在这里插入图片描述
df[‘mtm’] > 5
在这里插入图片描述
结论:基准线的值不影响最大回撤和累计净值,只影响交易次数,默认用0

想把0完全自适应掉

  df['mtm_mean'] = df['mtm'].rolling(window=n).mean()  # 求mtm均值
df['up_p'] = df[df['mtm'] > df['mtm_mean']]['mtm'].rolling(window=n).min()  # 自适应计算p

回测效果并不好,mtm动量的定义,和历史情况的相关性,原不如0值
ETH,4H
在这里插入图片描述
ETH,2H
在这里插入图片描述

spot:2017-08-17 04:00:00 至2020-08-31 23:55:00(魔2期标准)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
25 [126] 192.824222 149.0 151.0 300.0 4.726822 -0.736834 6.415044 0.0 2019-11-17 04:00:00
30 [151] 214.783737 111.0 118.0 229.0 4.935385 -0.800799 6.163073 0.0 2019-11-20 04:00:00
42 [211] 124.276157 65.0 65.0 130.0 3.950399 -0.682936 5.784436 0.0 2018-02-06 04:00:00
43 [216] 111.283037 60.0 61.0 121.0 3.772367 -0.725487 5.199771 0.0 2019-03-29 20:00:00
27 [136] 122.871335 135.0 135.0 270.0 3.931769 -0.766725 5.128007 0.0 2019-11-15 16:00:00
36 [181] 72.107938 101.0 97.0 198.0 3.132686 -0.728807 4.298377 0.0 2019-02-15 20:00:00
29 [146] 102.669370 127.0 132.0 259.0 3.646537 -0.868681 4.197784 0.0 2019-11-19 00:00:00
33 [166] 72.615940 98.0 102.0 200.0 3.142320 -0.882282 3.561583 0.0 2020-01-11 20:00:00
151 [756] 31.431118 24.0 22.0 46.0 2.137802 -0.659964 3.239268 0.0 2019-08-31 16:00:00
26 [131] 48.487136 158.0 155.0 313.0 2.622992 -0.831349 3.155102 0.0 2019-11-18 08:00:00
2020-03-13 03:00:00 至 2021-09-04 23:55:00 (312后,近期)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
36 [181] 102.861212 41.0 35.0 76.0 23.213356 -0.770587 30.124254 0.0 2021-06-03 20:00:00
49 [246] 54.057808 23.0 19.0 42.0 14.555516 -0.710352 20.490569 0.0 2021-05-29 16:00:00
81 [406] 36.373017 5.0 4.0 9.0 10.844752 -0.623506 17.393191 0.0 2021-07-20 00:00:00
37 [186] 48.283799 37.0 35.0 72.0 13.392701 -0.791352 16.923819 0.0 2021-06-03 20:00:00
80 [401] 34.571651 5.0 6.0 11.0 10.438086 -0.621395 16.797839 0.0 2021-07-20 00:00:00
56 [281] 33.046406 7.0 6.0 13.0 10.088557 -0.623693 16.175505 0.0 2021-08-03 16:00:00
35 [176] 33.878617 48.0 43.0 91.0 10.279878 -0.727873 14.123172 0.0 2021-03-26 08:00:00
44 [221] 32.309249 31.0 28.0 59.0 9.917828 -0.774785 12.800742 0.0 2021-05-28 20:00:00
43 [216] 32.729222 28.0 26.0 54.0 10.015243 -0.794560 12.604760 0.0 2021-07-07 08:00:00
61 [306] 24.734830 5.0 3.0 8.0 8.085263 -0.656846 12.309224 0.0 2021-08-04 08:00:00
结论180参数在4H周期表现亮眼
看看2H周期
spot:2017-08-17 04:00:00 至2021-08-31 23:55:00(全部)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
86 [431] 1647.456483 122.0 125.0 247.0 5.293814 -0.695911 7.607027 0.0 2021-05-31 02:00:00
85 [426] 889.396884 140.0 139.0 279.0 4.400382 -0.689690 6.380235 0.0 2021-05-22 12:00:00
76 [381] 910.304335 161.0 158.0 319.0 4.431636 -0.861742 5.142648 0.0 2021-06-03 08:00:00
72 [361] 880.339053 192.0 187.0 379.0 4.386671 -0.857116 5.117941 0.0 2019-02-14 00:00:00
59 [296] 429.370341 226.0 226.0 452.0 3.506908 -0.814137 4.307515 0.0 2019-11-20 06:00:00
spot:2017-08-17 04:00:00 至2020-08-31 23:55:00(魔2期标准)
基本在400附近,符合预期,是4H参数的2倍

para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
86 [431] 142.027369 81.0 81.0 162.0 4.173252 -0.686319 6.080633 0.0 2018-02-06 06:00:00
60 [301] 164.329031 175.0 168.0 343.0 4.429614 -0.743891 5.954657 0.0 2019-11-20 06:00:00
85 [426] 67.948464 93.0 92.0 185.0 3.051187 -0.686471 4.444745 0.0 2018-02-06 06:00:00
59 [296] 87.739345 162.0 161.0 323.0 3.409575 -0.814137 4.187961 0.0 2019-11-20 06:00:00
76 [381] 75.321835 117.0 113.0 230.0 3.191981 -0.766220 4.165882 0.0 2019-02-10 22:00:00
2020-03-13 03:00:00 至 2021-09-04 23:55:00 (312后,近期)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
72 [361] 109.431141 56.0 51.0 107.0 24.253967 -0.619760 39.134429 0.0 2021-06-03 08:00:00
85 [426] 55.767001 47.0 45.0 92.0 14.885258 -0.689690 21.582543 0.0 2021-05-22 12:00:00
86 [431] 53.409738 36.0 38.0 74.0 14.420380 -0.695911 20.721588 0.0 2021-05-31 02:00:00
88 [441] 47.762706 43.0 39.0 82.0 13.279719 -0.705608 18.820253 0.0 2021-05-28 22:00:00
73 [366] 46.849132 62.0 57.0 119.0 13.091318 -0.723944 18.083339 0.0 2021-06-03 08:00:00
431表现稳定

叠加因子效果也不明显
在这里插入图片描述

叠加母布林效果不够好(估计是181参数太大,需要k线太多了)
在这里插入图片描述

mtm_bolling_adapt
mtm构建布林自适应(mtm平滑后)(J神动量自适应基础)
spot:2017-08-17 04:00:00 至2020-08-31 23:55:00(魔2期标准)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
3 [4] 7.973358 1031.0 1048.0 2079.0 0.988225 -0.977047 1.011441 0.0 2020-08-14 00:00:00
32 [33] 6.623642 129.0 129.0 258.0 0.872109 -0.893672 0.975871 0.0 2019-03-27 20:00:00
28 [29] 5.790585 144.0 155.0 299.0 0.790483 -0.861934 0.917104 0.0 2017-12-11 20:00:00
2020-03-13 03:00:00 至 2021-09-04 23:55:00 (312后,近期)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
65 [66] 1.649749 27.0 31.0 58.0 0.411052 -0.753542 0.545493 0.0 2021-07-27 00:00:00
29 [30] 1.413910 58.0 59.0 117.0 0.269001 -0.953898 0.282002 0.0 2021-02-24 08:00:00
63 [64] 1.048109 23.0 34.0 57.0 0.032846 -0.713986 0.046004 0.0 2021-04-07 20:00:00
[4] 累计净值: 8.779187740459618e-05 年化收益: -0.9984017108822286 最大回撤 -0.9999411318784476 年化收益回撤比: -0.9984604883756236 交易次数: 1097
[4]在魔2期回测区间表现优异,J神v3策略叠加因子后效果炸裂,是mtm构建布林自适应优秀表现为基础的
但[4]参数稳定性不足,在312后全面失效

根据简单mtm自适应经验,mtm的分布应该是围绕0,而不是围绕平均值:
在这里插入图片描述
修改mtm_bolling_adapt中:df[‘median’] = 0
修改前:(df[‘median’] = df[indicator].rolling(window=n).mean())和J神v3不叠加因子,不加母布林完全一致
在这里插入图片描述
修改后:(df[‘median’] = 0)
在这里插入图片描述
回测结果全面提升
可是叠加三因子后没有特殊效果了,叠加母布林也没有特殊效果。。。
在这里插入图片描述
不叠加因子,只叠加母布林有效(筛选掉不合理交易)
在这里插入图片描述

动量布林后,不平滑mtm反而效果不好
在这里插入图片描述

mtm不平滑本身效果更好点,但叠加因子后不行
mtm构建布林自适应(mtm不平滑)(J神动量自适应基础)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
47 [48] 103.923900 297.0 283.0 580.0 3.665292 -0.695734 5.268237 0.0 2017-11-12 20:00:00
45 [46] 79.650551 305.0 293.0 598.0 3.271323 -0.736293 4.442964 0.0 2018-05-10 04:00:00
46 [47] 86.271586 300.0 281.0 581.0 3.385956 -0.766588 4.416917 0.0 2017-11-12 20:00:00
J神v3中测试
adaptboll_with_mtm_v3_2para ETH 2 4H all [48, 35]
累计净值: 1.3592
思路:自适应动量策略(非布林上下轨),能否叠加因子?

简单动量
spot:2017-08-17 04:00:00 至2021-08-31 23:55:00(全部)
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
38 [12, 153] 120.643508 533.0 530.0 1063.0 2.285322 -0.879306 2.599007 0.0 2020-07-20 16:00:00
43 [12, 173] 110.713876 505.0 504.0 1009.0 2.215976 -0.854222 2.594144 0.0 2020-07-20 16:00:00
40 [12, 161] 90.565345 518.0 518.0 1036.0 2.059453 -0.883645 2.330632 0.0 2020-07-20 16:00:00
以上参数范围太小
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
249 [180, 197] 856.155347 97.0 97.0 194.0 4.350552 -0.881116 4.937547 0.0 2017-11-14 20:00:00
247 [180, 189] 646.143499 101.0 101.0 202.0 3.989307 -0.881116 4.527561 0.0 2017-11-14 20:00:00
243 [180, 173] 584.009899 105.0 107.0 212.0 3.865573 -0.882144 4.382021 0.0 2017-11-14 20:00:00

简单动量自适应
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
37 [760] 798.652080 40.0 40.0 80.0 4.258945 -0.740367 5.752476 0.0 2021-07-16 08:00:00
8 [180] 416.679496 157.0 155.0 312.0 3.474211 -0.796166 4.363679 0.0 2021-06-03 20:00:00
38 [780] 330.673038 27.0 24.0 51.0 3.224525 -0.811912 3.971520 0.0 2021-07-22 08:00:00

简单动量平滑后自适应
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
3 [80] 653.894146 56.0 55.0 111.0 4.004105 -0.864507 4.631664 0.0 2019-11-21 00:00:00
4 [100] 28.811025 43.0 42.0 85.0 1.304256 -0.902556 1.445070 0.0 2019-11-29 12:00:00
1 [40] 16.331729 115.0 114.0 229.0 1.001232 -0.974702 1.027219 0.0 2020-12-29 00:00:00
5 [120] 7.251049 35.0 34.0 69.0 0.635722 -0.985847 0.644849 0.0 2020-04-07 04:00:00
0 [20] 2.015989 233.0 232.0 465.0 0.189039 -0.902777 0.209397 0.0 2018-01-20 20:00:00
8 [180] 2.120587 19.0 18.0 37.0 0.205276 -0.987066 0.207966 0.0 2020-11-03 00:00:00
38 [780] 0.000000 4.0 3.0 7.0 -1.000000 -1.000000 -1.000000 0.0 2021-09-04 20:00:00
参数孤岛,只有前6个参数是正期望
参数集中在60-80附近
para equity_curve test_buy_long_times test_sell_short_times 累计交易次数 年化收益 最大回撤 sharpe 最大回撤开始时间 最大回撤结束时间
39 [80] 653.894146 56.0 55.0 111.0 4.004105 -0.864507 4.631664 0.0 2019-11-21 00:00:00
38 [78] 612.088732 54.0 53.0 107.0 3.922657 -0.882516 4.444855 0.0 2021-07-30 00:00:00
32 [66] 541.203625 62.0 61.0 123.0 3.774441 -0.925467 4.078417 0.0 2021-07-26 16:00:00
33 [68] 491.551192 58.0 57.0 115.0 3.661676 -0.955643 3.831637 0.0 2021-07-26 16:00:00

MTM保持正值,但不会盈利
开仓信号出现后,
  附录:几种指标形成信号的方法
  1、设置上下轨(常数、标准差倍数、自适应方法),指标突破上下轨作为信号
  2、设置中轨(平滑均线),指标突破中轨开仓或平仓

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

779醒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值