r

rchardzhu

V1

2022/08/14阅读:22主题:默认主题

经典量化策略之一文读懂网格交易

什么是网格交易?

网格交易法又叫渔网交易法, 是在标的价格不断震荡的过程中,对标的价格绘制网格,在市场价格触碰到某个网格线时进行低买高卖操作获利的策略。

  • 适用场景: 震荡行情,在价格下跌时买入,价格上涨时卖出
  • 分类: 根据多空倾向可以分为做多网格、做空网格和中性网格,即:做多网格只会开多和平多,适合于震荡向上的行情,做空网格只会开空和平空,适合于震荡向下的行情。中性网格是在策略开启时的市场价格的上方开空/平空,下方开多/平多
  • 优点:震荡套利。如果判断接下来将会有较长时间的震荡行情时,可以获取额外alpha
  • 缺点: 对行情判断要求较高。由于是逆势交易,如果遇上单边上涨行情,则容易卖飞; 若遇上单边下跌行情,则亏损会较大

网格交易具体步骤

网格交易具体步骤如下:

  1. 确定交易标的。 选择的标的最好价格变化较大,交易较为活跃。 如果标的不活跃,价格波动不大,很难触发交易
  2. 确定网格的中枢、压力位和支撑位 确定适当的压力位和支撑位,使价格大部分时间能够在压力位和支撑位之间波动。如果压力位和支撑位设置范围过大,会导致难以触发交易;如果压力位和支撑位设置范围过小,则会频繁触发交易,除了交易成本外,一旦突破支撑位,亏损可能较大
  3. 设置网格宽度和数量 设定多少个网格以及网格的宽度可以自定义
    • 等宽网格可能会导致买卖点过早,收益率较低。设置不等宽网格能避免该问题,但可能会错失买卖机会
    • 常用的网格设计模式: 等差网格和等比网格。 等差网格为每相邻两档挂单价格的差值相等,如1、2、3、4;等比网格为每相邻两档挂单价格的比值相等, 如1、2、4、8
  4. 当价格触碰到网格线时,若高于买入价,则每上升一格卖出x手;若低于买入价,则每下跌一格买入x手

代码实现

核心代码如下:

def next(self):
        grid = pd.cut([self.data.close[0]], self.band, labels=self.labels)[0]

        if np.isnan(grid):
            self.log('价格波动超过网格范围: %.2f' %(self.data.close[0]))
            return

        # 价格上涨
        if grid > self.last_grid:
            grid_range = [self.last_grid, grid]
            if self.last_grid == 0:
                self.last_grid = grid
                return
            if self.last_grid != 0:
                if grid_range != self.last_grid_range:
                    self.last_grid = grid
                    self.last_grid_range = grid_range
                    if self.position.size > 0:
                        self.log('SELL CREATE %.2f, cur position: %d' % (self.data.close[0], self.position.size))
                        self.sell(size=self.p.stake)

        # 价格下跌
        if grid < self.last_grid:
            grid_range = [grid, self.last_grid]
            if self.last_grid == 0:
                self.last_grid = grid
                return
            if self.last_grid != 0:
                if grid_range != self.last_grid_range:
                    self.last_grid = grid
                    self.last_grid_range = grid_range
                    if self.position.size < 10:
                        self.log('BUY CREATE %.2f, cur position: %d' % (self.data.close[0], self.position.size))
                        self.buy(size=self.p.stake)  

说明:

  • 如果标的一直没有交易,说明此时标的价格已经超过设置的网格范围,可以调整网格压力位、阻力位;如果只是暂时没有交易,如果不是超过范围,也可以调整网格宽度和数量
  • 怎样记录价格是否突破网格线?使用pandas库提供的cut函数,将当前价格所处的网格区域表示出来。当网格区域发生变化,说明价格突破了一个网格线

结论 & 交流

关注微信公众号:诸葛说talk,获取更多内容。同时还能获取邀请加入量化投资研讨群, 与众多从业者、技术大牛一起交流、切磋,名额有限,不要错过。

写文章不易,觉得本文对你有帮助的话,帮忙点赞转发赞赏,让笔者有坚持写好文章的动力。

参考

分类:

其他

标签:

金融

作者介绍

r
rchardzhu
V1