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

Thương mại

exchange.Buy

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 đổiexchangeMụ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ínhIdcủ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_USDTthứ 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ịIdlà phù hợp vớiIdthuộ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ácpricetham số được sử dụng để thiết lập giá lệnh. giá đúng số Cácamounttham 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,argCá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-1cho 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ốamountlà 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ềnamountlà 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 Hướng dẫn sử dụng để biết chi tiết. 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ệnhIdcủ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}

exchange.Sell

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.Idcủ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_USDTthứ tự của sàn giao dịch OKX là:ETH-USDT,1547130415509278720Khi gọi điện choexchange.Sell()chức năng để đặt một lệnh, lệnh trả về giá trịIdlà phù hợp vớiIdthuộ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ácpricetham số được sử dụng để thiết lập giá lệnh. giá đúng số Cácamounttham 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,argCá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ềnamountlà 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ềnamountlà 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ệnhIdcủ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}

exchange.CreateOrder

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ề.Idcủ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_USDTcủa sàn OKX là:ETH-USDT,1547130415509278720Khi gọi điện choexchange.CreateOrder(symbol, side, price, amount)chức năng đặt lệnh, giá trị trả về của lệnhIdlà phù hợp vớiIdthuộ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,exchangelà đố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ốsymbollà:"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,exchangelà đố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 BTCs, tham sốsymbollà:"BTC_USDT.swap", và định dạng là một sự kết hợp củacặp giao dịchmã 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,exchangelà đố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 BTCs, tham sốsymbollà:"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ự .. biểu tượng đúng chuỗi Cácsidetham 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ủasidecác tham số là:buy, sell. buycó nghĩa là mua, vàsellcó 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ủasidecác tham số là:buy, closebuy, sell, closesell. buycó nghĩa là mở một vị trí dài,closebuycó nghĩa là đóng một vị trí dài,sellcó nghĩa là mở một vị trí ngắn, vàclosesellcó 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 Hướng dẫn người dùng. số tiền đúng số Các thông số mở rộng có thể xuất thêm thông tin cho nhật ký đơn đặt hàng này.argCá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}

exchange.CancelOrder

Cácexchange.CancelOrder()chức năng được sử dụng để hủy lệnh. Thuộc tínhIdcủ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_USDTcủa sàn OKX là:ETH-USDT,1547130415509278720. Các thông sốorderIdqua khi gọi choexchange.CancelOrder()chức năng để hủy một lệnh là phù hợp vớiIdthuộ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ụtruenghĩ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ưfalseGiá 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ácorderIdtham 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,argCá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}

exchange.GetOrder

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ácorderIdtham số được sử dụng để xác định thứ tự được truy vấn. Thuộc tínhIdcủ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_USDTcủa sàn OKX là:ETH-USDT,1547130415509278720. Các thông sốorderIdqua khi gọi choexchange.GetOrder()chức năng để truy vấn một lệnh là phù hợp vớiIdthuộ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.AvgPricethuộ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,orderIdtham 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}

exchange.GetOrders

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ếusymbolNế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ếusymbolNế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àoSymboltham 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.

TrongGetOrderschứ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à: BTC_USDT 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à: BTC_USDT
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à: BTC_USDT.swap 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ịchmã 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à: USDT.swap 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à: USDT.option Tìm kiếm tất cả các hợp đồng quyền chọn dựa trên USDT -

TrongGetOrderschứ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 đổiexchangekhô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}

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ácsymbolCác tham số được sử dụng để xác định các biểu tượng thương mại.BTC_USDTCặp giao dịch, ví dụ, khiexchangelà một đối tượng trao đổi tại chỗ, định dạng tham số chosymbolBTC_USDTNế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ố chosymbollà: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ự .. Nếu tham số này không được truyền, dữ liệu lệnh của cặp giao dịch và mã hợp đồng được thiết lập hiện tại sẽ được yêu cầu theo mặc định.

biểu tượng sai chuỗi Cácsincetham 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áclimittham 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);
}
  • Khi nào?symbol, since, limitcá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.
  • KhisymbolNế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.
  • Khisincetham số được chỉ định, truy vấn theo hướng thời gian hiện tại sử dụngsinceThời gian đóng dấu là thời gian bắt đầu.
  • Nếulimittham số được chỉ định, truy vấn được trả về sau một số lượng đủ các mục.
  • Chức năng này chỉ được hỗ trợ cho các trao đổi cung cấp giao diện truy vấn lệnh lịch sử.

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

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ả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ácpricePrecisiontham 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ácamountPrecisiontham 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}

exchange.SetRate

Đặt tỷ giá hối đoái hiện tại của đối tượng trao đổi.

exchange.SetRate (tỷ lệ)

Cácratetham 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.exchangelà 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}

exchange.IO

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ácktham 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, unifiedvà 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ể,argCá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.POSTyê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 trongparamstham 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)
  • httpMethod : Các tham số là một kiểu chuỗi, điền vào kiểu yêu cầuPOST, GET, vv
  • tài nguyên: Parameter là kiểu chuỗi và điền vào đường dẫn yêu cầu; Nó hỗ trợ việc sử dụng các đường dẫn yêu cầu hoàn chỉnh, xem ví dụ tham chiếu để biết chi tiết.
  • params: Parameter là một kiểu chuỗi, đầy các tham số yêu cầu, được mã hóa bằngURL.
  • raw: Các tham số là các tham số chuỗi thô và có thể được bỏ qua.

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áchbaseCurrencytừquoteCurrency, nhưBTC_USDT.

    1. Hệ thống backtesting bây giờ hỗ trợ chuyển đổi các cặp giao dịch (chỉ dành cho các đối tượng trao đổi giao ngay tiền kỹ thuật số), khi backtesting, bạn cần phải chú ý rằng bạn chỉ có thể chuyển sang các cặp giao dịch với cùng một loại tiền tệ, ví dụ, cặp giao dịch hiện tại làETH_BTCchỉ có thể chuyển sangLTC_BTC, không phảiLTC_USDT.
    2. Đối với các hợp đồng tương lai tiền điện tử, đối tượng trao đổi chuyển đổi cặp giao dịch và mã hợp đồng cần phải được đặt lại để xác định hợp đồng nào được giao dịch.
    3. Sử dụng {@fun/Account/exchange.SetCurrency exchange.SetCurrency} chức năng để chuyển đổi các cặp giao dịch là chính xác giống như sử dụngexchange.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ỗ:

  • Các thông số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.
  • Parameterkđượ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}

exchange.Log

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ácorderTypetham 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ácpricetham số được sử dụng để thiết lập giá hiển thị trong nhật ký đầu ra. giá đúng số Cácamounttham 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,argCá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.

KhiorderTypetham số làLOG_TYPE_CANCEL, cácpricetham 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}

exchange.Encode

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ốalgolà thuật toán được sử dụng để tính toán mã hóa. Các cài đặt được hỗ trợ là: raw (không sử dụng thuật toán), sign, signTx, md4, md5, sha256, sha512, sha1, keccak256, sha3.224, sha3.256, sha3.384, sha3.512, sha3.keccak256, sha3.keccak512, sha512.384, sha512.256, sha512.224, emd160, ripke2b.256, blake2b.512, blake2s.1288, blake2s.256algocũng hỗ trợ: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk, để mã hóa và giải mã chuỗi.algocũng hỗ trợ: thuật toán ed25519. Nó hỗ trợ việc sử dụng các thuật toán băm khác nhau, ví dụ như tham sốalgocó thể được viết như ed25519.md5, ed25519.sha512, v.v.ed25519.seedtính toán. algo đúng chuỗi Sử dụng để xác định định dạng dữ liệu củadatacác tham số.inputFormattham số có thể được đặt thành một trong: raw, hex, base64, và string. raw có nghĩa là dữ liệu là dữ liệu thô, hex có nghĩa là dữ liệu làhexđược mã hóa, base64 có nghĩa là dữ liệu làbase64được mã hóa, và string có nghĩa là dữ liệu là một chuỗi. inputFormat đúng chuỗi Sử dụng để xác định định dạng dữ liệu đầu ra.outputFormattham số hỗ trợ các thiết lập sau: raw, hex, base64, string. raw có nghĩa là dữ liệu là dữ liệu thô, hex có nghĩa là dữ liệu làhexđược mã hóa, base64 có nghĩa là dữ liệu làbase64được mã hóa, và string có nghĩa là dữ liệu là một chuỗi. outputFormat đúng chuỗi Các thông sốdatalà 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ủakeycác tham số.keytham số có thể được đặt thành một trong: raw, hex, base64, và string. raw có nghĩa là dữ liệu là dữ liệu thô, hex có nghĩa là dữ liệu làhexđược mã hóa, base64 có nghĩa là dữ liệu làbase64được mã hóa, và string có nghĩa là dữ liệu là một chuỗi. keyFormat sai chuỗi Cáckeytham 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 đếnaccessKeysecretKeyđượ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}

exchange.Go

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ácmethodtham 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ốargphụ 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 địnhundefinedsử dụngtypeof(xx) === "undefined", bởi vìnull == undefinedlà 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