Nem todos os produtos mencionados estão disponíveis em todas as jurisdições.

Como negocio derivados com o Jupyter Notebook?

Publicado em 28 de set. de 2023Atualizado em 11 de set. de 2024Leitura de 10 minuto68

Descubra como fazer negociações simples de derivativos com as mesmas ferramentas. Vamos usar os recursos completos disponíveis em python-okx em um nível mais alto!

Tipos de Derivativos

Existem três tipos de derivativos disponíveis para trading na OKX:

  • Vencimento

  • Perpétuo

  • Opções

Você pode ir até Derivativos de Bitcoin, explicados: Expiry, perpétuo e opções para saber mais sobre as características dos diferentes tipos de derivativos no OKX. Neste tutorial, usaremos Swaps perpétuos como exemplo.

PERGUNTAS FREQUENTES

1. Como posso obter os dados de mercado de Obter dados de mercado?

Você também pode substituir o instType por EXPIRY ou OPÇÕES para obter informações.

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. Como posso obter os pares de trading disponíveis em Obter instrumentos?

Da mesma forma, escolha o instType para o qual deseja obter informações.

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)

Calcule o valor nocional de um contrato de derivativo com o parâmetro do instrumento ctVal e ctMult

Para calcular o valor nocional de um contrato de derivativo (isto é, futuros, swaps perpétuos e opções), você precisa do ctVal (valor do contrato) e do ctMult (multiplicador do contrato) dos parâmetros do instrumento.

O valor nocional de um contrato de derivativo pode ser calculado como ctVal * ctMult (unidade: ctValCcy);

Por exemplo, a partir dos parâmetros do instrumento mostrados abaixo, podemos calcular o valor nocional de um contrato perpétuo de LTC-USD como: ctVal x ctMult (unidade: ctValccy) = 10 x 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. Como posso verificar seu saldo em Obter 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. O que é um modo de conta e um modo de margem/trading que se qualifica para negociar derivativos?

Como mencionado no último tutorial, na conta de trading unificada, há quatro modos de conta:

  • Modo spot,

  • Modo spot e de futuros,

  • Modo de margem multimoeda,

  • Modo de margem de portfólio.

Observe que apenas os três últimos modos de margem, a saber, spot e futuros, margem multimoeda e margem de portfólio, são elegíveis para trading de derivativos. Acesse como configurar o modo de conta para entender as diferenças entre os quatro modos e como alternar entre eles por meio de nossa interface de usuário da Web.

4.1 Obtenha a configuração da conta atual do parâmetro acctLv em Obter configuração de conta

Verifique se você está no modo de conta correto para negociar derivativos.

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. Como posso definir a alavancagem por meio de Definir alavancagem da conta?

Um parâmetro importante que precisamos definir quando negociamos derivativos é a alavancagem.

A alavancagem permite que os traders insiram uma posição que vale muito mais ao comprometer apenas um pequeno montante de dinheiro. Assim, os ganhos ou perdas são consideravelmente potencializados.

Os traders podem ter uma alavancagem de até 125x ao negociar derivativos na OKX. Leia as referências sobre como definir a alavancagem para diferentes níveis de alavancagem permitidos em diferentes níveis de posições.

CT-web-spottrading-howtoapi-6

Veja o que os glossários mostrados acima significam:

  • Máxima alavancagem: O múltiplo máximo de vezes do capital emprestado para aumentar o retorno potencial de um investimento.

  • Índice de margem inicial (IMR): A margem necessária para manter posições atuais.

  • Índice de margem de manutenção (MMR): A margem mínima necessária para manter as posições atuais. Ocorrerá liquidação se o patrimônio da conta ficar abaixo da margem de manutenção.

Por exemplo, se quiser negociar 2.000 contratos perpétuos de ETHUSDT, você pode alavancar no máximo 75 vezes o capital que possui. IMR = 1 / 75 = 1,3%, e você deve manter 0,8% ou mais de MMR para evitar a liquidação.

Há 9 cenários diferentes para configurações de alavancagem usando as APIs abertas da OKX. Consulte Defina cenários de alavancagem para diferentes casos.

Para swaps perpétuos, há três cenários diferentes para a configuração de alavancagem:

  • Definir alavancagem para instrumentos SWAP em modo de trading de Margem cruzada no nível do contrato.

  • Definir alavancagem para instrumentos SWAP em modo de trading de Margem isolada e modo de posição Comprar/Vender no nível do contrato.

  • Definir alavancagem para instrumentos SWAP em modo de trading de Margem isolada e modo de posição comprada/vendida no nível do contrato e do lado da posição.

O exemplo a seguir mostra como definir a alavancagem e o lado da posição de um único contrato de SWAP, em comparação com todos os contratos de SWAP de um determinado subjacente.

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)

Observe que o parâmetro de solicitação posSide só é necessário quando o modo de margem é isolado no modo de posição comprada/vendida (envio de ordem) para instrumentos EXPIRY/PERPÉTUO (consulte o cenário 6 e 9 em Definir cenários de alavancagem).

6. Como posso criar ordens nos diferentes modos de posição (envio de ordens): comprada/vendida e compra/venda?

Existem dois modos de posição (envio de ordens) ao negociar EXPIRY e PERPÉTUOS: comprada/vendida e comprar/vender (líquido).

Você pode alterar o modo de posição (envio de ordens) entre comprada/vendida e comprar/vender (líquido) por meio da API Definir modo de posição:

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

Ou, como alternativa, você pode fazer isso em Configurações na web conforme abaixo:

CT-web-derivativestrading-howtoapi-9

No modo comprar/vender (líquido), a posição de um determinado contrato é a quantidade líquida das suas negociações de compra e venda. Quando você envia ordens via Enviar ordem, o parâmetro de solicitação posSide não é obrigatório. Se você passar, o único valor válido será líquido.

No modo comprada/vendida, as posições compradas e vendidas de um determinado contrato serão independentes entre si e precisarão ser fechadas separadamente. Quando você envia ordens via Enviar ordem, o parâmetro de solicitação posSide é obrigatório. Os valores válidos são comprada ou vendida. Abaixo mostramos como definir os parâmetros lado (lado da negociação) e posSide (lado da posição) quando você envia uma ordem em diferentes cenários:

  • Envie uma ordem de compra e abra/aumente uma posição comprada: lado = comprar, PosSide = comprada

  • Envie uma ordem de venda e abra/aumente uma posição vendida: lado = vender, PosSide = vendida

  • Envie uma ordem de venda e feche/reduza uma posição comprada: lado = vender, PosSide = comprada

  • Envie uma ordem de compra e feche/reduza uma posição vendida: lado = comprar, PosSide = vendida

6.1 Criar uma ordem limitada via Enviar ordem

Comprando 100 contratos de swap de BTC-USDT ao preço 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 Enviar uma ordem a mercado via Enviar ordem

Comprando 100 contratos de swap de BTC-USDT ao preço 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. Como posso obter detalhes/estado de uma determinada ordem (consulte Obter detalhes da ordem)?

Além de ordId, você também pode especificar o clOrdId para obter detalhes da ordem.

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

8. Como faço para cancelar uma ordem via Cancelar ordem?

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

9. Como faço para alterar uma ordem via Alterar ordem?

Você também pode usar clOrdId em vez de ordId. Este exemplo mostra a revisão de um novo tamanho.

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

10. Como posso obter a lista de ordens em aberto via Obter lista de ordens?

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

11. Como posso obter o histórico de ordens via Obter histórico de ordens (últimos 7 dias) e Obter histórico de ordens (ú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. Como posso obter os detalhes da transação via Obter detalhes da transação (últimos 3 dias) e Obter detalhes da transação (ú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. Como posso obter posições via Obter posições?

Quando sua conta estiver no modo líquido, será exibida a posição líquida de cada contrato; quando sua conta estiver no modo comprada/vendida, a posição comprada ou vendida de cada contrato será exibida separadamente.

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

Por exemplo, você pode rastrear seus lucros e perdas não realizados por meio do parâmetro de respostaupl.

Mais exemplos

Para obter mais exemplos, baixe o Jupyter Notebook completo aqui.

Se você tiver alguma dúvida sobre nossas APIs, você pode participar da nossa comunidade de API e divulgá-las na comunidade.