Cácexchange.Buy()
chức năng được sử dụng để đặt lệnh mua.Buy()
hàm là một hàm thành viên của đối tượng trao đổi {@var/EXCHANGE exchange}.Buy()
chức năng hoạt động trên tài khoản trao đổi gắn với đối tượng trao đổiexchange
Mục đích của các chức năng thành viên (các phương pháp)exchange
đối tượng chỉ liên quan đếnexchange
, và nó sẽ không được lặp lại sau khi tài liệu.
Một đơn đặt hàng thành công trả về ID đơn đặt hàng, một đơn đặt hàng thất bại trả về giá trị null.
Thuộc tínhId
của cấu trúc lệnh {@struct/Order Order} của nền tảng FMZ bao gồm mã sản phẩm trao đổi và ID đặt hàng ban đầu trao đổi, được tách bằng dấu phẩy tiếng Anh.Id
định dạng của cặp giao dịch tại chỗETH_USDT
thứ tự của sàn giao dịch OKX là:ETH-USDT,1547130415509278720
.
Khi gọi choexchange.Buy()
chức năng để đặt một lệnh, lệnh trả về giá trịId
là phù hợp vớiId
thuộc tính của cấu trúc order {@struct/Order Order}.
chuỗi, giá trị không
trao đổi. Mua ((giá, số tiền) trao đổi. Mua ((giá, số tiền,... args)
Cácprice
tham số được sử dụng để thiết lập giá lệnh.
giá
đúng
số
Cácamount
tham số được sử dụng để thiết lập số tiền đặt hàng.
số tiền
đúng
số
Các tham số mở rộng có thể xuất thông tin kèm theo vào nhật ký đơn đặt hàng này,arg
Các thông số có thể được truyền qua nhiều hơn một.
arg
sai
chuỗi, số, bool, đối tượng, mảng, null và bất kỳ loại nào khác được hỗ trợ bởi hệ thống
function main() {
var id = exchange.Buy(100, 1);
Log("id:", id);
}
def main():
id = exchange.Buy(100, 1)
Log("id:", id)
void main() {
auto id = exchange.Buy(100, 1);
Log("id:", id);
}
Số thứ tự được trả về bởiexchange.Buy()
có thể được sử dụng để truy vấn thông tin đặt hàng và hủy đặt hàng.
// The following is an error call
function main() {
exchange.SetContractType("quarter")
// Set the shorting direction
exchange.SetDirection("sell")
// If you place a buy order, an error will be reported, and shorting can only be sold
var id = exchange.Buy(50, 1)
// Set the long direction
exchange.SetDirection("buy")
// If you place a sell order, it will report an error, go long, only buy
var id2 = exchange.Sell(60, 1)
// Set direction to close long positions
exchange.SetDirection("closebuy")
// If you place a buy order, it will report an error, close long, only sell
var id3 = exchange.Buy(-1, 1)
// Set direction to close short positions
exchange.SetDirection("closesell")
// If you place a sell order, it will report an error, close short, only buy
var id4 = exchange.Sell(-1, 1)
}
# The following is an error call
def main():
exchange.SetContractType("quarter")
exchange.SetDirection("sell")
id = exchange.Buy(50, 1)
exchange.SetDirection("buy")
id2 = exchange.Sell(60, 1)
exchange.SetDirection("closebuy")
id3 = exchange.Buy(-1, 1)
exchange.SetDirection("closesell")
id4 = exchange.Sell(-1, 1)
// The following is an error call
void main() {
exchange.SetContractType("quarter");
exchange.SetDirection("sell");
auto id = exchange.Buy(50, 1);
exchange.SetDirection("buy");
auto id2 = exchange.Sell(60, 1);
exchange.SetDirection("closebuy");
auto id3 = exchange.Buy(-1, 1);
exchange.SetDirection("closesell");
auto id4 = exchange.Sell(-1, 1);
}
Khi đặt lệnh cho hợp đồng tương lai tiền điện tử, phải cẩn thận để đảm bảo rằng hướng giao dịch được đặt chính xác, vì sự không phù hợp giữa hướng giao dịch và chức năng giao dịch sẽ dẫn đến lỗi:
direction is sell, invalid order type Buy
direction is buy, invalid order type Sell
direction is closebuy, invalid order type Buy
direction is closesell, invalid order type Sell
// For example, the trading pair: ETH_BTC, place a buy order at the market price
function main() {
// Place a buy order at the market price and buy ETH coins with a value of 0.1 BTC (denominated currency)
exchange.Buy(-1, 0.1)
}
def main():
exchange.Buy(-1, 0.1)
void main() {
exchange.Buy(-1, 0.1);
}
Lệnh thị trường ngay lập tức.
Khi đặt lệnh cho hợp đồng tương lai, bạn phải chú ý đến việc hướng giao dịch có được đặt đúng không, vì sẽ báo cáo lỗi nếu hướng giao dịch và chức năng giao dịch không phù hợp.
Các thông sốprice
được thiết lập thành-1
cho việc đặt lệnh thị trường, đòi hỏi giao diện đặt lệnh của sàn giao dịch để hỗ trợ lệnh thị trường. Khi đặt lệnh thị trường cho các hợp đồng giao ngay tiền điện tử, tham sốamount
là số tiền trong đồng tiền của lệnh. Khi đặt lệnh thị trường cho hợp đồng tương lai tiền điện tử, tham số số tiềnamount
là số lượng hợp đồng. Có một vài sàn giao dịch tiền điện tử không hỗ trợ giao diện lệnh thị trường trong giao dịch trực tiếp. Số lượng lệnh cho lệnh mua thị trường trên một số sàn giao dịch tại chỗ là số lượng đồng xu giao dịch. Xin tham khảoHướng dẫn đặc biệt cho việc trao đổitrong Id
củaexchange.Buy()
chức năng có thể khác với giá trị trả về của lệnhId
được mô tả trong tài liệu hiện tại.
{@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@fun/Futures/exchange.SetDirection exchange.SetDirection}
Cácexchange.Sell()
chức năng được sử dụng để đặt lệnh bán.
Một đơn đặt hàng thành công trả về ID đơn đặt hàng, một đơn đặt hàng thất bại trả về giá trị null.Id
của cấu trúc lệnh {@struct/Order Order} của nền tảng FMZ bao gồm mã sản phẩm trao đổi và ID đặt hàng ban đầu trao đổi, được tách bằng dấu phẩy tiếng Anh.Id
định dạng của cặp giao dịch tại chỗETH_USDT
thứ tự của sàn giao dịch OKX là:ETH-USDT,1547130415509278720
Khi gọi điện choexchange.Sell()
chức năng để đặt một lệnh, lệnh trả về giá trịId
là phù hợp vớiId
thuộc tính của cấu trúc order {@struct/Order Order}.
chuỗi, giá trị không
trao đổi.Bán (giá, số tiền) trao đổi.Bán ((giá, số tiền,... args)
Cácprice
tham số được sử dụng để thiết lập giá lệnh.
giá
đúng
số
Cácamount
tham số được sử dụng để thiết lập số tiền đặt hàng.
số tiền
đúng
số
Các tham số mở rộng có thể xuất thông tin kèm theo vào nhật ký đơn đặt hàng này,arg
Các thông số có thể được truyền qua nhiều hơn một.
arg
sai
chuỗi, số, bool, đối tượng, mảng, null và bất kỳ loại nào khác được hỗ trợ bởi hệ thống
function main(){
var id = exchange.Sell(100, 1)
Log("id:", id)
}
def main():
id = exchange.Sell(100, 1)
Log("id:", id)
void main() {
auto id = exchange.Sell(100, 1);
Log("id:", id);
}
Số thứ tự được trả về bởiexchange.Sell()
có thể được sử dụng để truy vấn thông tin đơn đặt hàng và hủy bỏ đơn đặt hàng.
// The following is an error call
function main() {
exchange.SetContractType("quarter")
// Set the shorting direction
exchange.SetDirection("sell")
// If you place a buy order, an error will be reported, and shorting can only be sold
var id = exchange.Buy(50, 1)
// Set the long direction
exchange.SetDirection("buy")
// If you place a sell order, it will report an error, go long, only buy
var id2 = exchange.Sell(60, 1)
// Set direction to close long positions
exchange.SetDirection("closebuy")
// If you place a buy order, it will report an error, close long, only sell
var id3 = exchange.Buy(-1, 1)
// Set direction to close short positions
exchange.SetDirection("closesell")
// If you place a sell order, it will report an error, close short, only buy
var id4 = exchange.Sell(-1, 1)
}
# The following is an error call
def main():
exchange.SetContractType("quarter")
exchange.SetDirection("sell")
id = exchange.Buy(50, 1)
exchange.SetDirection("buy")
id2 = exchange.Sell(60, 1)
exchange.SetDirection("closebuy")
id3 = exchange.Buy(-1, 1)
exchange.SetDirection("closesell")
id4 = exchange.Sell(-1, 1)
// The following is an error call
void main() {
exchange.SetContractType("quarter");
exchange.SetDirection("sell");
auto id = exchange.Buy(50, 1);
exchange.SetDirection("buy");
auto id2 = exchange.Sell(60, 1);
exchange.SetDirection("closebuy");
auto id3 = exchange.Buy(-1, 1);
exchange.SetDirection("closesell");
auto id4 = exchange.Sell(-1, 1);
}
Khi đặt lệnh cho hợp đồng tương lai tiền điện tử, phải cẩn thận để đảm bảo rằng hướng giao dịch được đặt chính xác, vì sự không phù hợp giữa hướng giao dịch và chức năng giao dịch sẽ dẫn đến lỗi:
direction is sell, invalid order type Buy
direction is buy, invalid order type Sell
direction is closebuy, invalid order type Buy
direction is closesell, invalid order type Sell
// For example, the trading pair: ETH_BTC, place a sell order at the market price
function main() {
// Note: place a market order to sell, sell 0.2 ETH
exchange.Sell(-1, 0.2)
}
def main():
exchange.Sell(-1, 0.2)
void main() {
exchange.Sell(-1, 0.2);
}
Lệnh thị trường ngay lập tức.
Khi đặt đơn đặt hàng cho hợp đồng tương lai, bạn phải chú ý đến việc hướng giao dịch có được đặt đúng không, vì sẽ báo cáo lỗi nếu hướng giao dịch và chức năng giao dịch không phù hợp. Số tiền đặt hàng cho hợp đồng tương lai tiền điện tử là số hợp đồng nếu không được chỉ định.
Các thông sốprice
được thiết lập thành-1
để đặt lệnh thị trường, đòi hỏi giao diện đặt lệnh của sàn giao dịch để hỗ trợ lệnh thị trường. Khi đặt lệnh thị trường cho các hợp đồng giao ngay tiền điện tử, tham số số tiềnamount
là số tiền trong tiền tệ giao dịch. Khi đặt lệnh thị trường cho hợp đồng tương lai tiền điện tử, tham số số tiềnamount
là số hợp đồng. Có một vài sàn giao dịch tiền điện tử không hỗ trợ giao diện lệnh thị trường trong giao dịch trực tiếp.
Nếu bạn đang sử dụng một phiên bản cũ của docker, giá trị trả về của lệnhId
củaexchange.Sell()
chức năng có thể khác với giá trị trả về của lệnhId
được mô tả trong tài liệu hiện tại.
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@fun/Futures/exchange.SetDirection exchange.SetDirection}
Cácexchange.CreateOrder()
chức năng được sử dụng để đặt hàng.
Nếu lệnh được đặt thành công, ID lệnh được trả về; nếu lệnh thất bại, một giá trị null được trả về.Id
của cấu trúc lệnh {@struct/Order Order} của nền tảng FMZ bao gồm mã sản phẩm trao đổi và ID đặt hàng ban đầu trao đổi, được tách bằng dấu phẩy tiếng Anh.Id
Định dạng lệnh của cặp giao dịch tại chỗETH_USDT
của sàn OKX là:ETH-USDT,1547130415509278720
Khi gọi điện choexchange.CreateOrder(symbol, side, price, amount)
chức năng đặt lệnh, giá trị trả về của lệnhId
là phù hợp vớiId
thuộc tính của cấu trúc {@struct/Order Order}.
chuỗi, giá trị không
exchange.CreateOrder (( biểu tượng, bên, giá, số tiền) exchange.CreateOrder (( biểu tượng, bên, giá, số tiền,...args)
Các thông sốsymbol
được sử dụng để chỉ định cặp giao dịch cụ thể và mã hợp đồng của lệnh.exchange.CreateOrder(symbol, side, price, amount)
chức năng đặt hàng,exchange
là đối tượng trao đổi tại chỗ. Nếu tiền tệ đặt hàng là USDT và tiền tệ giao dịch là BTC, tham sốsymbol
là:"BTC_USDT"
, trong định dạng cặp giao dịch được xác định bởi nền tảng FMZ.exchange.CreateOrder(symbol, side, price, amount)
chức năng đặt hàng,exchange
là đối tượng trao đổi tương lai. Nếu lệnh là lệnh hợp đồng vĩnh viễn tiêu chuẩn U của BTCsymbol
là:"BTC_USDT.swap"
, và định dạng là một sự kết hợp củacặp giao dịchvàmã hợp đồngđược xác định bởi nền tảng FMZ, được tách bởi ký tự exchange.CreateOrder(symbol, side, price, amount)
chức năng đặt hàng,exchange
là đối tượng trao đổi tương lai. Nếu lệnh là lệnh hợp đồng quyền chọn tiêu chuẩn U của BTCsymbol
là:"BTC_USDT.BTC-240108-40000-C"
(lấy Binance Option BTC-240108-40000-C làm ví dụ), và định dạng là một sự kết hợp củacặp giao dịchđược xác định bởi nền tảng FMZ và mã hợp đồng tùy chọn cụ thể được xác định bởi sàn giao dịch, được tách bằng ký tự side
tham số được sử dụng để chỉ định hướng giao dịch của lệnh.
Đối với các đối tượng trao đổi tại chỗ, các giá trị tùy chọn củaside
các tham số là:buy
, sell
. buy
có nghĩa là mua, vàsell
có nghĩa là bán.
Đối với các đối tượng giao dịch tương lai, các giá trị tùy chọn củaside
các tham số là:buy
, closebuy
, sell
, closesell
. buy
có nghĩa là mở một vị trí dài,closebuy
có nghĩa là đóng một vị trí dài,sell
có nghĩa là mở một vị trí ngắn, vàclosesell
có nghĩa là đóng một vị trí ngắn.
mặt
đúng
chuỗi
Các thông sốprice
được sử dụng để thiết lập giá của lệnh. Giá -1 cho thấy lệnh là lệnh thị trường.
giá
đúng
số
Các thông sốamount
được sử dụng để thiết lập số lượng lệnh. Xin lưu ý rằng khi lệnh là một lệnh mua thị trường, số lượng lệnh là số tiền mua; số lượng lệnh của lệnh mua thị trường của một số sàn giao dịch tức thời là số lượng tiền xu giao dịch.Hướng dẫn đặc biệt cho việc trao đổitrong arg
Các thông số có thể được truyền.
arg
sai
Bất kỳ loại nào được hệ thống hỗ trợ, chẳng hạn như chuỗi, số, bool, đối tượng, mảng, giá trị không, v.v.
function main() {
var id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01) // Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
// var id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01) // Futures exchange objects place orders for BTC's U-standard perpetual contracts
Log("Order Id:", id)
}
def main():
id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01) # Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
# id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01) # Futures exchange objects place orders for BTC's U-standard perpetual contracts
Log("Order Id:", id)
void main() {
auto id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01); // Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
// auto id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01); // Futures exchange objects place orders for BTC's U-standard perpetual contracts
Log("Order Id:", id);
}
Các đối tượng giao dịch tại chỗ và các đối tượng giao dịch tương lai gọi làexchange.CreateOrder()
chức năng để đặt hàng.
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}
Cácexchange.CancelOrder()
chức năng được sử dụng để hủy lệnh.
Thuộc tínhId
của cấu trúc lệnh {@struct/Order Order} của nền tảng FMZ bao gồm mã sản phẩm trao đổi và ID đặt hàng ban đầu trao đổi, được tách bằng dấu phẩy tiếng Anh.Id
Định dạng lệnh của cặp giao dịch tại chỗETH_USDT
của sàn OKX là:ETH-USDT,1547130415509278720
.
Các thông sốorderId
qua khi gọi choexchange.CancelOrder()
chức năng để hủy một lệnh là phù hợp vớiId
thuộc tính của cấu trúc {@struct/Order Order}.
Cácexchange.CancelOrder()
hàm trả về một giá trị thực, ví dụtrue
nghĩa là yêu cầu hủy lệnh đã được gửi thành công. Nếu nó trả về một giá trị sai, chẳng hạn nhưfalse
Giá trị trả về chỉ đại diện cho sự thành công hoặc thất bại của yêu cầu được gửi để xác định xem sàn giao dịch hủy lệnh hay không. Bạn có thể gọiexchange.GetOrders()
để xác định xem lệnh có bị hủy hay không.
bool
trao đổi.Hủy đơn đặt hàng (định dạng đơn đặt hàng) trao đổi.Hủy đơn đặt hàng ((định dạng đơn đặt hàng,...args)
CácorderId
tham số được sử dụng để xác định lệnh được hủy bỏ.
Đặt hàng
đúng
số, chuỗi
Các thông số mở rộng, bạn có thể xuất thông tin đính kèm vào nhật ký rút tiền này,arg
Các thông số có thể được truyền qua nhiều hơn một.
arg
sai
chuỗi, số, bool, đối tượng, mảng, null và bất kỳ loại nào khác được hỗ trợ bởi hệ thống
function main(){
var id = exchange.Sell(99999, 1)
exchange.CancelOrder(id)
}
def main():
id = exchange.Sell(99999, 1)
exchange.CancelOrder(id)
void main() {
auto id = exchange.Sell(99999, 1);
exchange.CancelOrder(id);
}
Hủy lệnh đi.
function main() {
if (exchange.GetName().includes("Futures_")) {
Log("Set the contract as: perpetual contract, set the trade direction as: open long position.")
exchange.SetContractType("swap")
exchange.SetDirection("buy")
}
var ticker = exchange.GetTicker()
exchange.Buy(ticker.Last * 0.5, 0.1)
var orders = exchange.GetOrders()
for (var i = 0 ; i < orders.length ; i++) {
exchange.CancelOrder(orders[i].Id, "Cancelled orders:", orders[i])
Sleep(500)
}
}
def main():
if exchange.GetName().find("Futures_") != -1:
Log("Set the contract as: perpetual contract, set the trade direction as: open long position.")
exchange.SetContractType("swap")
exchange.SetDirection("buy")
ticker = exchange.GetTicker()
exchange.Buy(ticker["Last"] * 0.5, 0.1)
orders = exchange.GetOrders()
for i in range(len(orders)):
exchange.CancelOrder(orders[i]["Id"], "Cancelled orders:", orders[i])
Sleep(500)
void main() {
if (exchange.GetName().find("Futures_") != std::string::npos) {
Log("Set the contract as: perpetual contract, set the trade direction as: open long position.");
exchange.SetContractType("swap");
exchange.SetDirection("buy");
}
auto ticker = exchange.GetTicker();
exchange.Buy(ticker.Last * 0.5, 0.1);
auto orders = exchange.GetOrders();
for (int i = 0 ; i < orders.size() ; i++) {
exchange.CancelOrder(orders[i].Id, "Cancelled orders:", orders[i]);
Sleep(500);
}
}
Các chức năng FMZ API có thể tạo ra các chức năng log output như:Log()
, exchange.Buy()
, exchange.CancelOrder()
có thể được theo sau bởi một số thông số đầu ra kèm theo sau các thông số cần thiết. Ví dụ:exchange.CancelOrder(orders[i].Id, orders[i])
, để khi hủy lệnh mà ID làorders[i].Id
, các thông tin lệnh được xuất ra với nó.orders[i]
.
Nếu bạn đang sử dụng một phiên bản cũ hơn của docker, tham số orderId của hàm exchange.CancelOrder( có thể khác với orderId được mô tả trong tài liệu hiện tại.
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}
Cácexchange.GetOrder()
chức năng được sử dụng để có được thông tin đặt hàng.
truy vấn chi tiết thứ tự theo số thứ tự, và trả về cấu trúc {@struct/Order Order} nếu truy vấn thành công, hoặc trả về null nếu truy vấn thất bại. {@struct/Order Order}, giá trị không
trao đổi.GetOrder ((orderId)
CácorderId
tham số được sử dụng để xác định thứ tự được truy vấn.
Thuộc tínhId
của cấu trúc lệnh {@struct/Order Order} của nền tảng FMZ bao gồm mã sản phẩm trao đổi và ID đặt hàng ban đầu trao đổi, được tách bằng dấu phẩy tiếng Anh.Id
Định dạng lệnh của cặp giao dịch tại chỗETH_USDT
của sàn OKX là:ETH-USDT,1547130415509278720
.
Các thông sốorderId
qua khi gọi choexchange.GetOrder()
chức năng để truy vấn một lệnh là phù hợp vớiId
thuộc tính của cấu trúc {@struct/Order Order}.
Đặt hàng đúng chuỗi
function main(){
var id = exchange.Sell(1000, 1)
// Parameter id is the order number, you need to fill in the number of the order you want to query
var order = exchange.GetOrder(id)
Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:",
order.DealAmount, "Status:", order.Status, "Type:", order.Type)
}
def main():
id = exchange.Sell(1000, 1)
order = exchange.GetOrder(id)
Log("Id:", order["Id"], "Price:", order["Price"], "Amount:", order["Amount"], "DealAmount:",
order["DealAmount"], "Status:", order["Status"], "Type:", order["Type"])
void main() {
auto id = exchange.Sell(1000, 1);
auto order = exchange.GetOrder(id);
Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:",
order.DealAmount, "Status:", order.Status, "Type:", order.Type);
}
Cácexchange.GetOrder()
chức năng không được hỗ trợ bởi một số trao đổi.AvgPrice
thuộc tính trong cấu trúc {@struct/Order Order} của giá trị trả về là giá trung bình của giao dịch. Một số sàn giao dịch không hỗ trợ trường này, và nếu không, nó được đặt thành 0.
Nếu bạn đang sử dụng một phiên bản cũ của docker,orderId
tham số củaexchange.GetOrder()
chức năng có thể khác vớiorderId
được mô tả trong tài liệu hiện tại.
Các sàn giao dịch không hỗ trợexchange.GetOrder()
chức năng:
Tên chức năng | Không hỗ trợ trao đổi tại chỗ | Giao dịch tương lai không được hỗ trợ |
---|---|---|
GetOrder | Zaif / Coincheck / Bitstamp | – |
{@struct/Order Order}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}
Cácexchange.GetOrders()
chức năng được sử dụng để có được các đơn đặt hàng.
Cácexchange.GetOrders()
hàm trả về một mảng cấu trúc {@struct/Order Order} nếu yêu cầu dữ liệu thành công, và nó trả về giá trị không nếu yêu cầu dữ liệu thất bại.
{@struct/Order Order} mảng, giá trị không
trao đổi.GetOrders ((() trao đổi.GetOrders (bản biểu tượng)
Các thông sốsymbol
được sử dụng để thiết lậpbiểu tượng giao dịchhoặcphạm vi ký hiệu giao dịchđể được thẩm vấn.
Đối với các đối tượng trao đổi tại chỗ, nếusymbol
Nếu tham số không được thông qua, dữ liệu đặt hàng chưa hoàn thành của tất cả các sản phẩm tại chỗ sẽ được yêu cầu.
Đối với các đối tượng giao dịch tương lai, nếusymbol
Nếu tham số không được truyền, mặc định là yêu cầu dữ liệu lệnh chưa hoàn thành 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 và mã hợp đồng.
biểu tượng sai chuỗi
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
function main() {
var arrSymbol = ["ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"]
for (var symbol of arrSymbol) {
var t = exchange.GetTicker(symbol)
exchange.CreateOrder(symbol, "buy", t.Last / 2, 0.01)
}
var spotOrders = exchange.GetOrders()
var tbls = []
for (var orders of [spotOrders]) {
var tbl = {type: "table", title: "test GetOrders", 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])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
// Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''
import json
def main():
arrSymbol = ["ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"]
for symbol in arrSymbol:
t = exchange.GetTicker(symbol)
exchange.CreateOrder(symbol, "buy", t["Last"] / 2, 0.01)
spotOrders = exchange.GetOrders()
tbls = []
for orders in [spotOrders]:
tbl = {"type": "table", "title": "test GetOrders", "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], "rows": []}
for order in orders:
tbl["rows"].append([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
tbls.append(tbl)
LogStatus("`" + json.dumps(tbls) + "`")
return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
void main() {
auto arrSymbol = {"ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"};
for (const auto& symbol : arrSymbol) {
auto t = exchange.GetTicker(symbol);
exchange.CreateOrder(symbol, "buy", t.Last / 2, 0.01);
}
auto spotOrders = exchange.GetOrders();
json tbls = R"([])"_json;
std::vector<std::vector<Order>> arr = {spotOrders};
for (const auto& orders : arr) {
json tbl = R"({
"type": "table",
"title": "test GetOrders",
"cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"],
"rows": []
})"_json;
for (const auto& order : orders) {
json arrJson = R"([])"_json;
arrJson.push_back("Symbol");
arrJson.push_back("Id");
arrJson.push_back(order.Price);
arrJson.push_back(order.Amount);
arrJson.push_back(order.DealAmount);
arrJson.push_back(order.AvgPrice);
arrJson.push_back(order.Status);
arrJson.push_back(order.Type);
arrJson.push_back(order.Offset);
arrJson.push_back(order.ContractType);
tbl["rows"].push_back(arrJson);
}
tbls.push_back(tbl);
}
LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
return;
}
Sử dụng đối tượng giao dịch tại chỗ để đặt lệnh mua cho nhiều cặp giao dịch khác nhau ở một nửa giá hiện tại, và sau đó truy vấn thông tin lệnh đang tồn tại.
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
function main() {
var arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]
for (var symbol of arrSymbol) {
var t = exchange.GetTicker(symbol)
exchange.CreateOrder(symbol, "buy", t.Last / 2, 1)
exchange.CreateOrder(symbol, "sell", t.Last * 2, 1)
}
var defaultOrders = exchange.GetOrders()
var swapOrders = exchange.GetOrders("USDT.swap")
var futuresOrders = exchange.GetOrders("USDT.futures")
var btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap")
var tbls = []
var arr = [defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders]
var tblDesc = ["defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"]
for (var index in arr) {
var orders = arr[index]
var tbl = {type: "table", title: tblDesc[index], 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])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
// Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''
import json
def main():
arrSymbol = ["BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]
for symbol in arrSymbol:
t = exchange.GetTicker(symbol)
exchange.CreateOrder(symbol, "buy", t["Last"] / 2, 1)
exchange.CreateOrder(symbol, "sell", t["Last"] * 2, 1)
defaultOrders = exchange.GetOrders()
swapOrders = exchange.GetOrders("USDT.swap")
futuresOrders = exchange.GetOrders("USDT.futures")
btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap")
tbls = []
arr = [defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders]
tblDesc = ["defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"]
for index in range(len(arr)):
orders = arr[index]
tbl = {"type": "table", "title": tblDesc[index], "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], "rows": []}
for order in orders:
tbl["rows"].append([order["Symbol"], order["Id"], order["Price"], order["Amount"], order["DealAmount"], order["AvgPrice"], order["Status"], order["Type"], order["Offset"], order["ContractType"]])
tbls.append(tbl)
LogStatus("`" + json.dumps(tbls) + "`")
return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
void main() {
auto arrSymbol = {"BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};
for (const auto& symbol : arrSymbol) {
auto t = exchange.GetTicker(symbol);
exchange.CreateOrder(symbol, "buy", t.Last / 2, 1);
exchange.CreateOrder(symbol, "sell", t.Last * 2, 1);
}
auto defaultOrders = exchange.GetOrders();
auto swapOrders = exchange.GetOrders("USDT.swap");
auto futuresOrders = exchange.GetOrders("USDT.futures");
auto btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap");
json tbls = R"([])"_json;
std::vector<std::vector<Order>> arr = {defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders};
std::string tblDesc[] = {"defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"};
for (int index = 0; index < arr.size(); index++) {
auto orders = arr[index];
json tbl = R"({
"type": "table",
"cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"],
"rows": []
})"_json;
tbl["title"] = tblDesc[index];
for (const auto& order : orders) {
json arrJson = R"([])"_json;
arrJson.push_back(order.Symbol);
arrJson.push_back(to_string(order.Id)); // The Id attribute type in the Order structure is TId, which is encoded using a C++ function to_string built into the FMZ platform.
arrJson.push_back(order.Price);
arrJson.push_back(order.Amount);
arrJson.push_back(order.DealAmount);
arrJson.push_back(order.AvgPrice);
arrJson.push_back(order.Status);
arrJson.push_back(order.Type);
arrJson.push_back(order.Offset);
arrJson.push_back(order.ContractType);
tbl["rows"].push_back(arrJson);
}
tbls.push_back(tbl);
}
LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
return;
}
Sử dụng các đối tượng trao đổi tương lai để đặt lệnh cho nhiều cặp giao dịch và mã hợp đồng khác nhau. Đặt lệnh ở mức giá xa với giá đối tác, giữ lệnh trong trạng thái chưa hoàn thành và truy vấn lệnh theo nhiều cách.
function main() {
var orders = exchange.GetOrders("BTC_USDT") // Examples of spot products
// var orders = exchange.GetOrders("BTC_USDT.swap") // Examples of futures products
Log("orders:", orders)
}
def main():
orders = exchange.GetOrders("BTC_USDT") # Examples of spot products
# orders = exchange.GetOrders("BTC_USDT.swap") # Examples of futures products
Log("orders:", orders)
void main() {
auto orders = exchange.GetOrders("BTC_USDT"); // Examples of spot products
// auto orders = exchange.GetOrders("BTC_USDT.swap"); // Examples of futures products
Log("orders:", orders);
}
Khi gọi choexchange.GetOrders()
chức năng, đi vàoSymbol
tham số để yêu cầu dữ liệu lệnh cho một cặp giao dịch cụ thể và mã hợp đồng.
TrongGetOrders
chức năng, các kịch bản sử dụng của tham số biểu tượng được tóm tắt như sau:
Phân loại đối tượng Exchange | biểu tượng Parameter | Phạm vi truy vấn | Nhận xét |
---|---|---|---|
Địa điểm | Không vượt qua tham số biểu tượng | Tìm kiếm tất cả các cặp giao dịch tại chỗ | Đối với tất cả các kịch bản gọi, nếu giao diện trao đổi không hỗ trợ nó, một lỗi sẽ được báo cáo và một giá trị null sẽ được trả về. |
Địa điểm | Xác định loại giao dịch, tham số biểu tượng là: |
Tìm kiếm cặp giao dịch BTC_USDT đã chỉ định | Đối với các đối tượng trao đổi tại chỗ, định dạng tham số biểu tượng là: |
Tiền tương lai | Không vượt qua tham số biểu tượng | Tìm kiếm tất cả các sản phẩm giao dịch trong phạm vi kích thước cặp giao dịch và mã hợp đồng hiện tại | Nếu cặp giao dịch hiện tại là BTC_USDT và mã hợp đồng là swap, tất cả các hợp đồng vĩnh viễn được ký quỹ bằng USDT sẽ được truy vấn.GetOrders("USDT.swap") |
Tiền tương lai | Xác định loại giao dịch, tham số biểu tượng là: |
Tìm kiếm hợp đồng vĩnh viễn dựa trên USDT cho một BTC cụ thể | Đối với các đối tượng giao dịch tương lai, định dạng ký hiệu tham số là: sự kết hợp củacặp giao dịchvàmã hợp đồngđược xác định bởi nền tảng FMZ, được tách bởi các ký tự". . |
Tiền tương lai | Xác định phạm vi các sản phẩm giao dịch, tham số biểu tượng là: |
Tìm kiếm tất cả các hợp đồng vĩnh viễn dựa trên USDT | - |
Các sàn giao dịch tương lai hỗ trợ các tùy chọn | Không vượt qua tham số biểu tượng | Tìm kiếm tất cả các hợp đồng quyền chọn trong phạm vi kích thước cặp giao dịch hiện tại | Nếu cặp giao dịch hiện tại là BTC_USDT, hợp đồng được thiết lập thành hợp đồng quyền chọn, ví dụ, hợp đồng quyền chọn Binance: BTC-240108-40000-C |
Các sàn giao dịch tương lai hỗ trợ các tùy chọn | Xác định các sản phẩm giao dịch cụ thể | truy vấn hợp đồng tùy chọn được chỉ định | Ví dụ, đối với Binance Futures Exchange, tham số biểu tượng là: BTC_USDT.BTC-240108-40000-C |
Các sàn giao dịch tương lai hỗ trợ các tùy chọn | Xác định phạm vi các sản phẩm giao dịch, tham số biểu tượng là: |
Tìm kiếm tất cả các hợp đồng quyền chọn dựa trên USDT | - |
TrongGetOrders
chức năng, các giao dịch tương lai đối tượng truy vấn
phạm vi kích thước được tóm tắt như sau:
biểu tượng Parameter | Định nghĩa phạm vi yêu cầu | Nhận xét |
---|---|---|
USDT.swap | Phạm vi hợp đồng vĩnh viễn dựa trên USDT. | Đối với |
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. USDT.futures. USDT dựa trên hợp đồng giao hàng. ∙∙ USD.swap ∙ ∙ Dải tiền tệ dựa trên vĩnh cửu hợp đồng. USD.futures. Ranh giới giao hàng dựa trên tiền tệ hợp đồng. USDT.option. USDT-based options contract range. USD.option.Dân tệ dựa trên phạm vi hợp đồng tùy chọn. USDT.futures_combo Một loạt các sự kết hợp CFD. Futures_Deribit Exchange. Một loạt các hợp đồng phân phối ký quỹ hỗn hợp. Futures_Kraken Exchange. Một loạt các hợp đồng vĩnh cửu có biên độ hỗn hợp. Ứng dụng trao đổi tương lai
Khi tài khoản được đại diện bởi đối tượng trao đổiexchange
không có lệnh đang chờ trongphạm vi truy vấnhoặcCác công cụ giao dịch cụ thể(lệnh hoạt động trong trạng thái chưa được thực hiện), gọi hàm này trả về một mảng trống, tức là:[]
.
Các sàn giao dịch sau đây yêu cầu công cụ truyền vào tham số công cụ khi truy vấn các lệnh chưa hoàn thành hiện tại. Khi gọi hàm GetOrders với các sàn giao dịch này, nếu tham số công cụ không được truyền vào, chỉ yêu cầu các lệnh chưa hoàn thành của công cụ hiện tại, chứ không phải là các lệnh chưa hoàn thành của tất cả các công cụ (vì giao diện giao dịch không hỗ trợ điều này).
Zaif, MEXC, LBank, Korbit, Coinw, BitMart, Bithumb, BitFlyer, BigONE.
Các sàn giao dịch không hỗ trợexchange.GetOrders()
chức năng:
Tên chức năng | Không hỗ trợ trao đổi tại chỗ | Giao dịch tương lai không được hỗ trợ |
---|---|---|
GetOrders | – | Futures_Bibox |
{@struct/Order Order}, {@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}
Cácexchange.GetHistoryOrders()
chức năng được sử dụng để có được cặp giao dịch hiện tại, các lệnh lịch sử cho các hợp đồng; nó hỗ trợ xác định các loại giao dịch cụ thể.
Cácexchange.GetHistoryOrders()
hàm trả về một mảng cấu trúc {@struct/Order Order} nếu yêu cầu dữ liệu thành công, và null nếu yêu cầu thất bại.
{@struct/Order Order} mảng, giá trị không
exchange.GetHistoryOrders (() exchange.GetHistoryOrders (tượng hiệu) exchange.GetHistoryOrders (bản tượng, kể từ) exchange.GetHistoryOrders (( biểu tượng, từ, giới hạn) trao đổi.GetHistoryOrders (từ) exchange.GetHistoryOrders ((từ khi, giới hạn)
Cácsymbol
Các tham số được sử dụng để xác định các biểu tượng thương mại.BTC_USDT
Cặp giao dịch, ví dụ, khiexchange
là một đối tượng trao đổi tại chỗ, định dạng tham số chosymbol
làBTC_USDT
Nếu đó là một đối tượng giao dịch tương lai, lấy hợp đồng vĩnh viễn làm ví dụ, định dạng tham số chosymbol
là:BTC_USDT.swap
.
Nếu bạn đang truy vấn dữ liệu lệnh của hợp đồng quyền chọn, đặt tham sốsymbol
đến"BTC_USDT.BTC-240108-40000-C"
(lấy Binance Option BTC-240108-40000-C làm ví dụ).cặp giao dịchđược xác định bởi nền tảng FMZ và mã hợp đồng tùy chọn cụ thể được xác định bởi sàn giao dịch, được tách bằng ký tự
biểu tượng
sai
chuỗi
Cácsince
tham số được sử dụng để chỉ định thời gian bắt đầu của truy vấn trong milliseconds.
kể từ khi
sai
số
Cáclimit
tham số được sử dụng để xác định số lượng lệnh để truy vấn.
giới hạn
sai
số
function main() {
var historyOrders = exchange.GetHistoryOrders()
Log(historyOrders)
}
def main():
historyOrders = exchange.GetHistoryOrders()
Log(historyOrders)
void main() {
auto historyOrders = exchange.GetHistoryOrders();
Log(historyOrders);
}
symbol
, since
, limit
các tham số không được chỉ định, truy vấn mặc định là cặp giao dịch hiện tại, các lệnh lịch sử của hợp đồng. truy vấn các lệnh lịch sử trong một phạm vi nhất định gần nhất với thời gian hiện tại, phạm vi truy vấn phụ thuộc vào phạm vi truy vấn duy nhất của giao diện trao đổi.symbol
Nếu tham số được chỉ định, truy vấn lịch sử lệnh cho loại giao dịch được thiết lập.since
tham số được chỉ định, truy vấn theo hướng thời gian hiện tại sử dụngsince
Thời gian đóng dấu là thời gian bắt đầu.limit
tham số được chỉ định, truy vấn được trả về sau một số lượng đủ các mục.Các sàn giao dịch không hỗ trợexchange.GetHistoryOrders()
chức năng:
Tên chức năng | Không hỗ trợ trao đổi tại chỗ | Giao dịch tương lai không được hỗ trợ |
---|---|---|
GetHistoryOrders | Zaif / Upbit / Coincheck / Bitstamp / Bithumb / BitFlyer / BigONE | Futures_dYdX / Futures_Bibox / Futures_ApolloX |
{@struct/Order Order}, {@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}
exchange.SetPrecision()
chức năng được sử dụng để thiết lập độ chính xác củaexchange
đối tượng trao đổigiá cảvàSố tiền đặt hàng, sau khi cài đặt, hệ thống sẽ bỏ qua dữ liệu dư thừa tự động.
exchange.SetPrecision ((pricePrecision, amountPrecision)
CácpricePrecision
tham số được sử dụng để kiểm soát độ chính xác của dữ liệu giá.
Giá chính xác
đúng
số
CácamountPrecision
tham số được sử dụng để kiểm soát độ chính xác của số lượng dữ liệu được đặt hàng.
số tiềnChính xác
đúng
số
function main(){
// Set the decimal precision of price to 2 bits, and the decimal precision of variety order amount to 3 bits
exchange.SetPrecision(2, 3)
}
def main():
exchange.SetPrecision(2, 3)
void main() {
exchange.SetPrecision(2, 3);
}
Hệ thống backtesting không hỗ trợ chức năng này và độ chính xác số của hệ thống backtesting được xử lý tự động.
{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}
Đặt tỷ giá hối đoái hiện tại của đối tượng trao đổi.
exchange.SetRate (tỷ lệ)
Cácrate
tham số được sử dụng để xác định tỷ giá hối đoái chuyển đổi.
tỷ lệ
đúng
số
function main(){
Log(exchange.GetTicker())
// Set exchange rate conversion
exchange.SetRate(7)
Log(exchange.GetTicker())
// Set to 1, no conversion
exchange.SetRate(1)
}
def main():
Log(exchange.GetTicker())
exchange.SetRate(7)
Log(exchange.GetTicker())
exchange.SetRate(1)
void main() {
Log(exchange.GetTicker());
exchange.SetRate(7);
Log(exchange.GetTicker());
exchange.SetRate(1);
}
Nếu giá trị tỷ giá hối đoái đã được thiết lập bằng cách sử dụngexchange.SetRate()
Sau đó tất cả các thông tin giá như tickers, chiều sâu, giá đặt hàng, vv cho trao đổi đại diện cho hiện tạiexchange
đối tượng trao đổi sẽ được chuyển đổi bằng cách nhân nó với tỷ giá hối đoái đặt ra của 7.exchange
là một trao đổi với đô la Mỹ như là đồng tiền mệnh giá.exchange.SetRate(7)
, tất cả giá trên thị trường trực tiếp sẽ được chuyển đổi thành giá gần vớiCNYmệnh giá bằng cách nhân với 7.
{@fun/Market/exchange.GetRate exchange.GetRate}
Cácexchange.IO()
hàm được sử dụng cho các cuộc gọi giao diện khác liên quan đến đối tượng trao đổi.
Cácexchange.IO()
hàm gọi các giao diện khác liên quan đến đối tượng trao đổi, trả về dữ liệu phản hồi được yêu cầu trên một cuộc gọi thành công và nó trả về null trên một cuộc gọi thất bại.
chuỗi, số, bool, đối tượng, mảng, null, và bất kỳ loại khác được hỗ trợ bởi hệ thống
exchange.IO(k,...args)
Cáck
tham số được sử dụng để thiết lập loại cuộc gọi, với các giá trị tùy chọn"api"
, "currency"
, "base"
, "trade_margin"
, "trade_normal"
, "public_base"
, "mbase"
, selfTradePreventionMode
, simulate
, cross
, dual
, unified
và như vậy.
k
đúng
chuỗi
Các thông số mở rộng, được thông qua theo kịch bản gọi cụ thể,arg
Các tham số có thể được truyền nhiều hơn một.exchange.IO()
Số lượng và loại tham số cho cácexchange.IO()
chức năng là không xác định.
arg
đúng
chuỗi, số, bool, đối tượng, mảng, null và bất kỳ loại nào khác được hỗ trợ bởi hệ thống
function main() {
var arrOrders = [
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
]
// Call exchange.IO to access the exchange's bulk order interface directly
var ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", JSON.stringify(arrOrders))
Log(ret)
}
import json
def main():
arrOrders = [
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
]
ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", json.dumps(arrOrders))
Log(ret)
void main() {
json arrOrders = R"([
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
{"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
])"_json;
auto ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", arrOrders.dump());
Log(ret);
}
Sử dụngexchange.IO("api", httpMethod, resource, params, raw)
hình thức gọi củaexchange.IO()
Điều này sẽ cho phép bạn mở rộng chức năng không được thêm vào nền tảng FMZ.POST
yêu cầu không yêu cầu bạn phải lo lắng về mã hóa, ký kết, hoặc xác minh các thông số, mà đã được xử lý bởi FMZ ở phía dưới, miễn là bạn điền vào các thông số tương ứng.OKX Exchangehợp đồng tương lai, và sử dụng các thông sốraw
để thông qua các thông số thứ tự:
var amount = 1
var price = 10
var basecurrency = "ltc"
function main () {
// Note that both amount.toString() and price.toString() have a ' character on the left and right side
var message = "symbol=" + basecurrency + "&amount='" + amount.toString() + "'&price='" + price.toString() + "'&side=buy" + "&type=limit"
var id = exchange.IO("api", "POST", "/v1/order/new", message)
}
amount = 1
price = 10
basecurrency = "ltc"
def main():
message = "symbol=" + basecurrency + "&amount='" + str(amount) + "'&price='" + str(price) + "'&side=buy" + "&type=limit"
id = exchange.IO("api", "POST", "/v1/order/new", message)
void main() {
auto amount = 1.0;
auto price = 10.0;
auto basecurrency = "ltc";
string message = format("symbol=%s&amount=\"%.1f\"&price=\"%.1f\"&side=buy&type=limit", basecurrency, amount, price);
auto id = exchange.IO("api", "POST", "/v1/order/new", message);
}
Nếu giá trị khóa trongparams
tham số (tức là, tham số yêu cầu HTTP) là một chuỗi, nó cần phải được viết bằng dấu ngoặc kép đơn (tức là, ký hiệu ') xung quanh giá trị tham số để bọc giá trị tham số.
function main() {
var ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
Log(ret)
}
def main():
ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
Log(ret)
void main() {
auto ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC");
Log(ret);
}
Nó hỗ trợ truyền vào đầy đủ url tham số mà có thể bỏ qua các hoạt động của chuyển đổi địa chỉ cơ sở (gọiexchange.SetBase()
chức năng).
function main(){
var ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
Log(ret)
}
def main():
ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
Log(ret)
void main() {
auto ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT");
Log(ret);
}
Ví dụ về một cuộc gọi mà không có tham sốraw
:
function main() {
// For example, if you set the current trading pair of the exchange object to BTC_USDT at the beginning of the live trading, print the current trading pair tickers
Log(exchange.GetTicker())
// Switch the trading pair to LTC_BTC
exchange.IO("currency", "LTC_BTC")
Log(exchange.GetTicker())
}
def main():
Log(exchange.GetTicker())
exchange.IO("currency", "LTC_BTC")
Log(exchange.GetTicker())
void main() {
Log(exchange.GetTicker());
exchange.IO("currency", "LTC_BTC");
Log(exchange.GetTicker());
}
Chuyển đổi cặp giao dịch của trao đổi hiện tại, để nó sẽ chuyển đổi cặp giao dịch được cấu hình bởi mãkhi tạo giao dịch trực tiếphoặctại backtest.
function main () {
// exchanges[0] is the first exchange object added when the live trading is created
exchanges[0].IO("base", "https://api.huobi.pro")
}
def main():
exchanges[0].IO("base", "https://api.huobi.pro")
void main() {
exchanges[0].IO("base", "https://api.huobi.pro");
}```
For example, the default base address when the exchange object is wrapped is ```https://api.huobipro.com```, and when you need to switch to ```https://api.huobi.pro```, use the following code to switch:
```javascript
function main() {
exchange.SetBase("https://api.bitfinex.com")
exchange.IO("mbase", "https://api-pub.bitfinex.com")
}
def main():
exchange.SetBase("https://api.bitfinex.com")
exchange.IO("mbase", "https://api-pub.bitfinex.com")
void main() {
exchange.SetBase("https://api.bitfinex.com");
exchange.IO("mbase", "https://api-pub.bitfinex.com");
}
Đối với các sàn giao dịch với địa chỉ cơ sở khác nhau cho giao diện ticker và giao diện giao dịch, ví dụ, Bitfinex Futures có hai địa chỉ, một cho giao diện ticker và một cho giao diện giao dịch.exchange.SetBase("xxx")
. Bitfinex tương lai chuyển đổi địa chỉ cơ sở giao diện công cộng sử dụngexchange.IO("mbase", "xxx")
.
I. Đối với các sàn giao dịch tập trung vào tiền điện tử, các cuộc gọi giao diện API khác không được đóng gói đồng nhất, với tham sốk
được thiết lập thành"api"
:
exchange.IO("api", httpMethod, resource, params, raw)
POST
, GET
, vvURL
.Cácexchange.IO("api", httpMethod, resource, params, raw)
function call sẽ truy cập giao diện trao đổi và trả về null nếu cuộc gọi thất bại và xảy ra lỗi.
Chỉ có thương mại thực sự hỗ trợ gọiexchange.IO("api", httpMethod, resource, params, raw)
function.
II. Đối với việc chuyển đổi cặp giao dịch, tham sốk
được thiết lập thành"currency"
:
exchange.IO("currency", currency)
Tiền tệ: Parameter là một kiểu chuỗi với định dạng chữ cái lớn đồng nhất, sử dụng dấu chân để táchbaseCurrency
từquoteCurrency
, nhưBTC_USDT
.
ETH_BTC
chỉ có thể chuyển sangLTC_BTC
, không phảiLTC_USDT
.exchange.IO("currency", currency)
để đổi cặp giao dịch.III. Được sử dụng để chuyển đổi chế độ tài khoản đòn bẩy đối tượng trao đổi giao dịch tiền điện tử tại chỗ:
k
được thiết lập thành"trade_margin"
để chuyển sang chế độ tài khoản đòn bẩy tại chỗ. đặt lệnh và nhận tài sản tài khoản sẽ truy cập giao diện đòn bẩy tại chỗ của sàn giao dịch.
Nếu sàn giao dịch phân biệt giữa ký quỹ đầy đủ và ký quỹ tách biệt trong đòn bẩy tại chỗ, sử dụng:exchange.IO("trade_super_margin")
để chuyển sang ký quỹ đầy đủ cho tài khoản đòn bẩy, vàexchange.IO("trade_margin")
để chuyển sang ký quỹ tách biệt cho tài khoản đòn bẩy.k
được thiết lập thành"trade_normal"
để chuyển trở lại chế độ tài khoản giao ngay bình thường.Các sàn giao dịch tại chỗ hỗ trợ chuyển đổi giữa các mô hình tài khoản đòn bẩy:
Chuyển đổi | Nhận xét đặc biệt |
---|---|
OKX | Các cặp giao dịch trong chế độ tài khoản đòn bẩy khác với các cặp giao dịch bình thường, một số cặp giao dịch có thể không có chúng.exchange.IO("trade_super_margin") để chuyển sang vị trí đầy đủ cho các tài khoản đòn bẩy và sử dụngexchange.IO("trade_margin") để chuyển sang vị trí theo vị trí.trade_normal để chuyển sang chế độ điểm bình thường.exchange.IO("tdMode", "cross") để chỉ định trực tiếp chế độ đòn bẩy. |
Huobi | Các cặp giao dịch chế độ tài khoản đòn bẩy khác với các cặp giao dịch bình thường, một số cặp giao dịch có thể không có chúng. Có toàn bộ vị trí và vị trí theo vị trí trong tài khoản đòn bẩy Huobi. Sử dụngtrade_margin để chuyển sang tài khoản đòn bẩy theo vị trí, sử dụngtrade_super_margin để chuyển sang tài khoản đòn bẩy vị trí đầy đủ.trade_normal để chuyển sang chế độ tiền tệ-tiền tệ bình thường. |
Binance | Chế độ tài khoản đòn bẩy được chia thành vị trí theo vị trí và vị trí đầy đủ, sử dụngtrade_margin để chuyển sang vị trí theo vị trí, sử dụngtrade_super_margin để chuyển sang vị trí đầy đủ, sử dụngtrade_normal để chuyển sang chế độ tiền tệ-tiền tệ bình thường. |
GateIO | Chế độ tài khoản đòn bẩy được chia thành vị trí theo vị trí và vị trí đầy đủ, sử dụngtrade_margin để chuyển sang vị trí theo vị trí, sử dụngtrade_super_margin để chuyển sang vị trí đầy đủ, sử dụngtrade_normal để chuyển sang chế độ tiền tệ-tiền tệ bình thường. |
AscendEx | Sử dụngexchange.IO("trade_margin") để chuyển sang chế độ tài khoản đòn bẩy vàexchange.IO("trade_normal") để chuyển trở lại chế độ tài khoản bình thường. |
WOO | Sử dụngexchange.IO("trade_margin") để chuyển sang chế độ tài khoản đòn bẩy vàexchange.IO("trade_normal") để chuyển trở lại chế độ tài khoản bình thường. |
CoinEx | Sử dụngexchange.IO("trade_margin") để chuyển sang chế độ tài khoản đòn bẩy vàexchange.IO("trade_normal") để chuyển trở lại chế độ tài khoản bình thường. |
IV. Các chức năng chuyển đổi khác:Nhìn xem.exchange.IO()
chức năng choCác chức năng chuyển đổi kháctrong Hướng dẫn sử dụng.
{@fun/NetSettings/exchange.SetBase exchange.SetBase}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@var EXCHANGE_OP_IO_CONTROL}
Cácexchange.Log()
function được sử dụng để xuất bản nhật ký đặt hàng và rút tiền trong khu vực cột nhật ký. Khi được gọi, không có lệnh được đặt, chỉ có nhật ký giao dịch được xuất và ghi lại.
giao dịch.Log ((đơn đặt hàngLoại, giá, số tiền) trao đổi.Log ((đơn đặt hàngLoại, giá, số tiền,... args)
CácorderType
tham số được sử dụng để thiết lập kiểu nhật ký đầu ra, các giá trị tùy chọn là {@var/LOG_TYPE/LOG_TYPE_BUY LOG_TYPE_BUY}, {@var/LOG_TYPE/LOG_TYPE_SELL LOG_TYPE_SELL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}.
orderLoại
đúng
số
Cácprice
tham số được sử dụng để thiết lập giá hiển thị trong nhật ký đầu ra.
giá
đúng
số
Cácamount
tham số được sử dụng để thiết lập số lượng đơn đặt hàng được hiển thị trong nhật ký đầu ra.
số tiền
đúng
số
Các thông số mở rộng có thể xuất thông tin kèm theo vào nhật ký này,arg
Các thông số có thể được truyền qua nhiều hơn một.
arg
sai
chuỗi, số, bool, đối tượng, mảng, null và bất kỳ loại nào khác được hỗ trợ bởi hệ thống
var id = 123
function main() {
// Order type buy, price 999, amount 0.1
exchange.Log(LOG_TYPE_BUY, 999, 0.1)
// Cancel the order
exchange.Log(LOG_TYPE_CANCEL, id)
}
id = 123
def main():
exchange.Log(LOG_TYPE_BUY, 999, 0.1)
exchange.Log(LOG_TYPE_CANCEL, id)
void main() {
auto id = 123;
exchange.Log(LOG_TYPE_BUY, 999, 0.1);
exchange.Log(LOG_TYPE_CANCEL, id);
}
Sử dụngexchange.Log(orderType, price, amount)
Một trong những kịch bản phổ biến nhất là sử dụng {@fun/Trade/exchange.IOexchange.IO} chức năng để truy cập giao diện trao đổi để tạo ra các lệnh có điều kiện, nhưng sử dụngexchange.IO()
chức năng không xuất thông tin nhật ký giao dịch trong bản ghi nhật ký giao dịch trực tiếp.exchange.Log()
chức năng có thể được sử dụng để bổ sung vào nhật ký đầu ra để ghi lại thông tin đặt hàng, và điều tương tự cũng đúng với các hoạt động rút lệnh.
KhiorderType
tham số làLOG_TYPE_CANCEL
, cácprice
tham số là thứ tự Id của lệnh rút, được sử dụng để in nhật ký rút khi lệnh được rút trực tiếp bằng cách sử dụngexchange.IO()
chức năng.exchange.Log()
function là một hàm thành viên của đối tượng trao đổi {@var/EXCHANGE exchange}, khác với hàm toàn cầu {@fun/Log Log}.
{@fun/Log Log}, {@var/EXCHANGE exchange}, {@var/LOG_TYPE/LOG_TYPE_BUY LOG_TYPE_BUY}, {@var/LOG_TYPE/LOG_TYPE_SELL LOG_TYPE_SELL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}
Cácexchange.Encode()
chức năng được sử dụng để tính toán mã hóa chữ ký.
Cácexchange.Encode()
hàm trả về mã hóa giá trị băm được tính toán.
chuỗi
exchange.Encode ((algo, inputFormat, outputFormat, data) exchange.Encode ((algo, inputFormat, outputFormat, data, keyFormat, key)
Các thông sốalgo
là thuật toán được sử dụng để tính toán mã hóa. Các cài đặt được hỗ trợ là: algo
cũng hỗ trợ: algo
cũng hỗ trợ: thuật toán algo
có thể được viết như ed25519.seed
tính toán.
algo
đúng
chuỗi
Sử dụng để xác định định dạng dữ liệu củadata
các tham số.inputFormat
tham số có thể được đặt thành một trong: hex
được mã hóa, base64
được mã hóa, và outputFormat
tham số hỗ trợ các thiết lập sau: hex
được mã hóa, base64
được mã hóa, và data
là dữ liệu được xử lý.
dữ liệu
đúng
chuỗi
Sử dụng để xác định định dạng dữ liệu củakey
các tham số.key
tham số có thể được đặt thành một trong: hex
được mã hóa, base64
được mã hóa, và key
tham số được sử dụng để chỉ định khóa được sử dụng trong tính toán chữ ký, và nó có thể được sử dụng như một chuỗi văn bản thuần túy."{{accesskey}}"
, "{{secretkey}}"
để đề cập đếnaccessKey
vàsecretKey
được cấu hình trong {@var/EXCHANGE exchange} đối tượng trao đổi.
chìa khóa
sai
chuỗi
function main() {
var APIKEY = "your Access Key(Bitmex API ID)"
var expires = parseInt(Date.now() / 1000) + 10
var signature = exchange.Encode("sha256", "string", "hex", "GET/realtime" + expires, "hex", "{{secretkey}}")
var client = Dial("wss://www.bitmex.com/realtime", 60)
var auth = JSON.stringify({args: [APIKEY, expires, signature], op: "authKeyExpires"})
var pos = 0
client.write(auth)
client.write('{"op": "subscribe", "args": "position"}')
while (true) {
bitmexData = client.read()
if(bitmexData.table == 'position' && pos != parseInt(bitmexData.data[0].currentQty)){
Log('position change', pos, parseInt(bitmexData.data[0].currentQty), '@')
pos = parseInt(bitmexData.data[0].currentQty)
}
}
}
import time
def main():
APIKEY = "your Access Key(Bitmex API ID)"
expires = int(time.time() + 10)
signature = exchange.Encode("sha256", "string", "hex", "GET/realtime" + expires, "hex", "{{secretkey}}")
client = Dial("wss://www.bitmex.com/realtime", 60)
auth = json.dumps({"args": [APIKEY, expires, signature], "op": "authKeyExpires"})
pos = 0
client.write(auth)
client.write('{"op": "subscribe", "args": "position"}')
while True:
bitmexData = json.loads(client.read())
if "table" in bitmexData and bitmexData["table"] == "position" and len(bitmexData["data"]) != 0 and pos != bitmexData["data"][0]["currentQty"]:
Log("position change", pos, bitmexData["data"][0]["currentQty"], "@")
pos = bitmexData["data"][0]["currentQty"]
void main() {
auto APIKEY = "your Access Key(Bitmex API ID)";
auto expires = Unix() + 10;
auto signature = exchange.Encode("sha256", "string", "hex", format("GET/realtime%d", expires), "hex", "{{secretkey}}");
auto client = Dial("wss://www.bitmex.com/realtime", 60);
json auth = R"({"args": [], "op": "authKeyExpires"})"_json;
auth["args"].push_back(APIKEY);
auth["args"].push_back(expires);
auth["args"].push_back(signature);
auto pos = 0;
client.write(auth.dump());
client.write("{\"op\": \"subscribe\", \"args\": \"position\"}");
while(true) {
auto bitmexData = json::parse(client.read());
if(bitmexData["table"] == "position" && bitmexData["data"][0].find("currentQty") != bitmexData["data"][0].end() && pos != bitmexData["data"][0]["currentQty"]) {
Log("test");
Log("position change", pos, bitmexData["data"][0]["currentQty"], "@");
pos = bitmexData["data"][0]["currentQty"];
}
}
}
Ví dụ về việc đẩy thay đổi vị trí BitMEX (chỉ dẫn wss):
Chỉ có thương mại thực sự hỗ trợ gọiexchange.Encode()
chức năng."{{accesskey}}"
, "{{secretkey}}"
tham chiếu chỉ có giá trị khiexchange.Encode()
chức năng được sử dụng.
{@var/EXCHANGE exchange}, {@fun/Global/Encode Encode}
Các chức năng hỗ trợ không đồng bộ đa luồng có thể biến các hoạt động của tất cả các chức năng được hỗ trợ thành thực thi đồng bộ không đồng bộ.
Cácexchange.Go()
hàm trả về một đối tượng đồng thời ngay lập tức, và bạn có thể sử dụngwait()
phương pháp của đối tượng đồng thời đó để có được kết quả của yêu cầu đồng thời.
đối tượng
trao đổi.Go ( phương pháp) trao đổi.Go ((phương pháp,... args)
Cácmethod
tham số được sử dụng để chỉ định tên của hàm đồng thời. Lưu ý rằng tham số là một chuỗi tên hàm, không phải là tham chiếu hàm.
phương pháp
đúng
chuỗi
Các thông số đếnđồng thời thực hiện các chức năng, có thể có nhiều hơn một tham sốarg
. Loại và số tham sốarg
phụ thuộc vào các thông số củachức năng thực thi đồng thời.
arg
sai
chuỗi, số, bool, đối tượng, mảng, hàm, null, và tất cả các loại khác được hỗ trợ bởi hệ thống
function main(){
// The following four operations are concurrently executed asynchronously by multiple threads and do not take time and return immediately
var a = exchange.Go("GetTicker")
var b = exchange.Go("GetDepth")
var c = exchange.Go("Buy", 1000, 0.1)
var d = exchange.Go("GetRecords", PERIOD_H1)
// Call the wait method to wait for the return of the ticker results asynchronously
var ticker = a.wait()
// Returns the depth, or null if it fails
var depth = b.wait()
// return order number, limited to 1 second timeout, if timeout, returns undefined, the object can continue to call wait if the last wait timeout
var orderId = c.wait(1000)
if(typeof(orderId) == "undefined") {
// Timeout, reacquire
orderId = c.wait()
}
var records = d.wait()
}
def main():
a = exchange.Go("GetTicker")
b = exchange.Go("GetDepth")
c = exchange.Go("Buy", 1000, 0.1)
d = exchange.Go("GetRecords", PERIOD_H1)
ticker, ok = a.wait()
depth, ok = b.wait()
orderId, ok = c.wait(1000)
if ok == False:
orderId, ok = c.wait()
records, ok = d.wait()
void main() {
auto a = exchange.Go("GetTicker");
auto b = exchange.Go("GetDepth");
auto c = exchange.Go("Buy", 1000, 0.1);
auto d = exchange.Go("GetRecords", PERIOD_H1);
Ticker ticker;
Depth depth;
Records records;
TId orderId;
a.wait(ticker);
b.wait(depth);
if(!c.wait(orderId, 300)) {
c.wait(orderId);
}
d.wait(records);
}
Exchange.Go()
ví dụ sử dụng hàm, để xác địnhundefined
sử dụngtypeof(xx) === "undefined"
, bởi vìnull == undefined
là hợp lệ trong JavaScript.
function main() {
var d = exchange.Go("GetRecords", PERIOD_H1)
// Waiting for K-line results
var records = d.wait()
// Here waits an asynchronous operation that has been waited and finished, it will return null, and log the error message
var ret = d.wait()
}
def main():
d = exchange.Go("GetRecords", PERIOD_H1)
records, ok = d.wait()
ret, ok = d.wait()
void main() {
auto d = exchange.Go("GetRecords", PERIOD_H1);
Records records;
d.wait(records);
Records ret;
d.wait(ret);
}
Gọi chowait()
phương pháp trên một đối tượng đồng thời đã được phát hành sẽ báo cáo một lỗi:
function main() {
while(true) {
var beginTS = new Date().getTime()
var arrRoutine = []
var arrTicker = []
var arrName = []
for(var i = 0; i < exchanges.length; i++) {
arrRoutine.push(exchanges[i].Go("GetTicker"))
arrName.push(exchanges[i].GetName())
}
for(var i = 0; i < arrRoutine.length; i++) {
arrTicker.push(arrRoutine[i].wait())
}
var endTS = new Date().getTime()
var tbl = {
type: "table",
title: "ticker",
cols: ["index", "name", "latest-deal-price"],
rows: []
}
for(var i = 0; i < arrTicker.length; i++) {
tbl.rows.push([i, arrName[i], arrTicker[i].Last])
}
LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", endTS - beginTS, "millisecond", "\n", "`" + JSON.stringify(tbl) + "`")
Sleep(500)
}
}
import time
import json
def main():
while True:
beginTS = time.time()
arrRoutine = []
arrTicker = []
arrName = []
for i in range(len(exchanges)):
arrRoutine.append(exchanges[i].Go("GetTicker"))
arrName.append(exchanges[i].GetName())
for i in range(len(exchanges)):
ticker, ok = arrRoutine[i].wait()
arrTicker.append(ticker)
endTS = time.time()
tbl = {
"type": "table",
"title": "ticker",
"cols": ["index", "name", "latest-deal-price"],
"rows": []
}
for i in range(len(arrTicker)):
tbl["rows"].append([i, arrName[i], arrTicker[i]["Last"]])
LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", endTS - beginTS, "second", "\n", "`" + json.dumps(tbl) + "`")
Sleep(500)
void main() {
while(true) {
int length = exchanges.size();
auto beginTS = UnixNano() / 1000000;
Ticker arrTicker[length] = {};
string arrName[length] = {};
// Note that to add several exchange objects, several exchanges[n].Go functions have to be executed here, this example is to add four exchange objects, the details can be modified
auto r0 = exchanges[0].Go("GetTicker");
auto r1 = exchanges[1].Go("GetTicker");
auto r2 = exchanges[2].Go("GetTicker");
auto r3 = exchanges[3].Go("GetTicker");
GoObj *arrRoutine[length] = {&r0, &r1, &r2, &r3};
for(int i = 0; i < length; i++) {
arrName[i] = exchanges[i].GetName();
}
for(int i = 0; i < length; i++) {
Ticker ticker;
arrRoutine[i]->wait(ticker);
arrTicker[i] = ticker;
}
auto endTS = UnixNano() / 1000000;
json tbl = R"({
"type": "table",
"title": "ticker",
"cols": ["index", "name", "latest-deal-price"],
"rows": []
})"_json;
for(int i = 0; i < length; i++) {
json arr = R"(["", "", ""])"_json;
arr[0] = format("%d", i);
arr[1] = arrName[i];
arr[2] = format("%f", arrTicker[i].Last);
tbl["rows"].push_back(arr);
}
LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", format("%d", endTS - beginTS), "millisecond", "\n", "`" + tbl.dump() + "`");
Sleep(500);
}
}
Truy cập đồng thời đến nhiều ticker trao đổi:
function main() {
/*
Testing with OKX futures order interface
POST /api/v5/trade/order
*/
var beginTS = new Date().getTime()
var param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
var ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
var id1 = ret1.wait()
var id2 = ret2.wait()
var id3 = ret3.wait()
var endTS = new Date().getTime()
Log("id1:", id1)
Log("id2:", id2)
Log("id3:", id3)
Log("Concurrent order placement time consumption:", endTS - beginTS, "millisecond")
}
import time
import json
def main():
beginTS = time.time()
param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
id1, ok1 = ret1.wait()
id2, ok2 = ret2.wait()
id3, ok3 = ret3.wait()
endTS = time.time()
Log("id1:", id1)
Log("id2:", id2)
Log("id3:", id3)
Log("Concurrent order placement time consumption:", endTS - beginTS, "second")
void main() {
auto beginTS = UnixNano() / 1000000;
json param = R"({"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"})"_json;
auto ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
auto ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
auto ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
json id1 = R"({})"_json;
json id2 = R"({})"_json;
json id3 = R"({})"_json;
ret1.wait(id1);
ret2.wait(id2);
ret3.wait(id3);
auto endTS = UnixNano() / 1000000;
Log("id1:", id1);
Log("id2:", id2);
Log("id3:", id3);
Log("Concurrent order placement time consumption:", endTS - beginTS, "millisecond");
}
Các cuộc gọi đồng thờiexchange.IO("api", ...)
chức năng:
Chức năng này chỉ tạo ra các nhiệm vụ thực thi đa luồng khi chạy trong giao dịch thực tế, backtesting không hỗ trợ thực thi nhiệm vụ đồng thời đa luồng (backtesting có sẵn, nhưng vẫn được thực hiện theo trình tự).
Sau khiexchange.Go()
hàm trả về một đối tượng,wait()
hàm được gọi thông qua đối tượng đó để có được dữ liệu được trả về bởi các chuỗi.wait()
hàm phải được gọi để có được dữ liệu trước khi các chủ đề sẽ được phát hành tự động.wait()
Phương pháp này được sử dụng để xác định các hàm trong một trình duyệt, nhưng nếu không có chức năng được chỉ định, thì thread sẽ không tự động được phát hành ngay cả khi xảy ra thời gian hết. Kết quả của thread phải được lấy trước khi nó được phát hành tự động (bất kể thành công hoặc thất bại của cuộc gọi giao diện cho truy cập đồng thời).wait()
chức năng bất kể việc thực thi thành công hay thất bại, và các tài nguyên của các chuỗi được yêu cầu bởi cácexchange.Go()
chức năng phải được giải phóng tự động bởi docker.
Cácwait()
phương pháp hỗ trợ một tham số timeout:
Không có một tham số thời gian, đó là,wait()
, hoặc với tham số timeout là 0, tức là,wait(0)
.wait()
các khối chức năng và chờ cho đến khi chuỗi đồng thời kết thúc chạy, trả về kết quả của việc thực hiện chuỗi đồng thời.
Đặt tham số timeout -1, tức làwait(-1)
.wait()
hàm trả về ngay lập tức, với các giá trị trả về khác nhau cho các ngôn ngữ lập trình khác nhau, xem phần phụ này cho một ví dụ gọi.
Đặt tham số thời gian dừng cụ thể,wait(300)
, vàwait()
Chức năng sẽ chờ tối đa 300 mili giây trước khi quay lại.
Nếu kết quả trả về cuối cùngwait()
chức năng không đạt được, các tài nguyên chủ đề sẽ không được giải phóng tự động, điều này sẽ dẫn đến sự tích lũy các chủ đề được yêu cầu và hơn 2000 sẽ báo cáo lỗi:"too many routine wait, max is 2000"
.
Các chức năng được hỗ trợ:GetTicker
, GetDepth
, GetTrades
, GetRecords
, GetAccount
, GetOrders
, GetOrder
, CancelOrder
, Buy
, Sell
, GetPositions
, IO
. Tất cả các chức năng này được thực hiện dựa trên đối tượng trao đổi {@var/EXCHANGE exchange} hiện tại khi được gọi đồng thời.
Sự khác biệt giữa ngôn ngữ Python và ngôn ngữ JavaScript làwait()
function of concurrent objects trong ngôn ngữ Python trả về hai tham số. tham số đầu tiên là kết quả được trả về bởi một cuộc gọi API không đồng bộ, và tham số thứ hai chỉ ra liệu cuộc gọi không đồng bộ đã hoàn thành hay không.
def main():
d = exchange.Go("GetRecords", PERIOD_D1)
# ok will return True definitely, unless the strategy is stopped
ret, ok = d.wait()
# If the wait times out, or if it waits for an instance that has already ended, ok returns False
ret, ok = d.wait(100)
{@fun/Global/Mail_Go Mail_Go}, {@fun/Global/HttpQuery_Go HttpQuery_Go}, {@fun/Global/EventLoop EventLoop}
Thị trường Tài khoản