如何使用 Jupyter Notebook 進行衍生品交易?
歐易提供三種衍生品交易類型:交割、永續和期權。 本教程將以永續交易為例,介紹如何使用 python-okx 庫進行交易。
常見問題
1. 如何獲取市場數據?
您可以通過以下代碼獲取市場數據,並可將 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. 如何獲取可交易的交易對?
以同樣的方式,選擇 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
(單位:ctValCcy
);
例如,從下面顯示的合約參數,我們可以計算 LTCUSD 永續合約的名義價值為:ctVal
*ctMult
(單位: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. 如何查詢賬戶餘額?
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
參數獲取當前帳戶配置
確保您處於正確的帳戶模式以交易衍生品。
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. 如何設置槓桿?
槓桿可放大收益或虧損,平臺最高支援 125 倍槓桿。 您可以閱讀 倉位檔位詳情,瞭解更多詳情。

這是上面顯示的詞彙表的含義:
最大槓桿倍數:指交易者可通過借入資金放大投資回報的最高倍數。
初始保證金率(IMR):開倉時需要的最低保證金比例。
維持保證金率(MMR):維持持倉所需的最低保證金比例。 當賬戶權益低於此比例時將觸發強制平倉。
例如,當您想交易 3000 ETHUSDT 永續合約時,您最大可用槓桿是 75 倍。 IMR = 1/75 = 1.3%,您必須保持 ≥ 0.8% 保證金比例以避免強制平倉。 通過歐易開放 API 設置槓桿共有9種不同場景,具體請參考這裡。 關於永續合約的槓桿設置,主要分為以下三種情況:
全倉交易模式下,針對永續合約設置槓桿(合約層級)
逐倉交易模式且採用買賣持倉模式下,針對永續合約設置槓桿(合約層級)
逐倉交易模式且採用多空持倉模式下,針對永續合約及持倉方向分別設置槓桿(合約及持倉方向層級)
以下示例將展示如何針對單個永續合約品種及其持倉方向設置槓桿(與針對某標的物下所有永續合約統一設置槓桿的操作進行對比)。
# 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)時適用於交割合約和永續合約的下單操作
(具體應用請參見設置槓桿場景中的場景6和9)。
6. 如何在不同的持倉模式下下單?
在進行交割和永續合約交易時,有兩種持倉模式:
1. 多空(Long/Short)模式
2. 買賣(Buy/Sell)模式
持倉模式:多頭/空頭和買入/賣出(淨額)。
您可以通過 API 切換持倉模式:
result = accountAPI.set_position_mode(
posMode = "long_short_mode"
)
print(result)
或者,您可以通過 Web 端上的設置來調整:

在買/賣(凈持倉模式)下,某合約的持倉為買入和賣出交易的凈數量:
通過Place order下單時,
posSide
參數不是必填項。若填寫
posSide
,唯一有效值為net
。
在多空(獨立持倉模式)下,同一合約的多頭和空頭持倉相互獨立,需分別平倉:
通過
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 限價委託單下單
以下示例展示如何以 19,000 USDT 價格買入 100 張 BTC-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 市價委託下單
以下示例展示如何以市價買入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. 如何查詢特定訂單的詳情或狀態? (可參考這裡)
除了ordId
,您還可以使用 clOrdId
來查詢訂單詳情。
result = tradeAPI.get_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)
8. 如何取消訂單?
除了ordId
,您可以使用clOrdId
。
You also use __clOrdId__ in place of __ordId__
result = tradeAPI.cancel_order(instId="BTC-USDT-SWAP", ordId="505073046126960640")
print(result)
9. 如何修改訂單?
同樣,您可以使用 clOrdId
替代 ordId
。 以下示例展示了修改訂單的 newSz
(新委託數量)。
result = tradeAPI.amend_order(
instId = "BTC-USDT-SWAP",
ordId = "505073046126960640",
newSz = "80"
)
print(result)
10. 如何獲取當前委託清單?
result = tradeAPI.get_order_list()
print(result)
11. 如何查詢歷史訂單?(過去 7 天的歷史訂單)和((過去 3 個月的歷史訂單)
# 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個月)?
# 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. 如何查詢持倉資訊?
當您的帳戶處於單向持倉模式時,將顯示每份合約的單向持倉; 當您的帳戶處於雙向持倉模式時,每份合約的做多或做空持倉將分別顯示。
result = accountAPI.get_positions()
print(result)
單向持倉模式 (net mode):每個合約的凈持倉量將被顯示。
雙向持倉模式 (long/short mode):做多和做空持倉將分別顯示。
例如,您可以通過返回參數upl
追蹤未實現盈虧(Unrealized P&L)。
備註事項:
更多範例,請下載完整的 Jupyter Notebook 如果您對我們的 API 有任何疑問,歡迎加入我們的 API 社群交流討論。