小散量化炒股记|说某个指标能赚钱?不盲从,先量化回测一番!

前言

相信大家都听说了量化交易这个东西了吧!量化交易是一种新兴的系统化金融投资方法。

那么,什么才是普通股民所适合的量化交易打开方式呢?

本文就用一个接地气的股票分析场景 —— 用量化回测来识别技术指标到底能不能赚钱 来和大家分享一下,普通股民如何去使用量化交易!

技术指标的优点 

技术指标分析股票走势,由于其简单、直观、便于理解,是小散们最为广泛使用的炒股方法。行情软件上会提供各种技术指标的走势,各路股评大V也都乐此不疲地拿技术指标来预判行情。

确实对于中小散户来说,很难解读政策层面是利好还是利空,也无法了解上市公司内部运营的实质状况以及发布的公告对股价的影响有多大。

由于市场行为会包容消化一切盘面信息,所以最终会体现在了股价的走势上。于是当指标走好时,表明有资金进场,我们只需要跟着主力进场就行。当资金离场时一切指标都会走坏,我们也只需要跟着主力离场即可。

如何实现量化回测 

通常的炒股书籍上会介绍某个技术指标的用法,然后配上一幅相匹配的股价走势图,来验证这个用法是可行的。

我们做量化的话不能管中窥豹,要用回测的方法从各个角度去评估指标的效用。

关于回测的方式。我们使用BackTrader这个开源量化框架。BackTrader的作者是个德国人,相比较而言,框架的代码结构比较合理、扩展性和性能也不错、使用文档比较详细清晰,于是从综合上选择了BackTrader。

关于交易标的选择。由于技术指标关注的点在于股价和成交量的变化,并不会去考虑该股的行业属性。而个股的走势还与所属行业和自身经营业务呈现一定规律。为了排除这部分的干扰,此处我们使用上证指数进行回测,这样能把重点放在指标的特性上。

关于指标的选择。我们分别选取趋势类指标代表MA和震荡类指标代表KDJ进行回测。

MA指标策略:买入条件是短期MA上穿长期MA形成金叉;卖出条件是短期MA下穿长期MA形成均线死叉。

KDJ指标策略:当K线由下向上穿过D线时,即所谓“黄金交叉”释放出买入信号;当K线由上向下穿过D线时,出现“死亡交叉”释放出卖出信号。

如何使用Backtrader 

BackTrader的使用步骤大体为如下几步:

(1) 创建一个策略类,这个类要继承自backtrader.Strategy,然后就可以自定义里面的方法。

class my_strategy(bt.Strategy):

(2)  策略类中有一个属性params,用于定义一些在策略中可调参数值。

params=(
        ('ma_short',10),
        ('ma_long', 30),
        ('kd_period', 5),
        ('kd_period_dfast', 3),
        ('kd_period_dslow', 3)
       )

(3) backtrader.indicators内置了许多指标的计算方法,比如移动平均线、MACD、RSI等等,使用时只需要实例化策略中会使用到的技术指标即可。

# 添加移动均线指标
self.sma_short = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.p.ma_short)
self.sma_long = bt.indicators.SimpleMovingAverage(self.datas[0], period=self.p.ma_long)


# 添加KDJ指标
self.kd = bt.indicators.StochasticFull(self.datas[0], period=self.p.kd_period, period_dfast=self.p.kd_period_dfast, period_dslow=self.p.kd_period_dslow)
self.K = self.kd.percD
self.D = self.kd.percDSlow
self.J = self.K * 3 - self.D * 26

(4) next函数中编写交易策略,也就是进入市场和退出市场的逻辑

(5)创建一个策略决策引擎Cerebro,把定义的策略注入到决策引擎之中,把行情数据注入到决策引擎之中,设置初始资金、手续费等等,然后运行引擎

cerebro = bt.Cerebro()
cerebro.adddata(data)
cerebro.addstrategy(my_strategy)
cerebro.broker.setcash(10000000)

(6) 以可视化方式反馈回测结果

开始量化回测 

接下来先回测下MA指标策略,指标参数为常用的短期MA10,长期MA30。

Backtrader可视化回测效果如下所示:

图表包含了五个子图,由上往下分别为资金变动图、交易盈亏图、回撤跟踪图、买卖区间图、技术指标图。

(1)资金变动图:可以看到在策略回测期间,资金的盈利和损失。红色的是现金变动,蓝色是资产变动(包含了现金)

(2)交易盈亏图。在交易结束时(买入-卖出)显示实际盈利/亏损。蓝色点表示获利,红色点表示亏损,纵坐标表示获利/亏损的幅度。

(3)买卖区间图。这个图体现了买卖点在行情走势中的位置。绿色和红色箭头分别表示交易策略的进入点和退出点。行情走势图则包含了均线、K线、成交量等。

(4)回撤跟踪图。描述了买入股票后,跟踪策略会亏损多少钱。

(5)技术指标图。图表上可以扩展一些技术指标的子图,此处扩展了KDJ指标。

很遗憾,初始资金10000000.00,最终资金9999873.03,此处我还没加上手续费、滑的影响,否则亏损会更多。

所以,重点是当我们看到炒股书上介绍的某个指标有多好用时,不妨用回测的方式来验证下。

接下来再回测下KDJ指标策略,指标参数为(5,3,3)。回测效果如下所示:

这次是盈利的,最终资金为10000192.02。

以上结果只是对于上证指数而言,如果要更加客观地评价指标的效用,需要用更多地标去验证。比如换成深证综指,如下所示:

除了多个标的验证外,还有不同参数组合的验证。一方面是为了对参数优化,另一方面也是为了验证策略的稳定性,以及收益对参数变化的敏感性。

比如MA策略的话,我们验证下长期均线分别为25到35时策略的效果如何。如下所示:

2020-06-01, 金叉死叉策略 25 Ending Value 99999985.96

2020-06-01, 金叉死叉策略 26 Ending Value 99999954.95

2020-06-01, 金叉死叉策略 27 Ending Value 99999954.95

……

2020-06-01, 金叉死叉策略 34 Ending Value 99999869.05

分享以上的这些回测过程和结果,是想告诉大家,无论如何没有一个策略是不管什么阶段都能永远賺大钱的。这也是所有策略的通病,包括量化策略。

所以在制定策略的时候,如果选择平稳的策略一定要回测足够长的周期,用足够多的数据样本。十年1000次的交易会比五年500次交易要来的稳定可靠!如果是选择阶段有效的策略,那么主观上要对行情阶段要有大局上的把握,才能因地制宜地选取策略!

总结

通过这个简单而又实用的股票量化场景,希望能够给广大朋友对于量化交易有一个直观的感受。

然后,我们应该升级自己的炒股方式了,把自己以前炒股的那套方法,抽象成策略模型,用量化的方法去全市场回测评估,然后让程序帮助我们监测行情的走势。

这个才是普通股民所适合的量化交易打开方式!

关于例程中的代码,我们会上传至《玩转股票量化交易》知识星球(知识星球的目录可点击【阅读原文】查看)。

更多量化交易内容扫码加入星球!

—————————————————

往期回顾

小散量化炒股记|只用一分钟选出底部放量跳空上扬的强势股

小散量化炒股记|不用追高!Python告诉你强势股回调介入的位置

小散量化炒股记|一文揭秘主力、散户资金流入流出的来龙去脉

小散量化炒股记|搭建本地化的股票量化数据库这么几步就够了

小散量化炒股记|Python数据透视表和热力图跟踪行业板块热点切换

小散量化炒股记|趋势指标金叉死叉策略在震荡行情中怎么处理

小散量化炒股记|只花几秒钟!多任务爬虫获取A股每日实时行情数据

小散量化炒股记|股价如波浪起伏,教你用量化识别波段的极值点

元宵大师的量化交易书籍开售!!京东、当当、天猫有售!!凭订单进读者交流群获取工具源码!
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值