量化策略虚拟货币

频道:百科知识 日期: 浏览:0

Bitget下载

注册下载Bitget下载,邀请好友,即有机会赢取 3,000 USDT

APP下载   官网注册

现金,数字货币市场活跃度远比市场形成之初高了很多,也出现了很多合约交易所,提供了大量可套利对冲的机会。现货跨市场套利、期现对冲套利、期货跨期套利、期货跨市场套利等等,策略层出不穷。今天我们就一起 领略一个 由C++语言编写,交易市场 为OKEX合约交易所的“硬核”跨期对冲策略。

为什么说策略有些硬核,原因在于策略使用C++ 语言编写,策略阅读难度略高。但是并不妨碍量化投资人学习到这个策略设计、思路方面的精华。策略通篇较为简洁,行情数据获取方面,不同于以往策略使用 rest 接口,该策略使用了websocket接口,接受交易所行情推送。

设计方面,策略结构合理,代码耦合度很低,很方便扩展或者优化。策略原理比较简单,即远期合约和近期合约做正、反套对冲,基本原理上和商品期货的跨期对冲一致。

正套,做空远期合约,做多近期合约。

反套,做多远期合约,做空近期合约。

对冲策略主要关注的是标的物差价的波动,对差价做回归交易。然而,差价是有可能小幅震荡,或者大幅震荡,或者单边一个方向。

这就带来了对冲盈亏的不确定性,但是风险还是远小于单边趋势的。对于跨期策略的各种优化很多都是选择从仓位控制层面入手,从开仓平仓触发上入手。例如经典的用布林指标做为差价波动时,正套、反套的开仓、平仓点。

(1)代码大概主要分为四个部分:

1、枚举值定义,定义一些状态值,用于标记状态。一些和策略思路无关的功能函数,例如 url 编码函数,时间转换函数等,这些函数和策略思路没有关系,仅仅是对于数据做处理使用。

2、K线数据生成器类:策略由该生成器类对象生成的K线数据驱动。

3、对冲类:该类的对象可以执行具体的交易逻辑,对冲操作、策略细节的处理机制等。

4、策略主函数,也就是 main函数。main 函数是策略的入口函数,主要循环在此函数内执行,此外这个函数内还执行一个重要的操作,即访问交易所的websocket 接口,获取推送来的tick行情数据,作为K线数据生成器的原料数据。

(2)枚举值定义,其它功能函数

1、枚举类型 State声明

enum State {

STATE_NA,

STATE_IDLE,

STATE_HOLD_LONG,

STATE_HOLD_SHORT,};

因为代码中有些函数返回某个状态,所以这些状态都定义在了枚举类型 State中。

看到代码中出现 STATE_NA 即为 非正常状态, STATE_IDLE 为空闲状态,即可以对冲操作的状态。 STATE_HOLD_LONG 为持有正套对冲仓位的状态。 STATE_HOLD_SHORT为持有反套对冲仓位的状态。

2、字符串替换,本策略中没有调用,算是一个备用的工具函数,主要处理字符串。

string replace(string s, const string from, const string& to)

3、功能为转换为十六进制字符的函数 toHex

inline unsigned char toHex(unsigned char x)

4、处理url编码的函数

std::string urlencode(const std::string& str)

5、时间转换函数,把字符串格式的时间转换为时间戳。

uint64_t _Time(string &s)

(3)K线数据生成器

这个类主要就是负责把获取到的 tick 数据加工成差价K线,用于驱动策略对冲逻辑。

为什么要用 tick 数据呢?

由于单个合约的K线数据是这一个合约在一定周期内的价格变化统计。而两个合约的差价 的K线数据则是在一定周期内的差价价格变化统计,因此不能简单的拿两个合约各自的K线数据做减法运算,计算每根K线Bar上各个数据的差值,当做差价。这样最明显的错误就例如,两个合约的最高价、最低价,并不一定是同一时刻的。所以相减出来的数值没有太大意义。

因此我们需要使用实时的tick数据,实时计算差价,实时统计成一定周期内的价格变动(即K线柱上的高开低收)。这样我们就需要一个K线数据生成器,单独作为一个类,很好的进行处理逻辑分离。

(4)对冲类

1、getState

这个函数主要处理订单检测,订单撤销,仓位检测,仓位平衡等工作。

2、Loop

策略的交易逻辑封装在这个函数中,其中调用 getState , 使用K线数据生成器对象生成 差价的K线数据,进行对冲开仓、平仓、加仓逻辑的判断。还有一些对于图表的数据更新操作。

(5)策略主函数

策略启动后是从main 函数开始执行,策略在main 函数的初始化工作中,订阅了websocket 接口的tick行情。main 函数最主要的工作就是构造了一个主循环,不停的接收交易所websocket 接口推送来的tick行情,然后调用对冲类对象的成员函数: Loop 函数。由行情数据 驱动 Loop 函数中的交易逻辑。

tick行情实际是订阅的订单薄深度数据接口,获取的是每档的订单薄数据。但是策略中只是使用了第一档的数据,其实就和tick行情数据差不多了,策略中并没有用其它档的数据,也没有用第一档的订单量数值。

仓位控制采用类似“波菲纳契”数列的对冲仓位比例,进行控制。这样的仓位控制可以实现差价越大,套利对冲数量相对增加,对仓位进行分散,从而把握住小差价波动小仓位,大差价波动仓位适当增大。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 931614094@qq.com 举报,一经查实,本站将立刻删除。

本文地址: http://www.lyw520.com/baikezhishi/10538.html
文章来源: 小美
量化策略虚拟货币文档下载: PDF DOC TXT