Cum pot tranzacționa derivate cu Jupyter Notebook?

Publicat la 28 sept. 2023Actualizat la 25 oct. 202410 min citire78

Aflați cum puteți efectua tranzacționarea simplă cu derivate folosind aceleași instrumente. Să folosim caracteristicile cuprinzătoare disponibile în python-okx la un nivel mai ridicat!

Tip de derivate

Există trei tipuri de derivate disponibile pentru tranzacționare pe OKX:

  • Expirare

  • Perpetuu

  • Opțiuni

Puteți accesa Derivate Bitcoin, explicat: expirare, perpetuu și opțiuni pentru a învăța despre caracteristicile diferitelor tipuri de derivate pe OKX. În acest tutorial, vom folosi Perpetuu ca exemplu.

Întrebări frecvente

1. Cum pot obține datele de piață de la Obținere date de piață?

Puteți, de asemenea, înlocui instType cu EXPIRY sau OPTION pentru informare.

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. Cum pot obține perechile de tranzacționare disponibile din Obținere instrumente?

În același mod, alegeți opțiunea instType pentru care doriți să primiți informații.

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ți valoarea noțională a unui contract derivat cu parametrul instrumentului ctVal și ctMult

Pentru a calcula valoarea noțională a unui contract derivat (cum ar fi, contracte la termen, swapuri perpetue și opțiuni), aveți nevoie de ctVal (valoarea contractului) și ctMult (multiplicator de contract) din parametrii instrumentului.

Valoarea noțională a unui contract derivat poate fi calculată ca ctVal * ctMult (unitate: ctValCcy);

De exemplu, din parametrii instrumentului afișați mai jos, putem calcula valoarea noțională a unui contract permanent LTC-USD ca: ctVal * ctMult (unitate: 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. Cum pot să vă verific soldul de la Obținere sold?

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. Ce este un mod de cont și un mod de marjă/tranzacționare eligibil pentru tranzacționarea derivatelor?

După cum am menționat în ultimul tutorial, în contul unificat există patru moduri de cont:

  • mod spot;

  • mod spot și contracte la termen;

  • mod marjă multimonedă;

  • mod de marjă de portofoliu.

Rețineți că numai ultimele trei moduri de marjă, mai precis spot și contracte la termen, marjă multimonedă și marjă de portofoliu sunt eligibile pentru tranzacționarea derivatelor. Consultați configurarea modului de cont pentru a înțelege diferența între cele patru moduri și cum să comutați între ele prin intermediul interfeței web.

4.1 Obțineți configurația curentă a contului din parametrul acctLv în Obțineți configurația contului

Asigurați-vă că vă aflați în modul de cont corect pentru a tranzacționa derivate.

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. Cum pot stabili levierul prin Stabilire levier cont?

Un parametru important pe care trebuie să îl stabilim atunci când tranzacționăm derivate este levierul.

Levierul le permite traderilor să intre într-o poziție care valorează mult mai mult dacă angajează doar o sumă mică de bani. Prin urmare, câștigurile sau pierderile sunt mărite enorm.

Traderii pot avea un levier de până la 125x atunci când tranzacționează derivate pe OKX. Puteți citi referințele pentru stabilirea levierului pentru diferite niveluri de levier permise în diferite niveluri de poziții.

CT-web-spottrading-howtoapi-6

Iată ce înseamnă glosarul prezentat mai sus:

  • Levier max.: multiplul maxim de capital împrumutat pentru a crește profitul potențial al unei investiții.

  • Raport de marjă inițial (IMR): marja necesară pentru deținerea pozițiilor curente.

  • Raport de marjă de mentenanță (MMR) marja minimă necesară pentru a menține pozițiile curente. Lichidarea va avea loc dacă capitalul propriu al contului scade sub marja de întreținere.

De exemplu, când doriți să tranzacționați 3.000 de contracte perpetue ETHUSDT, puteți folosi un levier de până la 75 de ori capitalul pe care îl dețineți. IMR = 1 ÷ 75 = 1,3% și trebuie să păstrați 0,8% MMR sau peste pentru a evita lichidarea.

Există 9 scenarii diferite pentru setările levierului prin intermediul API-urilor deschise OKX. Consultați Scenarii de stabilire levier pentru diferitele cazuri.

Pentru swapuri perpetue, există 3 scenarii diferite pentru stabilirea levierului:

  • Stabiliți levierul pentru instrumente SWAP sub tranzacționarea în marjă încrucișată la nivel de contract.

  • Stabiliți levierul pentru instrumenteSWAP sub modul de tranzacționare în marjă izolată și modul de poziție cumpărare/vânzare la nivel de contract.

  • Stabiliți levierul pentru instrumenteSWAP sub modul de tranzacționare în marjă izolată și modul de poziție long/short la nivel de contract și de parte de poziție.

Următorul exemplu arată cum se stabilește levierul pentru un singur contract SWAP și parte de poziție, în comparație cu toate contractele SWAP pentru un anumit activ de bază.

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)

Rețineți că parametrul de solicitare posSide este necesar doar atunci când modul de marjă este izolat în modul de poziție (plasare ordin)long/short pentru instrumente EXPIRY/PERPETUAL (a se vedea Scenariul 6 și 9 în Scenarii de stabilire levier).

6. Cum pot plasa ordine în diferite moduri de poziție (plasare ordin): long/short și cumpărare/vânzare?

Există două moduri de poziție (plasare ordin) atunci când tranzacționați EXPIRY și PERPETUAL: long/short și buy/sell (net).

Puteți schimba modul de poziție (plasare ordin) între long/short și cumpărare/vânzare (net) prin API-ul Mod de stabilire poziție:

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

Sau, alternativ, puteți face acest lucru prin Setări în interfața web, după cum urmează:

CT-web-derivativestrading-howtoapi-9

În modul cumpărare/vânzare (net), poziția unui anumit contract este cantitatea netă a tranzacțiilor de cumpărare și vânzare. Când plasați ordine prin Plasare ordin, parametrul de solicitare posSide nu este obligatoriu. Dacă îl treceți, singura valoare validă este net.

În modul long/short, pozițiile long și short ale unui anumit contract vor fi independente unul de celălalt și trebuie să fie închise separat. Când plasați ordine prin Plasare ordin, parametrul de solicitare posSide este obligatoriu. Valorile valide sunt long sau short. Mai jos este afișat modul în care se stabilește parametrul side (partea tranzacției) și posSide (partea poziției) când plasați un ordin în diferite scenarii:

  • Plasați un ordin de cumpărare și deschideți/creșteți o poziție long: side = cumpărare, posSide = long

  • Plasați un ordin de vânzare și deschideți/creșteți o poziție short: side = vânzare, posSide = short

  • Plasați un ordin de vânzare și închideți/reduceți o poziție long: side = vânzare, posSide = long

  • Plasați un ordin de cumpărare și închideți/reduceți o poziție short: side = cumpărare, posSide = short Apoi sunteți gata să plasați ordine derivate!

6.1 Plasați un ordin limită prin Plasare ordin

Cumpărarea unui contract swap de 100 BTC-USDT la prețul 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 Plasați un ordin de piață prin Plasare ordin

Cumpărarea unui contract swap de 100 BTC-USDT la prețul de piață.

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. Cum pot obține detalii/starea pentru un anumit ordin (consultați Obținere detalii ordin)?

În afară de ordId, puteți specifica și clOrdId pentru a obține detaliile ordinului.

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

8. Cum pot anula un ordin prin Anulare ordin?

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

9. Cum pot modifica un ordin prin Modificare ordin?

De asemenea, utilizați clOrdId în loc de ordId. Acest exemplu arată o revizuire a unei noi dimensiuni.

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

10. Cum pot obține lista de ordine deschise prin Obținere listă de ordine?

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

11. Cum pot obține istoricul ordinelor prin Obținere istoric ordine (ultimele 7 zile) și Obținere istoric ordine (ultimele 3 luni)?

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. Cum pot obține detaliile tranzacției prin Obținere detalii tranzacție (ultimele 3 zile) și Obținere detalii tranzacție (ultimele 3 luni)?

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. Cum pot obține poziții prin Obținere poziții?

Când contul este în modul net, poziția netă a fiecărui contract va fi afișată; când contul este în modul long/short, poziția long sau short a fiecărui contract va fi afișată separat.

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

De exemplu, puteți urmări profitul și pierderile nerealizate prin intermediul parametrului de răspuns upl.

Mai multe exemple

Pentru mai multe exemple, descărcați întregul Jupyter Notebook de aici.

Dacă aveți întrebări despre API-urile noastre, vă puteți alătura comunității noastre API și să le adresați în comunitate.