Reforma de la API de futuros de Deribit para adaptarla a la negociación cuantitativa de opciones

El autor:- ¿ Por qué?, Creado: 2022-12-28 10:02:51, Actualizado: 2023-09-20 09:15:09

img

Reforma de la API de futuros de Deribit para adaptarla a la negociación cuantitativa de opciones

En la actualidad, existen muchos intercambios de futuros de divisas digitales. Sin embargo, como derivado de futuros, hay pocos intercambios en el mercado para el comercio de opciones de divisas digitales. Deribit y BitMEX apoyan el comercio de opciones. En el campo del comercio cuantitativo, el comercio de opciones también tiene una variedad de estrategias, como las estrategias de opciones mencionadas en algunos materiales buscados:

Tipo de producto
Estrategia de dirección:
Estrategia de volatilidad:
Estrategia de cobertura:

Citado deEnlace

Para preparar una estrategia de negociación de opciones, primero debe sentar una base sólida y estar familiarizado con las operaciones básicas como colocar un pedido, obtener ticker, cancelar un pedido y obtener posiciones. La redacción de la estrategia todavía utiliza la plataforma de negociación de FMZ Quant, aunque la plataforma de negociación de FMZ Quant actualmente admite el comercio de divisas, el comercio de contratos y el comercio de apalancamiento en el campo del comercio cuantitativo de divisas digitales. No hay mucha información sobre el comercio de opciones. Tomemos el intercambio Deribit Quant como ejemplo para introducir cómo usar la plataforma de negociación de FMZ Quant para familiarizarse con el comercio de opciones de divisas digitales.

Materiales relacionados con Deribit

Documento de la API:https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrumentBot de simulación:https://docs.deribit.com/v2/?javascript#public-get_last_settlements_by_instrument

Puede registrar una cuenta en el sitio web del bot de simulación, abrir la API KEY y obtener la API KEY.

img

Hay cuatro conceptos básicos para entender sobre el comercio de opciones:

- Fecha de ejercicio: las partes largas y cortas de la opción completan la entrega del contrato de opción en esta fecha. - Precio de ejercicio: en la fecha de ejercicio, las partes largas y cortas de la opción completan la entrega del contrato de opción al precio de ejercicio. -Premio: es decir, el precio de las opciones. Al igual que el spot y los futuros, se cotiza a un precio de oferta y un precio de compra. Vale la pena señalar que, dado que la liquidez de las opciones es generalmente menor que la de los futuros y spot, la diferencia de precio entre la oferta y la demanda puede ser grande, por lo que se debe prestar mucha atención aquí! Después de la transacción, el precio de transacción es el costo de las posiciones largas de la opción, momento en el que las posiciones largas obtienen el derecho (el derecho a ejercer la opción); La opción corta, como la parte que recibe la prima, agrega una obligación. Una vez que la opción larga solicita ejercer sus derechos, la opción corta debe cooperar. - Las opciones de venta: La llamada opción de compra significa que las posiciones largas de la opción tienen el derecho de pedir a las posiciones cortas de la opción que compren el Bitcoin dado a un cierto precio de ejercicio en una determinada fecha de ejercicio, y las posiciones cortas tienen la obligación de cooperar con las posiciones largas; La llamada opción de venta significa que el lado largo de la opción tiene el derecho de pedir al lado corto que venda el Bitcoin dado a un cierto precio de ejercicio en una determinada fecha de ejercicio, y el lado corto tiene la obligación de cooperar con el lado largo.

Adquisición de tickers

Después de leer el documento API de Deribit Exchange, podemos ver que la interfaz de ticker de Deribit para acceder a tickers de futuros u opciones es simplemente una cuestión de pasar en diferentesinstrument_nameParámetros (instrument_name se establece por la función SetContractType), por lo que básicamente, puede seguir el La interfazGetTickerpara obtener el ticker de las opciones.

Por supuesto, la plataforma FMZ Quant Trading encapsula el bot real de Deribit Exchange por defecto. Primero, necesitamos cambiar al bot de simulación, usando el siguiente código:

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

Entonces establecemos el contrato de opción.BTC-27DEC19-7000-PEn la actualidad. Se trata de una opción de venta con una fecha de ejercicio de: 27DEC19 y un precio de ejercicio de: 7000.

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

Entonces, vamos a escribir juntos y dejar que el código ejecutar para probar conseguir el ticker para este contrato de opción.

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

Es fácil de probar usando la herramienta de depuración:

img

Se puede ver que el precio es consistente con el del robot de simulación.

img

Otras interfaces de ticker se llaman de la misma manera, que no se repetirá aquí. El comercio de opciones no es muy activo. A veces no hay orden de compra o venta. En este momento, la plataforma de comercio de FMZ Quant detectará el valor de 0 en la parte inferior, y informará un error.SetErrorFilter("Invalid ticker")para ignorar este error, y utilizar la funciónGetRawJSONAquí escribo un ejemplo para lograr funciones similares:

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
}

Cuando nos llaman, escribimos:Log($.GetTicker(exchange))

Haga un pedido.

La operación de colocar una orden es muy simple, en comparación con el comercio de futuros, sólo hay dos direcciones de compra y venta.

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

El pedido que acabo de hacer también aparece en el robot de simulación.

img

¿ Y qué?exchange.GetOrder(id)puede buscar la información del pedido.

Cancelación de los pedidos

Lo mismo.CancelOrderla función se utiliza para la cancelación de la orden, al igual que la cancelación de la orden para la negociación de futuros.

img

Obtener los activos disponibles de la cuenta

Obtener activos disponibles cuenta es exactamente lo mismo que el comercio de futuros, sólo llama a laGetAccountfuncionan directamente.

Simula la visualización en la página de intercambio:

img

Ejecuta el código para conseguirlo.

img

Obtener información de posición

No podemos usar el encapsulado.GetPositionfunción directamente para las posiciones, porque la transacción por defecto Deribit es una transacción de futuros, no una transacción de opciones, sólo podemos utilizar esta función para obtener posiciones de futuros. Así que esto tendrá que ser nuestra propia función encapsulada para obtener la posición de las opciones.

Interfaz de funciones para obtener posiciones en el documento 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
}

Llama.Log($.GetPosition(exchange))para imprimir la información de posición.

img

Por lo tanto, las operaciones básicas se pueden implementar, y el resto se puede estudiar para las estrategias de negociación de opciones.


Relacionados

Más.