數字貨幣期權策略回測初探

最近發明者量化交易平臺升級了回測系統,支持了數字貨幣期權回測,本次支持了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

有興趣的可以在回測系統中研究一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章