Cách thực hiện giao dịch phái sinh bằng Jupyter Notebook?

Phát hành vào 28 thg 9, 2023Cập nhật vào 25 thg 10, 2024Thời gian đọc: 14 phút76

Tìm hiểu cách thực hiện giao dịch phái sinh đơn giản bằng cùng một công cụ. Hãy sử dụng các tính năng toàn diện có sẵn trong python-okx ở cấp độ cao hơn!

Loại sản phẩm phái sinh

Có ba loại sản phẩm phái sinh có sẵn trên OKX:

  • Hợp đồng kỳ hạn

  • Vĩnh cửu

  • Quyền chọn

Bạn có thể chuyển hướng tới Giải thích về sản phẩm phái sinh của Bitcoin: Hợp đồng kỳ hạn, vĩnh cửu và quyền chọn để tìm hiểu đặc điểm của các loại sản phẩm phái sinh khác nhau trên OKX. Trong hướng dẫn này, chúng tôi sẽ sử dụng hợp đồng Vĩnh cửu làm ví dụ.

Câu hỏi thường gặp

1. Cách nhận dữ liệu thị trường từ Nhận dữ liệu thị trường?

Bạn cũng có thể thay thế instType bằng EXPIRY hoặc OPTION để biết thông tin của bạn.

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. Cách nhận cặp giao dịch khả dụng từ Nhận công cụ?

Cũng theo cách đó, hãy chọn instType bạn muốn lấy thông tin.

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 Tính giá trị danh nghĩa của hợp đồng phái sinh bằng thông số công cụ ctVal và ctMult

Để tính giá trị danh nghĩa của hợp đồng phái sinh (tức là hợp đồng tương lai, hợp đồng hoán đổi vĩnh cửu và quyền chọn), bạn cần ctVal (giá trị hợp đồng) và ctMult (hệ số nhân hợp đồng) từ các thông số của công cụ.

Giá trị danh nghĩa của hợp đồng phái sinh có thể được tính là ctVal * ctMult (đơn vị: ctValCcy);

Ví dụ: từ các thông số công cụ hiển thị dưới đây, ta có thể tính giá trị danh nghĩa của hợp đồng vĩnh cửu LTC-USD như sau: 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. Cách kiểm tra số dư từ Nhận số dư?

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. Chế độ tài khoản và chế độ ký quỹ/giao dịch đủ điều kiện để giao dịch phái sinh là gì?

Như đã đề cập trong hướng dẫn gần nhất, trong tài khoản hợp nhất, có bốn chế độ tài khoản:

  • Chế độ giao ngay,

  • Chế độ giao ngay và hợp đồng tương lai,

  • Chế độ ký quỹ đa tệ

  • Chế độ ký quỹ danh mục đầu tư.

Lưu ý, chỉ ba chế độ ký quỹ gần nhất là giao ngay và hợp đồng tương lai, ký quỹ đa tệký quỹ danh mục đầu tư mới đủ điều kiện giao dịch phái sinh. Vui lòng tham khảo cách thiết lập chế độ tài khoản để nắm được sự khác biệt và cách chuyển đổi giữa bốn chế độ thông qua giao diện người dùng Web.

4.1 Nhận cấu hình tài khoản hiện tại từ thông số acctLv trong Nhận cấu hình tài khoản

Đảm bảo rằng bạn đang ở đúng chế độ tài khoản để giao dịch phái sinh.

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. Cách đặt đòn bẩy thông qua Đặt đòn bẩy tài khoản?

Một thông số quan trọng cần đặt khi giao dịch phái sinh là đòn bẩy.

Đòn bẩy cho phép trader vào vị thế đáng giá hơn nhiều bằng cách chỉ cam kết một khoản tiền nhỏ. Do đó, phần lời hoặc lỗ sẽ được phóng đại rất lớn.

Trader có thể dùng đòn bẩy lên đến 125x khi giao dịch phái sinh trên OKX. Bạn có thể đọc tham khảo về cài đặt đòn bẩy để biết các mức đòn bẩy khác nhau được phép sử dụng ở các bậc vị thế khác nhau.

CT-web-spottrading-howtoapi-6

Sau đây là ý nghĩa của các thuật ngữ được hiển thị ở trên:

  • Đòn bẩy tối đa: Số lần nhân tối đa vốn vay để tăng lợi nhuận tiềm năng của khoản đầu tư.

  • Tỷ lệ ký quỹ ban đầu (IMR): Mức ký quỹ bắt buộc để nắm giữ các vị thế hiện tại.

  • Tỷ lệ ký quỹ duy trì (MMR): Mức ký quỹ tối thiểu bắt buộc để duy trì các vị thế hiện tại. Thanh lý sẽ xảy ra nếu vốn chủ sở hữu trong tài khoản giảm xuống dưới mức ký quỹ duy trì.

Ví dụ: khi muốn giao dịch 3.000 ETHUSDT hợp đồng vĩnh cửu, bạn có thể đòn bẩy tối đa 75 lần số vốn mà bạn sở hữu. IMR = 1 / 75 = 1,3% và bạn phải duy trì 0,8% MMR trở lên để tránh bị thanh lý.

Có 9 tình huống khác nhau cho cài đặt đòn bẩy thông qua các API mở của OKX. Vui lòng tham khảo Đặt tình huống đòn bẩy cho các trường hợp khác nhau.

Đối với hợp đồng hoán đổi vĩnh cửu, có 3 tình huống khác nhau để đặt đòn bẩy:

  • Đặt đòn bẩy cho công cụ SWAP theo ký quỹ chéo giao dịch ở cấp độ hợp đồng.

  • Đặt đòn bẩy cho công cụ SWAP theo ký quỹ cô lập chế độ giao dịch và mua/bán chế độ vị thế ở cấp độ hợp đồng.

  • Đặt đòn bẩy cho công cụ SWAP theo ký quỹ cô lập chế độ giao dịch và chế độ vị thế long/short ở cấp độ bên vị thế và hợp đồng.

Ví dụ sau cho biết cách đặt đòn bẩy cho một bên vị thế và hợp đồng SWAP, so với trên tất cả hợp đồng SWAP của một số tài sản cơ sở nhất định.

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)

Lưu ý rằng thông số yêu cầu posSide chỉ bắt buộc khi chế độ ký quỹ được cô lập ở vị thế long/short (đặt lệnh) cho công cụ EXPIRY/PERPETUAL (xem tình huống 6 và 9 trong Đặt tình huống đòn bẩy).

6. Cách đặt lệnh theo các chế độ vị thế khác nhau (đặt lệnh): long/short và mua/bán?

Có hai chế độ vị thế (đặt lệnh) khi giao dịch EXPIRY và PERPETUAL: long/shortmua/bán (ròng).

Bạn có thể thay đổi chế độ vị thế (đặt lệnh) giữa long/shortmua/bán (ròng) thông qua API Đặt chế độ vị thế:

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

Một cách khác là làm điều này thông qua mục Cài đặt trên web như sau:

CT-web-derivativestrading-howtoapi-9

Trong chế độ mua/bán (ròng), vị thế của một hợp đồng nhất định là số lượng giao dịch mua bán ròng của bạn. Khi bạn đặt lệnh thông qua Đặt lệnh, thông số yêu cầu posSide là không bắt buộc. Nếu bạn được thông qua, giá trị hợp lệ duy nhất là ròng.

Trong chế độ long/short, vị thế mua và bán của một hợp đồng nhất định sẽ độc lập với nhau và cần được đóng riêng. Khi bạn đặt lệnh thông qua Đặt lệnh, thông số yêu cầu posSide là bắt buộc. Giá trị hợp lệ là long hoặc short. Dưới đây là cách đặt thông số bên (bên giao dịch) và posSide (bên vị thế) khi bạn đặt lệnh theo các tình huống khác nhau:

  • - Đặt lệnh mua và mở/tăng vị thế mua: bên = mua, posSide = long

  • - Đặt lệnh bán và mở/tăng vị thế bán: bên = bán, posSide = short

  • - Đặt lệnh bán và đóng/giảm vị thế mua: bên = bán, posSide = long

  • Đặt lệnh mua và đóng/giảm vị thế bán: bên = mua, posSide = short Sau đó, bạn đã sẵn sàng đặt lệnh phái sinh!

6.1 Đặt lệnh giới hạn thông qua Đặt lệnh

Mua 100 BTC-USDT hợp đồng hoán đổi với giá 19000 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 Đặt lệnh thị trường thông qua Đặt lệnh

Mua 100 BTC-USDT hợp đồng hoán đổi với giá thị trường.

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. Cách nhận chi tiết/trạng thái của một lệnh nhất định (tham khảo Nhận chi tiết lệnh)?

Khác với ordId, bạn cũng có thể chỉ định clOrdId để biết chi tiết lệnh.

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

8. Cách hủy lệnh thông qua Hủy lệnh?

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

9. Cách sửa đổi lệnh thông qua Sửa đổi lệnh?

Bạn cũng sử dụng clOrdId ở vị trí của ordId Ví dụ này cho biết quá trình sửa đổi quy mô mới.

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

10. Cách nhận danh sách lệnh chờ khớp thông qua Nhận danh sách lệnh?

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

11. Cách nhận lịch sử lệnh thông qua Nhận lịch sử lệnh (7 ngày qua)Nhận lịch sử lệnh (3 tháng qua)?

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. Cách nhận chi tiết giao dịch thông qua Nhận chi tiết giao dịch (3 ngày qua)Nhận chi tiết giao dịch (3 tháng qua)?

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. Cách nhận vị thế thông qua Nhận vị thế?

Khi tài khoản ở chế độ ròng, vị thế ròng của từng hợp đồng sẽ hiển thị; khi tài khoản ở chế độ long/short, vị thế long hoặc short của từng hợp đồng sẽ hiển thị riêng.

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

Ví dụ: bạn có thể theo dõi lãi và lỗ chưa thực hiện thông qua thông số phản hồi upl.

Ví dụ khác

Để biết thêm ví dụ, vui lòng tải Jupyter Notebook đầy đủ tại đây.

Nếu có bất kỳ câu hỏi nào về API, bạn có thể tham gia cộng đồng API của chúng tôi và nêu lên trong cộng đồng.