跳到主要内容

K<20买,K>80卖真能打败大盘?用KD指标回测0050历史股价

· 8 分钟阅读
Eric Cheng

日K<20买,日K>80卖?有点意外,这么简单的交易的交易模型竟然能有这样的讨论声量。其实不太需要争论,最简单的方法就是直接写一支程式回测,这个交易策略能不能用就一目了然了

回测时间

2003-06-30 (0050的上市日) ~ 2021-12-13,时间约18年半

买卖条件

  • 日K<20买进,日K>80卖出,买卖日为隔天开盘价,ex: 2021-11-25 K值 28.60,2021-11-26 K值 13.65(跌破20),则在下一个交易日 2021-11-29 以开盘价买入
  • KD 参数使用台股常用的 933,即
    • 第一个参数9:代表RSV值的设定周期为9
    • 第二个参数3:代表K值计算公式中的两个分母
    • 第三个参数3:代表D值计算公式中的两个分母
  • 一次即买入或卖出全部资金,无加减码
  • 不放空
  • 不考虑股息
  • 先不考虑交易成本及滑价(用开盘价买卖也没有滑价的问题)

回测结果

最近五笔交易为

买进时间买进价位卖出时间卖出价位报酬率持续时间
2021/11/29137.62021/12/7141.352.73%8天
2021/10/4134.72021/10/20137.051.75%16天
2021/8/17135.42021/8/30138.652.40%13天
2021/7/22137.82021/8/5139.251.05%14天
2021/5/6136.32021/5/26134.85-1.06%20天

肉眼比对程式跑出的结果,和看盘软体显示的结果一致,程式看起来没有写错,18年半来总共会进行126笔交易,完整交易记录下载连结如下: 下载

回测使用的 library 为 backtesting.py,回测结果截图如下 0050-kd-backtesting.py-result

小评 partⅠ

  • 胜率 72.22%,这大概是最亮眼的地方,7成胜率在交易系统中算相当不错,虽然很多人觉得胜率是交易系统中最不重要的指标
  • Max Drawdown -39.90%,还不错,因为这个区间有经历到 2008 金融风暴,4成左右的最大亏损还算 OK
  • 总报酬率 193.12%,年化报酬率 6.11%,每个人对报酬率的要求不同,我个人是不满意
  • 夏普值 0.398,以我的标准是不及格

眼尖的人应该有看到一栏 Buy & Hold Return:281.61%,比这个策略的 193.12% 高,即然回测工具都特别写 Buy & Hold 的报酬了,当然再写一支程式来做对比

对比 Buy & Hold

直接上图,蓝线为0050 buy and hold 的净值,橘线上为使用这个交易策略

走势图

0050-kd-ffn-1

最大亏损

0050-kd-ffn-2

这里用的 library 是 ffn,截图资讯太多,简单整理个表格,两个 library 算出来的值有点不太一样

 总报酬率最大亏损CAGR年化报酬率(Daily)年化波动率(Daily)夏普值(Daily)
buy & hold281.61%-58.97%7.53%9.41%20.04%0.47
kd 策略193.12%-39.90%6.00%6.98%14.42%0.48

如果看不懂这些数据的话,建议可以先看我另一篇文章: 如何评价一个交易策略或投资组合的好坏

小评 partⅡ

其实不太容易评断这两个交易谁比较好

  • 以报酬率来看 buy & hold 报酬率较高
  • 以波动率和最大亏损来看,kd 策略风险较低
  • 以综合的评分夏普值来看,两个交易刚好打平
  • buy & hold 有完整的股息,kd 策略 发放股息的时候不一定有部位,所以实际上 buy & hold 的报酬会再好一点

加入交易成本

应该还记得前面的 kd 策略是不含交易成本的,事实上台股的交易成本并不低,有0.1425%的手续费还要买卖各扣一次,还有0.1%的交易税 (2022-01-09 更新,ETF 的交易税应为 0.1%,不是 0.3%)

现在我们加入交易成本 0.001425*2*0.28+0.003 = 0.003798 (手绩费用2.8折,够有诚意了吧),重跑刚才程式,新的结果如下

走势图

0050-kd-ffn-3

最大亏损

0050-kd-ffn-4

 总报酬率最大亏损CAGR年化报酬率(Daily)年化波动率(Daily)夏普值(Daily)
buy & hold281.61%-58.97%7.53%9.41%20.04%0.47
kd 策略134.52%-40.11%4.73%5.75%14.41%0.40

小评 partⅢ

加了交易成本后应该就很好选了,一个是买了后就不理它,一个还要辛苦的杀进杀出,结果最后的净值不到无脑 buy & hold 的一半

本来想说点什么

其实有回测之前我就大概猜出结果了,一般的交易系统大致可以分为「顺势交易」和「逆势交易」两种,这个策略属于后者,逆势交易的特性是胜率高(刚才的回测也证实了),单笔获利小也就是俗称的小赚大赔,而且有个致命的缺点是当大行情来时,无法捉到完整波段,也就是和大赚无缘,从走势图就可以很明显看出,在2019、2020台股大涨的时候,这个策略几乎没有获利,原因很简单,因为 K>80 把股票卖掉却找不到时机重新进场,就眼睁睁看着股价上涨却毫无作为

逆势交易不好吗?不见得,取决于写策略的功力。不过逆势交易的策略不好写(相对于顺势交易),而且很容易流于对参数的最佳化而造成 overfitting。这个主题很大,讲下去没完没了不是几篇文章就能解释的,就先到此为止吧

总之网路上的话听听就好,还是要有独立判断的能力

版权声明

,转载请注明出处
本文键接: https://havocfuture.tw/zh-hans/blog/0050-kd-backtesting