【1-3】 区块链量化投资系列课程 - 跨期套利

Discussion in 'Philosophy and Strategy' started by JackSplor, Jul 20, 2018.

  1. NO.1QUANT.LA量化干货聚集地 宽客在线

    索罗斯在1987年撰写的《金融炼金术》 一书中,曾经提出过一个重要的命题:I believe the market prices are always wrong in the sense that they present a biased view of the future.


    [​IMG]
    image
    图片来源:网络

    市场有效假说只是理论上的假设,实际上市场参与者并不总是理性的,并且在每一个时间点上,参与者不可能完全获取和客观解读所有的信息,再者就算是同样的信息,每个人的反馈都不尽相同。

    也就是说,价格本身就已经包含了市场参与者的错误预期,所以本质上市场价格总错误的。这或许是套利者的利润来源。

    NO.2QUANT.LA量化干货聚集地 宽客在线

    根据上述原理,我们也就知道,在一个非有效的期货市场中,不同时期交割合约之间受到市场影响也并不总是同步,其定价也并非完全有效的原因。

    那么,根据同一种交易标的的不同时期交割合约价格为基础,如果两个价格出现了较大的价差幅度,就可以同时买卖不同时期的期货合约,进行跨期套利。


    [​IMG]
    image
    图片来源:网络

    与商品期货一样,数字货币也有与之相关的跨期套利合约组合。如在 OkEX 交易所中就有:ETC 当周、ETC 次周、ETC 季度。

    举个例子,假设 ETC 当周和 ETC 季度的价差长期维持在 5 左右。如果某一天价差达到 7,我们预计价差会在未来某段时间回归到 5。那么就可以卖出 ETC 当周,同时买入 ETC 季度,来做空这个价差。反之亦然。

    NO.3QUANT.LA量化干货聚集地 宽客在线

    尽管这种价差是存在的,但是人工操作耗时、准确性差以及价格变化的影响,人工套利往往存在诸多不确定性。

    通过量化模型捕捉套利机会并制定套利交易策略,以及程序化算法自动向交易所下达交易订单,快速准确捕捉机会,高效稳定赚取收益,这就是量化套利的魅力所在。


    [​IMG]
    image
    图片来源:网络

    本篇将会教大家如何在数字货币交易中,利用发明者量化交易平台和 OkEX 交易所中 ETC 期货合约,以一个简单的套利策略,来演示如果捕捉瞬时的套利机会,把握住每一次可以看得到的利润,同时对冲有可能遇到的风险。

    NO.4QUANT.LA量化干货聚集地 宽客在线

    创建一个数字货币跨期套利策略

    难易度:普通级


    [​IMG]
    image
    图片来源:网络

    策略环境

    • 交易标的:以太经典(ETC)

    • 价差数据:ETC 当周 - ETC 季度(省略协整性检验)

    • 交易周期:5 分钟

    • 头寸匹配:1:1

    • 交易类型:同品种跨期
    策略逻辑

    • 做多价差开仓条件:如果当前账户没有持仓,并且价差小于 boll 下轨,就做多价差。即:买开 ETC 当周,卖开 ETC 季度。

    • 做空价差开仓条件:如果当前账户没有持仓,并且价差大于 boll 上轨,就做空价差。即:卖开 ETC 当周,买开 ETC 季度。

    • 做多价差平仓条件:如果当前账户持有 ETC 当周多单,并且持有 ETC 季度空单,并且价差大于 boll 中轨,就平多价差。即:卖平 ETC 当周,买平 ETC 季度。

    • 做空价差平仓条件:如果当前账户持有 ETC 当周空单,并且持有 ETC 季度多单,并且价差小于 boll 中轨,就平空价差。即:买平 ETC 当周,卖平 ETC 季度。
    NO.5QUANT.LA量化干货聚集地 宽客在线

    上面是一个简单的数字货币跨期套利策略逻辑描述,那么如何在程序中实现自己的想法呢?我们试着在发明者量化交易平台先把框架搭建起来。

    策略框架:


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    对照着策略思路以及交易流程,可以很轻松把策略框架搭建起来。整个策略可以简化为三个步骤:

    1. 交易前预处理。
    2. 获取并计算数据。
    3. 下单并对后续处理。
    NO.6QUANT.LA量化干货聚集地 宽客在线

    接下来,我们就需要根据实际交易流程和交易细节,在策略框架里面填充必要的细节代码。

    一、交易前预处理

    第1步:在全局环境中,声明必要的全局变量。

    • 声明一个配置图表的 chart 对象
      var chart = { }
    • 调用 Chart 函数,初始化图表
      var ObjChart = Chart ( chart )
    • 声明一个空数组,用来存储价差序列
      var bars = [ ]
    • 声明一个记录历史数据时间戳变量
      var oldTime = 0
    第2步:配置策略的外部参数。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    第3步:定义数据处理函数

    基础数据函数:Data ( )

    创建一个构造函数 Data,并定义它的内部属性。包括:账户数据、持仓数据、K线数据时间戳、套利A/B合约的买/卖一价、正/反套价差。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    获取持仓函数:mp ( )

    遍历整个持仓数组,返回指定合约、指定方向的持仓数量,如果没有就返回 false


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    K线和指标函数:boll ( )

    根据正/反套价差数据,合成新的K线序列。并返回由boll指标计算的上轨、中轨、下轨数据。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    下单函数:trade ( )

    传入下单合约名称和下单类型,然后以对价下单,并返回下单后的结果。由于需要同时下两个不同方向的单子,所以在函数内部根据下单合约名称对买/卖一价做了转换。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    取消订单函数:cancelOrders ( )

    获取所有未成交订单数组,并逐个取消。并且如果有未成交的订单就返回false,如果没有未成交的订单就返回true。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    处理持有单个合约:isEven ( )

    在处理套利交易中出现单腿情况,这里直接用简单的平掉所有仓位处理。当然,也可以改为追单方式。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    画图函数:drawingChart ( )

    调用 ObjChart.add ( ) 方法,在图表中画出必要的行情数据和指标数据:上轨、中轨、下轨、正/反套价差。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    第4步:在入口函数 main ( ) 里面,执行交易前预处理代码,这些代码在程序启动后,只运行一次。包括:

    • 过滤控制台中不是很重要的信息 SetErrorFilter ( )
    • 设置要交易的数字货币币种 exchange.IO ( )
    • 程序启动前清空之前绘制的图表 ObjChart.reset ( )
    • 程序启动前清空之前的状态栏信息 LogProfitReset ( )

    [​IMG]
    image
    NO.7QUANT.LA量化干货聚集地 宽客在线

    定义完上述的交易前预处理,紧接着就要进入下一个步骤,进入轮询模式,重复执行 onTick ( ) 函数。

    并设置 Sleep ( ) 轮询时的休眠时间,因为部分数字货币交易所的 API 对一定时间内内置了访问次数限制。


    [​IMG]
    image
    二、获取并计算数据

    第1步:获取基础数据对象、账户余额、boll 指标数据,以供交易逻辑使用。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    三、下单并对后续处理

    第1步:根据上述的策略逻辑,执行买卖操作。首先会判断价格和指标条件是否成立,然后再判断持仓条件是否成立,最后执行 trade ( ) 下单函数


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    第2步:下单完成后,需要对未成交的订单、持有单个合约等非正常情况做处理。以及绘制图表。


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    NO.8QUANT.LA量化干货聚集地 宽客在线

    以上,我们通过 200 多行,就把一个简单的数字货币跨期套利策略完完整整的创建出来。完整的代码如下:


    [​IMG]
    image
    图片来源:发明者量化(http://www.fmz.com

    NO.9QUANT.LA量化干货聚集地 宽客在线

    本篇策略只是一个抛砖引玉,真实的实盘可不是这么简单,不过你可以照着例子发挥自己天马行空的想象。

    需要提醒大家的是,以我有限的经验来看,目前的数字货币市场状况,纯粹的期期套利策略基本上全部不值得跑,不论是无风险的三角套利还是跨市场套利。


    [​IMG]
    image
    原因就在于,无论哪个数字货币交易所的期货市场,其保证金不是法币。现如今几乎所有的数字货币从今年初至今已经下跌了70%左右。也就是说策略始终都是在赚币,但是币价是下跌的。

    放眼望去,数字货币市场俨然已经脱离了区块链,就像当年的郁金香一样,价格始终来自于人们的预期和信心,信心又来源于价格...

    NO.10QUANT.LA量化干货聚集地 关于我们

    您的转发,将是支持我们继续创作更多干货的动力!如果您觉得这篇文章对您有帮助,请多多转发,支持我们。分享也是一种智慧!

    作者:Hukybo
     
    rok likes this.