Як торгувати деривативами за допомогою Jupyter Notebook?

Опубліковано 28 вер. 2023 р.Оновлено 22 груд. 2025 р.4 хв читання178

Дізнайтеся, як торгувати деривативами за допомогою тих же інструментів. Скористаймося комплексними функціями, доступними в python-okx, на вищому рівні!

Типи деривативів

Для торгівлі на OKX доступні деривативи трьох типів:

  • Термінові

  • Безстроковий

  • Опціони

У матеріалі Деривативи Bitcoin простими словами: термінові, безстрокові й опціонні контракти ви можете дізнатися про особливості деривативів різних типів на OKX. У цьому посібнику ми візьмемо для прикладу безстроковий контракт.

FAQ

1. Як отримати ринкові дані для торгівлі деривативами в Jupyter Notebook методом Get market data?

До речі, ви також можете замінити instType на EXPIRY або OPTION.

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. Як отримати дані про доступні торгові пари для торгівлі деривативами в Jupyter Notebook методом Get instruments?

Аналогічно виберіть instType, за яким ви хочете отримати інформацію.

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. Розрахуйте умовну вартість деривативного контракту за допомогою параметрів інструменту ctVal і ctMult.

Для розрахунку умовної вартості деривативного контракту (тобто ф’ючерсів, безстрокових свопів і опціонів), вам знадобиться ctVal (вартість контракту) і ctMult (множник контракту) з параметрів інструмента.

Номінальну вартість деривативного контракту можна розрахувати так: ctVal * ctMult (unit: ctValCcy).

Так, за вказаними далі параметрами інструмента ми можемо обчислити умовну вартість безстрокового контракту LTC-USD: ctVal * ctMult (unit: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. Як дізнатися баланс для торгівлі деривативами через Jupyter Notebook методом Get balance?

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. Який режим акаунта й режим маржі/угоди доступні для торгівлі деривативами в Jupyter Notebook?

Як зазначено в нашому останньому посібнику, є чотири режими єдиного акаунта:

  • спот,

  • спот і ф’ючерси,

  • мультивалютна маржа,

  • маржа портфеля.

Зверніть увагу, що деривативами можна торгувати лише в останніх трьох режимах маржі, тобто спот і ф’ючерси, мультивалютна маржа й маржа портфеля. Про різницю між цими чотирма режимами й порядок перемикання між ними через інтерфейс сайту див. матеріал про те, як налаштувати режим акаунта.

4.1. Отримайте поточну конфігурацію акаунта з параметра acctLv методом Get account configuration.

Перевірте, чи вибраний вами режим акаунта допускає торгівлю деривативами.

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. Як встановити кредитне плече для торгівлі деривативами через Jupyter Notebook методом Set account leverage?

Кредитне плече — це один з важливих параметрів, який потрібно встановити для торгівлі деривативами.

Кредитне плече дає змогу трейдерам відкривати позицію набагато більшого розміру, вносячи лише невелику суму коштів. Тому прибутки або збитки значно зростають.

Під час торгівлі деривативами на OKX трейдерам надається кредитне плече до 125x. У довідкових матеріалах про порядок виставлення кредитного плеча ви можете дізнатися про те різні його рівні, дозволені для різних рівнів позицій.

Далі наводимо визначення згаданих вище термінів:

  • Макс. кредитне плече: максимальна кратність капіталу, позиченого для збільшення потенційного доходу від інвестиції.

  • Рівень початкової маржі (IMR): маржа, необхідна для відкриття нових позицій.

  • Рівень підтримувальної маржі (MMR): мінімальна маржа, необхідна для підтримання поточних позицій. Якщо власний капітал акаунта падає нижче за підтримувальну маржу, відбувається ліквідація.

Наприклад, якщо ви хочете укласти угоду з безстроковими контрактами ETH на суму 3000 USDT, ви можете залучити капітал, максимум у 75 разів більший за власний. IMR = 1 / 75 = 1,3%, і для уникнення ліквідації ви повинні підтримувати MMR на рівні 0,8% або більше.

Кредитне плече можна налаштувати через відкриті OKX API 9 різними способами. З різними випадками можна ознайомитися в матеріалі Сценарії встановлення кредитного плеча.

Кредитне плече для безстрокових свопів можна налаштувати 3 різними способами:

  • Встановлення кредитного плеча для інструментів SWAP у режимі торгівлі cross-margin на рівні контракту.

  • Встановлення кредитного плеча для інструментів SWAP у режимі торгівлі isolated-margin та в режимі позиції buy/sell на рівні контракту.

  • Встановлення кредитного плеча для інструментів SWAP у режимі торгівлі isolated-margin і в режимі позиції long/short на рівні сторони позиції.

На прикладі нижче показано, як встановити кредитне плече для одного контракту SWAP і сторони позиції, на відміну від усіх контрактів SWAP для певного базового активу.

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)

Зверніть увагу, що параметр запиту posSide потрібен тільки тоді, коли в режимі позиції long/short (розміщення ордера) для інструментів EXPIRY/PERPETUAL встановлено режим маржі (див. сценарії 6 і 9 у Set leverage scenarios).

6. Як розміщувати ордери під час торгівлі деривативами через Jupyter Notebook у різних режимах позиції (розміщення ордерів): лонг/шорт і купівля/продаж?

У торгівлі інструментами EXPIRY та PERPETUAL передбачено два режими позиції (розміщення ордерів): long/short і buy/sell (чиста позиція).

Ви можете змінити режим позиції (розміщення ордерів) з long/short на buy/sell (чиста позиція) і навпаки методом API Set position mode:

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

А також ви можете зробити це через Налаштування на сайті, як показано нижче:

У режимі buy/sell (чиста позиція) позиція в певному контракті — це чиста кількість угод з купівлі та продажу. Коли ви розміщуєте ордери методом Place order, параметр запиту posSide є необов’язковим. У разі його передачі єдине дійсне значення — net.

У режимі long/short довгі й короткі позиції в певному контракті є незалежними одна від одної, і їх потрібно закривати окремо. Коли ви розміщуєте ордери методом Place order, параметр запиту posSide є обов’язковим. Дійсні значення: long або short. Далі описано, як встановити параметр side (сторона угода) або posSide (сторона позиції) у разі розміщення ордера за різними сценаріями:

  • Розміщення ордера на купівлю й відкриття/збільшення довгої позиції: side = buy, posSide = long.

  • Розміщення ордера на продаж і відкриття/збільшення короткої позиції: side = sell, posSide = short.

  • Розміщення ордера на продаж і закриття/скорочення довгої позиції: side = sell, posSide = long.

  • Розміщення ордера на купівлю й закриття/скорочення короткої позиції: side = buy, posSide = short. Тоді все буде готово для розміщення ордерів у деривативах!

6.1. Розмістіть лімітний ордер методом Place order.

Купівля 100 своп-контрактів BTC-USDT за ціною 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. Розмістіть ринковий ордер методом Place order.

Купівля 100 своп-контрактів BTC-USDT за ринковою ціною.

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. Як отримати деталі або ордер на торгівлю деривативами через Jupyter Notebook методом Get order details?

Щоб отримати деталі ордера, ви можете використати не лише ordId, але й clOrdId.

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

8. Як скасувати ордер на торгівлю деривативами через Jupyter Notebook методом Cancel order?

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

9. Як змінити ордер на торгівлю деривативами через Jupyter Notebook методом Amend order?

Ви також використовуєте clOrdId замість ordId. У цьому прикладі показано, як змінити розмір.

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

10. Як отримати список відкритих ордерів у торгівлі деривативами через Jupyter Notebook методом Get order List?

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

11. Як отримати історію ордерів у торгівлі деривативами через Jupyter Notebook методами Get order history (last 7 days) і Get order history (last 3 months)?

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. Як отримати деталі транзакції в торгівлі деривативами через Jupyter Notebook методами Get transaction details (last 3 days) і Get transaction details (last 3 months)?

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. Як отримати позиції в торгівлі деривативами через Jupyter Notebook методом Get positions?

Коли ваш акаунт перебуває в режимі net, показується чиста позиція в кожному контракті; коли ваш акаунт перебуває в режимі long/short, окремо показується довга або коротка позиція в кожному контракті.

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

Наприклад, ви можете відстежувати свій нереалізований прибуток і збитки завдяки параметру реагування upl.

Інші приклади

Щоб дізнатися більше, завантажте повний пакет Jupyter Notebook тут.

Якщо у вас виникли запитання щодо наших API, ви можете приєднатися до нашої API-спільноти й поставити їх там.