Étude préliminaire sur le backtesting de la stratégie des options de monnaie numérique

Auteur:La bonté, Créé: 2020-08-23 10:53:41, Mis à jour: 2023-10-08 19:56:47

img

Étude préliminaire sur le backtesting de la stratégie des options de monnaie numérique

Récemment, FMZ Platform a mis à niveau le système de backtesting pour prendre en charge le backtesting des options de devises numériques. Cette fois, il prend en charge certaines données d'options de l'échange Deribit. Nous avons donc de meilleurs outils pour l'apprentissage du trading d'options et la vérification de la stratégie.

Test de retour des options Deribit

L'option Deribit définie dans le système de backtest est de type européen et la valeur d'un contrat est de 1BTC. Le code du contrat d'option est: BTC-7AUG20-12750-C.

Objet de l'étude Date de l'exercice Prix d'exercice Option (appel/achat)
BTC 7AUG20 12750 C
Le Bitcoin Exercice le 7 août 2020 Prix d'exercice 12750 Options d' appel
BTC 7AUG20 12750 P
Le Bitcoin Exercice le 7 août 2020 Prix d'exercice 12750 Option de mise

Les opérations telles que l'établissement de contrats et l'obtention de positions sont les mêmes que les contrats à terme sur devises numériques. Contrat de jeu: échange.Type de contrat de jeu (BTC-7AUG20-12750-C) Obtenez la position: var pos = échange.GetPosition (())

Le prix d'un contrat d'option est la prime d'un contrat d'option, et l'acheteur d'option doit payer la prime d'option au vendeur d'option.

Exemples de combinaisons courantes de négociation d'options

Vendez une option d'achat et achetez un 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

Les options peuvent fournir un certain degré de protection de couverture aux actifs achetés au comptant. Généralement utilisés lorsque l'on est optimiste quant au comptant et prêt à le conserver. Le risque réside dans la baisse des prix au comptant. Bien que dans une certaine mesure, les options puissent compenser une certaine perte au comptant, mais après que la perte dépasse la prime d'option, il y aura une perte nette.

En outre, la liquidité du marché des options de devises numériques est moyenne, et parfois aucune contrepartie n'est trouvée.

De même, nous pouvons remplacer le spot par des contrats à terme, le code est le suivant:

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

Les contrats à terme peuvent réduire le capital occupé par rapport au spot, mais le risque est plus élevé que celui du spot.

En outre, il existe de nombreuses autres combinaisons de négociation d'options:

  • Différence de l'option d'achat à termebull call spread
  • Option de mise à l' échecBear Put Spread

Ceux qui sont intéressés peuvent l'étudier dans le système de backtest.


Relationnée

Plus de