Réforme de l'API des contrats à terme Deribit pour l'adapter à la négociation quantitative des options

Auteur:Je ne sais pas., Créé: 2022-12-28 10:02:51, Mis à jour: 2023-09-20 09:15:09

img

Réforme de l'API des contrats à terme Deribit pour l'adapter à la négociation quantitative des options

À l'heure actuelle, il existe de nombreux échanges à terme de devises numériques. Cependant, en tant que dérivé à terme, il y a peu d'échanges sur le marché pour le trading d'options de devises numériques. Deribit et BitMEX prennent en charge le trading d'options. Dans le domaine du trading quantitatif, le trading d'options a également une variété de stratégies, telles que les stratégies d'options mentionnées dans certains matériaux recherchés:

Le type
Stratégie de direction:
Stratégie de volatilité:
Stratégie de couverture:

Cité parlien

Pour préparer une stratégie de trading d'options, vous devez d'abord poser une base solide et être familier avec les opérations de base telles que la passation d'un ordre, l'obtention d'un ticker, l'annulation d'un ordre et l'obtention de positions. La rédaction de la stratégie utilise toujours la plate-forme de trading FMZ Quant, bien que la plate-forme de trading FMZ Quant supporte actuellement le trading de devises, le trading de contrats et le trading à effet de levier dans le domaine du trading quantitatif de devises numériques. Il n'y a pas beaucoup d'informations sur le trading d'options.

Matériaux liés à Deribit

Document de l'API:https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrumentBot de simulation:https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrument

Vous pouvez enregistrer un compte sur le site Web du bot de simulation, ouvrir la clé API et obtenir la clé API.

img

Il y a quatre concepts de base à comprendre sur le trading d'options:

- Date d'exercice: les parties longues et courtes de l'option terminent la livraison du contrat d'option à cette date. - Prix d'exercice: à la date d'exercice, les parties longues et courtes de l'option terminent la livraison du contrat d'option au prix d'exercice. -Prémium: c'est-à-dire le prix des options. Comme les options au comptant et les contrats à terme, il est coté à un prix d'offre et à un prix d'achat. Il convient de noter que, comme la liquidité des options est généralement inférieure à celle des contrats à terme et au comptant, la différence de prix entre l'offre et la demande peut être grande, il convient donc de prêter beaucoup d'attention ici! Après la transaction, le prix de transaction est le coût des positions longues de l'option, au moment où les positions longues obtiennent le droit (le droit d'exercer l'option); L'option courte, en tant que partie bénéficiaire de la prime, ajoute une obligation. Une fois que l'option longue demande d'exercer ses droits, l'option courte doit coopérer. - Des options de vente: La soi-disant option d'achat signifie que les positions longues de l'option ont le droit de demander aux positions courtes d'option d'acheter le Bitcoin donné à un certain prix d'exercice à une certaine date d'exercice, et les positions courtes ont l'obligation de coopérer avec les positions longues; La soi-disant option de vente signifie que la partie longue de l'option a le droit de demander à la partie courte de vendre le Bitcoin donné à un certain prix d'exercice à une certaine date d'exercice, et la partie courte a l'obligation de coopérer avec la partie longue.

L'acquisition de tickers

Après avoir lu le document API de Deribit Exchange, nous pouvons voir que l'interface de ticker de Deribit pour accéder aux tickers de futures ou d'options est simplement une question de passer dans différentsinstrument_nameparamètres (instrument_name est définie par la fonction SetContractType), donc essentiellement, vous pouvez suivre l'interfaceGetTickerpour obtenir le ticker des options.

Bien sûr, la plateforme de trading FMZ Quant encapsule le vrai bot de Deribit Exchange par défaut.

exchange.IO("base", "https://test.deribit.com")

Ensuite, nous avons mis en place le contrat d'optionBTC-27DEC19-7000-PActuellement. Cette option de vente a une date d'exercice de: 27DEC19 et un prix d'exercice de: 7000.

exchange.SetContractType("BTC-27DEC19-7000-P")

Puis obtenir, écrivons-le ensemble et laisser le code exécuter pour tester obtenir le ticker pour ce contrat d'option.

function main () {
    exchange.IO("base", "https://test.deribit.com")
    exchange.SetContractType("BTC-27DEC19-7000-P")
    var ticker = exchange.GetTicker()
    Log(ticker)
}

Il est facile de tester en utilisant l'outil de débogage:

img

On peut voir que le prix est compatible avec celui du robot de simulation.

img

D'autres interfaces ticker sont appelées de la même manière, ce qui ne sera pas répété ici. Le trading d'options n'est pas très actif. Parfois, il n'y a pas d'ordre d'achat ou de vente. À ce moment-là, la plateforme de trading FMZ Quant détectera la valeur de 0 en bas et signalera une erreur. Vous pouvez utiliserSetErrorFilter("Invalid ticker")pour ignorer cette erreur, et utiliser la fonctionGetRawJSONVoici un exemple pour réaliser des fonctions similaires:

function init() {
    SetErrorFilter("Invalid ticker")
}

$.GetTicker = function(e) {
    var ticker = e.GetTicker()
    if (!ticker) {
        try {
            var ret = JSON.parse(e.GetRawJSON())
            return {
                Info : ret,
                High : ret.result.stats.high,
                Low : ret.result.stats.low, 
                Buy : ret.result.best_bid_price,
                Sell : ret.result.best_ask_price,
                Last : ret.result.last_price, 
                Volume : ret.result.stats.volume,
                OpenInterest : 0,
                Time : new Date().getTime()
            }
        } catch (err) {
            Log(err)
        }
    }
    
    return ticker
}

Quand on est appelés, on écrit:Log($.GetTicker(exchange))

Faites une commande

L'opération de placement d'un ordre est très simple, par rapport au trading à terme, il n'y a que deux directions d'achat et de vente.

function main () {
    exchange.IO("base", "https://test.deribit.com")
    exchange.SetContractType("BTC-27DEC19-7000-P")
    
    var id = exchange.Buy(0.017, 1)
    Log(exchange.GetOrder(id))
}

img

La commande qui vient d'être passée apparaît aussi sur le robot de simulation.

img

Je veux dire...exchange.GetOrder(id)peut consulter les informations de commande.

Annulation des commandes

C' est la même chose.CancelOrderCette fonction est utilisée pour l'annulation d'ordre, tout comme l'annulation d'ordre pour les contrats à terme.

img

Obtenez les actifs disponibles sur le compte

Obtenir des actifs disponibles compte est exactement le même que le commerce à terme, appelez simplement leGetAccountfonctionner directement.

Simuler l'affichage sur la page d'échange:

img

Exécutez le code pour obtenir.

img

Obtenez des informations de position

On ne peut pas utiliser le capoté.GetPositionfonction directement pour les positions, parce que la transaction Deribit par défaut est une transaction à terme, pas une transaction d'options, nous ne pouvons utiliser cette fonction pour obtenir des positions à terme. Donc cela va devoir être notre propre fonction encapsulée pour obtenir la position des options.

Interface de fonction pour l'obtention de positions dans le document API:

img

$.GetPosition = function(e) {
    // /private/get_positions
    // currency  , kind 
    
    var positions = [] 
    var currency = e.GetCurrency()
    var arr = currency.split("_")
    var baseCurrency = arr[0]
    
    try {
        var ret = e.IO("api", "GET", "/api/v2/private/get_positions", "currency=" + baseCurrency + "&kind=option")
        for (var i in ret.result) {
            if (ret.result[i].size == 0 || ret.result[i].direction == "zero") {
                continue    
            } 
            
            var pos = {
                Info : ret.result[i], 
                Amount : ret.result[i].size,
                FrozenAmount : 0,
                Price : ret.result[i].average_price,
                Profit : ret.result[i].floating_profit_loss,
                MarginLevel : 0,
                Margin : 0,
                ContractType : ret.result[i].instrument_name,
                Type : ret.result[i].direction == "buy" ? ORDER_TYPE_BUY : ORDER_TYPE_SELL,
            }
            
            positions.push(pos)
        }
    } catch (err) {
        Log(err)
        positions = null
    }
    
    return positions
}

AppelezLog($.GetPosition(exchange))pour imprimer les informations de position.

img

Ainsi, les opérations de base peuvent être mises en œuvre, et le reste peut être étudié pour des stratégies de négociation d'options.


Relationnée

Plus de