
Recientemente, la plataforma de comercio cuantitativo Inventor actualizó su sistema de backtesting para admitir el backtesting de opciones de moneda digital.DeribitAlgunos datos de opciones del exchange. Por lo tanto, tenemos mejores herramientas para aprender sobre el comercio de opciones y validar estrategias.
Definido en el sistema de backtestingDeribitLas opciones son de estilo europeo y cada contrato vale 1 BTC. El código del contrato de opción es:BTC-7AUG20-12750-C。
| Tema | Fecha del ejercicio | Precio de ejercicio | Opciones (call/put) |
|---|---|---|---|
| BTC | 7AUG20 | 12750 | C |
| Bitcoin | Fecha de ejercicio: 7 de agosto de 2020 | Precio de ejercicio 12750 | Opción de compra |
| BTC | 7AUG20 | 12750 | P |
| Bitcoin | Fecha de ejercicio: 7 de agosto de 2020 | Precio de ejercicio 12750 | Opción de venta |
Las operaciones de fijación de contratos y obtención de posiciones son las mismas que las de los futuros de monedas digitales.
Establecer el contrato:exchange.SetContractType("BTC-7AUG20-12750-C")
Obtener posiciones:var pos = exchange.GetPosition()
El precio de un contrato de opción es la prima de un contrato de opción, y el comprador de la opción debe pagar la prima al vendedor de la opción. El comprador obtiene el derecho a ejercer la opción y el vendedor tiene la obligación de ejercer la opción. Un contrato de opción puede negociarse (por ejemplo, cerrando una posición, liquidando una obligación) antes de ejercerse.
Vender opciones de compra y comprar al contado.
/*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)
}
}

Las opciones pueden proporcionar un cierto grado de protección de cobertura para los activos comprados al contado. Generalmente se utiliza cuando uno se siente optimista sobre el puesto y está dispuesto a mantenerlo. El riesgo reside en la caída de los precios spot. Aunque las opciones pueden compensar ciertas pérdidas spot hasta cierto punto, si las pérdidas superan la prima de la opción, se producirá una pérdida neta.
Además, la liquidez del mercado de opciones de moneda digital es generalmente pobre y a veces es difícil encontrar contrapartes. Esto también es algo que hay que tener en cuenta.
De manera similar, podemos reemplazar el spot por futuros, el código es el siguiente:
/*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)
}
}
El backtesting se muestra en la figura:

Los futuros pueden reducir el capital ocupado en comparación con el spot, pero el riesgo es ligeramente mayor que el spot.
Además, existen muchas otras combinaciones de opciones comerciales:
Los interesados podrán estudiarlo en el sistema de backtesting.