美文网首页
数字货币期权策略回测初探

数字货币期权策略回测初探

作者: 发明者量化FMZ | 来源:发表于2020-12-17 11:02 被阅读0次

    最近发明者量化交易平台升级了回测系统,支持了数字货币期权回测,本次支持了Deribit交易所的一些期权数据。因此我们对于期权交易的学习,以及策略验证有了更好的工具。

    Deribit 期权回测

    回测系统中定义的Deribit期权为欧式,一张合约价值为1BTC。期权合约代码为:BTC-7AUG20-12750-C

    标的物 行权日期 行权价格 (看涨/看跌)期权
    BTC 7AUG20 12750 C
    比特币 20年8月7日行权 行权价格12750 看涨期权
    BTC 7AUG20 12750 P
    比特币 20年8月7日行权 行权价格12750 看跌期权

    设置合约、获取持仓等操作与数字货币期货一样。
    设置合约:exchange.SetContractType("BTC-7AUG20-12750-C")
    获取持仓:var pos = exchange.GetPosition()

    期权合约的价格即为一张期权合约的期权金,期权买方需要向期权卖方支付期权金。买方获得行权权利,卖方有行权义务。在期权合约行权之前是可以交易的(比如平仓,了结义务)。

    常见的期权交易组合为例

    卖出看涨期权,买入现货。

    /*backtest
    start: 2020-07-27 00:00:00
    end: 2020-08-05 00:00:00
    period: 1h
    basePeriod: 15m
    exchanges: [{"eid":"Futures_Deribit","currency":"BTC_USD"},{"eid":"OKEX","currency":"BTC_USDT","balance":100000}]
    */
    
    function main() {
        exchanges[0].SetContractType('BTC-7AUG20-12750-C');
        var initSpotAcc = _C(exchanges[1].GetAccount)
        var isFirst = true
        while(true) {
            var optionTicker = exchanges[0].GetTicker()
            var spotTicker = exchanges[1].GetTicker()
            if(isFirst) {
                exchanges[0].SetDirection("sell")
                exchanges[0].Sell(optionTicker.Buy, 1)
                exchanges[1].Buy(spotTicker.Sell, 1)
                
                isFirst = false 
            }
            
            var optionPos = _C(exchanges[0].GetPosition)
            var nowSpotAcc = _C(exchanges[1].GetAccount)
            var diffStocks = (nowSpotAcc.Stocks - initSpotAcc.Stocks)
            var diffBalance = (nowSpotAcc.Balance - initSpotAcc.Balance)
            var spotProfit = diffBalance + diffStocks * spotTicker.Last
            var optionProfit = optionPos[0].Profit * spotTicker.Last
            LogProfit(spotProfit + optionProfit)
            $.PlotLine("现货", spotProfit)
            $.PlotLine("期权", optionProfit)
            Sleep(500)
        }
    }
    

    期权可以对现货买入的资产做一定程度的对冲保护。一般用于对现货看好,有意愿持有现货时。风险在于现货价格下跌,虽然在一定程度上期权可以弥补一定现货亏损,但是亏损超过期权权利金之后,就会出现净亏损。

    另外数字货币期权市场的流动性一般,往往有时找不到对手盘。这也是需要考虑的问题。

    同样,我们可以把现货替换成期货,代码如下:

    /*backtest
    start: 2020-07-27 00:00:00
    end: 2020-08-05 00:00:00
    period: 1h
    basePeriod: 15m
    exchanges: [{"eid":"Futures_Deribit","currency":"BTC_USD"},{"eid":"Futures_OKCoin","currency":"BTC_USD"}]
    */
    
    function main() {
        exchanges[0].SetContractType('BTC-7AUG20-12750-C');
        exchanges[1].SetContractType("quarter")
        var isFirst = true
        while(true) {
            var optionTicker = exchanges[0].GetTicker()
            var futuresTicker = exchanges[1].GetTicker()
            if(isFirst) {
                exchanges[0].SetDirection("sell")
                exchanges[0].Sell(optionTicker.Buy, 1)
                
                exchanges[1].SetDirection("buy")
                exchanges[1].Buy(futuresTicker.Sell, _N(1 * futuresTicker.Sell / 100, 0))
                
                isFirst = false 
            }
            
            var optionPos = _C(exchanges[0].GetPosition)
            var futuresPos = _C(exchanges[1].GetPosition)
            
            
            var futuresProfit = futuresPos[0].Profit 
            var optionProfit = optionPos[0].Profit
            LogProfit(futuresProfit + optionProfit)
            $.PlotLine("期货", futuresProfit)
            $.PlotLine("期权", optionProfit)
            Sleep(500)
        }
    }
    

    回测如图:


    期货比现货可以降低占用的资金,不过风险就相对于现货高了一些。

    除此之外,还有很多其它的期权交易组合:

    • 牛市看涨期权价差 bull call spread
    • 熊市看跌期权价差 Bear Put Spread

    有兴趣的可以在回测系统中研究一下。

    相关文章

      网友评论

          本文标题:数字货币期权策略回测初探

          本文链接:https://www.haomeiwen.com/subject/rywagktx.html