最近發明者量化交易平臺升級了回測系統,支持了數字貨幣期權回測,本次支持了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
有興趣的可以在回測系統中研究一下。