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

Опубліковано 28 вер. 2023 р.Оновлено 25 жовт. 2024 р.4 хв читання76

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

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

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

  • Строкові контракти

  • Безстрокові контракти

  • Опціони

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

FAQ

1. Як отримати ринкові дані з розділу Отримання ринкових даних?

А ще ви можете замінити 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. Як отримати доступні торгові пари з розділу Отримання інструментів?

Аналогічно виберіть 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. Як перевірити баланс із розділу Отримання балансу?

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. Що таке режим акаунта й режим маржі/торгівлі, які передбачають можливість торгівлі деривативами?

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

  • спот,

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

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

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

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

4.1. Отримайте налаштування поточного акаунта з параметра ActLv у розділі Отримання конфігурації акаунта

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

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. Як встановити кредитне плече через Виставлення кредитного плеча акаунта?

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

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

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

CT-web-spottrading-howtoapi-6

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

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

  • Рівень початкової маржі (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 у розділі Виставлення кредитного плеча акаунта).

6. Як розмістити ордери в різних режимах позиції (розміщення ордерів): long/short і buy/sell?

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

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

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

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

CT-web-derivativestrading-howtoapi-9

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

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

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

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

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

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

6.1 Розміщення лімітного ордера через Розміщення ордера

Купівля 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 Розміщення ринкового ордера через Розміщення ордера

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

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

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

8. Як скасувати ордер через Скасування ордера?

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

9. Як змінити ордер через Редагування ордера?

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

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

10. Як отримати список відкритих ордерів через Отримання списку ордерів?

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

11. Як отримати історію ордерів через Отримання історії ордерів (за останні 7 днів) і Отримання історії ордерів (за останні 3 місяці)?

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. Як отримати деталі транзакції через Отримання деталей транзакції (за останні 3 дні) і Отримання деталей транзакції (за останні 3 місяці)?

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. Як отримати позиції через Отримання позицій?

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

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

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

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

Щоб отримати інші приклади, завантажте повний Jupyter Notebook here.

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