Vorläufige Studie zum Backtest der Strategie für Optionen auf digitale Währungen

Schriftsteller:Gutes, Erstellt: 2020-08-23 10:53:41, Aktualisiert: 2023-10-08 19:56:47

img

Vorläufige Studie zum Backtest der Strategie für Optionen auf digitale Währungen

Vor kurzem hat FMZ Platform das Backtesting-System aktualisiert, um das Backtesting von digitalen Währungsoptionen zu unterstützen. Diesmal unterstützt es einige Optionsdaten der Börse Deribit. Also haben wir bessere Tools für Optionshandel Lernen und Strategieverifizierung.

Derbit-Optionen-Backtest

Die im Backtest-System definierte Deribit-Option ist europäischer Art und hat einen Wert von 1 BTC. Der Optionsvertragskode lautet: BTC-7AUG20-12750-C.

Gegenstand Datum der Ausübung Ausübungspreis (Call/Put) Option
BTC 7AUG20 12750 C
Bitcoins Ausübung am 7. August 2020 Ausübungspreis 12750 Aufrufoptionen
BTC 7AUG20 12750 P
Bitcoins Ausübung am 7. August 2020 Ausübungspreis 12750 Option setzen

Bei den Transaktionen wie dem Festlegen von Verträgen und dem Erhalt von Positionen handelt es sich um die gleichen wie bei den Futures auf digitale Währungen. Satzvertrag: exchange.SetContractType ((BTC-7AUG20-12750-C) Position erhalten: var pos = exchange.GetPosition()

Der Preis eines Optionsvertrags ist die Prämie eines Optionsvertrags, und der Optionskäufer muss die Optionsprämie an den Optionsverkäufer zahlen. Der Käufer hat das Recht zu üben, und der Verkäufer hat die Verpflichtung zu üben. Bevor der Optionsvertrag ausgeübt wird, kann er gehandelt werden (wie Liquidation, Abwicklung von Verpflichtungen).

Beispiele für gemeinsame Optionshandelskombinationen

Verkaufe eine Call-Option und kaufe einen Spot.

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

Optionen bieten einen gewissen Grad an Sicherungsschutz für die im Spot erworbenen Vermögenswerte. Im Allgemeinen verwendet, wenn man optimistisch über den Spot ist und bereit ist, den Spot zu halten. Das Risiko liegt im Fall der Spotpreise. Obwohl Optionen bis zu einem gewissen Grad einen bestimmten Spotverlust ausgleichen können, wird nach dem Verlust die Optionsprämie überschritten, ein Nettoverlust erzielt.

Darüber hinaus ist die Liquidität des Marktes für digitale Währungsoptionen durchschnittlich und manchmal wird keine Gegenpartei gefunden.

Ebenso können wir Spot durch Futures ersetzen, der Code lautet wie folgt:

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

Futures können das besetzte Kapital verringern als Spot, aber das Risiko ist höher als das von Spot.

Darüber hinaus gibt es viele andere Optionshandelskombinationen:

  • Spread der Bull Call-Optionbull call spread
  • Ausweitung der Bear Put-OptionBear Put Spread

Wer interessiert ist, kann es im Backtest-System studieren.


Verwandt

Mehr