¿Cómo puedo hacer trading de derivados con Jupyter Notebook?

Publicado el 28 sept 2023Actualizado el 25 oct 2024Lectura de 10 min80

Descubre cómo hacer operaciones de derivados simples con las mismas herramientas. Utiliza las funciones completas disponibles en python-okx de un nivel superior.

Tipos de derivados

Hay tres tipos de derivados disponibles para operar en OKX:

  • Vencimiento

  • Perpetuos

  • Opciones

Puedes dirigirte a Derivados de Bitcoin, explicada: Vencimiento, perpetuos y opciones para saber más sobre las características de los diferentes tipos de derivados en OKX. En este tutorial, usaremos perpetuos como ejemplo.

Preguntas frecuentes

1. ¿Cómo puedo obtener los datos del mercado de ¿Conseguir datos del mercado?

También puedes sustituir instType con EXPRIY o OPTION para tu información.

Python
     import okx.MarketData as MarketData

   flag = "1"  # live trading: 0, demo trading: 1

   marketDataAPI = MarketData.MarketAPI(flag = flag)

   result = marketDataAPI.get_tickers(instType = "SWAP")
   print(result)

2. ¿Cómo puedo conseguir pares de trading disponibles de Conseguir instrumentos?

De la misma manera, elige el instType para el que te gustaría obtener información.

Python
import okx.PublicData as PublicData

if __name__ == '__main__':

    flag = "1"  # live trading: 0, demo trading: 1

    publicDataAPI = PublicData.PublicAPI(flag = flag)

    result = publicDataAPI.get_instruments(instType = "SWAP")
    print(result)

2.1 Calcula el valor teórico de un contrato de derivados con el parámetro de instrumento ctVal y ctMult

Para calcular el valor nocional de un contrato de derivados (es decir, futuros, swaps perpetuos y opciones), necesitas ctVal (valor del contrato) y ctMult (Multiplicador de contratos) de los parámetros del instrumento.

El valor nocional de un contrato de derivados puede calcularse como ctVal * ctMult (unidad: ctValCcy);

Por ejemplo, a partir de los parámetros del instrumento que se muestran a continuación, podemos calcular el valor nocional de un contrato de perpetuos LTC-USD como: ctVal \* ctMult (unidad:ctValccy) = 10 \* 1 USD = 10 USD

JSON
        "instType":"SWAP",
        "instId":"LTC-USD-SWAP",
        "instFamily":"LTC-USD",
        "uly":"LTC-USD",
        "settleCcy":"LTC",
        "ctVal":"10",
        "ctMult":"1",
        "ctValCcy":"USD"

3. ¿Cómo puedo comprobar tu saldo en Conseguir saldo?

Python
import okx.Account as Account
flag = "1"  # live trading:0, demo trading: 1

accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)

result = accountAPI.get_account_balance()
print(result)

4. ¿Qué es un modo de cuenta y el modo de margen/trading aptos para operar con derivados?

Como se menciona en nuestro último tutorial, en la cuenta unificada hay cuatro modos de cuenta, como se menciona en el último tutorial:

  • Modo spot,

  • Modo spot y de futuros,

  • Modo de margen multidivisa,

  • Modo de margen del portafolio.

Ten en cuenta que solo los últimos tres modos de margen, a saber, spot y futuros, margen multidivisa y margen portafolio, podrán operar con derivados. Consulta cómo configurar el modo de cuenta para entender las diferencias entre los cuatro modos y cómo cambiar entre ellos a través de nuestra IU web.

4.1 ¿Consigue la configuración de la cuenta actual del parámetro acctLv en Conseguir configuración de la cuenta

Asegúrate de que estás en el modo correcto de cuenta para operar con derivados.

Python
import okx.Account as Account

flag = "1"  # live trading: 0, demo trading: 1

accountAPI = Account.AccountAPI(api_key, secret_key, passphrase, False, flag)
result = accountAPI.get_account_config()
print(result)

if result['code'] == "0":
    acctLv = result["data"][0]["acctLv"]
    if acctLv == "1":
        print("Simple mode")
    elif acctLv == "2":
        print("Single-currency margin mode")
    elif acctLv == "3":
        print("Multi-currency margin mode")
    elif acctLv == "4":
        print("Portfolio margin mode")

5. ¿Cómo puedo establecer el apalancamiento mediante Apalancamiento de la cuenta estable?

Un parámetro importante que debemos establecer cuando las operaciones con derivados son apalancamiento.

El apalancamiento permite a los traders acceder a una posición con un valor mucho mayor al comprometer solo una pequeña cantidad de dinero. Por lo tanto, las ganancias o pérdidas se amplían en gran medida.

Los operadores pueden tener hasta un apalancamiento de 125x cuando operan con derivados en OKX. Puedes leer referencias sobre cómo establecer el apalancamiento para los diferentes niveles de apalancamiento permitidos en los diferentes niveles de posiciones.

CT-web-spottrading-howtoapi-6

Esto es lo que significan los gráficos que aparecen más arriba:

  • Máx. Apalancamiento: El múltiplo máximo de veces del capital prestado para aumentar la rentabilidad potencial de una inversión.

  • Relación de margen inicial (IMR): Margen necesario para mantener las posiciones actuales.

  • Relación de margen de mantenimiento (MMR): Se necesita un margen mínimo para mantener las posiciones actuales. La liquidación tendrá lugar si el capital de la cuenta cae por debajo del margen de mantenimiento.

Por ejemplo, cuando quieres operar con 3000 contratos de perpetuos de ETHUSDT, puedes aprovechar un máximo de 75 veces el capital que posees. IMR = 1 / 75 = 1,3 %, y deberás mantener un 0,8 % de MMR o superior para evitar la liquidación.

Hay 9 situaciones diferentes para la configuración del apalancamiento a través de las API abiertas de OKX. Consulta Establece situaciones de apalancamiento para diferentes casos.

En el caso de los swaps perpetuos, hay 3 situaciones diferentes para establecer el apalancamiento:

  • Establece un apalancamiento para las operaciones SWAP con margen cruzado a nivel de contrato.

  • Establece un apalancamiento para los instrumentos SWAP en el modo de operaciones aislated-margin y compra/venta en el modo de posición a nivel de contrato.

  • Establece un apalancamiento para los instrumentos SWAP en el modo de operaciones aislated-margin y long/short en el modo de posición a nivel del contrato y de la posición.

El siguiente ejemplo muestra cómo configurar el apalancamiento para un contrato y una posición SWAP únicos, en comparación con todos los contratos SWAP para un determinado subyacente.

Bash
# Set leverage to be 5x for all cross-margin BTC-USDT SWAP positions,
# by providing the SWAP instId
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    mgnMode = "cross"
)
print(result)

# In buy/sell position mode, set leverage to be 5x 
# for all isolated-margin BTC-USDT SWAP positions
# by providing the SWAP instId
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    mgnMode = "isolated"
)
print(result)

# In long/short position mode, set leverage to be 5x
# for an isolated-margin BTC-USDT-SWAP long position;
# This does NOT affect the leverage of the BTC-USDT-SWAP
# short positions
result = accountAPI.set_leverage(
    instId = "BTC-USDT-SWAP",
    lever = "5",
    posSide = "long",
    mgnMode = "isolated"
)
print(result)

Recuerda que el parámetro de solicitud PosSide solo se requiere cuando el modo de margen está aislado en el modo Long/Short Posesión de órdenes para EXPRIA/PERPETUO instrumentos (consulta las situaciones 6 y 9 en Establecer escenarios de apalancamiento).

6. ¿Cómo puedo cursar órdenes en diferentes modos de posición (colocación de órdenes): long/short y comprar/vender?

Hay dos modos de posición (colocación de órdenes) al realizar operacionesGananza y PERPETUO: Long/Short y comprar/vender (neto).

Puedes cambiar el modo de posición (colocación de órdenes) entre lang/short y compra/venta (neta), a través de la API Modo de posición estable:

SQL
result = accountAPI.set_position_mode(
    posMode = "long_short_mode"
)
print(result)

O, de lo contrario, puedes hacerlo a través de Ajustes en la web como se explica a continuación:

CT-web-derivativestrading-howtoapi-9

En el modo compra/venta (neto), la posición de un determinado contrato es la cantidad neta de tus operaciones de compra y venta. Cuando cursas órdenes a través de Cursar orden, el parámetro de solicitud PosSide no es obligatorio. Si lo superas, el único valor válido es net.

En el modo long/short, las posiciones en Long y en Short de un determinado contrato serán independientes las unas de las otras y deberán cerrarse por separado. Cuando cursas órdenes a través de Cursar orden, el parámetro de solicitud PosSide es obligatorio. Los valores válidos son long o short. A continuación se muestra cómo establecer el parámetro side (side of the trade) y PosSide (side of the position) cuando cursas una orden en diferentes escenarios:

  • Cursa una orden de compra y aumenta tu posición en Long: side = compra, PosSide = long

  • Cursa una orden de venta y aumenta tu posición en Short: side = vende, PosSide = Short

  • Cursar una orden de venta y cerrar/reducir una posición en Long: side = vender, posSide = long

  • Cursa una orden de compra y cierra/reduce una posición en Short: side = compra, PosSide = Short ¡Después estarás listo para cursar órdenes derivadas!

6.1 Cursar una orden límite mediante Cursar orden

Comprar un contrato de permuta de 100 BTC-USDT al precio de 19 000 USDT.

SQL
# limit order
result = tradeAPI.place_order(
    instId = "BTC-USDT-SWAP",
    tdMode = "isolated",
    side = "buy",
    posSide = "net",
    ordType = "limit",
    px = "19000",
    sz = "100"
)
print(result)

if result["code"] == "0":
    print("Successful order request,order_id = ",result["data"][0]["ordId"])
else:
    print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])

6.2 Cursar una orden a mercado a través de Cursar orden

Comprar un contrato de permuta de 100 BTC-USDT al precio de mercado.

SQL
# market order
result = tradeAPI.place_order(
    instId = "BTC-USDT-SWAP",
    tdMode = "isolated",
    side = "buy",
    posSide = "net",
    ordType = "market",
    sz = "100"
)
print(result)

if result["code"] == "0":
    print("Successful order request,order_id = ",result["data"][0]["ordId"])
else:
    print("Unsuccessful order request,error_code = ",result["data"][0]["sCode"], ", Error_message = ", result["data"][0]["sMsg"])

7. ¿Cómo puedo obtener los detalles/el estado de una determinada orden (referido a Conseguir detalles de la orden)?

Aparte de ordId, también puedes especifica clOrdId para obtener los detalles de la orden.

SQL
result = tradeAPI.get_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)

8. ¿Cómo cancelo una orden mediante Cancelar orden?

Perl
You also use __clOrdId__ in place of __ordId__
result = tradeAPI.cancel_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)

9. ¿Cómo puedo corregir una orden mediante Modificar orden?

También utilizas clOrdId en lugar de ordId. Este ejemplo muestra la revisión de un nuevo tamaño.

SQL
result = tradeAPI.amend_order(
    instId = "BTC-USDT-SWAP", 
    ordId = "505073046126960640",
    newSz = "80"
)
print(result)

10. ¿Cómo puedo obtener la lista de órdenes abiertas a través de ¿Conseguir la lista de órdenes?

SQL
result = tradeAPI.get_order_list()
print(result)

11. ¿Cómo puedo obtener el historial de órdenes a través de Conseguir historial de órdenes (últimos 7 días) y Conseguir historial de órdenes (últimos 3 meses)?

SQL
# Get order history (last 7 days)
result = tradeAPI.get_orders_history(
    instType = "SWAP"
)
print(result)

# Get order history (last 3 months)
result = tradeAPI.get_orders_history_archive(
    instType = "SWAP"
)
print(result)

12. ¿Cómo puedo obtener los detalles de la transacción mediante Conseguir detalles de la transacción (últimos 3 días) y Conseguir detalles de la transacción (últimos 3 meses)?

SQL
# Get transaction details (last 3 days)
result = tradeAPI.get_fills()
print(result)

# Get transaction details (last 3 months)
result = tradeAPI.get_fills_history(
    instType = "SWAP"
)
print(result)

13. ¿Cómo puedo obtener posiciones mediante ¿Conseguir posiciones?

Cuando tu cuenta está en el modo net, aparecerá la posición net de cada contrato; cuando tu cuenta está en el modo long/short, la posición en long/short de cada contrato se mostrará por separado.

SQL
result = accountAPI.get_positions()
print(result)

Por ejemplo, puedes hacer un seguimiento de tus ganancias y pérdidas no realizadas a través del parámetro de respuesta upl.

Más ejemplos

Para obtener más ejemplos, descarga el libro de notas de Jupyter completo aquí.

Si tienes alguna pregunta sobre nuestras API, puedes unirte a Nuestra comunidad de API y preguntarles si tienes alguna duda sobre ellas en la comunidad.