8
Follow
1364
Followers
数字货币期权策略回测初探
Created 2020-08-11 14:21:28 Updated 2024-12-10 10:10:30
0
2579
数字货币期权策略回测初探
最近发明者量化交易平台升级了回测系统,支持了数字货币期权回测,本次支持了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()
期权合约的价格即为一张期权合约的期权金,期权买方需要向期权卖方支付期权金。买方获得行权权利,卖方有行权义务。在期权合约行权之前是可以交易的(比如平仓,了结义务)。
常见的期权交易组合为例
卖出看涨期权,买入现货。
javascript
/*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)
}
}
期权可以对现货买入的资产做一定程度的对冲保护。一般用于对现货看好,有意愿持有现货时。风险在于现货价格下跌,虽然在一定程度上期权可以弥补一定现货亏损,但是亏损超过期权权利金之后,就会出现净亏损。
另外数字货币期权市场的流动性一般,往往有时找不到对手盘。这也是需要考虑的问题。
同样,我们可以把现货替换成期货,代码如下:
javascript
/*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
有兴趣的可以在回测系统中研究一下。
Related Recommendations
Preliminary Study on Backtesting of Digital Currency Options StrategyThe Difference between Quantitative Trading and Subjective TradingATR Channel strategy Implemented on crypto marketThermostat Strategy using on crypto market by MyLanguagehans123 intraday breakthrough strategyTradingViewWebHook alarm directly connected to FMZ robotAdd an alarm clock to the trading strategyOKEX futures contract hedging strategy by using C++Trading strategy based on the active flow of fundsUse trading terminal plug-in to facilitate manual trading
Comment
All comments (0)
No data
- 1



