Tài nguyên đang được tải lên... tải...

Giải thích chi tiết về FMZ Quant API nâng cấp: Cải thiện kinh nghiệm thiết kế chiến lược

Tác giả:FMZ~Lydia, Tạo: 2024-07-05 09:44:08, Cập nhật: 2024-09-20 08:52:30

[TOC]

img

Lời giới thiệu

Sau 9 năm lặp lại kỹ thuật, nền tảng giao dịch lượng tử FMZ đã được xây dựng lại nhiều lần, mặc dù với tư cách là người dùng chúng tôi có thể đã không nhận thấy nó. Trong hai năm qua, nền tảng đã thực hiện rất nhiều tối ưu hóa và nâng cấp về 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ú các công cụ giao dịch định lượng thường được sử dụng và thêm hỗ trợ dữ liệu kiểm tra lại.

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

Hướng dẫn cú pháp:https://www.fmz.com/syntax-guideHướng dẫn người dùng:https://www.fmz.com/user-guide

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

1. giao diện API mới

Thêm trao đổi.GetTickers chức năng

Để thiết kế các chiến lược đa sản phẩm và các chiến lược giám sát thị trường đầy đủ, giao diện thị trường tổng hợp là điều cần thiết. Để làm cho chiến lược dễ dàng hơn để phát triển và tránh tái phát minh các sự kiện, nền tảng giao dịch FMZ Quant kết hợp loại API trao đổi này.

Nếu sàn giao dịch không có giao diện này (các sàn giao dịch cá nhân), khi gọiexchange.GetTickers(), một thông báo lỗi được hiển thị: Không được hỗ trợ.

Chức năng này không có bất kỳ thông số và nó sẽ trả về dữ liệu thị trường 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.

exchange.GetTickers()là phiên bản yêu cầu đầy đủ tính năng củaexchange.GetTicker()chức năng (xem cẩn thận, sự khác biệt giữa hai tên chức năng này chỉ là đơn 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
}

img

Thêm chức năng Exchange.CreateOrder

Những người mới được thêm vàoexchange.CreateOrder()chức năng là trọng tâm của nâng cấp này.exchange.CreateOrder()là để chỉ định loại và hướng của lệnh trong các tham số chức năng trực tiếp. theo cách này, nó không còn phụ thuộc vào cặp giao dịch hiện tại, mã hợp đồng, hướng giao dịch và các cài đặt khác của hệ thống.

Trong các kịch bản đặt lệnh giao dịch đa loài và các kịch bản đồng thời, sự phức tạp của thiết kế được giảm đáng kể.exchange.CreateOrder()chức năng làsymbol, side, price, amount.

Kiểm tra sử dụ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)
}

img

Bằng cách này, chỉ có baexchange.CreateOrder()Các cuộc gọi hàm được sử dụng để đặt ba lệnh tương lai của các loại và hướng khác nhau.

Thêm chức năng Exchange.GetHistoryOrders

Những người mới được thêm vàoexchange.GetHistoryOrders()chức năng được sử dụng để có được các lệnh giao dịch lịch sử của một số nhất định. chức năng cũng đòi hỏi sự hỗ trợ của giao diện trao đổi.

Để truy vấn các đơn đặt hàng lịch sử, các giao diện được thực hiện bởi các sàn giao dịch khác nhau rất khác nhau:

  • Một số hỗ trợ các truy vấn trang, trong khi những người khác không;
  • Một số sàn giao dịch có thời gian cửa sổ truy vấn, nghĩa là các đơn đặt hàng cũ hơn N ngày không thể được truy vấn;
  • Hầu hết các sàn giao dịch hỗ trợ truy vấn tại thời điểm cụ thể, nhưng một số 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 việc sử dụng thực tế, nên chú ý đến việc chúng có đáp ứng 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 lặp 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

Kiểm tra bằng môi trường giao dịch Binance:

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

    // Write to chart
    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) +  "`")
}

img

Thêm trao đổi.GetPositions chức năng

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

Lưu ý rằng hai tên hàm chỉ khác nhau bởi s cuối cùng. Bởi vì GetPositions chính xác hơn về ngữ nghĩa, nên sử dụng GetPositions trong tương lai.

Cácexchange.GetPositions()hàm có ba hình thức gọi:

  • trao đổi.GetPositions ((() Khi không có tham số được vượt qua, dữ liệu vị trí của tất cả các giống trong kích thước hiện tại được yêu cầu theo các thiết lập của các hiện tạicặp giao dịch / mã hợp đồng.

  • exchange.GetPositions ((ETH_USDT.swap) Khi xác định thông tin cụ thể về sản phẩm (công thức của ETH_USDT.swap được xác định bởi nền tảng FMZ), yêu cầu dữ liệu vị trí của sản phẩm cụ thể. Ví dụ:BTC_USD.swap, ETH_USDT.swap, ETH_USDT.quarter, vv 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 cửu dựa trên ETH. ETH_USDT.quarter: Hợp đồng giao hàng hàng quý của ETH dựa trên U. BTC_USD.BTC-USD-201226-24250-C: Hợp đồng quyền chọn dựa trên đồng xu BTC.

  • exchange.GetPositions ((USDT.swap) Yêu cầu dữ liệu vị trí cho tất cả các sản phẩm theo phạm vi kích thước đượ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 U. USD.swap: Phạm vi hợp đồng vĩnh viễn dựa trên tiền xu. USD.futures: phạm vi hợp đồng giao hàng dựa trên tiền xu. USDT.option: phạm vi hợp đồng tùy chọn dựa trên U. USD.option: Phạm vi hợp đồng tùy chọn dựa trên tiền xu.

    Một số bộ phận kích thước hợp đồng trao đổi đặc biệt: USDT.futures_combo: Hợp đồng kết hợp spread của sàn giao dịch tương lai_Deribit. USD.futures_ff: Hợp đồng giao dịch ký quỹ hỗn hợp của sàn giao dịch tương lai Kraken. USD.swap_pf: Hợp đồng vĩnh viễn tương lai_Kraken exchanges hỗn hợp ký quỹ. Đối với các kích thước không được hỗ trợ bởi giao diện API trao đổi, một lỗi sẽ được báo cáo và một giá trị null sẽ được trả về khi gọi.

Kiểm tra sử dụ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) +  "`")
}

img

Khi tham số được chuyển sangexchange.GetPositions()chức năng làETH_USDT.swap, dữ liệu vị trí của hợp đồng vĩnh viễn dựa trên U của ETH có thể được thu thập.

Khi các thông số củaexchange.GetPositions()không được truyền vào, dữ liệu vị trí của tất cả các hợp đồng vĩnh viễn dựa trên U được liệt kê trên sàn giao dịch có thể được thu thập (vì cặp giao dịch hiện tại là BTC_USDT và hợp đồng là trao đổ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).exchange.GetPositions("USDT.swap")và xác định một phạm vi yêu cầu.

2. API Interface nâng cấp

Cập nhật trao đổi.GetTicker chức năng

Cải tiến chính của chức năng thị trườngexchange.GetTicker()Đ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 tham số mà không cần cặp giao dịch và mã hợp đồng hiện tại. Nó đơ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 pháp gọi mà không cần thông qua các tham số, và tương thích với chiến lược nền tảng cũ ở mức độ lớn nhất.

Các thông sốsymbolcó các định dạng khác nhau cho giao dịch tức thời/tương lai đối với đối tượng trao đổiexchange:

  • Đối tượng trao đổi tại chỗ Định dạng là:AAA_BBB, AAA đại diện cho baseCurrency, tức là tiền tệ giao dịch, và BBB đại diện cho quoteCurrency, tức là tiền tệ định giá. Ví dụ: cặp giao dịch giao ngay BTC_USDT.
  • Đối tượng trao đổi hợp đồng tương lai Định dạng là:AAA_BBB.XXX, AAA đại diện cho baseCurrency, tức là tiền tệ giao dịch, BBB đại diện cho quoteCurrency, tức là tiền tệ định giá, và XXX đại diện cho mã hợp đồng, chẳng hạn như trao đổi hợp đồng vĩnh cửu. Ví dụ: BTC_USDT.swap, hợp đồng vĩnh viễn dựa trên U của BTC. Kiểm tra bằng môi trường 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
}

img

Yêu cầu một lô dữ liệu thị trường cho một biểu tượng cụ thể đã trở nên đơn giản hơn nhiều.

Cập nhật trao đổi.GetDepth chức năng

Tương tự như chức năng GetTicker,exchange.GetDepth()Điều này cho phép chúng ta chỉ định trực tiếp biểu tượng khi yêu cầu dữ liệu độ sâu.

Kiểm tra bằng môi trường 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"))
}

img

Cập nhật chức năng Exchange.GetTrades

Tương tự như chức năng GetTicker,exchange.GetTrades()Điều này cho phép chúng ta chỉ định biểu tượng trực tiếp khi yêu cầu dữ liệu giao dịch thị trường.

Kiểm tra bằng môi trường 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) +  "`")
}

img

Nâng cấp này cũng tương thích với các tham số biểu tượng được chỉ định bởiexchange.Go()chức năng khi gọi giao diện API nền tảng đồng thời.

Cập nhật trao đổi.GetRecords chức năng

Chức năng GetRecords đã được điều chỉnh rất nhiều lần này. Ngoài việc hỗ trợ tham số ký hiệu để chỉ định trực tiếp thông tin loại dữ liệu đường K được yêu cầu, tham số thời gian ban đầu được giữ lại để chỉ định thời gian đường K, và một tham số giới hạn được thêm để chỉ định chiều dài đường K dự kiến khi yêu cầu. Đồng thời, nó cũng tương thích với phiên bản cũ của chức năng GetRecords chỉ đi qua trong tham số thời gian.

Phương pháp gọi củaexchange.GetRecords()chức năng là:

  • trao đổi.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 mã cặp giao dịch / hợp đồng hiện tại được yêu cầu. Thời gian K-line là thời gian K-line mặc định được đặt trong giao diện backtesting chiến lược hoặc trong giao dịch trực tiếp.
  • trao đổi.GetRecords ((60 * 15) Khi chỉ chỉ định tham số thời gian K-line, dữ liệu K-line của sản phẩm tương ứng với mã cặp giao dịch/hợp đồng hiện tại được yêu cầu.
  • exchange.GetRecords ((BTC_USDT.swap) Khi chỉ có thông tin sản phẩm được chỉ định, dữ liệu đường K của sản phẩm được chỉ định được yêu cầu. Thời gian đường K là thời gian đường K mặc định được đặt trong giao diện backtesting chiến lược hoặc trong giao dịch trực tiếp.
  • exchange.GetRecords ((BTC_USDT.swap, 60 * 60) Xác định thông tin sản phẩm và thời gian K-line cụ thể để yêu cầu dữ liệu K-line.
  • exchange.GetRecords ((BTC_USDT.swap, 60, 1000) Xác định thông tin sản phẩm, xác định thời gian K-line cụ thể và xác định chiều dài K-line dự kiến để yêu cầu dữ liệu K-line. Lưu ý rằng khi tham số giới hạn vượt quá chiều dài tối đa của một yêu cầu duy nhất từ sàn giao dịch, một yêu cầu báo hiệu sẽ được tạo ra (tức là nhiều cuộc gọi đến giao diện đường K của sàn giao dịch).

Kiểm tra bằng môi trường 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 time difference between adjacent bars:", r1[1].Time - r1[0].Time, "Milliseconds, Bar length:", r1.length)
    Log("r2 time difference between adjacent bars:", r2[1].Time - r2[0].Time, "Milliseconds, Bar length:", r2.length)
    Log("r3 time difference between adjacent bars:", r3[1].Time - r3[0].Time, "Milliseconds, Bar length:", r3.length)
    Log("r4 time difference between adjacent bars:", r4[1].Time - r4[0].Time, "Milliseconds, Bar length:", r4.length)
    Log("r5 time difference between adjacent bars:", r5[1].Time - r5[0].Time, "Milliseconds, Bar length:", r5.length)
}

img

Cập nhật Exchange.GetOrders chức năng

Chức năng GetOrders cũng thêmsymbolcác tham số, có thể được sử dụng để chỉ định một biểu tượng cụ thể và truy vấn các lệnh chưa hoàn thành (đặt hàng đang chờ) của biểu tượng đó; nó cũng hỗ trợ truy vấn các lệnh chưa hoàn thành (đặt hàng đang chờ) của tất cả các biểu tượng trong phạm vi kích thước được chỉ định.

Cácexchange.GetOrders()hàm có thể được gọi theo những cách sau:

  • trao đổi.GetOrders ((() Đối với các sàn giao dịch tương lai: Khi không có thông số nào được thông qua, tất cả các đơn đặt hàng chưa hoàn tất (các đơn đặt hàng đang chờ) cho tất cả các công cụ trong phạm vi kích thước hiện tại được yêu cầu theo các thông số hiện tạicặp giao dịch / mã hợp đồngcài đặt. Đối với giao dịch giao ngay: Khi không có thông số nào được vượt qua, yêu cầu được thực hiện cho tất cả các đơn đặt hàng chưa hoàn tất (các đơn đặt hàng đang chờ) 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 sàn giao dịch tương lai: exchange.GetOrders ((BTC_USDT.swap), truy vấn tất cả các đơn đặt hàng chưa hoàn tất (các đơn đặt hàng đang chờ) cho hợp đồng vĩnh cửu dựa trên BTC của USDT. Đối với các sàn giao dịch tại chỗ: exchange.GetOrders ((BTC_USDT), truy vấn tất cả các lệnh đang tồn tại (đề xuất đang chờ) cho cặp giao dịch tại chỗ BTC_USDT.
  • Chỉ được hỗ trợ cho giao dịch giao dịch tương lai.GetOrders ((USDT.swap) chỉ định phạm vi kích thước để yêu cầu các đơn đặt hàng chưa hoàn tất (lệnh đang chờ) cho tất cả các loại Phạm vi kích thước 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 đơn đặt hàng chưa hoàn tất (các đơn đặt hàng đang chờ) của tất cả các loại trong phạm vi hợp đồng vĩnh viễn dựa trên U.

Kiểm tra sử dụ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")

    // Write to chart
    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 thông qua, các lệnh chưa hoàn thành (đề xuất đang 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 (swap) được yêu cầu.

Khi tham sốETH_USDT.swapđược chỉ định, các đơn đặt hàng chưa hoàn thành (các đơn đặt hàng đang chờ) của hợp đồng vĩnh viễn dựa trên USDT của ETH được yêu cầu.

Khi dây"USDT.swap"được thông qua, các đơn đặt hàng chưa hoàn thành (các đơn đặt hàng đang chờ) của tất cả các hợp đồng vĩnh viễn dựa trên USDT được yêu cầu.

Cập nhật trao đổi.GetPosition chức năng

Nó vẫn tương thích với chức năng định vị vị trí cũ và cũng thêm tham số biểu tượng, có thể xác định thông tin loại của dữ liệu vị trí cụ thể được yêu cầu. Việc sử dụng hàm này là chính xác giống nhưexchange.GetPositions().

Cập nhậtexchange.IOchức năng

Đối vớiexchange.IO("api", ...)gọi hàm, tất cả các đối tượng trao đổi đã được nâng cấp để hỗ trợ chuyển trực tiếp các địa chỉ yêu cầu hoàn chỉnh. Ví dụ, nếu bạn muốn gọi giao diện OKX:

// GEThttps://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.commà không cần phải thay đổi địa chỉ cơ sở trước và sau đó gọi chức năng IO.

Kiểm tra sử dụ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")
}

img

3. Ảnh hưởng giao diện API

Ảnh hưởng đến trao đổi.GetOrder chức năng

Nâng cấp này chủ yếu ảnh hưởng đến các thông sốidcủaexchange.GetOrder(id)Các tham số id được thay đổi từ ban đầu giao dịch lệnh id đến một định dạng chuỗi chứa các sản phẩm giao dịch. Tất cả các ID đơn hàng được đóng gói trên nền tảng FMZ đều ở định dạng này.

Ví dụ:

  • ID lệnh ban đầu của giao dịch được xác định trong lệnh giao dịch là:123456Trước khi nâng cấp này, nếu bạn muốn gọi chức năng GetOrder, lệnh Id được chuyển vào là123456.
  • Mã sản phẩm được trao đổi xác định trong lệnh trao đổi:BTC-USDT. Lưu ý rằng điều này đề cập đến mã sản phẩm giao dịch được trao đổi, chứ không phải cặp giao dịch được xác định bởi nền tảng FMZ.

Sau khi nâng cấp này, định dạng của ID tham số cần được truyền vàoexchange.GetOrder(id)chức năng được điều chỉnh để:BTC-USDT,123456.

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

Làm thế nào để phù hợp với tác động này: Nếu bạn sử dụngexchange.IOchức năng để gọi giao diện lệnh trao đổi trực tiếp để đặt đơn đặt hàng, giá trị trả về thường chứa biểu tượng ban đầu của sàn giao dịch (mã sản phẩm) và ID đơn đặt hàng ban đầu. Sau đó liên kết hai với dấu phẩy tiếng Anh sẽ là ID đơn đặt hàng phù hợp với định nghĩa của nền tảng FMZ. Tương tự như vậy, nếu bạn sử dụng giao diện đặt hàng được đóng gói trên nền tảng FMZ để đặt hàng, vì đầu của ID đặt hàng là mã sản phẩm giao dịch, nếu bạn cần sử dụng ID đặt hàng ban đầu, chỉ cần xóa mã sản phẩm và dấu phẩy.

Ảnh hưởng đến trao đổi.Hủy lệnh chức năng

Tác động của việc nâng cấp nàyexchange.CancelOrder()chức năng là giống nhưexchange.GetOrder() function.

Ảnh hưởng đến trao đổi.Buying function

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

Ảnh hưởng đến trao đổi.Hoạt động bán hàng

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

Ảnh hưởng đến trao đổi.GetPosition function

Chỉ có 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 exchange.GetPositions( mới được thêm vào, và hai hành vi là chính xác như 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, lấy dữ liệu vị trí của hợp đồng cụ thể được đặt bởi cặp giao dịch và mã hợp đồng hiện tại. Sau khi điều chỉnh và sửa đổi, định nghĩa mới: hàm exchange.GetPosition ((), khi được gọi mà không xác định bất kỳ thông số nào, lấy các 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.

exchange.GetPosition() // Equivalent to calling exchange.GetPosition("USDT.swap")

Chức năng này sẽ yêu cầu dữ liệu vị trí của các hợp đồng vĩnh viễn dựa trên U của tất cả các loại tiền tệ.

Ảnh hưởng đến trao đổi.GetOrders chức năng

  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, lấy tất cả các lệnh chưa hoàn thành của 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 xác định bất kỳ thông số nào, nhận được 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 giao dịch tương lai:

Định nghĩa cũ: chức năng exchange.GetOrders(, khi được gọi mà không xác định bất kỳ tham số nào, lấy tất cả các lệnh chưa hoàn thành của hợp đồng cụ thể được đặt bởi cặp giao dịch và mã hợp đồng 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 xác định bất kỳ tham số nào, nhận được tất cả các lệnh chưa hoàn thành của 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à quý.

exchange.GetOrders()   // Equivalent to calling exchange.GetOrders("USD.futures")

Chức năng này sẽ yêu cầu dữ liệu đơn đặt hàng chưa hoàn tất của tất cả các hợp đồng tương lai dựa trên 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 một trường Symbol vào cấu trúc Ticker, ghi lại thông tin thị trường của cấu trúc Ticker hiện tại. Định dạng của trường này là chính xác giống như các biểu tượng định dạng tham số củaexchange.GetTicker() function.

Cấu trúc thứ tự

Bản cập nhật này thêm một trường biểu tượng vào cấu trúc Order, và định dạng của trường này chính xác giống như định dạng tham số biểu tượng củaexchange.GetTicker()chức năng. Bản cập nhật này cũng sửa đổi trường ID của cấu trúc đặt hàng, ghi lại thông tin sản phẩm và thông tin đặt hàng ban đầu trong định dạng ID đặt hàng mới.exchange.GetOrder()chức năng, mà 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 biểu tượng vào cấu trúc vị trí.exchange.GetTicker() function.

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

Theo nâng cấp giao diện API chiến lược nền tảng, hệ thống backtesting của nền tảng đã được cập nhật đồng bộ; Ngoài ra, hệ thống backtesting đã thêm hỗ trợ cho:

  • Hỗ trợ trao đổi dữ liệu backtesting nhiều hơn.
  • Hỗ trợ backtesting dữ liệu cho tất cả các loại trao đổi.
  • Giao dịch hỗn hợp cho giao hàng dựa trên U, giao hàng dựa trên tiền tệ, và hợp đồng vĩnh viễn.
  • Các đối tượng trao đổi tương lai hỗ trợ chuyển đổi các cặp giao dịch trong quá trình kiểm tra ngược.

Các thông tin bổ sung

1. Các lĩnh vực mới Equity và UPnL trong cấu trúc tài khoản

Các lĩnh vực củaAccountcấu trúc được trả về bởiGetAccountCác chức năng của đối tượng giao dịch tương lai đã được mở rộng.

  • Tài sản Tổng vốn chủ sở hữu của đồng tiền tài sản ký quỹ hiện tại. Ngoại trừ một vài sàn giao dịch tương lai không hỗ trợ lĩnh vực này, hầu hết các sàn giao dịch đều hỗ trợ lĩnh vực này. Nó chủ yếu được sử dụng để tính toán lợi nhuận và lỗ ký quỹ tài khoản 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ị trí được giữ trong đồng tiền tài sản ký quỹ hiện tại.

2. Chức năng SetMarginLevel được nâng cấp để hỗ trợ tham số biểu tượng

Chức năng thành viên SetMarginLevel của đối tượng trao đổi tương lai đã được nâng cấp và biểu tượng tham số đã được thêm vào.

Ví dụ thử nghiệm:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // The current trading pair is ETH_USDT, the contract code is swap, and the leverage value is set to 10
    exchange.SetMarginLevel(10)
    
    // Directly specify the trading pair BTC_USDT, contract code swap, and set the leverage value to 20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

3. Cấu trúc thị trường được trả về bởi chức năng GetMarkets thêm trường CtValCcy

Vùng đấtCtValCcyghi 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, vv Vùng đấtCtValghi lại giá trị của một hợp đồng của sản phẩm giao dịch trên sàn giao dịch, và đơn vị là đồng tiền ghi trongCtValCcyví dụ:CtVallà 0,01 vàCtValCcyBTC, có nghĩa là một hợp đồng có giá trị 0,01 BTC.


Thêm nữa