¿Cómo tradear derivados con Jupyter Notebook?
Descubre cómo puedes hacer trading de derivados fácilmente con las mismas herramientas. Aprovechemos todas las funciones disponibles en python-okx ¡a un nivel superior!
Tipos de derivados
Hay tres tipos de trading de derivados disponibles en OKX:
Con vencimiento
Perpetuos
Opciones
Consulta nuestro artículo Todo sobre los derivados de Bitcoin: contratos de opciones, perpetuos y con vencimiento para conocer las características de los diferentes tipos de derivados en OKX. En este tutorial, usaremos los perpetuos como ejemplo.
Preguntas frecuentes
1. ¿Cómo obtener datos del mercado para el trading de derivados con Jupyter Notebook usando la opción Obtener datos del mercado?
Puedes reemplazar la variable instType por los valores EXPIRY u OPTION para obtener información.
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 acceder a los pares de trading disponibles para el trading de derivados con Jupyter Notebook usando la opción Obtener instrumentos?
Igual que en el caso anterior, elige el valor de instType sobre el cual deseas obtener información.
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 Cálculo del valor nocional de un contrato de derivados con los parámetros ctVal y ctMult del instrumento
Para calcular el valor nocional de un contrato de derivados (por ejemplo, futuros, swaps perpetuos y opciones), necesitas los parámetros ctVal (valor del contrato) y ctMult (multiplicador del contrato) del instrumento.
El valor nocional de un contrato de derivados se puede calcular como ctVal * ctMult (unit: ctValCcy);
Por ejemplo, a partir de los parámetros de instrumento mostrados más abajo podemos calcular el valor nocional de un contrato perpetuo de LTC/USD de la siguiente forma: ctVal * ctMult (unit: ctValCcy) = 10 * 1 USD = 10 USD.
"instType":"SWAP",
"instId":"LTC-USD-SWAP",
"instFamily":"LTC-USD",
"uly":"LTC-USD",
"settleCcy":"LTC",
"ctVal":"10",
"ctMult":"1",
"ctValCcy":"USD"3. ¿Dónde consultar mi saldo para tradear derivados con Jupyter Notebook usando Obtener saldo?
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é modo de cuenta y modo de margen/trade se admiten en el trading de derivados con Jupyter Notebook?
Como mencionamos en nuestro último tutorial, hay cuatro modos de cuenta:
Modo spot
Modo de spot y futuros
Modo de margen multimoneda
Modo de margen de portafolio
Solo los tres últimos modos de margen ( de spot y futuros, multimoneda y de margen de portafolio son elegibles para el trading de derivados. Consulta nuestro artículo sobre cómo establecer el modo de cuenta para comprender las diferencias entre los cuatro modos y saber cómo pasar de uno a otro en la interfaz de usuario de nuestro sitio web.
4.1 Conoce cuál es la configuración de cuenta actual usando el parámetro acctLv en Configuración de la cuenta
Asegúrate de estar en el modo de cuenta correcto para tradear derivados.
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 ajustar el apalancamiento para tradear derivados con Jupyter Notebook a través de Establecer apalancamiento de la cuenta?
Un parámetro importante al momento de tradear derivados es el apalancamiento.
El apalancamiento te permite entrar en una posición de mayor valor con un monto de dinero mucho menor. Por lo tanto, las pérdidas o ganancias se multiplican significativamente.
Los traders pueden tener un apalancamiento de hasta 125x al tradear derivados en OKX. Consulta la información sobre configuración del apalancamiento para conocer cuáles son los distintos niveles de apalancamiento permitidos para distintos niveles de posiciones.
A continuación te explicamos los términos mencionados antes:
Apalancamiento máximo: número máximo de veces por el que se puede multiplicar el capital prestado para aumentar el rendimiento potencial de una inversión.
Ratio de margen inicial (IMR): margen requerido para el holding de las posiciones actuales.
Ratio de margen de mantenimiento (MMR): margen mínimo requerido para mantener las posiciones actuales. Si el capital de la cuenta cae por debajo del margen de mantenimiento, ocurrirá una liquidación.
Por ejemplo, cuando deseas tradear con contratos de perpetuos de 3,000 ETHUSDT, puedes apalancar tu capital un máximo de 75x. IMR = 1 / 75 = 1.3 % y debes mantener un MMR del 0.8 % o superior para evitar la liquidación.
Hay 9 escenarios distintos de configuración del apalancamiento mediante las API abiertas de OKX. Consulta Definir escenarios de apalancamiento para diferentes casos.
En los swaps perpetuos, hay 3 formas diferentes de ajustar el apalancamiento:
Ajustar el apalancamiento para instrumentos SWAP en trades con margen cruzado a nivel de contrato.
Ajustar el apalancamiento para instrumentos SWAP en el modo de margen aislado y el modo de posición comprar/vender a nivel de contrato.
Ajustar el apalancamiento para instrumentos SWAP en el modo margen aislado y el modo de posición long/short a nivel de contrato y lado de la posición.
El siguiente ejemplo muestra cómo ajustar el apalancamiento para un contrato SWAP individual y su posición frente a todos los contratos de SWAP para un subyacente dado.
# 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)El parámetro posSide requerido es necesario únicamente cuando el modo de margen es aislando en el modo de posición long/short (creación de orden) para los instrumentos CON VENCIMIENTO/PERPETUOS (ver escenarios 6 y 9 en Definir escenarios de apalancamiento).
6. ¿Cómo crear órdenes para tradear derivados con Jupyter Notebook en diferentes modos de posición (creación de orden): long/short y comprar/vender?
Hay dos modos de posición (creación de orden) al tradear contratos CON VENCIMIENTO y PERPETUOS: long/short y Comprar/vender (neto).
Puedes cambiar el modo de posición (creación de orden) de long/short a comprar/vender (neto) mediante la API Definir modo de posición:
result = accountAPI.set_position_mode(
posMode = "long_short_mode"
)
print(result)También puedes hacerlo desde Configuración en el sitio web como se detalla a continuación:
En el modo comprar/vender (neto), la posición de un contrato dado es el monto neto de tus trades de compra y venta. Cuando inicias órdenes a través de Crear orden, el parámetro de solicitud posSide es obligatorio. Si lo pasas, el único valor válido es neto.
En el modo long/short, las posiciones long y short de un contrato dado serán independientes entre sí y deberán cerrarse por separado. Cuando inicias órdenes a través de Crear orden, el parámetro de solicitud posSide es obligatorio. Los valores válidos son long o short. Abajo te mostramos cómo establecer el lado (lado del trade) y el parámetro posSide (lado de la posición) al crear una orden en diferentes situaciones:
Crear una orden de compra y abrir/aumentar una posición long: side = buy, posSide = long
Crear una orden de venta y abrir/aumentar una posición short: side = sell, posSide = short
Crear una orden de venta y cerrar/reducir una posición long: side = sell, posSide = long
Crear una orden de compra y cerrar/reducir una posición short: side = buy, posSide = short ¡Y listo! Esto es todo lo que necesitas para crear órdenes de derivados.
6.1 Iniciar una orden límite desde Crear orden
Compra de un contrato de swap de 100 BTC/USDT al precio de 19,000 USDT.
# 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 Iniciar una orden de mercado desde Crear orden
Compra de un contrato de swap de 100 BTC/USDT al precio de mercado.
# 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 obtener detalles o una orden para tradear derivados con Jupyter Notebook desde Obtener datos de la orden?
Además de ordId, también puedes ingresar clOrdId para obtener los detalles de la orden.
result = tradeAPI.get_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)8. ¿Cómo cancelar una orden para el trading de derivados con Jupyter Notebook desde Cancelar orden?
You also use __clOrdId__ in place of __ordId__
result = tradeAPI.cancel_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)9. ¿Cómo modificar una orden para tradear derivados con Jupyter Notebook desde Modificar orden?
También puedes usar clOrdId en lugar de ordId. En el siguiente ejemplo se muestra la modificación del tamaño de la orden.
result = tradeAPI.amend_order(
instId = "BTC-USDT-SWAP",
ordId = "505073046126960640",
newSz = "80"
)
print(result)10. ¿Cómo acceder a la lista de órdenes abiertas para el trading de derivados con Jupyter Notebook usando Obtener lista de órdenes?
result = tradeAPI.get_order_list()
print(result)11. ¿Cómo acceder al historial de órdenes para el trading de derivados con Jupyter Notebook a través de Obtener historial de órdenes (últimos 7 días) y Obtener historial de órdenes (últimos 3 meses)?
# 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 acceder a los detalles de la transacción para el trading de derivados con Jupyter Notebook a través de Obtener detalles de la transacción (últimos 3 días) y Obtener detalles de la transacción (últimos 3 meses)?
# 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 obtener posiciones para el trading de derivados con Jupyter Notebook a través de Obtener posiciones?
Cuando tu cuenta está en el modo neto, se mostrará la posición neta de cada contrato. Cuando tu cuenta está en el modo long/short, se mostrarán aparte las posiciones long o short de cada contrato.
result = accountAPI.get_positions()
print(result)Por ejemplo, puedes hacer el seguimiento de tus ganancias y pérdidas no realizadas mediante el parámetro de respuesta upl.
Más ejemplos
Descarga aquí Jupyter Notebook completo para ver más ejemplos.
Si tienes preguntas sobre nuestras API, puedes unirte a nuestra comunidad API y dejar tus dudas allí.