相信大家都听说了量化交易这个东西了吧!量化交易是一种新兴的系统化金融投资方法。
那么,什么才是普通股民所适合的量化交易打开方式呢?
本文就用一个接地气的股票策略场景 —— 用自适应的动态参数优化策略中的指标参数 来和大家分享一下,普通股民如何去使用量化交易!
指标参数的重要性在股票技术指标分析过程中,对于指标参数的选择是非常关键的一个环节。
比如对于均线策略, 5日反映的是股价一周的走势,会作为短线操作的均线参数,同理30日、60日是侧重于中长线操作的参数。
如果我们全部选择5日参数作为指标参数,那么策略出现交易信号时候一定会存在非常大的滑点,导致买卖的成本很高,甚至下单失效。
所以对于参数的选择我们要进行一些优化的处理。
我在《Python股票量化交易从入门到实践》书中分别介绍了枚举法和蒙特卡洛这两种参数最优化的方法。
不过这两种方法都是把过去的经验作为一种参考指南,通过对过去的解读发掘出蕴藏盈利机会的重复性模式。
虽然已经比常用的参数迈进了一大步,但是仍然属于静态参数的范畴。如果能够把一成不变的固定参数值,设计为持续不断更新的动态参数值,可以使交易策略的信号产生趋于更优化。
动态参数的思想本期就来介绍指标动态参数的实现方法。动态参数顾名思义是将指标计算公式中的参数由固定的数值调整为可变的数值。
以唐奇安通道突破策略为例。策略的核心思想为:将N1天内最高价构成唐奇安通道的上轨,当天收盘价超过上轨认为上升趋势成立,作为买入信号;将N2天内最低价构成唐奇安通道的下轨,当天收盘价低于下轨认为下跌趋势成立,作为卖出信号。
当N1和N2参数不同时,上轨和下轨的通道区间则不同,从而突破信号的产生结果也不同。如下所示:
动态参数的设计思想有多种,最常见的是将股价的波动幅度与参数相绑定,从而使得参数可以自适应变化。
比如唐奇安通道突破策略中,当波动大的时候自动将N1参数调大,避免一些误触发一些干扰信号,当波动小的时候自动将N1参数调小,提高信号的灵敏度。
关于波动幅度的判断,我们先得到ATR指标。代码如下所示:
stock_dat['ATR'] = talib.ATR(stock_dat.high.values, stock_dat.low.values, stock_dat.close.values, timeperiod=5) # 计算ATR5
由于ATR指标是波动幅度绝对值,接下来使用z-score方法将波动幅度转换为均值/标准差这种形式。如下所示:
具体z-score的原理和实现可参考知识星球的这篇主题:
接下来将我们将N1参数与z-score相关联,即增加一个波动天数。N2参数仍旧保持原参数。如下所示:
stock_dat['N1'] = round(N1 + 10 * stock_dat['zscore'])
动态的N1参数如下所示:
再一下步计算通道上轨的过程就和《Python股票量化交易从入门到实践》书中一样了。不过pandas的df.rolling(window=N1).min()这个接口就用不了了,需要手动去遍历计算得到N1 天内的最大值。如下所示:
for i in range(len(stock_dat.index)): if i > stock_dat.N1[i]: stock_dat.loc[stock_dat.index[i], 'N1_High'] = stock_dat.high[i-int(stock_dat.N1[i]): i].max()
下图框出的部分是动态参数所计算出来的自适应值。虽然在这个股票上只有对2019年8月27日交易信号的产生有些实质上的改进,但是动态参数的优化思维是非常值得提倡的。
总结通过这个简单而又实用的股票量化场景,希望能够给广大朋友对于量化交易有一个直观的感受。
然后,我们应该升级自己的炒股方式了,把自己以前炒股的那套方法,抽象成策略模型,用量化的方法去全市场回测评估,然后让程序帮助我们监测行情的走势。
这个才是普通股民所适合的量化交易打开方式!
说明关于例程中的代码,我们会上传至《玩转股票量化交易》知识星球(知识星球的目录可点击【阅读原文】查看)。
更多量化交易内容扫码加入星球!
—————————————————
元宵大师的量化交易书籍开售!!
京东、当当、天猫有售!!
凭订单进读者交流群获取工具源码!