Como faço trading de derivados com o Jupyter Notebook?
Descobre como fazer trading de derivados simples com as mesmas ferramentas. Vamos utilizar as funcionalidades abrangentes disponíveis no python-okx a um nível mais alto!
Tipos de derivados
Existem três tipos de derivados disponíveis para trading na OKX:
Validade
Perpétuos
Opções
Podes aceder a Explicação de derivados de Bitcoin: Validade, perpétuos e opções para saber mais sobre as características dos diferentes tipos de derivados na OKX. Neste tutorial, vamos utilizar Perpétuos como exemplo.
Perguntas Frequentes
1. Como posso obter os dados de mercado para fazer trading de derivados com o Jupyter Notebook, através de Obter dados de mercado?
Também podes substituir instType com EXPIRY ou OPTION para obter as tuas informações.
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 pares de trading disponíveis para trading de derivados com o Jupyter Notebook através de Obter instrumentos?
Da mesma forma, escolhe o instType para o qual desejas obter informações.
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 Calcular o valor nocional de um contrato de derivados com o parâmetro de instrumento ctVal e ctMult
Para calcular o valor nocional de um contrato de derivados (ou seja, futuros, swaps perpétuos e opções), precisas de ctVal (valor do contrato) e ctMult (multiplicador do contrato) a partir dos parâmetros do instrumento.
O valor nocional de um contrato de derivados 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 * ctMult (unidade: 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. Como posso consultar o saldo para trading de derivados com o Jupyter Notebook, através de Obter 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. Que modo de conta e modo de margem/trading são elegíveis para trading de derivados com o Jupyter Notebook?
Conforme mencionado no nosso último tutorial, na conta unificada, existem quatro modos de conta:
Modo à vista,
Modo à vista e de futuros,
Modo de margem multidivisas,
Modo de margem de portefólio.
Tem em conta que apenas os três últimos modos de margem, nomeadamente à vista e futuros, margem multidivisas e margem de portefólio, são elegíveis para trading de derivados. Consulta como configurar o modo de conta para compreender as diferenças entre os quatro modos e como alternar entre eles através da nossa Web UI.
4.1 Obter a configuração atual da conta a partir do parâmetro acctLv emObter configuração da conta
Verifica se estás no modo de conta correto para trading de 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. Como posso definir a alavancagem para trading de derivados com o Jupyter Notebook em Definir alavancagem da conta?
Um parâmetro importante que tem de ser definido para fazer trading de derivados é a alavancagem.
A alavancagem permite que os traders entrem numa 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 nos derivados da OKX. Lê as referências de definição de alavancagem para diferentes níveis de alavancagem permitidos em diferentes escalões de posição.
Eis o que significam os glossários acima:
Alavancagem máx.: o múltiplo máximo de capital pedido como empréstimo para aumentar o potencial retorno de um investimento.
Rácio de margem inicial (IMR): margem necessária para a detenção das posições atuais.
Rácio de margem de manutenção (MMR): margem mínima necessária para manter as posições atuais. A liquidação vai ocorrer se o capital próprio da conta cair abaixo da margem de manutenção.
Por exemplo, quando queres transacionar 3000 contratos perpétuos ETHUSDT, podes alavancar, no máximo, 75 vezes o capital que deténs. IMR = 1 / 75 = 1,3%, e deves manter 0,8% ou mais de MMR para evitar a liquidação.
Há 9 cenários diferentes para definições de alavancagem com as APIs abertas da OKX. Acede a Definir cenários de alavancagem para os diferentes casos.
Para swaps perpétuos, há três cenários diferentes para a definição de alavancagem:
Definir alavancagem para instrumentos SWAP no trading de margem cruzada ao nível do contrato.
Definir alavancagem para instrumentos SWAP no trading de margem isolada e no modo de posição compra/venda ao nível do contrato.
Definir alavancagem para instrumentos SWAP no modo de trading de margem isolada e modo de posição longa/curta ao 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.
# 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)Tem em atenção que o parâmetro de solicitação posSide apenas é necessário quando o modo de margem é isolado em posição longa/curta (colocação de ordem) para instrumentos VALIDADE/PERPÉTUOS (ver cenários 6 e 9 em Cenários de definição de alavancagem).
6. Como posso colocar ordens para trading de derivados com o Jupyter Notebook em diferentes modos de posição (colocação de ordens): longa/curta e compra/venda?
Existem dois modos de posição (colocação de ordem) ao fazer trading de VALIDADE e PERPÉTUOS: longa/curta e compra/venda (líquida).
Podes alterar o modo de posição (colocação da ordem) entre longa/curta e compra/venda (líquida) através da API Definir modo de posição:
result = accountAPI.set_position_mode(
posMode = "long_short_mode"
)
print(result)Ou, alternativamente, podes fazê-lo através de Configurações na web, conforme abaixo:
No modo compra/venda (líquida), a posição de um determinado contrato é a quantidade líquida das tuas transações de compra e venda. Quando colocas ordens através de Colocar ordem, o parâmetro de solicitação posSide não é obrigatório. Se passar, o único valor válido é líquida.
No modo longa/curta, as posições longa e curta de um determinado contrato serão independentes uma da outra e terão de ser fechadas separadamente. Quando colocas ordens através de Colocar ordem, o parâmetro de solicitação posSide é obrigatório. Os valores válidos são longa ou curta. Abaixo, mostramos como definir o parâmetro side (lado da transação) e posSide (lado da posição) ao colocar uma ordem em diferentes cenários:
Colocar uma ordem de compra e abrir/aumentar uma posição longa: side = compra, posSide = longa
Colocar uma ordem de venda e abrir/aumentar uma posição curta: side = venda, posSide = curta
Colocar uma ordem de venda e fechar/reduzir uma posição longa: side =sell, posSide = longa
Colocar uma ordem de compra e fechar/reduzir uma posição curta: side = compra, posSide = curta. Já estás a postos para começar a colocar ordens de derivados!
6.1 Colocar uma ordem com limite através de Colocar uma ordem
Pode comprar 100 contratos de swap de BTC-USDT ao preço de 19000 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 Colocar uma ordem de mercado através de Colocar uma ordem
Podes comprar 100 contratos de swap de BTC-USDT ao preço 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. Como posso obter detalhes ou uma ordem para trading de derivados com o Jupyter Notebook através de Obter detalhes da ordem?
Além de ordId, também podes especificar clOrdId para obter detalhes da ordem.
result = tradeAPI.get_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)8. Como posso cancelar uma ordem para trading de derivados com o Jupyter Notebook através de Cancelar ordem?
You also use __clOrdId__ in place of __ordId__
result = tradeAPI.cancel_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)9. Como posso alterar uma ordem para trading de derivados com o Jupyter Notebook através de Alterar ordem?
Também utilizas clOrdId em vez de ordID. Este exemplo mostra a revisão de uma nova dimensão.
result = tradeAPI.amend_order(
instId = "BTC-USDT-SWAP",
ordId = "505073046126960640",
newSz = "80"
)
print(result)10. Como posso obter a lista de ordens abertas para trading de derivados com o Jupyter Notebook através de Obter lista de ordens?
result = tradeAPI.get_order_list()
print(result)11. Como posso obter o histórico de ordens para trading de derivados com o Jupyter Notebook através de Obter histórico de ordens (últimos 7 dias) e Obter histórico de ordens (ú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. Como posso obter detalhes de transação para trading de derivados com o Jupyter Notebook através de Obter detalhes de transação (últimos 3 dias) e Obter detalhes de transação (ú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. Como posso obter posições para trading de derivados com o Jupyter Notebook em Obter posições?
Quando a tua conta estiver no modo líquida, a posição líquida de cada contrato será exibida; quando a conta estiver no modo longa/curta, a posição longa ou curta de cada contrato será exibida separadamente.
result = accountAPI.get_positions()
print(result)Por exemplo, podes acompanhar os teus lucros e perdas não realizados através do parâmetro de resposta upl.
Mais exemplos
Para mais exemplos, descarrega o Jupyter Notebook completo aqui.
Se tiveres alguma dúvida sobre as nossas API, podes juntar-te à nossa comunidade de API e apresentá-la na comunidade.