[TOC]
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.
Để 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
}
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)
}
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.
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ả 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) + "`")
}
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 ((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
exchange.GetPositions ((
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 exchange
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) + "`")
}
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
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.
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ốsymbol
có 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
:
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.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 BTCvar 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
}
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.
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"))
}
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) + "`")
}
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.
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à:
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)
}
Chức năng GetOrders cũng thêmsymbol
cá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:
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
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.
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()
.
Đố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.com
mà 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")
}
Nâng cấp này chủ yếu ảnh hưởng đến các thông sốid
củ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ụ:
123456
Trướ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
.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.
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.
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
.
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
.
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 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.
Đị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.
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.
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.
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.
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:
Các lĩnh vực củaAccount
cấu trúc được trả về bởiGetAccount
Cá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.
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)
}
Vùng đấtCtValCcy
ghi 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 đấtCtVal
ghi 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 trongCtValCcy
ví dụ:CtVal
là 0,01 vàCtValCcy
là