Cum pot tranzacționa derivate cu Jupyter Notebook?

Publicat la 28 sept. 2023Actualizat la 8 apr. 202510 min citire143

Aflați cum puteți efectua tranzacționarea simplă cu derivate folosind aceleași instrumente. Să folosim caracteristicile cuprinzătoare disponibile în

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

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 ?

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 ?

Î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 ?

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

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

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 ?

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

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

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

).

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

:

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

, 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

, 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

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

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 )?

Î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 ?

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 ?

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 ?

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

11. Cum pot obține istoricul ordinelor prin și ?

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 și ?

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 ?

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

.

Dacă aveți întrebări despre API-urile noastre, vă puteți alătura

și să le adresați în comunitate.