比特币开源交易策略之网格策略

JCOne 2019-01-29 14:54 tech
摘要: 网格策略本质上是一种低吸高抛的策略。标的物价格越低,吸纳的头寸越多;标的物价格越高,卖出的头寸越多。

【编者按:本文转载自互联网,如有侵权请联系删除】

一、什么是网格交易策略

网格策略本质上是一种低吸高抛的策略。标的物价格越低,吸纳的头寸越多;标的物价格越高,卖出的头寸越多。网格策略巧妙地借鉴了日常生活中渔翁撒网扑鱼的思路,对低位震荡市场进行撒网、加仓(标的物价格下跌时)、减仓(标的物价格上涨时)、收网(平仓)等操作,实现了一个基本上不需要看基本面(如果标的物是股票)和价格走势的获利系统。然而,需要注意的是,网格策略由于本质上是一个低吸高抛的策略(类似于动量反转),在单边下降行情中,它存在一定的风险(俗称“破网”)。因此,一个好的网格策略,必须要设计好相应的止损机制。

二、什么时候撒网

撒网需要选择在低位震荡行情相对底部的位置。一般的思路是比较当前的标的物价格与该时间点之前某个时间段内的价格均值,如果当前价格小于价格均值的一个下限,我们基本上就可以认为当前是处于相对底部的位置,可以进行撒网操作,并记录下撒网的价格基准。

当然,对于撒网,我们可以进行如下优化:

(1) 使用形态分析,对当前行情是否处于震荡行情进行进一步判断(2) 使用其他技术指标(比如EMA,RSI等),判断当前是否处于震荡行情中的低位或底部位置

三、加仓和减仓

先上一张网上流传的网格表图:

先看该图的第一行,分别有价格,目标仓位以及三个不同孔径大小的网格(小网格:-3%~5%,中网格: -5%~10%以及大网格:-8%~15%)。

 

然后再看该图的第一列,分别有基准,买1~买4,卖1到卖4四个价格档位。

假设我们选用的是第一张网格(即第三列,小网格:-3%~5%网格),我们可以看到如下价格映射:

买4 --> 0.88 * 基准买3 --> 0.91 * 基准……卖3 --> 1.15 * 基准卖4 --> 1.2 * 基准

而且根据第二列的“目标仓位”,我们可以得到如下价格-->仓位映射:

买4 --> 0.88 * 基准 --> 目标仓位:100%买3 --> 0.91 * 基准 --> 目标仓位:90%……卖3 --> 1.15 * 基准 --> 目标仓位:10%卖4 --> 1.2 * 基准 --> 目标仓位: 0%

假设当前价格下降到买1价格(0.97*基准),那目标仓位就是40%;如果之后价格又上涨到卖1价格(1.05*基准),那目标仓位就是60%,但这个时候我们的仓位只有40%,所以不进行任何操作;紧接着,如果价格又持续上涨到卖2价格(1.1*基准),那目标仓位就是30%,所以这个时候,我们就需要卖掉10%的仓位;紧接着,如果价格下跌到了买2价格(0.94*基准),那目标仓位就是70%,所以这个时候我们需要买入40%的仓位。以此类推……

我们看到,网格在定义买卖几档价格的时候,是非对称的。负数的部分绝对值偏小(比如小网格中,负数是-3%),正数的部分绝对值偏大(比如小网格中,正数是5%),这样非对称的设定,是为了在期望值上使得整个系统的收益要大于0,所以是合理的。

小网格(孔径大小:-3%~5%)适用于holding period相对较短(比如一周之内)的投资策略,这些较短期的策略要求对风险控制有非常严格的把握。

中网格(孔径大小:-5%~10%)适用于holding period相对适中(比如一个月)的投资策略,有一定的过滤无效调仓信号的作用。

大网格(孔径大小:-8%~15%)适用于holding periold相对较长(比如一年)的投资策略,这些策略需要投资者能承受短期的回撤,相应的补偿是长期的高额回报。

四、怎么做止损

设定一个止损线(比如75%),如果当前净资产低于止损线*初始净资产,这个时候就卖出全部头寸止损。

当然,用户可以自定义止损方案,比如有朋友推荐使用凯利公式进行止损仓位的设定,而不用每次止损都是一次性全部清空所有仓位。这里留给读者去自行揣摩。

四、实盘代码分析

在前面文章 小白零基础搭建一个比特币策略实盘引擎 中,我已经讲述了一个实盘引擎应该具备的各项功能,以及公开了实盘引擎的源代码。在这次的分享中,我将基于实盘引擎代码,开发出适配于该数字货币实盘引擎的网格交易策略源码。

1. 策略初始化函数 initialize.

* 设定执行频率(frequency),标的物(火币比特币:huobi_cny_btc)和基准(火币比特币:huobi_cny_btc).* 设定其他策略所需的参数(比如判断基准价所需的历史数据根数,止盈止损线等)放入context.user_data中* 设定网格的买卖价格档位信息和相应的仓位水平信息,放入context.user_data中

2. 计算为了达到目标仓位所需要花费的金额:cash_to_spent_fn

3. 实现每一个固定数据更新频率下的回调函数:handle_data

* 先处理止损和止盈

*撒网,设定网格策略的基准价格base_price

 

* 计算加仓、减仓所对应的交易金额cash_to_spent,该值为正时表示需要购入市值为该金额的比特币,该值为负时表示需要卖出市值为该金额的比特币

 

 

* 根据计算出来的下单金额和方向,执行下单

 

4. 修改接口函数liveStrategyEngine/main.py

5. 执行结果展示

6. 需要注意的是,目前本人还没有拿到实时的行情源,context.data.get_price拿到的数据是模拟数据,近期会搞定2013年至当前最近1分钟的分钟级别的bar数据,一旦搞定数据源,就可以实盘开干啦,有没有一种马上要赚1个亿的感觉~~

五、后话

网格策略存在很多变种,在传统金融市场中,有些变种的策略还是有效的。比特币市场是一个非常无效的市场,在这样的市场中,很多被用烂了的传统策略竟然也可以跑得非常有效果,这对于传统量化从业者来讲,是一个非常好的知识变现机会。WeQuant君本人就是从传统金融科技领域出来的,立志于为同行建立一个快速进入数字货币量化领域的通道和平台。在这个平台上,大家可以共同学习,共同进步。

(全文完)

量化
声明:本文转载自互联网,版权归原作者所有,文中言论观点不代表本站观点。如有侵权请联系我们,本站将在24小时内删除。

原文链接 :https://zhuanlan.zhihu.com/p/23743806

原文作者 :WeQuant

相关文章

比特币开源交易策略之网格策略
加密货币套利现状
一种比特币高频交易的策略分析
比特币量化交易最近的思考

评论(0)

登录才能评论
在这里第一个发表评论