Estudo preliminar sobre o backtesting da estratégia de opções de moeda digital

Autora:Bem-estar, Criado: 2020-08-23 10:53:41, Atualizado: 2023-10-08 19:56:47

img

Estudo preliminar sobre o backtesting da estratégia de opções de moeda digital

Recentemente, a FMZ Platform atualizou o sistema de backtesting para suportar o backtesting de opções de moeda digital. Desta vez, ele suporta alguns dados de opções da troca Deribit. Assim, temos melhores ferramentas para aprendizado de negociação de opções e verificação de estratégia.

Testes de retorno de opções de derivativos

A opção Deribit definida no sistema de backtest é de estilo europeu, e o valor de um contrato é 1BTC. O código do contrato de opção é: BTC-7AUG20-12750-C.

Objecto Data do exercício Preço de exercício (Call/Put) Opção
BTC 7AUG20 12750 C
Bitcoin Exercício em 7 de agosto de 2020 Preço de exercício 12750 Opções de compra
BTC 7AUG20 12750 P
Bitcoin Exercício em 7 de agosto de 2020 Preço de exercício 12750 Opção de colocação

As operações como estabelecimento de contratos e obtenção de posições são as mesmas que os futuros de moeda digital. Contrato de conjunto: exchange.SetContractType ((BTC-7AUG20-12750-C) Obter posição: var pos = troca.GetPosition()

O preço de um contrato de opção é o prêmio de um contrato de opção, e o comprador da opção precisa pagar o prêmio da opção ao vendedor da opção.

Exemplos de combinações comuns de negociação de opções

Venda uma opção de compra e compre um ponto.

/*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)
    }
}

img

As opções podem fornecer um certo grau de proteção de cobertura para os ativos comprados no local. Geralmente usado quando otimista sobre o local e disposto a manter o local. O risco reside na queda nos preços ao local. Embora até certo ponto, as opções podem compensar uma certa perda no local, mas depois que a perda excede o prêmio da opção, haverá uma perda líquida.

Além disso, a liquidez do mercado de opções de moeda digital é média e, às vezes, nenhuma contraparte é encontrada.

Da mesma forma, podemos substituir spot com futuros, o código é o seguinte:

/*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)
    }
}

img

Os futuros podem reduzir o capital ocupado em relação ao spot, mas o risco é superior ao do spot.

Além disso, existem muitas outras combinações de negociação de opções:

  • Propagação da opção de compra em altabull call spread
  • Opção Bear Put SpreadBear Put Spread

Os interessados podem estudá-lo no sistema de backtest.


Relacionados

Mais.