Предварительное исследование по тестированию стратегии опционов на цифровую валюту
Недавно платформа FMZ обновила систему бэкстестинга для поддержки бэкстестинга опционов на цифровую валюту. На этот раз она поддерживает некоторые опционные данные биржи Deribit. Так что у нас есть лучшие инструменты для обучения торговле опционами и проверки стратегии.
Опцион Deribit, определенный в системе backtest, является европейским, и стоимость одного контракта составляет 1BTC. Код контракта опциона: BTC-7AUG20-12750-C.
Тема | Дата осуществления | Цены на осуществление | (Call/Put) Опция |
---|---|---|---|
BTC | 7AUG20 | 12750 | В |
Биткойн | Упражнение 7 августа 2020 года | Цена осуществления 12750 | Варианты обращения |
BTC | 7AUG20 | 12750 | П |
Биткойн | Упражнение 7 августа 2020 года | Цена осуществления 12750 | Опция " Положить " |
Операции, такие как заключение контрактов и получение позиций, аналогичны фьючерсам на цифровую валюту.
Контракт набор: exchange.SetContractType ((
Цена опционного контракта - это премия опционного контракта, и покупатель опциона должен оплатить опционную премию продавцу опциона.
Продай опцион на покупку и купи место.
/*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("Spots", spotProfit)
$.PlotLine("Options", 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("Futures", futuresProfit)
$.PlotLine("Options", optionProfit)
Sleep(500)
}
}
Фьючерсы могут уменьшить занятый капитал по сравнению со спотом, но риск выше, чем спот.
Кроме того, существует множество других комбинаций торговли опционами:
bull call spread
Bear Put Spread
Те, кто заинтересован, могут изучить его в системе обратного теста.