15天搭建ETF量化交易系统Day9—玩大A必学网格策略

08a1c136c24571eed241c792c7a53892.png

搭建过程

3fee63ddeefeeaf08335c57c8132d987.png

每个交易者都应该形成一套自己的交易系统。

很多交易者也清楚知道,搭建自己交易系统的重要性。现实中,从0到1往往是最难跨越的一步。
授人鱼不如授人以渔,为了帮助大家跨出搭建量化系统的第一步,我们决定推出这个主题系列。
这个系列中,我们用Python从0开始一步步搭建出一套ETF量化交易系统(选择ETF标的是因为对于普通交易者来说,ETF相对于选强势股难度要小,而且没有退市风险)。大家可以跟随着我们的实现路径来一起学习,从过程中掌握方法。
掌握了方法之后,你可以换成期货系统、比特币系统、美股系统,然后在实战中不断去完善自己的系统了。
搭建一套ETF量化交易系统涉及多个模块和组件的协同工作,包括数据源模块、量化策略模块、可视化模块、数据库模块、回测评估模块、自动交易模块等等。
DAY1链接如下:15天搭建ETF量化交易系统Day1—数据源模块
DAY2链接如下:15天搭建ETF量化交易系统Day2—图形显示模块
DAY3链接如下:15天搭建ETF量化交易系统Day3—上手经典回测框架
DAY4链接如下:15天搭建ETF量化交易系统Day4—玩转海龟交易策略
DAY5链接如下:15天搭建ETF量化交易系统Day5—打造实盘量化机器人
DAY6链接如下:15天搭建ETF量化交易系统Day6—打通同花顺自动交易
DAY7链接如下:15天搭建ETF量化交易系统Day7—全自动化交易系统
DAY8链接如下:15天搭建ETF量化交易系统Day8—强化自动交易模块
如果我们的ETF量化交易系统选择的品种是A股的话,这里分享一个客观数据:
A股自2007年首次站上3000点以来,至今16年的时间打了50次“3000点保卫战”。
由此可见,A股大部分时间是处在震荡行情。震荡行情的特点是股价在一个区间内频繁波动、节奏很难踏准。假设某股09年买入是10块,经过了一系列的涨跌之后,到了今年价格还是回到了10块,如果是简单地持有该股的投资方法,意味着十几年的时间不赚不赔。
网格策略是针对于震荡行情所设计的一个策略,可以依赖波动盈利,即使在震荡行情内我们也可以获利。要想做A股的ETF赚钱,必须学习网格策略。

b6bd205022bbf13827581279e0c768c8.png

网格策略

d284e2bb479faebf06cfe4d58ddf2a56.png

网格策略,顾名思义,我们需要划分出一个个的格子,组成网格。然后选择一个标的,可以是基金,也可以是股票。再选择这个标的合理的价格区间,把这个区间内的价格按照一定的间隔,划分成一个一个的格子。每上涨一格,即卖出一份,每下跌一格,即买入一份。类似下图:

63d2ec08cf4103f5034d50edbeed9c55.png

因此,网格策略不依赖于人为的判断,像预设程序一样,在一定区间内的不断低买高卖,高抛低吸,循环往复,在不断地震荡中获得利润。

网格策略的设计分为以下几步:

  • 划定网格范围。确定网格的最高点和最低点,也就是划定震荡的范围。

  • 等分网格数量。在最高价和最低价之间等分成网格。等分的间距一般为该股的日平均振幅。

  • 标定网格价格。在网格线上都有一个价位,当股价触及这个价位时按这个价位买卖股票。

  • 分配操作资金。将投入的总资金除以网格数量,得到每个网格可交易的资金量。比如投入1万元,那么最高点的网格持有1万元可用资金和0元股票市值,最低点的网格持有1万元的股票市值和0元可用资金。

我们设计后的网格图下图所示。

30aeed380cfcdd2e5a3d4d13e0cde37d.png

实际操作中,当股价处于什么网格,那么对比该网格的可用资金,相应地买卖股票以调整仓位。也就是跌一格就买,涨一格就卖,赚的是一格的利润。如下图所示。

e3aa98032defebb2fc79e5ec7905fdf3.png

网格策略的缺点:

  • 使用于震荡行情会有较好的效果。如果由震荡转为趋势行情的话,会出现比较尴尬的情况:“上升趋势突破高点后无筹码”,“下跌趋势跌破低点满仓亏损”。

  • 资金的使用率较低,即首仓买入时,剩下的资金要作为下跌时加仓使用,而上涨时还需要卖出。资金利用率低意味着收益率低。因此网格数量不能太多,否则资金被分散太多。

  • 频繁交易对手续费和滑点比较敏感。

0302d3e2e5ca910688073352e57ddeac.png

代码设计

128de011e935ab540b80c9a1ffe00c15.png

接下来我们设计一个网格策略,使用Backtrader来回测下网格策略的使用效果。策略大致思想如下:

首先动态地得到该股60分钟级别数据的60周期的最低价移动序列,选择最低价作为基准的原因是我更偏向于做反转类的行情。

Backtrader的关键代码为:

self.lowest = bt.indicators.Lowest(self.data.low, period=60, subplot=False)

然后划定网格的间距为1%,太小的网格虽然能够覆盖更多的波动,但是带来的是频繁的交易,也会更大程度受到手续费和滑点额影响。网格的数量为10个,其中有2个是埋在最低价之下的,为的是防范下跌趋势跌破低点这个风险。

Backtrader的关键代码为:

pct_levels = [x for x in np.arange(1 - self.params.grid_perc * 2, 1 + self.params.grid_perc * 8, self.params.grid_perc)]

将最低价移动序列与网格相乘即得到了动态的网格价格区间。

Backtrader的关键代码为:

self.price_levels = [self.lowest * x for x in pct_levels]

每个交易日判断的逻辑比较简单,判断当前股价的上一格和下一格的价位,跌一格就买,涨一格就卖。使用Backtrader中的order_target_percent函数来调整目标仓位。

Backtrader的关键代码为:

self.order_target_percent(
    target=((len(self.price_levels) - 1)-self.last_price_index) / (len(self.price_levels) - 1))

我们回测516350半导体最近一个月60分钟数据,初始资金是10万的话最终可以做到10.5万的市值。回测效果如下所示:

ee514f771d9fe0dc5b307366576b03fc.png

02c62db6885304a2221ab2698d3504e8.png

总结

cacab8087efbf2f7dd3dc9825a28241b.png

本文是采用了网格绑定固定涨跌幅的方法,在一定程度上可以让网格大小跟随股价的变化情况自动调整。也有一些优化策略是将网格绑定波段指标,原理上大同小异。

学会了网格策略的思想之后,接下来我们就可以把这个策略融入到我们的交易系统里面了!

说明

此系列为连载专栏,完整代码会上传知识星球《玩转股票量化交易》!作为会员们的学习资料。

想要加入知识星球《玩转股票量化交易》的小伙伴记得先微信call我获取福利!

非星球会员需要的话,需要单独联系我购买!

知识星球介绍点击:知识星球《玩转股票量化交易》精华内容概览

8950d689a1c7c1a1092d7e8e248a5953.jpeg

  • 23
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值