Как торговать деривативами с помощью Jupyter Notebook
Узнайте, как с помощью одних и тех же инструментов можно упростить торговлю деривативами. Используйте универсальные функции python-okx на более высоком уровне!
Типы деривативов
На OKX можно торговать тремя типами деривативов:
срочными контрактами;
бессрочными контрактами;
опционами.
Ознакомьтесь с руководством по Bitcoin-деривативам — срочным, бессрочным контрактам и опционам, — чтобы узнать о различных типах деривативов на OKX. В этом руководстве в качестве примера мы использовали бессрочные контракты.
Часто задаваемые вопросы
1. Как получить рыночные данные с помощью Get market data?
Чтобы получить данные, вы также можете заменить InstType на FUTURES или OPTION.
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. Как получить доступные торговые пары с помощью Get instruments?
Аналогичным образом выберите соответствующий instType.
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.
"instType":"SWAP",
"instId":"LTC-USD-SWAP",
"instFamily":"LTC-USD",
"uly":"LTC-USD",
"settleCcy":"LTC",
"ctVal":"10",
"ctMult":"1",
"ctValCcy":"USD"
3. Как проверить баланс с помощью Get balance?
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 Получить текущую конфигурацию аккаунта из параметра acctLv в Get account configuration
Убедитесь, что выбранный режим аккаунта подходит для торговли деривативами.
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. Как установить кредитное плечо с помощью Set account leverage?
Кредитное плечо — важный параметр при торговле деривативами.
Оно позволяет трейдерам открыть позицию, заплатив только часть ее стоимости. При этом потенциальные прибыль и убытки значительно возрастают.
При торговле деривативами на OKX трейдеры могут использовать кредитное плечо до 125х. Ознакомьтесь с руководством о том, как установить кредитное плечо для различных уровней позиций.
Вот что означают термины выше:
Кредитное плечо — максимальный множитель заемного капитала для увеличения потенциальной доходности инвестиций.
Коэффициент начальной маржи (IMR) — маржа, необходимая для удержания текущих позиций.
Коэффициент минимальной маржи (MMR) — минимальная маржа, необходимая для сохранения текущих позиций. Если капитал аккаунта упадет ниже минимальной маржи, начнется ликвидация.
Например, при торговле бессрочными контрактами ETHUSDT объемом 3000, можно использовать кредитное плечо до х75. Коэффициент начальной маржи будет равен 1 / 75 = 1,3%. Чтобы избежать ликвидации, коэффициент минимальной маржи должен оставаться на уровне 0,8% или выше.
Есть 9 разных вариантов настройки кредитного плеча через открытые API OKX. Посмотреть их можно в разделе Set leverage scenarios.
Для бессрочных фьючерсов можно использовать три сценария настройки кредитного плеча:
Установка кредитного плеча для инструментов SWAP в режиме кросс-маржинальной торговли на уровне контракта.
Установка кредитного плеча для инструментов SWAP в режиме изолированной маржи и в режиме позиции buy/sell на уровне контракта.
Установка кредитного плеча для инструментов SWAP в режиме изолированной маржи и в режиме позиции long/short на уровне контракта и направления позиции.
В следующем примере показано, как установить кредитное плечо только для отдельного контракта SWAP и направления позиции, а не для всех контрактов с определенным базовым активом.
# 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/PERPETARIL (см. сценарии 6 и 9 в разделе Set leverage scenarios).
6. Как размещать ордера в разных режимах позиции: long/short и buy/sell?
При торговле с инструментами EXPIRY и PERPETUAL есть два режима позиций: long/shortиbuy/sell (чистый режим).
Вы можете изменять режим позиции (размещения ордеров): long/short или buy/sell (чистый режим) через API с помощью функции API Set position mode:
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.
# 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 по рыночной цене.
# 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. Как узнать подробности/статус конкретного ордера (см. Get order details)?
Вместо ordId для получения информации об ордере можно также использовать clOrdId.
result = tradeAPI.get_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)
8. Как отменить ордер с помощью Cancel order?
You also use __clOrdId__ in place of __ordId__
result = tradeAPI.cancel_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)
9. Как изменить ордер с помощью Amend order?
Вместо ordId можно также использовать clOrdId. В этом примере показано изменение размера.
result = tradeAPI.amend_order(
instId = "BTC-USDT-SWAP",
ordId = "505073046126960640",
newSz = "80"
)
print(result)
10. Как получить список открытых ордеров с помощью Get order List?
result = tradeAPI.get_order_list()
print(result)
11. Как получить историю ордеров с помощью Get order history (last 7 days) и Get order history (last 3 months)?
# 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. Как получить сведения о транзакции с помощью Get transaction details (last 3 days) и Get transaction details (last 3 months)?
# 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. Как получить информацию о позициях с помощью Get positions?
Если аккаунт находится в чистом режиме, отобразятся чистые позиции по каждому контракту. Если аккаунт находится в режиме long/short, отобразятся лонг- или шорт-позиции по каждому контракту.
result = accountAPI.get_positions()
print(result)
Например, вы можете отслеживать нереализованную прибыль и убытки с помощью параметра ответа upl.
Больше примеров
Чтобы найти больше примеров, скачайте полную версию Jupyter Notebook по ссылке.
Если у вас есть вопросы об API, присоединяйтесь к сообществу и задайте их там.