avatar of 发明者量化-小小梦 发明者量化-小小梦
tập trung vào tin nhắn riêng tư
4
tập trung vào
1271
Người theo dõi

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

Được tạo ra trong: 2024-06-28 09:08:29, cập nhật trên: 2024-11-01 10:08:12
comments   12
hits   2053

[TOC]

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

Lời nói đầu

Nền tảng giao dịch định lượng Inventor đã trải qua 9 năm cải tiến công nghệ và được xây dựng lại nhiều lần, mặc dù chúng ta, với tư cách là người dùng, có thể không nhận ra điều đó. Trong hai năm qua, nền tảng này đã có nhiều tối ưu hóa và nâng cấp về mặt trải nghiệm người dùng, bao gồm nâng cấp toàn diện giao diện UI, làm phong phú thêm các công cụ giao dịch định lượng thường dùng và bổ sung thêm hỗ trợ dữ liệu kiểm tra ngược.

Để việc thiết kế chiến lược trở nên thuận tiện hơn, logic giao dịch rõ ràng hơn và giúp người mới bắt đầu dễ dàng hơn, nền tảng đã nâng cấp giao diện API mà chiến lược sử dụng. Sử dụng phiên bản mới nhất của máy chủ để kích hoạt các tính năng mới này. Nền tảng này vẫn tương thích với các lệnh gọi đến giao diện cũ ở mức độ lớn nhất có thể. Thông tin về các tính năng giao diện API mới đã được cập nhật vào tài liệu API của Nền tảng giao dịch định lượng Inventor:

Vì vậy, hãy cùng xem nhanh những giao diện nào đã được nâng cấp và những thay đổi nào là cần thiết để làm cho các chiến lược cũ tương thích với API hiện tại.

1. Giao diện API mới

exchange.Hàm GetTickers

Để thiết kế các chiến lược đa dạng và các chiến lược giám sát toàn bộ tình hình thị trường. Giao diện thị trường tổng hợp này rất cần thiết để giúp phát triển các chiến lược dễ dàng hơn và tránh việc phải làm lại từ đầu. Nền tảng giao dịch định lượng của nhà phát minh này bao gồm các API trao đổi như vậy.

Nếu trao đổi không có giao diện này (trao đổi cá nhân), hãy gọiexchange.GetTickers()Một thông báo lỗi sẽ được báo cáo: Không được hỗ trợ.

Hàm này không có bất kỳ tham số nào và sẽ trả về dữ liệu thị trường theo thời gian thực của tất cả các loại trong giao diện thị trường tổng hợp của sàn giao dịch. Có thể hiểu đơn giản như sau:

exchange.GetTickers()Chức năng làexchange.GetTicker()Phiên bản đầy đủ của hàm (sự khác biệt giữa hai tên hàm là số ít và số nhiều).

Chúng tôi sử dụng môi trường mô phỏng điểm OKX để thử nghiệm:

function main() {
    exchange.IO("simulate", true)

    var tickers = exchange.GetTickers()
    if (!tickers) {
        throw "tickers error"
    }

    var tbl = {type: "table", title: "test tickers", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var i in tickers) {
        var ticker = tickers[i]
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return tickers.length
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

hàm exchange.CreateOrder

Mớiexchange.CreateOrder()Chức năng là trọng tâm của bản nâng cấp này.exchange.CreateOrder()Chức năng quan trọng nhất của hàm là chỉ định trực tiếp kiểu và hướng của thứ tự trong các tham số của hàm. Theo cách này, nó không còn phụ thuộc vào các thiết lập hệ thống hiện tại như cặp giao dịch, mã hợp đồng, hướng giao dịch, v.v.

Độ phức tạp của thiết kế được giảm đáng kể trong các tình huống lệnh giao dịch nhiều sản phẩm và các tình huống đồng thời.exchange.CreateOrder()Bốn tham số của hàm làsymbolsidepriceamount

Kiểm tra bằng môi trường mô phỏng tương lai OKX:

function main() {
    exchange.IO("simulate", true)

    var id1 = exchange.CreateOrder("ETH_USDT.swap", "buy", 3300, 1)
    var id2 = exchange.CreateOrder("BTC_USDC.swap", "closebuy", 70000, 1)
    var id3 = exchange.CreateOrder("LTC_USDT.swap", "sell", 110, 1)

    Log("id1:", id1, ", id2:", id2, ", id3:", id3)
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

Việc này chỉ mất 3 lầnexchange.CreateOrder()Lệnh gọi hàm này đặt ba lệnh tương lai có các loại và hướng khác nhau.

hàm exchange.GetHistoryOrders

Mớiexchange.GetHistoryOrders()Chức năng này được sử dụng để lấy các lệnh giao dịch lịch sử của một sản phẩm nhất định. Chức năng này cũng yêu cầu sự hỗ trợ của giao diện trao đổi.

Để truy vấn các lệnh lịch sử, các giao diện được triển khai bởi nhiều sàn giao dịch khác nhau rất khác nhau:

  • Một số hỗ trợ truy vấn phân trang, trong khi một số khác thì không;
  • Một số sàn giao dịch có thời hạn truy vấn, nghĩa là các lệnh cũ hơn N ngày không thể được truy vấn;
  • Hầu hết các sàn giao dịch đều hỗ trợ truy vấn tại một thời điểm cụ thể, nhưng một số thì không;

Các giao diện như vậy được đóng gói với mức độ tương thích cao nhất và trong quá trình sử dụng thực tế, cần chú ý xem chúng có đáp ứng được các yêu cầu và kỳ vọng của chiến lược hay không.

Mô tả chức năng chi tiết không được nhắc lại ở đây, bạn có thể tham khảo hướng dẫn cú pháp trong tài liệu API:

https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders

Đã thử nghiệm bằng môi trường giao dịch giao ngay Binance:

function main() {
    var orders = exchange.GetHistoryOrders("ETH_USDT")

    // 写入图表
    var tbl = {type: "table", title: "test GetHistoryOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
    for (var order of orders) {
        tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
    }
    
    LogStatus("orders.length:", orders.length, "\n", "`" + JSON.stringify(tbl) +  "`")
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

hàm exchange.GetPositions

Phiên bản cũ của chức năng thu thập dữ liệu vị trí là:exchange.GetPosition(). Để phù hợp hơn với ngữ nghĩa đặt tên hàm, bản nâng cấp này bổ sung một hàm mới để lấy vị trí:exchange.GetPositions(). Đồng thời, nó vẫn tương thích/được nâng cấp với hàm GetPosition.

Lưu ý rằng hai tên hàm chỉ khác nhau ở chữ s theo sau. Vì GetPositions chính xác hơn về mặt ngữ nghĩa nên bạn nên sử dụng GetPositions trong tương lai.

exchange.GetPositions()Có ba dạng gọi hàm:

  • exchange.GetPositions() Khi không có tham số nào được truyền, thì hiện tạiCặp giao dịch / Mã hợp đồngYêu cầu dữ liệu vị trí của tất cả các giống trong chiều hiện tại.

  • exchange.GetPositions(“ETH_USDT.swap”) Khi chỉ định thông tin sản phẩm cụ thể (định dạng ETH_USDT.swap được nền tảng FMZ xác định), hãy yêu cầu dữ liệu vị thế của sản phẩm cụ thể. Ví dụ:BTC_USD.swapETH_USDT.swapETH_USDT.quarterChờ đợi. BTC_USD.swap: Hợp đồng vĩnh viễn dựa trên tiền tệ của BTC. ETH_USDT.swap: Hợp đồng vĩnh viễn dựa trên U của ETH. ETH_USDC.swap: Hợp đồng vĩnh viễn ký quỹ bằng USDC dành cho ETH. (Ngoài USDT, bạn cũng có thể chỉ định quoteCurrency khác, điều này sẽ không được nhắc lại ở đây) ETH_USDT.quarter: Hợp đồng giao hàng theo quý dựa trên U của ETH. BTC_USD.BTC-USD-201226-24250-C: Hợp đồng quyền chọn ký quỹ bằng đồng BTC.

  • exchange.GetPositions(“USDT.swap”) Yêu cầu dữ liệu vị trí cho tất cả các ký hiệu theo phạm vi kích thước đã chỉ định. USDT.swap: Phạm vi hợp đồng vĩnh viễn dựa trên U. USDT.futures: Phạm vi hợp đồng giao hàng dựa trên chữ U. USDC.swap: Phạm vi hợp đồng vĩnh viễn ký quỹ bằng USDC. (Ngoài USDT, bạn cũng có thể chỉ định quoteCurrency khác, điều này sẽ không được nhắc lại ở đây) USDC.futures: Phạm vi hợp đồng tương lai ký quỹ bằng USDC. USD.swap: Phạm vi hợp đồng vĩnh viễn dựa trên tiền tệ. USD.futures: Phạm vi hợp đồng tương lai dựa trên tiền tệ. USDT.option: Phạm vi hợp đồng quyền chọn dựa trên chữ U. USD.option: Phạm vi hợp đồng quyền chọn dựa trên tiền tệ.

Một số phân chia kích thước hợp đồng trao đổi đặc biệt: USDT.futures_combo:Tổ hợp CFD của sàn giao dịch Futures_Deribit. USD.futures_ff:Hợp đồng giao hàng ký quỹ hỗn hợp của sàn giao dịch Futures_Craken. USD.swap_pf: Hợp đồng tương lai vĩnh viễn ký quỹ kết hợp trên sàn giao dịch Kraken.

Đối với các kích thước không được giao diện API trao đổi hỗ trợ, lỗi sẽ được báo cáo và giá trị null sẽ được trả về khi gọi.

Kiểm tra bằng môi trường mô phỏng tương lai OKX:

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    var p1 = exchange.GetPositions()
    var p2 = exchange.GetPositions("BTC_USDT.swap")

    var tbls = []
    for (var positions of [p1, p2]) {
        var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
        for (var p of positions) {
            tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
        } 
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

Khi đếnexchange.GetPositions()Các tham số của hàm làETH_USDT.swapKhi bạn sử dụng hợp đồng vĩnh viễn dựa trên ETH U, bạn có thể nhận được dữ liệu vị thế của hợp đồng vĩnh viễn dựa trên ETH U.

Khi không nhập khẩuexchange.GetPositions()Khi hàm được sử dụng như một tham số, dữ liệu vị trí của tất cả các hợp đồng vĩnh viễn ký quỹ U được niêm yết trên sàn giao dịch có thể được lấy (vì cặp giao dịch hiện tại là BTC_USDT và hợp đồng là hoán đổi, yêu cầu dựa trên cặp giao dịch hiện tại và phạm vi kích thước hợp đồng). Điều này tương đương với việc gọiexchange.GetPositions("USDT.swap"), chỉ định phạm vi yêu cầu.

exchange.Hàm GetFundings

Chức năng GetFundings mới được thêm vào có thể lấy được tỷ lệ tài trợ của các hợp đồng vĩnh viễn trên sàn giao dịch tương lai. Hàm này có một tham số là symbol. Hàm này trả về một mảng các cấu trúc tài trợ.

  • Chỉ định tham số biểu tượng: Trả về mảng cấu trúc thông tin tỷ lệ tài trợ (mảng Tài trợ) của sản phẩm được chỉ định. Tham số biểu tượng có thể được đặt thành một phạm vi, tương tự như tham số biểu tượng của hàm GetOrders/GetPositions.
  • Không chỉ định tham số ký hiệu: trả về tất cả dữ liệu sản phẩm của chiều hiện tại theo chiều nơi cặp giao dịch và mã hợp đồng hiện tại nằm. Cơ chế này giống như hàm GetOrders/GetPositions.
  • Nếu sàn giao dịch phải chỉ định một sản phẩm cụ thể thì phải truyền tham số ký hiệu, tức là mã của sản phẩm cụ thể, ví dụ:BTC_USDT.swap. Nếu không có tham số nào được truyền hoặc một phạm vi nào đó được truyền vào hàm, một thông báo lỗi sẽ được hiển thị cho biết tham số ký hiệu không được hỗ trợ.

2. Nâng cấp giao diện API

exchange.Hàm GetTicker

Chức năng thị trườngexchange.GetTicker()Bản nâng cấp này chủ yếu bổ sung các tham số biểu tượng. Điều này cho phép chức năng yêu cầu dữ liệu thị trường trực tiếp theo thông tin sản phẩm được chỉ định bởi các tham số, bất kể cặp giao dịch và mã hợp đồng hiện tại. Đơn giản hóa quá trình viết mã. Đồng thời, nó vẫn tương thích với phương thức gọi mà không cần truyền tham số và tương thích với các chiến lược nền tảng cũ ở mức độ lớn nhất.

tham sốsymbolĐối với các đối tượng trao đổiexchangeCó nhiều định dạng khác nhau cho giao ngay/tương lai:

  • Đối tượng trao đổi tại chỗ Định dạng là:AAA_BBBAAA đại diện cho baseCurrency, tức là loại tiền tệ giao dịch, và BBB đại diện cho quoteCurrency, tức là loại tiền tệ định giá. Tên tiền tệ đều được viết hoa. Ví dụ: cặp giao dịch giao ngay BTC_USDT.
  • Đối tượng trao đổi tương lai Định dạng là:AAA_BBB.XXX, AAA đại diện cho baseCurrency, tức là loại tiền tệ giao dịch, BBB đại diện cho quoteCurrency, tức là loại tiền tệ định giá và XXX đại diện cho mã hợp đồng, chẳng hạn như hợp đồng hoán đổi vĩnh viễn. Tên tiền tệ đều được viết hoa và mã hợp đồng được viết thường. Ví dụ: BTC_USDT.swap, hợp đồng vĩnh viễn dựa trên chữ U của BTC.

Đã thử nghiệm bằng môi trường trực tiếp của Binance Futures:

var symbols = ["BTC_USDT.swap", "BTC_USDT.quarter", "BTC_USD.swap", "BTC_USD.next_quarter", "ETH_USDT.swap"]

function main() {
    exchange.SetCurrency("ETH_USD")
    exchange.SetContractType("swap")

    var arr = []
    var t = exchange.GetTicker()
    arr.push(t)

    for (var symbol of symbols) {
        var ticker = exchange.GetTicker(symbol)
        arr.push(ticker)
    }

    var tbl = {type: "table", title: "test GetTicker", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of arr) {
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return arr
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

Việc yêu cầu một loạt dữ liệu thị trường cho một mã thông báo cụ thể đã trở nên đơn giản hơn nhiều.

hàm exchange.GetDepth

Giống như hàm GetTickerexchange.GetDepth()Lần này, hàm này cũng thêm một tham số ký hiệu. Có thể chỉ định loại trực tiếp khi yêu cầu dữ liệu độ sâu.

Đã thử nghiệm bằng môi trường trực tiếp của Binance Futures:

function main() {
    exchange.SetCurrency("LTC_USD")
    exchange.SetContractType("swap")

    Log(exchange.GetDepth())
    Log(exchange.GetDepth("ETH_USDT.quarter"))
    Log(exchange.GetDepth("BTC_USD.swap"))
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

hàm exchange.GetTrades

Giống như hàm GetTickerexchange.GetTrades()Lần này, hàm này cũng thêm một tham số ký hiệu. Có thể trực tiếp chỉ định sản phẩm khi yêu cầu dữ liệu giao dịch thị trường.

Đã thử nghiệm bằng môi trường trực tiếp của Binance Futures:

function main() {
    var arr = []
    var arrR = []
    var symbols = ["LTC_USDT.swap", "ETH_USDT.quarter", "BTC_USD.swap"]    

    for (var symbol of symbols) {
        var r = exchange.Go("GetTrades", symbol)
        arrR.push(r)
    }

    for (var r of arrR) {
        arr.push(r.wait())
    }
    
    var tbls = []
    for (var i = 0; i < arr.length; i++) {
        var trades = arr[i]
        var symbol = symbols[i]

        var tbl = {type: "table", title: symbol, cols: ["Time", "Amount", "Price", "Type", "Id"], rows: []}
        for (var trade of trades) {
            tbl.rows.push([trade.Time, trade.Amount, trade.Price, trade.Type, trade.Id])
        }

        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

Bản nâng cấp này cũng tương thích vớiexchange.Go()Khi hàm đồng thời gọi giao diện API nền tảng, tham số ký hiệu được truyền vào để chỉ định thông tin sản phẩm.

hàm exchange.GetRecords

Lần này, hàm GetRecords đã được điều chỉnh đáng kể, ngoài việc hỗ trợ tham số ký hiệu để trực tiếp chỉ định thông tin loại của dữ liệu K-line được yêu cầu. Tham số chu kỳ ban đầu được giữ lại để chỉ định chu kỳ đường K và tham số giới hạn được thêm vào để chỉ định độ dài đường K dự kiến ​​khi yêu cầu. Nó cũng tương thích với phiên bản cũ của hàm GetRecords chỉ truyền vào tham số dấu chấm.

exchange.GetRecords()Cách gọi hàm:

  • exchange.GetRecords() Nếu không có tham số nào được chỉ định, dữ liệu K-line của sản phẩm tương ứng với cặp giao dịch/mã hợp đồng hiện tại sẽ được yêu cầu. Chu kỳ K-line là chu kỳ K-line mặc định được đặt trong giao diện kiểm tra ngược chiến lược hoặc trong giao dịch thực tế.
  • exchange.GetRecords(60 * 15) Khi chỉ xác định tham số chu kỳ K-line, dữ liệu K-line của sản phẩm tương ứng với cặp giao dịch/mã hợp đồng hiện tại sẽ được yêu cầu.
  • exchange.GetRecords(“BTC_USDT.swap”) Khi chỉ thông tin sản phẩm được chỉ định, dữ liệu K-line của sản phẩm được chỉ định sẽ được yêu cầu. Chu kỳ K-line là chu kỳ K-line mặc định được thiết lập trong giao diện kiểm tra ngược chiến lược hoặc trong giao dịch thực tế.
  • exchange.GetRecords(“BTC_USDT.swap”, 60 * 60) Chỉ định thông tin sản phẩm và khoảng thời gian K-line cụ thể để yêu cầu dữ liệu K-line.
  • exchange.GetRecords(“BTC_USDT.swap”, 60, 1000) Chỉ định thông tin sản phẩm, khoảng thời gian K-line cụ thể và độ dài K-line mong muốn để yêu cầu dữ liệu K-line. Lưu ý rằng khi tham số giới hạn vượt quá độ dài tối đa của một yêu cầu duy nhất từ ​​tổng đài, một yêu cầu phân trang sẽ được tạo (tức là nhiều cuộc gọi đến giao diện K-line của tổng đài).

Đã thử nghiệm bằng môi trường trực tiếp của Binance Futures:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    var r1 = exchange.GetRecords()
    var r2 = exchange.GetRecords(60 * 60)
    var r3 = exchange.GetRecords("BTC_USDT.swap")
    var r4 = exchange.GetRecords("BTC_USDT.swap", 60)
    var r5 = exchange.GetRecords("LTC_USDT.swap", 60, 3000)

    Log("r1相邻Bar时间差值:", r1[1].Time - r1[0].Time, "毫秒, Bar长度:", r1.length)
    Log("r2相邻Bar时间差值:", r2[1].Time - r2[0].Time, "毫秒, Bar长度:", r2.length)
    Log("r3相邻Bar时间差值:", r3[1].Time - r3[0].Time, "毫秒, Bar长度:", r3.length)
    Log("r4相邻Bar时间差值:", r4[1].Time - r4[0].Time, "毫秒, Bar长度:", r4.length)
    Log("r5相邻Bar时间差值:", r5[1].Time - r5[0].Time, "毫秒, Bar长度:", r5.length)
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

hàm exchange.GetOrders

Hàm GetOrders cũng thêmsymbolTham số, bạn có thể chỉ định một sản phẩm cụ thể và truy vấn các đơn hàng chưa hoàn thành (đơn hàng đang chờ xử lý) của sản phẩm đó; bạn cũng có thể truy vấn các đơn hàng chưa hoàn thành (đơn hàng đang chờ xử lý) của tất cả các sản phẩm trong phạm vi kích thước đã chỉ định.

exchange.GetOrders()Hàm này có thể được gọi theo những cách sau:

  • exchange.GetOrders() Đối với các sàn giao dịch tương lai: Khi không có tham số nào được truyền, giá trị hiện tạiCặp giao dịch / Mã hợp đồngYêu cầu tất cả các lệnh mở (lệnh chờ) cho tất cả các ký hiệu trong phạm vi kích thước hiện tại.
    Đối với giao dịch giao ngay: Khi không có tham số nào được truyền, các yêu cầu sẽ được thực hiện cho tất cả các đơn hàng chưa thanh toán (đơn hàng đang chờ xử lý) của tất cả các sản phẩm giao ngay.
  • exchange.GetOrders(“BTC_USDT.swap”) hoặc exchange.GetOrders(“BTC_USDT”) Đối với các sàn giao dịch tương lai: exchange.GetOrders(“BTC_USDT.swap”) để truy vấn tất cả các lệnh chưa hoàn thành (lệnh đang chờ xử lý) đối với hợp đồng vĩnh viễn ký quỹ USDT của BTC. Đối với các sàn giao dịch giao ngay: exchange.GetOrders(“BTC_USDT”), truy vấn tất cả các lệnh chưa hoàn thành (lệnh đang chờ xử lý) cho cặp giao dịch giao ngay BTC_USDT.
  • Chỉ được hỗ trợ cho các sàn giao dịch tương lai exchange.GetOrders(“USDT.swap”) Yêu cầu các lệnh chưa được thực hiện (lệnh đang chờ) của tất cả các loại trong phạm vi kích thước được chỉ định Phạm vi phân chia chiều phù hợp với phạm vi trong hàm GetPositions. Ví dụ: exchange.GetOrders(“USDT.swap”) yêu cầu tất cả các lệnh chưa được thực hiện (lệnh đang chờ xử lý) thuộc mọi loại trong phạm vi hợp đồng vĩnh viễn ký quỹ bằng USDT.

Kiểm tra bằng môi trường mô phỏng tương lai OKX:

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    // 写入图表
    var tbls = []
    for (var symbol of ["null", "ETH_USDT.swap", "USDT.swap"]) {
        var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}

        var orders = null
        if (symbol == "null") {
            orders = exchange.GetOrders()
        } else {
            orders = exchange.GetOrders(symbol)
        }

        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }

        tbls.push(tbl)
    }
    
    LogStatus("`" + JSON.stringify(tbls) +  "`")
}
  • Khi không có tham số nào được truyền, các lệnh chưa hoàn thành (lệnh chờ) của tất cả các loại trong phạm vi kích thước của cặp giao dịch hiện tại (BTC_USDT) và mã hợp đồng (hoán đổi) sẽ được yêu cầu.
  • Chỉ định các tham sốETH_USDT.swapTham số, yêu cầu các lệnh chưa được thực hiện (lệnh đang chờ xử lý) của hợp đồng vĩnh viễn ký quỹ USDT của ETH.
  • Truyền vào một chuỗi"USDT.swap"Yêu cầu tất cả các lệnh đang chờ xử lý (lệnh chờ) của hợp đồng vĩnh viễn ký quỹ bằng USDT.

hàm exchange.GetPosition

Nó vẫn tương thích với cách đặt tên hàm thu thập vị trí cũ và cũng thêm tham số ký hiệu có thể chỉ định thông tin loại của dữ liệu vị trí cụ thể được yêu cầu. Sử dụng chức năng vàexchange.GetPositions()Hoàn toàn nhất quán.

Hàm exchange.IO

exchange.IO("api", ...)Phương pháp gọi hàm đã được nâng cấp để hỗ trợ truyền trực tiếp toàn bộ địa chỉ yêu cầu cho tất cả các đối tượng trao đổi.

Ví dụ, nếu bạn muốn gọi giao diện OKX:

GET https://www.okx.com /api/v5/account/max-withdrawal ccy: BTC

Hỗ trợ ghi trực tiếp vào địa chỉ cơ sởhttps://www.okx.com, không cần phải chuyển đổi địa chỉ cơ sở trước khi gọi hàm IO.

Kiểm tra bằng môi trường mô phỏng tương lai OKX:

function main() {
    exchange.IO("simulate", true)

    return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

Giải thích chi tiết về bản nâng cấp API của Nền tảng giao dịch định lượng Inventor: Cải thiện trải nghiệm thiết kế chiến lược

3. Tác động của giao diện API

hàm exchange.GetOrder

Bản nâng cấp này chủ yếu ảnh hưởng đếnexchange.GetOrder(id)Tham số chức năngidTham số id được thay đổi từ id lệnh giao dịch ban đầu thành định dạng chuỗi chứa loại giao dịch. Tất cả ID đơn hàng được đóng gói trên nền tảng FMZ đều có định dạng này.

Ví dụ:

  • Mã lệnh gốc của giao dịch được xác định trong lệnh giao dịch là:123456 Trước khi nâng cấp này, nếu bạn muốn gọi hàm GetOrder, ID đơn hàng được truyền vào là123456
  • Biểu tượng sản phẩm được đặt tên theo sàn giao dịch được xác định trong lệnh giao dịch:BTC-USDT。 Xin lưu ý rằng những gì được đề cập ở đây là mã sản phẩm giao dịch do sàn giao dịch đặt tên, không phải cặp giao dịch do nền tảng FMZ xác định.

Sau khi nâng cấp này,exchange.GetOrder(id)Định dạng của id tham số mà hàm cần truyền vào được điều chỉnh thành:BTC-USDT,123456

  • Trước tiên, tôi xin giải thích lý do tại sao lại thực hiện thiết kế này: Do chức năng CreateOrder đã được nâng cấp lần này để chỉ định trực tiếp sản phẩm cần đặt lệnh (sản phẩm được đặt có thể khác với cặp giao dịch và mã hợp đồng hiện tại), nếu ID lệnh trả về không chứa thông tin sản phẩm. Khi đó ID đơn hàng này sẽ không khả dụng. Bởi vì khi bạn kiểm tra đơn hàng, bạn không biết đơn hàng đó thuộc loại (hợp đồng) nào. Hầu hết các sàn giao dịch đều yêu cầu chỉ định các tham số mô tả mã sản phẩm khi kiểm tra và hủy đơn hàng.

  • Làm thế nào để tương thích với hiệu ứng này: Nếu bạn sử dụng hàm exchange.IO để gọi trực tiếp giao diện đặt hàng của sàn giao dịch để đặt hàng, giá trị trả về thường chứa ký hiệu gốc của sàn giao dịch (mã sản phẩm) và ID đơn hàng gốc. Sau đó, nối hai lệnh này bằng dấu phẩy tiếng Anh sẽ cung cấp cho bạn ID đơn hàng do nền tảng FMZ xác định. Tương tự như vậy, nếu bạn sử dụng giao diện lệnh được đóng gói bởi nền tảng FMZ để đặt lệnh, vì phần đầu của ID lệnh là mã sản phẩm giao dịch, nếu bạn cần sử dụng ID lệnh gốc, bạn chỉ cần xóa mã sản phẩm và dấu phẩy.

exchange.Hàm CancelOrder

Bản nâng cấp này dành choexchange.CancelOrder()Tác động của các chức năng vàexchange.GetOrder()Các chức năng đều giống nhau.

exchange.Chức năng mua

Bản nâng cấp này dành choexchange.Buy()Tác động của các chức năng vàexchange.GetOrder()Các chức năng đều giống nhau.exchange.Buy()ID lệnh được hàm trả về là một cấu trúc mới, ví dụ, ID trả về khi đặt lệnh tương lai trên sàn giao dịch OKX:LTC-USDT-SWAP,1578360858053058560

exchange.Sell Chức năng

Bản nâng cấp này dành choexchange.Sell()Tác động của các chức năng vàexchange.GetOrder()Các chức năng đều giống nhau.exchange.Sell()ID lệnh được hàm trả về là một cấu trúc mới, ví dụ, ID trả về khi đặt lệnh tương lai trên sàn giao dịch OKX:ETH-USDT-SWAP,1578360832820125696

hàm exchange.GetPosition

Chỉ các đối tượng trao đổi tương lai hỗ trợ chức năng này. Đối với chức năng exchange.GetPosition() để lấy dữ liệu vị trí, một tên mới exchange.GetPositions() được thêm vào và hành vi của chúng hoàn toàn giống nhau.

Định nghĩa cũ: hàm exchange.GetPosition(). Khi được gọi mà không chỉ định bất kỳ tham số nào, hàm này sẽ lấy dữ liệu vị trí của hợp đồng cụ thể được đặt theo cặp giao dịch hiện tại và mã hợp đồng.

Sau khi điều chỉnh và sửa đổi, định nghĩa mới là: hàm exchange.GetPosition(). Khi được gọi mà không chỉ định bất kỳ tham số nào, nó sẽ lấy vị trí của tất cả các loại trong phạm vi kích thước được xác định bởi cặp giao dịch và mã hợp đồng hiện tại.

Ví dụ, cặp giao dịch hiện tại là BTC_USDT và mã hợp đồng là swap. Lúc này hãy gọi:

exchange.GetPosition() // 等价于调用 exchange.GetPosition("USDT.swap")

Chức năng này sẽ yêu cầu dữ liệu vị thế của hợp đồng tương lai ký quỹ U của tất cả các loại tiền tệ.

hàm exchange.GetOrders

  1. Đối với giao dịch giao ngay:

Định nghĩa cũ: hàm exchange.GetOrders(). Khi được gọi mà không chỉ định bất kỳ tham số nào, hàm này sẽ truy xuất tất cả các lệnh đang chờ xử lý cho cặp giao dịch hiện tại.

Sau khi điều chỉnh và sửa đổi, định nghĩa mới là: hàm exchange.GetOrders(). Khi được gọi mà không chỉ định bất kỳ tham số nào, nó sẽ lấy các lệnh chưa hoàn thành của tất cả các cặp giao dịch giao ngay.

  1. Đối với sàn giao dịch tương lai:

Định nghĩa cũ: hàm exchange.GetOrders(). Khi được gọi mà không chỉ định bất kỳ tham số nào, hàm này sẽ truy xuất tất cả các lệnh chưa hoàn thành của hợp đồng cụ thể được đặt theo cặp giao dịch hiện tại và mã hợp đồng.

Sau khi điều chỉnh và sửa đổi, định nghĩa mới là: hàm exchange.GetOrders(). Khi được gọi mà không chỉ định bất kỳ tham số nào, nó sẽ lấy tất cả các lệnh chưa hoàn thành trong phạm vi kích thước được xác định bởi cặp giao dịch và mã hợp đồng hiện tại.

Ví dụ, cặp giao dịch hiện tại là BTC_USD và mã hợp đồng là quarter. Lúc này hãy gọi:

exchange.GetOrders()   // 等价于调用 exchange.GetOrders("USD.futures")

Chức năng này sẽ yêu cầu dữ liệu lệnh chưa thanh toán của tất cả các hợp đồng tương lai ký quỹ bằng tiền xu.

4. Điều chỉnh cấu trúc

Cấu trúc Ticker

Bản cập nhật này thêm trường Biểu tượng vào cấu trúc Mã chứng khoán, ghi lại thông tin thị trường của sản phẩm trong cấu trúc Mã chứng khoán hiện tại. Định dạng của trường này làexchange.GetTicker()Định dạng tham số ký hiệu của hàm hoàn toàn giống nhau.

Cấu trúc đơn hàng

Bản cập nhật này thêm một trường Symbol vào cấu trúc Order. Định dạng của trường này giống nhưexchange.GetTicker()Định dạng tham số ký hiệu của hàm hoàn toàn giống nhau. Bản cập nhật này cũng sửa đổi trường Id của cấu trúc Đơn hàng để ghi lại thông tin sản phẩm và thông tin đơn hàng gốc theo định dạng ID đơn hàng mới. tham khảoexchange.GetOrder()Mô tả về ID đơn hàng trong chức năng sẽ không được lặp lại ở đây.

Cấu trúc vị trí

Bản cập nhật này thêm một trường Symbol vào cấu trúc Position. Định dạng của trường này giống nhưexchange.GetTicker()Định dạng tham số ký hiệu của hàm hoàn toàn giống nhau.

Cấu trúc tài trợ

Hàm GetFundings trả về một mảng các cấu trúc tài trợ.

{
    "Info": {...},               // 交易所资金费率接口原始应答数据
    "Symbol": "BTC_USDT.swap",   // FMZ平台定义的品种名称
    "Interval": 28800000,        // 8小时间隔,单位毫秒
    "Time": 1729728000000,       // 本期资金费率收取时间
    "Rate": 0.0001,              // 资金费率,即 0.01 %
}

5. Hệ thống kiểm tra ngược

Để đáp ứng nhu cầu của người dùng, bản nâng cấp này trước tiên sẽ tương thích với thị trường thực tế và hệ thống kiểm tra ngược sẽ được điều chỉnh trong vòng một tuần. Nếu mã chiến lược riêng lẻ bị ảnh hưởng, vui lòng làm theo hướng dẫn trong bài viết này để thực hiện thay đổi và điều chỉnh

Theo bản nâng cấp giao diện API của chiến lược nền tảng, các giao diện API trong hệ thống kiểm thử ngược của nền tảng đã được cập nhật đồng bộ; ngoài ra, hệ thống kiểm thử ngược đã bổ sung hỗ trợ cho:

  • Hỗ trợ nhiều dữ liệu kiểm tra ngược trao đổi hơn.
  • Hỗ trợ dữ liệu kiểm tra ngược của mọi loại sàn giao dịch.
  • Giao dịch hỗn hợp giữa hợp đồng giao hàng theo lệnh U, hợp đồng giao hàng theo lệnh tiền tệ và hợp đồng giao hàng vĩnh viễn.
  • Các đối tượng trao đổi tương lai hỗ trợ việc chuyển đổi cặp giao dịch trong quá trình kiểm tra ngược.
  • Hệ thống kiểm tra ngược bổ sung hỗ trợ cho các chức năng mới như chức năng GetTickers và chức năng GetMarkets.

Cập nhật bổ sung

1. Thêm các trường Vốn chủ sở hữu và UPnL vào cấu trúc Tài khoản

Các hàm thành viên cho các đối tượng trao đổi tương laiGetAccountTrở lạiAccountCấu trúc đã được mở rộng thêm nhiều trường.

  • Equity Tổng vốn chủ sở hữu của loại tiền tệ tài sản ký quỹ hiện tại. Ngoại trừ một số ít sàn giao dịch tương lai không hỗ trợ trường này, hầu hết các sàn giao dịch đều hỗ trợ trường này. Chủ yếu được sử dụng để tính toán lãi lỗ biên độ tài khoản theo thời gian thực.
  • UPnL Lợi nhuận và lỗ chưa thực hiện của tất cả các vị thế được nắm giữ theo loại tiền tệ tài sản ký quỹ hiện tại. Hầu hết các sàn giao dịch tương lai đều hỗ trợ lĩnh vực này, ngoại trừ một số ít thì không.

2. Hàm SetMarginLevel nâng cấp hỗ trợ tham số biểu tượng

Hàm thành viên SetMarginLevel của đối tượng giao dịch tương lai đã được nâng cấp để thêm biểu tượng tham số.

Ví dụ kiểm tra:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // 当前交易对为ETH_USDT,合约代码为swap,设置杠杆值为10
    exchange.SetMarginLevel(10)
    
    // 直接指定交易对BTC_USDT,合约代码swap,设置杠杆值20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

3. Thêm trường CtValCcy vào cấu trúc Market được trả về bởi hàm GetMarkets

  • Các cánh đồngCtValCcyGhi lại đơn vị giá trị của hợp đồng. Đơn vị giá trị của hợp đồng có thể là: BTC, USD, ETH, v.v.
  • Các cánh đồngCtValGhi lại giá trị của một hợp đồng của sản phẩm giao dịch này trên sàn giao dịch, theo đơn vịCtValCcyTiền tệ của hồ sơ thực địa. Ví dụ:CtVallà 0,01,CtValCcy“BTC” nghĩa là một hợp đồng có giá trị 0,01 BTC.