改造Deribit期货API以适应期权量化交易

2019-12-02  本文已影响0人  发明者量化

数字货币期货交易所目前已经有很多家,但是作为期货衍生品,数字货币期权交易,目前市面上的交易所还不多,支持期权交易的有Deribit、BitMEX。在量化交易领域,期权交易也有多种策略,例如搜索到的一些资料中提及的期权策略:

类型
方向性策略: 买入看涨期权 卖出看跌期权 牛市看涨价差 牛市看跌价差
-- 买入看跌期权 卖出看涨期权 熊市看涨价差 熊市看跌价差
波动率策略: 卖出跨式 卖出宽跨式 买入跨式 买入宽跨式
对冲策略: 备兑看涨 备兑看跌 保护性看涨 保护性看跌
-- 多头双限 空头双限 -- --

引用自连接

编写期权交易策略还是需要先打牢固基础,基本的下单,行情获取,撤单,获取持仓等操作要熟悉。策略编写依然使用发明者量化交易平台,虽然发明者量化交易平台目前对于数字货币量化交易领域支持的主要是币币交易,合约交易,杠杆交易。期权交易的相关资料不多,下面就以「Deribit」交易所为例,介绍一下如何使用发明者量化交易平台玩转数字货币期权交易。

对于期权交易需要理解的4个基本概念:


其它的行情接口调用方式是一致的,这里不再赘述,需要注意的是:
期权交易并不是很活跃,盘口有时候会出现没有买单,或者没有卖单的情况,这个时候,发明者量化交易平台底层会检测到0的数值,会报错,可以使用SetErrorFilter("Invalid ticker")忽略这个报错,并且使用GetRawJSON函数获取行情的原始信息封装数据即可,这里我写一个范例实现类似功能:

function init() {
    SetErrorFilter("Invalid ticker")
}

$.GetTicker = function(e) {
    var ticker = e.GetTicker()
    if (!ticker) {
        try {
            var ret = JSON.parse(e.GetRawJSON())
            return {
                Info : ret,
                High : ret.result.stats.high,
                Low : ret.result.stats.low, 
                Buy : ret.result.best_bid_price,
                Sell : ret.result.best_ask_price,
                Last : ret.result.last_price, 
                Volume : ret.result.stats.volume,
                OpenInterest : 0,
                Time : new Date().getTime()
            }
        } catch (err) {
            Log(err)
        }
    }
    
    return ticker
}

调用时写:Log($.GetTicker(exchange))

模拟盘面上也出现了刚才下的订单。


并且exchange.GetOrder(id)可以查询到订单信息。

运行代码获取:


$.GetPosition = function(e) {
    // /private/get_positions
    // currency  , kind 
    
    var positions = [] 
    var currency = e.GetCurrency()
    var arr = currency.split("_")
    var baseCurrency = arr[0]
    
    try {
        var ret = e.IO("api", "GET", "/api/v2/private/get_positions", "currency=" + baseCurrency + "&kind=option")
        for (var i in ret.result) {
            if (ret.result[i].size == 0 || ret.result[i].direction == "zero") {
                continue    
            } 
            
            var pos = {
                Info : ret.result[i], 
                Amount : ret.result[i].size,
                FrozenAmount : 0,
                Price : ret.result[i].average_price,
                Profit : ret.result[i].floating_profit_loss,
                MarginLevel : 0,
                Margin : 0,
                ContractType : ret.result[i].instrument_name,
                Type : ret.result[i].direction == "buy" ? ORDER_TYPE_BUY : ORDER_TYPE_SELL,
            }
            
            positions.push(pos)
        }
    } catch (err) {
        Log(err)
        positions = null
    }
    
    return positions
}

调用Log($.GetPosition(exchange))即可打印持仓信息。

这样,基本操作都可以实现了,剩下的就可以研究期权交易策略了。

上一篇 下一篇

猜你喜欢

热点阅读