MACD 设置
原文:
www.backtrader.com/blog/posts/2016-07-30-macd-settings/macd-settings/
在Reddit的Algotrading网站上发现了一个关于优化 MACD 设置的帖子。
由于《走向财务自由的交易》- 亚马逊链接,我开始了backtrader的探索,我别无选择,只能发布答案并制作一个示例。
该策略的方法在某种程度上基于该书中提出的一些观点。没有新鲜事。参数已经快速设置。没有过度拟合,没有优化,什么都没有。大致:
- 如果
macd
线向上穿过signal
线,并且控制Simple Moving Average
在最后的 x 个周期内具有净负方向(当前SMA值低于 x 个周期前的值),则进入市场 - 设置
stop
价格,即比close
价格远N x ATR
倍 - 如果
close
价格低于stop
价格,则退出市场 - 如果仍然在市场上,则仅在
stop
价格高于实际价格时更新
下注由以下方式完成:
- 通过
Sizer
分配可用现金的百分比给操作。策略赢得越多,押注就越大… 而策略输得越多,押注就越小。
包含了佣金。因为测试将使用股票进行,所以选择了百分比佣金,其值为0.0033
(即每往返交易的0.33%
)。
为了付诸实施,将进行 3 次运行,每次运行 3 个数据(共 9 次运行)
- 手动选择的标准参数
- 将现金分配百分比从
0.20
增加到0.50
- 将 ATR 距离从
3.0
增加到4.0
,以尝试避免被鞭打
为策略手动选择的参数:
params = ( # Standard MACD Parameters ('macd1', 12), ('macd2', 26), ('macdsig', 9), ('atrperiod', 14), # ATR Period (standard) ('atrdist', 3.0), # ATR distance for stop price ('smaperiod', 30), # SMA Period (pretty standard) ('dirperiod', 10), # Lookback period to consider SMA trend direction )
并且系统范围内:
parser.add_argument('--cash', required=False, action='store', type=float, default=50000, help=('Cash to start with')) parser.add_argument('--cashalloc', required=False, action='store', type=float, default=0.20, help=('Perc (abs) of cash to allocate for ops')) parser.add_argument('--commperc', required=False, action='store', type=float, default=0.0033, help=('Perc (abs) commision in each operation. ' '0.001 -> 0.1%%, 0.01 -> 1%%'))
日期范围将从2005-01-01
到2014-12-31
,共 10 年。
分析器
为了获得一些客观数据,将向系统添加 3 个分析器:
- 两个用于整个时期的
TimeReturn
- 对于策略本身
- 用作基准操作的数据
- 将策略与资产进行有效的基准比较
- 一个用于测量年度回报率的
TimeReturn
- 一个
SharpeRatio
用于查看策略相对于无风险资产的表现如何
该值设置为1%
,可通过示例选项更改 - 一个用于分析交易质量的
SQN
(系统质量数),使用 Van K. Tharp 定义的性能指标
此外,将添加一个DrawDown
观察器到混合中。
Run 1:标准参数
YHOO
$ ./macdsystem.py --plot --dataset yhoo =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: -0.07118518868 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 0.316736183525 =============================================================================== TimeReturn: - 2005-12-31: 0.02323119024 - 2006-12-31: -0.0813678018166 - 2007-12-31: -0.0144802141955 - 2008-12-31: -0.142301023804 - 2009-12-31: 0.0612152927491 - 2010-12-31: 0.00898269987778 - 2011-12-31: -0.00845048588578 - 2012-12-31: 0.0541362123146 - 2013-12-31: 0.0158705967774 - 2014-12-31: 0.0281978956007 =============================================================================== SharpeRatio: - sharperatio: -0.261214264357 =============================================================================== SQN: - sqn: -0.784558216044 - trades: 45
ORCL
$ ./macdsystem.py --plot --dataset orcl =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 0.24890384718 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 2.23991354467 =============================================================================== TimeReturn: - 2005-12-31: -0.02372911952 - 2006-12-31: 0.0692563226579 - 2007-12-31: 0.0551086853554 - 2008-12-31: -0.026707886256 - 2009-12-31: 0.0786118091383 - 2010-12-31: 0.037571919146 - 2011-12-31: 0.00846519206845 - 2012-12-31: 0.0402937469005 - 2013-12-31: -0.0147124502187 - 2014-12-31: 0.00710131291379 =============================================================================== SharpeRatio: - sharperatio: 0.359712552054 =============================================================================== SQN: - sqn: 1.76240859868 - trades: 37
NVDA
$ ./macdsystem.py --plot --dataset nvda =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: -0.0178507058999 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: -0.177604931253 =============================================================================== TimeReturn: - 2005-12-31: 0.0773031957141 - 2006-12-31: 0.105007457325 - 2007-12-31: 0.015286423657 - 2008-12-31: -0.109130552525 - 2009-12-31: 0.14716076542 - 2010-12-31: -0.0891638005423 - 2011-12-31: -0.0788216550171 - 2012-12-31: -0.0498231953066 - 2013-12-31: -0.0119166712361 - 2014-12-31: 0.00940493597076 =============================================================================== SharpeRatio: - sharperatio: -0.102967601564 =============================================================================== SQN: - sqn: -0.0700412395071 - trades: 38
Run 1 的分析
- YHOO
第 1^(st)和第 2^(nd)个TimeReturn
分析器(策略和资产本身)表明,策略损失了7.11%
,而所涉及的资产则升值了31.67%
。
甚至都不值得去看其他的分析器 - ORCL
策略为24.89%
,但被资产本身的223.99%
回报所淡化。
SharpeRatio 为0.35
,仍然远离通常的最低目标1
。
SQN 返回了1.76
,至少在 Van K. Tharp 尺度上获得了评分:1.6 - 1.9 低于平均水平
。 - NVDA
在这种情况下,策略为-1.78%
,资产为-17.76%
。 SharpeRatio 为-0.10
,表明即使策略表现优于资产,选择1%
的银行账户也更好。
SQN 显然甚至没有达到尺度的底部。
第 1 次运行的结论
- 1 次巨大的损失,一次平局和一次表现不佳的胜利。并不成功。
第 2 次运行:现金分配为 0.50
YHOO
$ ./macdsystem.py --plot --dataset yhoo --cashalloc 0.50 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: -0.20560369198 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 0.316736183525 =============================================================================== TimeReturn: - 2005-12-31: 0.05517338686 - 2006-12-31: -0.195123836162 - 2007-12-31: -0.0441556438731 - 2008-12-31: -0.32426212721 - 2009-12-31: 0.153876836394 - 2010-12-31: 0.0167157437151 - 2011-12-31: -0.0202891373759 - 2012-12-31: 0.13289763017 - 2013-12-31: 0.0408192946307 - 2014-12-31: 0.0685527133815 =============================================================================== SharpeRatio: - sharperatio: -0.154427699146 =============================================================================== SQN: - sqn: -0.97846453428 - trades: 45
ORCL
$ ./macdsystem.py --plot --dataset orcl --cashalloc 0.50 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 0.69016747856 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 2.23991354467 =============================================================================== TimeReturn: - 2005-12-31: -0.0597533502 - 2006-12-31: 0.176988400688 - 2007-12-31: 0.140268851352 - 2008-12-31: -0.0685193675128 - 2009-12-31: 0.195760054561 - 2010-12-31: 0.0956386594392 - 2011-12-31: 0.018709882089 - 2012-12-31: 0.100122407053 - 2013-12-31: -0.0375741196261 - 2014-12-31: 0.017570390931 =============================================================================== SharpeRatio: - sharperatio: 0.518921692742 =============================================================================== SQN: - sqn: 1.68844251174 - trades: 37
NVDA
$ ./macdsystem.py --plot --dataset nvda --cashalloc 0.50 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: -0.128845648113 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: -0.177604931253 =============================================================================== TimeReturn: - 2005-12-31: 0.200593209479 - 2006-12-31: 0.219254906522 - 2007-12-31: 0.0407793562989 - 2008-12-31: -0.259567975403 - 2009-12-31: 0.380971100974 - 2010-12-31: -0.208860409742 - 2011-12-31: -0.189068154062 - 2012-12-31: -0.122095056225 - 2013-12-31: -0.0296495770432 - 2014-12-31: 0.0232050942344 =============================================================================== SharpeRatio: - sharperatio: -0.0222780544339 =============================================================================== SQN: - sqn: -0.190661428812 - trades: 38
第 2 次运行的结论
- 将每次操作中现金分配的百分比从
20%
增加到50%
,已增加了先前结果的影响
- 在 YHOO 和 NVDA 上的策略比以前损失更多
- 而在 ORCL 上的策略赢得了比以前更多,但仍然不接近资产的超过 220%。
第 3 次运行:ATR 距离为 4.0
仍然保持先前将现金分配增加到 50%
。 这个想法是避免过早离开市场。
YHOO
$ ./macdsystem.py --plot --dataset yhoo --cashalloc 0.50 --atrdist 4.0 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 0.01196310622 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 0.316736183525 =============================================================================== TimeReturn: - 2005-12-31: 0.06476232676 - 2006-12-31: -0.220219327475 - 2007-12-31: -0.0525484648039 - 2008-12-31: -0.314772526784 - 2009-12-31: 0.179631995594 - 2010-12-31: 0.0579495723922 - 2011-12-31: -0.0248948026947 - 2012-12-31: 0.10922621981 - 2013-12-31: 0.406711050602 - 2014-12-31: -0.0113108751022 =============================================================================== SharpeRatio: - sharperatio: 0.0495181271704 =============================================================================== SQN: - sqn: -0.211652416441 - trades: 33
ORCL
$ ./macdsystem.py --plot --dataset orcl --cashalloc 0.50 --atrdist 4.0 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 0.21907748452 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 2.23991354467 =============================================================================== TimeReturn: - 2005-12-31: -0.06660102614 - 2006-12-31: 0.169334910265 - 2007-12-31: 0.10620478758 - 2008-12-31: -0.167615289704 - 2009-12-31: 0.17616784045 - 2010-12-31: 0.0591200431984 - 2011-12-31: -0.100238247103 - 2012-12-31: 0.135096589522 - 2013-12-31: -0.0630483842399 - 2014-12-31: 0.0175914485158 =============================================================================== SharpeRatio: - sharperatio: 0.144210776122 =============================================================================== SQN: - sqn: 0.646519270815 - trades: 30
NVDA
$ ./macdsystem.py --plot --dataset nvda --cashalloc 0.50 --atrdist 4.0 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: 0.48840287049 =============================================================================== TimeReturn: - 9999-12-31 23:59:59.999999: -0.177604931253 =============================================================================== TimeReturn: - 2005-12-31: 0.246510998277 - 2006-12-31: 0.194958106054 - 2007-12-31: -0.123140650516 - 2008-12-31: -0.246174938322 - 2009-12-31: 0.33121185861 - 2010-12-31: -0.0442212647256 - 2011-12-31: 0.0368388717861 - 2012-12-31: -0.048473112136 - 2013-12-31: 0.10657587649 - 2014-12-31: 0.0883112536534 =============================================================================== SharpeRatio: - sharperatio: 0.264551262551 =============================================================================== SQN: - sqn: 0.564151633588 - trades: 29
第 3 次运行的结论
- 鸡,鸡,赢家的晚餐!!该策略在这 3 个资产上赚了钱
- YHOO:
1.19%
对比资产本身的31.67%
回报 - ORCL:
21.90%
对比资产的223.99%
- 在这种情况下,增加
ATRDist
参数已经降低了 第 2 次运行 的先前收益,即69.01%
- NVDA:
48.84%
对比资产的-17.76%
。
- 这里令人惊讶的是 SharpeRatio 和 SQN 表明
BackTrader 中文文档(二十二)(2)https://developer.aliyun.com/article/1505426