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

Thị trường

exchange.GetTicker

Nhận cấu trúc {@struct/Ticker Ticker} của giao dịch hoặc hợp đồng tương ứng với cặp giao dịch được đặt hiện tại, mã hợp đồng, tức là dữ liệu ticker.GetTicker ()hàm là một hàm thành viên của đối tượng trao đổi {@var/EXCHANGE exchange}, việc sử dụngexchangeCác chức năng thành viên đối tượng (các phương pháp) chỉ liên quan đếnexchange, và nó sẽ không được lặp lại trong tài liệu.

Cácexchange.GetTicker()hàm trả về cấu trúc {@struct/Ticker Ticker} khi yêu cầu dữ liệu thành công, và trả về giá trị null khi yêu cầu dữ liệu thất bại. {@struct/Ticker Ticker}, giá trị không

đổi.GetTicker() trao đổi.GetTicker (bản biểu tượng)

Các thông sốsymbolđược sử dụng để chỉ định cặp giao dịch cụ thể và mã hợp đồng tương ứng với dữ liệu {@struct/Ticker Ticker} được yêu cầu. Nếu tham số này không được truyền, dữ liệu thị trường của cặp giao dịch và mã hợp đồng được đặt hiện tại sẽ được yêu cầu theo mặc định. Khi gọi choexchange.GetTicker(symbol)chức năng,exchangelà đối tượng trao đổi tại chỗ. Nếu bạn cần yêu cầu dữ liệu thị trường với đồng tiền mệnh giá là USDT và đồng tiền giao dịch là BTC, tham sốsymbollà:"BTC_USDT", và định dạng là định dạng cặp giao dịch được xác định bởi nền tảng FMZ. Khi gọi choexchange.GetTicker(symbol)chức năng,exchangelà đối tượng trao đổi tương lai. Nếu bạn cần yêu cầu dữ liệu thị trường của hợp đồng vĩnh cửu tiêu chuẩn U của BTC, 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ự .. Khi gọi choexchange.GetTicker(symbol)chức năng,exchangelà đối tượng trao đổi tương lai. Nếu bạn cần yêu cầu dữ liệu thị trường của hợp đồng tùy chọn tiêu chuẩn U của BTC, tham sốsymbollà:"BTC_USDT.BTC-240108-40000-C"(lấy Binance Option BTC-240108-40000-C làm ví dụ), định dạng là 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 sai chuỗi

function main(){
    // If it is a futures exchange object, set the contract code first, e.g. set it as a perpetual contract
    // exchange.SetContractType("swap")

    var ticker = exchange.GetTicker()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, the ticker is null, and it will cause an error when accessing ticker.High, so when testing this code, make sure that the exchange interface can be accessed.
    */
    Log("Symbol:", ticker.Symbol, "High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Open:", ticker.Open, "Volume:", ticker.Volume)
}
def main():
    ticker = exchange.GetTicker()
    Log("Symbol:", ticker["Symbol"], "High:", ticker["High"], "Low:", ticker["Low"], "Sell:", ticker["Sell"], "Buy:", ticker["Buy"], "Last:", ticker["Last"], "Open:", ticker.Open, "Volume:", ticker["Volume"])
void main() {
    auto ticker = exchange.GetTicker();
    Log("Symbol:", ticker.Symbol, "High:", ticker.High, "Low:", ticker.Low, "Sell:", ticker.Sell, "Buy:", ticker.Buy, "Last:", ticker.Last, "Open:", ticker.Open, "Volume:", ticker.Volume);
}

Đối với các đối tượng giao dịch tương lai (tức làexchangehoặcexchanges[0]), bạn cần thiết lập mã hợp đồng bằng cách sử dụngexchange.SetContractType()chức năng trước khi gọi chức năng ticker, mà sẽ không được lặp lại.

function main() {
    var ticker = exchange.GetTicker("BTC_USDT")
    Log(ticker)
}
def main():
    ticker = exchange.GetTicker("BTC_USDT")
    Log(ticker)
void main() {
    auto ticker = exchange.GetTicker("BTC_USDT");
    Log(ticker);
}

Sử dụngsymboltham số để yêu cầu dữ liệu thị trường cho một biểu tượng cụ thể (bản tượng điểm).

CácTickerdữ liệu được trả về bởiexchange.GetTicker()trong hệ thống backtesting.HighLowlà các giá trị mô phỏng, lấy từ một bán và mua một của thị trường tại thời điểm đó.Tickerdữ liệu được trả về bởiexchange.GetTicker()trong thị trường thực tế.HighLowCác giá trị dựa trên dữ liệu được trả về bởi trao đổi đóng góiTickgiao diện, bao gồm giá cao nhất và thấp nhất trong một khoảng thời gian nhất định (thường là một khoảng thời gian 24 giờ). Các sàn giao dịch không hỗ trợexchange.GetTicker()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ợ
GetTicker Tiền tương lai_Aevo

{@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.GetRecords exchange.GetRecords}, {@fun/Market/exchange.GetTickers exchange.GetTickers}

exchange.GetDepth

Nhận cấu trúc {@struct/Depth Depth} của giao dịch hoặc hợp đồng tương ứng với cặp giao dịch được đặt hiện tại, mã hợp đồng, tức là dữ liệu sổ lệnh.

Cácexchange.GetDepth()hàm trả về cấu trúc {@struct/Depth Depth} nếu yêu cầu dữ liệu thành công, và nó trả về null nếu yêu cầu dữ liệu thất bại. {@struct/Depth Depth}, giá trị không

đổi.GetDepth() đổi.GetDepth (( biểu tượng)

Các thông sốsymbolđược sử dụng để chỉ định cặp giao dịch cụ thể và mã hợp đồng tương ứng với dữ liệu {@struct/Depth Depth} được yêu cầu. Nếu tham số này không được truyền, dữ liệu sổ lệnh của cặp giao dịch và mã hợp đồng được đặt hiện tại sẽ được yêu cầu theo mặc định. Khi gọi mã giao dịchexchange.GetDepth(symbol)chức năng,exchangelà đối tượng trao đổi tại chỗ. Nếu bạn cần yêu cầu để có được dữ liệu sổ lệnh với tiền tệ theo mệnh giá là USDT và tiền tệ giao dịch là BTC, tham sốsymbollà:"BTC_USDT", và định dạng là định dạng cặp giao dịch được xác định bởi nền tảng FMZ.exchange.GetDepth(symbol)chức năng,exchangelà đối tượng trao đổi tương lai. Nếu bạn cần yêu cầu dữ liệu sổ lệnh của hợp đồng vĩnh viễn tiêu chuẩn U của BTC, 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.GetDepth(symbol)chức năng,exchangelà đối tượng trao đổi tương lai. Nếu bạn cần yêu cầu dữ liệu sổ lệnh của hợp đồng tùy chọn tiêu chuẩn U của BTC, tham sốsymbollà:"BTC_USDT.BTC-240108-40000-C"(lấy Binance Option BTC-240108-40000-C làm ví dụ), định dạng là 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 sai chuỗi

function main(){
    var depth = exchange.GetDepth()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, the depth is null, which will cause an error when accessing depth.Asks[1].Price, so make sure you can access the exchange interface when testing the code.
    */
    var price = depth.Asks[1].Price
    Log("Sell 2 price is:", price)
}
def main():
    depth = exchange.GetDepth()
    price = depth["Asks"][1]["Price"]
    Log("Sell 2 price is:", price)
void main() {
    auto depth = exchange.GetDepth();
    auto price = depth.Asks[1].Price;
    Log("Sell 2 price is:", price);
}

Kiểm traexchange.GetDepth()chức năng:

function main() {
    // BTC U-based perpetual contract
    var depth = exchange.GetDepth("BTC_USDT.swap")
    Log(depth)
}
def main():
    depth = exchange.GetDepth("BTC_USDT.swap")
    Log(depth)
void main() {
    auto depth = exchange.GetDepth("BTC_USDT.swap");
    Log(depth);
}

Khi cấu hìnhexchangeđối tượng là một đối tượng giao dịch tương lai, sử dụngsymboltham số để yêu cầu dữ liệu sổ lệnh của một biểu tượng cụ thể (bản biểu tương lai).

Trong hệ thống backtesting, dữ liệu cho mỗi lớp được trả về bởiexchange.GetDepth()chức năngMô phỏng Ticktrong hệ thống backtesting, dữ liệu được trả về bởi cácexchange.GetDepth()chức năngTick thật sựbacktesting là một bức ảnh sâu cấp hai.

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.GetRecords exchange.GetRecords}

exchange.GetTrades

Nhận mảng cấu trúc {@struct/Trade Trade} của giao dịch hoặc hợp đồng tương ứng với cặp giao dịch được thiết lập hiện tại, mã hợp đồng, tức là dữ liệu giao dịch thị trường.

Cácexchange.GetTrades()hàm trả về một mảng cấu trúc {@struct/Trade Trade} 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/Trade Trade} mảng, giá trị không

giao dịch.GetTrades ((() giao dịch.GetTrades (định hiệu)

Các thông sốsymbolđược sử dụng để chỉ định cặp giao dịch cụ thể và mã hợp đồng tương ứng với dữ liệu mảng {@struct/Trade Trade} được yêu cầu. Nếu tham số này không được vượt qua, dữ liệu hồ sơ giao dịch mới nhất 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.exchange.GetTrades(symbol)chức năng,exchangelà đối tượng trao đổi tại chỗ. Nếu bạn cần yêu cầu để có được dữ liệu sổ lệnh với tiền tệ theo mệnh giá là USDT và tiền tệ giao dịch là BTC, tham sốsymbollà:"BTC_USDT", và định dạng là định dạng cặp giao dịch được xác định bởi nền tảng FMZ.exchange.GetTrades(symbol)chức năng,exchangelà đối tượng trao đổi tương lai. Nếu bạn cần yêu cầu dữ liệu sổ lệnh của hợp đồng vĩnh viễn tiêu chuẩn U của BTC, 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.GetTrades(symbol)chức năng,exchangelà đối tượng trao đổi tương lai. Nếu bạn cần yêu cầu dữ liệu sổ lệnh của hợp đồng tùy chọn tiêu chuẩn U của BTC, tham sốsymbollà:"BTC_USDT.BTC-240108-40000-C"(lấy Binance Option BTC-240108-40000-C làm ví dụ), định dạng là 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 sai chuỗi

function main(){
    var trades = exchange.GetTrades()
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, trade is null. When accessing trade[0].Id, it will cause an error. Therefore, when testing this code, ensure that you can access the exchange interface.
    */
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type)
}
def main():
    trades = exchange.GetTrades()
    Log("id:", trades[0]["Id"], "time:", trades[0]["Time"], "Price:", trades[0]["Price"], "Amount:", trades[0]["Amount"], "type:", trades[0]["Type"])
void main() {
    auto trades = exchange.GetTrades();
    Log("id:", trades[0].Id, "time:", trades[0].Time, "Price:", trades[0].Price, "Amount:", trades[0].Amount, "type:", trades[0].Type);
}

Kiểm traexchange.GetTrades()chức năng:

function main() {
    // BTC's U-based perpetual contract
    var trades = exchange.GetTrades("BTC_USDT.swap")
    Log(trades)
}
def main():
    trades = exchange.GetTrades("BTC_USDT.swap")
    Log(trades)
void main() {
    auto trades = exchange.GetTrades("BTC_USDT.swap");
    Log(trades);
}

Khi cấu hìnhexchangeđối tượng là một đối tượng giao dịch tương lai, sử dụngsymboltham số để yêu cầu dữ liệu hồ sơ giao dịch thị trường cho một biểu tượng cụ thể (biểu tượng tương lai).

exchange.GetTrades()chức năng để có được các cặp giao dịch hiện tại, lịch sử giao dịch của thị trường (không phải của riêng họ) tương ứng với hợp đồng. Một số sàn giao dịch không hỗ trợ chức năng này, và dữ liệu cụ thể được trả về là bao nhiêu trong phạm vi các hồ sơ giao dịch phụ thuộc vào sàn giao dịch và cần được xử lý theo tình huống cụ thể. Dữ liệu trả về là một mảng, nơi mỗi yếu tố của thứ tự thời gian vàexchange.GetRecords ()hàm trả về cùng một thứ tự dữ liệu, tức là, phần tử cuối cùng của mảng là dữ liệu gần nhất với thời gian hiện tại. Cácexchange.GetTrades()hàm trả về một mảng trống khi sử dụngMô phỏng TickCác dữ liệu được trả về bởiexchange.GetTrades()chức năng khi sử dụngTick thật sựbacktesting trong hệ thống backtesting là dữ liệu chụp tức thời dòng lệnh, tức là mảng cấu trúc {@struct/Trade Trade}. Các sàn giao dịch không hỗ trợexchange.GetTrades()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ợ
GetTrades Tiền tương lai_BitMart / Tiền tương lai_Bibox

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetRecords exchange.GetRecords}

exchange.GetRecords

Nhận được mảng cấu trúc {@struct/Record Record} của giao dịch hoặc hợp đồng tương ứng với cặp giao dịch được đặt hiện tại, mã hợp đồng, tức là dữ liệu đường K.

Cácexchange.GetRecords()hàm trả về một mảng cấu trúc {@struct/Record Record} khi yêu cầu dữ liệu thành công, và nó trả về giá trị không khi yêu cầu dữ liệu thất bại. {@struct/Record Record} mảng, giá trị không

trao đổi.GetRecords() trao đổi.GetRecords (tượng hiệu) exchange.GetRecords (thông hiệu, chấm) exchange.GetRecords ((thượng hiệu, thời gian, giới hạn) trao đổi.GetRecords (thời gian) exchange.GetRecords (thời gian, giới hạn)

Các thông sốsymbolđược sử dụng để xác định cặp giao dịch cụ thể và mã hợp đồng tương ứng với dữ liệu mảng {@struct/Record Record} được yêu cầu. Nếu tham số này không được truyền, dữ liệu K-line của cặp giao dịch và mã hợp đồng được đặt hiện tại sẽ được yêu cầu theo mặc định. Khi gọi mã giao dịchexchange.GetRecords(symbol)chức năng,exchangelà đối tượng trao đổi tại chỗ. Nếu bạn cần yêu cầu để có được dữ liệu với các đồng tiền mệnh giá là USDT và các đồng tiền giao dịch là BTC, các tham sốsymbollà:"BTC_USDT", và định dạng là định dạng cặp giao dịch được xác định bởi nền tảng FMZ.exchange.GetRecords(symbol)chức năng,exchangelà đối tượng trao đổi tương lai. Nếu bạn cần yêu cầu dữ liệu sổ lệnh của hợp đồng vĩnh viễn tiêu chuẩn U của BTC, 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.GetRecords(symbol)chức năng,exchangelà đối tượng trao đổi tương lai. Nếu bạn cần yêu cầu dữ liệu sổ lệnh của hợp đồng tùy chọn tiêu chuẩn U của BTC, tham sốsymbollà:"BTC_USDT.BTC-240108-40000-C"(lấy Binance Option BTC-240108-40000-C làm ví dụ), định dạng là 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 sai chuỗi Các thông sốperiodchỉ định thời gian của dữ liệu đường K được yêu cầu, ví dụ: {@var/PERIOD/PERIOD_M1 PERIOD_M1}, {@var/PERIOD/PERIOD_M5 PERIOD_M5}, {@var/PERIOD/PERIOD_M15 PERIOD_M15}, v.v. Giá trị của tham sốperiodkhông chỉ có thể vượt qua khoảng thời gian tiêu chuẩn được xác định, mà còn có thể vượt qua các giá trị nguyên trong giây. Nếu tham số này không được vượt qua, khoảng thời gian của dữ liệu đường K được yêu cầu theo mặc định là khoảng thời gian đường K mặc định của cấu hình chiến lược thời gian thực / backtest hiện tại. thời gian sai số Các thông sốlimitđược sử dụng để xác định chiều dài của dữ liệu K-line được yêu cầu. Nếu tham số này không được truyền, chiều dài yêu cầu mặc định là số lượng tối đa các thanh K-line được yêu cầu tại một thời điểm của giao diện K-line trao đổi. giới hạn sai số

function main() {
    // Print K-line data with a K-line period of 120 seconds (2 minutes)
    Log(exchange.GetRecords(60 * 2))         
    // Print K-line data with a K-line period of 5 minutes
    Log(exchange.GetRecords(PERIOD_M5))      
}
def main():
    Log(exchange.GetRecords(60 * 2))
    Log(exchange.GetRecords(PERIOD_M5))
void main() {
    Log(exchange.GetRecords(60 * 2)[0]);
    Log(exchange.GetRecords(PERIOD_M5)[0]);
}

Nhận dữ liệu đường K cho một khoảng thời gian tùy chỉnh.

function main() {
    var records = exchange.GetRecords(PERIOD_H1)
    /*
        The exchange interface may not be accessible due to network reasons (even if the docker program's device can open the exchange website, the API interface may not be accessible).
        At this point, records is null. When accessing records[0].Time, it will cause an error. Therefore, when testing this code, ensure that you can access the exchange interface.
    */
    Log("The first k-line data is Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High)
    Log("The second k-line data is Time:", records[1].Time ,"Close:", records[1].Close)
    Log("Current K-line (latest)", records[records.length-1], "Previous K-line", records[records.length-2])
}
def main():
    records = exchange.GetRecords(PERIOD_H1)
    Log("The first k-line data is Time:", records[0]["Time"], "Open:", records[0]["Open"], "High:", records[0]["High"])
    Log("The second k-line data Time:", records[1]["Time"], "Close:", records[1]["Close"])
    Log("Current K-line (latest)", records[-1], "Previous K-line", records[-2])
void main() {
    auto records = exchange.GetRecords(PERIOD_H1);
    Log("The first k-line data is Time:", records[0].Time, "Open:", records[0].Open, "High:", records[0].High);
    Log("The second k-line data Time:", records[1].Time, "Close:", records[1].Close);
    Log("Current K-line (latest)", records[records.size() - 1], "Previous K-line", records[records.size() - 2]);
}

Dữ liệu thanh đường K đầu ra:

function main() {
    var records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
    Log(records)
}
def main():
    records = exchange.GetRecords("BTC_USDT.swap", 60, 100)
    Log(records)
void main() {
    auto records = exchange.GetRecords("BTC_USDT.swap", 60, 100);
    Log(records);
}

Khi cấu hìnhexchangeđối tượng là một đối tượng giao dịch tương lai, sử dụngsymbol, period, vàlimitcác tham số để yêu cầu dữ liệu dòng K của một sản phẩm cụ thể (sản phẩm tương lai).

Thời gian K-line mặc định có thể được thiết lập trong backtest và trang giao dịch thực.exchange.GetRecords()Nếu không có thông số nào được chỉ định khi gọi hàm, dữ liệu K-line tương ứng sẽ được trả về theo thời gian K-line được thiết lập trong backtest và các thông số thị trường thực tế. Giá trị trả về là một mảng củaRecordcác cấu trúc, dữ liệu đường K được trả về sẽ được tích lũy theo thời gian, giới hạn trên của các thanh đường K tích lũy bị ảnh hưởng bởiexchange.SetMaxBarLen()cài đặt chức năng. giới hạn mặc định là 5000 thanh khi nó không được thiết lập. Khi dữ liệu đường K đạt đến giới hạn tích lũy thanh đường K, nó sẽ được cập nhật bằng cách thêm một thanh đường K và xóa thanh đường K sớm nhất (ví dụ như hàng đợi vào / ra). Một số sàn giao dịch không cung cấp giao diện đường K, vì vậy docker thu thập dữ liệu hồ sơ giao dịch thị trường (Tradecấu trúc mảng) trong thời gian thực để tạo ra K-đường. Nếu giao diện K-line của trao đổi hỗ trợ truy vấn page, nhiều yêu cầu API sẽ được thực hiện khi gọiexchange.SetMaxBarLen()chức năng để thiết lập một chiều dài đường K lớn hơn. Khiexchange.GetRecords()- Hệ thống backtesting sẽ nhận được một số lượng nhất định các thanh K-line trước khi bắt đầu khoảng thời gian backtesting trước (mục mặc định là 5000, các thiết lập của hệ thống backtesting và số lượng dữ liệu sẽ ảnh hưởng đến số lượng cuối cùng được trả về), như dữ liệu K-line ban đầu. - Số lượng các thanh K-line thu được trong giao dịch thực tế dựa trên số lượng dữ liệu tối đa có thể thu được từ giao diện K-line của sàn giao dịch. Cácperiodtham số được thiết lập thành 5, đó là một yêu cầu để có được dữ liệu K-line với một khoảng thời gian 5 giây.periodtham số không thể chia cho 60 (tức là, thời gian được đại diện không thể chia cho phút).exchange.GetTrades()để thu thập dữ liệu ghi chép giao dịch và tổng hợp các dữ liệu K-line cần thiết.periodtham số được chia cho 60, sau đó dữ liệu đường K cần thiết được tổng hợp bằng cách sử dụng dữ liệu đường K tối thiểu 1 phút (nếu có thể, dữ liệu đường K cần thiết được tổng hợp bằng cách sử dụng khoảng thời gian lớn hơn). Việc thử nghiệm ngược cấp độ mô phỏng trong hệ thống kiểm tra ngược đòi hỏi phải thiết lập khoảng thời gian K-line cơ bản (khi hệ thống kiểm tra ngược mô phỏng kiểm tra ngược cấp độ, dữ liệu K-line tương ứng được sử dụng để tạo dữ liệu Tick theo khoảng thời gian K-line cơ bản được thiết lập). CácC++ngôn ngữ có ví dụ mã sau đây nếu bạn cần xây dựng dữ liệu K-line của riêng bạn:

#include <sstream>
void main() { 
    Records r;
    r.Valid = true;
    for (auto i = 0; i < 10; i++) {
        Record ele;
        ele.Time = i * 100000;
        ele.High = i * 10000;
        ele.Low = i * 1000;
        ele.Close = i * 100;
        ele.Open = i * 10;
        ele.Volume = i * 1;
        r.push_back(ele);
    }
    // Output display: Records[10]
    Log(r);                      
    auto ma = TA.MA(r,10);       
    // Output display: [nan,nan,nan,nan,nan,nan,nan,nan,nan,450]
    Log(ma);                     
}

Các sàn giao dịch không hỗ trợexchange.GetRecords()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ợ
GetRecords Zaif / Coincheck / BitFlyer Tiền tương lai_Aevo

{@fun/Market/exchange.GetTicker exchange.GetTicker}, {@fun/Market/exchange.GetDepth exchange.GetDepth}, {@fun/Market/exchange.GetTrades exchange.GetTrades}, {@fun/Market/exchange.SetMaxBarLen exchange.SetMaxBarLen}

exchange.GetPeriod

Nhận thời gian K-line được đặt trên trang web nền tảng FMZ Quant Trading khi kiểm tra lại và chạy chiến lược trong giao dịch trực tiếp, tức là thời gian K-line mặc định được sử dụng khi gọiexchange.GetRecords()chức năng mà không cần thông qua các thông số.

Thời gian K-đường theo giây, giá trị nguyên bằng giây. số

trao đổi.GetPeriod()

function main() {
    // For example, the K-line period set on the website page of the FMZ Quant Trading platform during backtesting and live trading is 1 hour.
    var period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hours")
}
def main():
    period = exchange.GetPeriod()
    Log("K-line period:", period / (60 * 60), "hours")
void main() {
    auto period = exchange.GetPeriod();
    Log("K-line period:", period / (60 * 60.0), "hours");
}

{@fun/Market/exchange.GetRecords exchange.GetRecords}

exchange.SetMaxBarLen

Đặt chiều dài tối đa của đường K.

trao đổi.SetMaxBarLen ((n)

Các thông sốnđược sử dụng để xác định chiều dài đường K tối đa. n đúng số

function main() {
    exchange.SetMaxBarLen(50)
    var records = exchange.GetRecords()
    Log(records.length, records)
}
def main():
    exchange.SetMaxBarLen(50)
    r = exchange.GetRecords()
    Log(len(r), r)
void main() {
    exchange.SetMaxBarLen(50);
    auto r = exchange.GetRecords();
    Log(r.size(), r[0]);
}

Cácexchange.SetMaxBarLen()chức năng ảnh hưởng đến hai khía cạnh cho thời gian chạy chiến lược tiền điện tử:

  • Ảnh hưởng đến số lượng thanh K-line (Bars) được thu được trong cuộc gọi đầu tiên.
  • Ảnh hưởng đến số lượng tối đa các thanh K-line (Bars).

{@fun/Market/exchange.GetRecords exchange.GetRecords}

exchange.GetRawJSON

Nhận nội dung ban đầu trở lại bởi cuối cùngrestyêu cầu đối tượng trao đổi hiện tại ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).

Dữ liệu trả lời chorestyêu cầu. chuỗi

trao đổi.GetRawJSON()

function main(){
    exchange.GetAccount(); 
    var obj = JSON.parse(exchange.GetRawJSON());
    Log(obj);
}
import json
def main():
    exchange.GetAccount()
    obj = json.loads(exchange.GetRawJSON())
    Log(obj)
void main() {
    auto obj = exchange.GetAccount();
    // C++ does not support the GetRawJSON function
    Log(obj);
}

Cácexchange.GetRawJSON()chức năng chỉ được hỗ trợ cho giao dịch thực.C++ language.

{@var/EXCHANGE exchange}

exchange.GetRate

Nhận tỷ giá hối đoái hiện được thiết lập cho đối tượng trao đổi.

Giá trị hiện tại của tỷ giá hối đoái của đối tượng trao đổi. số

trao đổi.GetRate()

function main(){
    Log(exchange.GetTicker())
    // Set up exchange rate conversion
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    Log("Current exchange rate:", exchange.GetRate())
}
def main():
    Log(exchange.GetTicker())
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    Log("Current exchange rate:", exchange.GetRate())
void main() {
    Log(exchange.GetTicker());
    exchange.SetRate(7);
    Log(exchange.GetTicker());
    Log("Current exchange rate:", exchange.GetRate());
}

Nếuexchange.SetRate()đã không được gọi để thiết lập tỷ giá chuyển đổi,exchange.GetRate()hàm trả về một giá trị tỷ lệ mặc định là 1, nghĩa là dữ liệu liên quan đến đồng tiền hiện đang hiển thị (quoteCurrency) chưa được chuyển đổi. Nếu giá trị tỷ giá hối đoái đã được thiết lập bằng cách sử dụngexchange.SetRate(), ví dụ,exchange.SetRate(7)Sau đó tất cả thông tin giá, chẳng hạn như báo giá, chiều sâu và giá đặt hàng thu được thông quaexchangeđối tượng trao đổi sẽ được chuyển đổi bằng cách nhân với tỷ giá hối đoái đã thiết lập7. Nếuexchangetương ứng với một trao đổi với USD như là tiền tệ danh nghĩa, sau khi gọiexchange.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 CNY bằng cách nhân7Tại thời điểm này, giá trị tỷ giá hối đoái thu được bằng cách sử dụngexchange.GetRate()7.

{@fun/Trade/exchange.SetRate exchange.SetRate}

exchange.SetData

Cácexchange.SetData()chức năng được sử dụng để thiết lập dữ liệu được tải khi chiến lược đang chạy.

Chiều dài của chuỗi sau tham sốvalueMã hóa JSON. số

exchange.SetData ((key, giá trị)

Tên của bộ sưu tập dữ liệu chìa khóa đúng chuỗi Dữ liệu được tải bởiexchange.SetData()cấu trúc dữ liệu là giống như định dạng dữ liệu được yêu cầu bởiexchange.GetData()chức năng khi yêu cầu dữ liệu bên ngoài, tức là:"schema": ["time", "data"]. giá trị đúng mảng

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    var data = [
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
    exchange.SetData("test", data)
    while(true) {
        Log(exchange.GetData("test"))
        Sleep(1000)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''              

def main():
    data = [
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
    exchange.SetData("test", data)
    while True:
        Log(exchange.GetData("test"))
        Sleep(1000)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/              

void main() {
    json data = R"([
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ])"_json;
    
    exchange.SetData("test", data);
    while(true) {
        Log(exchange.GetData("test"));
        Sleep(1000);
    }
}

Nó đòi hỏi rằng dữ liệu cho các thông sốvaluecó cùng định dạng nhưdataBạn có thể thấy rằng timestamp1579622400000tương ứng với thời gian2020-01-22 00:00:00, và khi chương trình chiến lược được chạy sau thời gian này, gọi choexchange.GetData()chức năng để lấy dữ liệu trước khi dấu thời gian dữ liệu tiếp theo1579708800000, nghĩa là, thời gian2020-01-23 00:00:00Những gì bạn nhận được là[1579622400000, 123]nội dung của dữ liệu đó, khi chương trình tiếp tục chạy, thời gian thay đổi, v.v. để có được các mục dữ liệu theo mục. Trong ví dụ sau, trong thời gian chạy (đánh giá ngược hoặc giao dịch trực tiếp), thời điểm hiện tại đạt hoặc vượt quá dấu thời gian1579795200000, cácexchange.GetData()hàm được gọi và giá trị trả về là:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}. "Time":1579795200000tương ứng với1579795200000trong dữ liệu[1579795200000, ["abc", 123, {"price": 123}]]. "Data":["abc", 123, {"price": 123}]tương ứng với dữ liệu["abc", 123, {"price": 123}]]trong[1579795200000, ["abc", 123, {"price": 123}]].

Dữ liệu được tải có thể là bất kỳ chỉ số kinh tế, dữ liệu ngành, chỉ số có liên quan, v.v., được sử dụng để đánh giá định lượng chiến lược của tất cả các thông tin định lượng.

{@fun/Market/exchange.GetData exchange.GetData}

exchange.GetData

Cácexchange.GetData()chức năng được sử dụng để có được dữ liệu tải bởi cácexchange.SetData()hoặc được cung cấp bởi một liên kết bên ngoài.

Các hồ sơ trong bộ sưu tập dữ liệu. đối tượng

trao đổi.GetData(key) trao đổi.GetData ((key, timeout)

Tên của bộ sưu tập dữ liệu chìa khóa đúng chuỗi Sử dụng để thiết lập thời gian cache trong milliseconds. thời gian nghỉ sai số

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    exchange.SetData("test", [[1579536000000, _D(1579536000000)], [1579622400000, _D(1579622400000)], [1579708800000, _D(1579708800000)]])
    while(true) {
        Log(exchange.GetData("test"))
        Sleep(1000 * 60 * 60 * 24)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''  
def main():
    exchange.SetData("test", [[1579536000000, _D(1579536000000/1000)], [1579622400000, _D(1579622400000/1000)], [1579708800000, _D(1579708800000/1000)]])
    while True:
        Log(exchange.GetData("test"))
        Sleep(1000 * 60 * 60 * 24)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/    
void main() {
    json arr = R"([[1579536000000, ""], [1579622400000, ""], [1579708800000, ""]])"_json;
    arr[0][1] = _D(1579536000000);
    arr[1][1] = _D(1579622400000);
    arr[2][1] = _D(1579708800000);
    exchange.SetData("test", arr);
    while(true) {
        Log(exchange.GetData("test"));
        Sleep(1000 * 60 * 60 * 24);
    }
}

Cuộc gọi để có được dữ liệu được viết trực tiếp.

/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/
function main() {
    while(true) {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Sleep(1000)
    }
}
'''backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
'''              

def main():
    while True:
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
        Sleep(1000)
/*backtest
start: 2020-01-21 00:00:00
end: 2020-02-12 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Bitfinex","currency":"BTC_USD"}]
*/              

void main() {
    while(true) {
        Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
        Sleep(1000);
    }
}

Nó hỗ trợ để yêu cầu dữ liệu thông qua các liên kết bên ngoài, định dạng của dữ liệu được yêu cầu để:

{
    "schema":["time","data"],
    "data":[
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
}

Ở đâu?schemalà định dạng dữ liệu cho mỗi bản ghi trong cơ thể dữ liệu được tải, được cố định ở["time", "data"]tương ứng với định dạng của dữ liệu nhập từng lần trongdatathuộc tính. Những gì được lưu trữ trongdatathuộc tính là cơ thể của dữ liệu, với mỗi mục bao gồm dấu thời gian cấp độ millisecond và nội dung dữ liệu (có thể là bất kỳ dữ liệu có thể mã hóa JSON nào). Chương trình dịch vụ để thử nghiệm, được viết bằng Go:

package main
import (
    "fmt"
    "net/http"
    "encoding/json"
)                

func Handle (w http.ResponseWriter, r *http.Request) {
    defer func() {
        fmt.Println("req:", *r)
        ret := map[string]interface{}{
            "schema": []string{"time","data"},
            "data": []interface{}{
                []interface{}{1579536000000, "abc"},
                []interface{}{1579622400000, 123},
                []interface{}{1579708800000, map[string]interface{}{"price":123}},
                []interface{}{1579795200000, []interface{}{"abc", 123, map[string]interface{}{"price":123}}},
            },
        }
        b, _ := json.Marshal(ret)
        w.Write(b)
    }()
}                

func main () {
    fmt.Println("listen http://localhost:9090")
    http.HandleFunc("/data", Handle)
    http.ListenAndServe(":9090", nil)
}

Dữ liệu phản hồi của chương trình khi nhận được yêu cầu:

{
    "schema":["time","data"],
    "data":[
        [1579536000000, "abc"],
        [1579622400000, 123],
        [1579708800000, {"price": 123}],
        [1579795200000, ["abc", 123, {"price": 123}]]
    ]
}

Mã chiến lược thử nghiệm:

function main() {
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
}
def main():
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"))
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"))
void main() {
    Log(exchange.GetData("http://xxx.xx.x.xx:9090/data"));
    Log(exchange.GetData("https://www.fmz.com/upload/asset/32bf73a69fc12d36e76.json"));
}

Phương pháp gọi để lấy dữ liệu của một liên kết bên ngoài.

function main() {
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))   // The xxx part of the link is the code of the query data, here xxx is an example.
}
def main():
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"))
void main() {
    Log(exchange.GetData("https://www.datadata.com/api/v1/query/xxx/data"));
}

Yêu cầu dữ liệu cho truy vấn được tạo trên nền tảngdữ liệu, yêu cầu định dạng dữ liệu của câu trả lời là (phải có thời gian, các trường dữ liệu được mô tả trong sơ đồ):

{
    "data": [],
    "schema": ["time", "data"]
}

Các trường data là các nội dung dữ liệu cần thiết, và các dữ liệu trong trường data cần phải giống như những gì được thỏa thuận trong schema.exchange.GetData()hàm được gọi, một đối tượng JSON được trả về, ví dụ:{"Time":1579795200000, "Data":"..."}.

Nhận dữ liệu ngay lập tức để backtesting và bộ nhớ cache một phút dữ liệu cho giao dịch trực tiếp.from(được đánh dấu thời gian bằng giây),to(được đánh dấu thời gian trong giây) đến yêu cầu, các tham số như:period(thời gian đường K cơ bản, được đánh dấu theo thời gian trong milliseconds) được sử dụng để xác định khung thời gian mà trong đó dữ liệu sẽ được thu thập.

{@fun/Market/exchange.SetData exchange.SetData}

exchange.GetMarkets

Cácexchange.GetMarkets()chức năng được sử dụng để có được thông tin thị trường hối đoái.

Từ điển chứa cấu trúc {@struct/Market Market}. đối tượng

giao dịch.GetMarkets()

function main() {
    var markets = exchange.GetMarkets()
    var currency = exchange.GetCurrency()

    // Get the current contract code can also use exchange.GetContractType() function
    var ct = "swap"

    var key = currency + "." + ct
    Log(key, ":", markets[key])
}
def main():
    markets = exchange.GetMarkets()
    currency = exchange.GetCurrency()
    ct = "swap"

    key = currency + "." + ct
    Log(key, ":", markets[key])
void main() {
    auto markets = exchange.GetMarkets();
    auto currency = exchange.GetCurrency();

    auto ct = "swap";
    auto key = currency + "." + ct;
    Log(key, ":", markets[key]);
}

Ví dụ về một cuộc gọi đến một đối tượng giao dịch tương lai:

/*backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    var tbl1 = {
        type: "table",
        title: "markets1",
        cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        rows: []
    }

    var markets1 = exchange.GetMarkets()
    for (var key in markets1) {
        var market = markets1[key]
        tbl1.rows.push([key, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal])
    }

    for (var symbol of arrSymbol) {
        exchange.GetTicker(symbol)
    }

    var tbl2 = {
        type: "table",
        title: "markets2",
        cols: ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        rows: []
    }

    var markets2 = exchange.GetMarkets()
    for (var key in markets2) {
        var market = markets2[key]
        tbl2.rows.push([key, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize, market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal])
    }

    LogStatus("`" + JSON.stringify([tbl1, tbl2]) + "`")
}
'''backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"]

    tbl1 = {
        "type": "table",
        "title": "markets1",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    }

    markets1 = exchange.GetMarkets()
    for key in markets1:
        market = markets1[key]
        tbl1["rows"].append([key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]])

    for symbol in arrSymbol:
        exchange.GetTicker(symbol)

    tbl2 = {
        "type": "table",
        "title": "markets2",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    }

    markets2 = exchange.GetMarkets()
    for key in markets2:
        market = markets2[key]
        tbl2["rows"].append([key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]])

    LogStatus("`" + json.dumps([tbl1, tbl2]) + "`")
/*backtest
start: 2023-05-10 00:00:00
end: 2023-05-20 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"SOL_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};

    json tbl1 = R"({
        "type": "table",
        "title": "markets1",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    })"_json;

    auto markets1 = exchange.GetMarkets();
    for (auto& [key, market] : markets1.items()) {
        json arrJson = {key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]};
        tbl1["rows"].push_back(arrJson);
    }

    for (const auto& symbol : arrSymbol) {
        exchange.GetTicker(symbol);
    }

    json tbl2 = R"({
        "type": "table",
        "title": "markets2",
        "cols": ["key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty", "MaxQty", "MinNotional", "MaxNotional", "CtVal"],
        "rows": []
    })"_json;

    auto markets2 = exchange.GetMarkets();
    for (auto& [key, market] : markets2.items()) {
        json arrJson = {key, market["Symbol"], market["BaseAsset"], market["QuoteAsset"], market["TickSize"], market["AmountSize"], market["PricePrecision"], market["AmountPrecision"], market["MinQty"], market["MaxQty"], market["MinNotional"], market["MaxNotional"], market["CtVal"]};
        tbl2["rows"].push_back(arrJson);
    }

    json tbls = R"([])"_json;
    tbls.push_back(tbl1);
    tbls.push_back(tbl2);
    LogStatus("`" + tbls.dump() + "`");
}

Sử dụng đối tượng trao đổi tương lai để gọiexchange.GetMarkets()chức năng trong hệ thống backtesting. Trước khi gọi bất kỳ chức năng thị trường nào, GetMarkets chỉ trả về dữ liệu thị trường của cặp giao dịch mặc định hiện tại. Sau khi gọi chức năng thị trường, nó trả về dữ liệu thị trường của tất cả các loại yêu cầu. Bạn có thể tham khảo ví dụ kiểm tra sau:

Cácexchange.GetMarkets()hàm trả về một từ điển với một khóa có tên là tên của các loại giao dịch, và cho các sửa đổi tại chỗ được định dạng như một cặp giao dịch, ví dụ:

{
    "BTC_USDT" : {...},  // The key value is the Market structure
    "LTC_USDT" : {...},  
    ...
}

Đối với các sàn giao dịch hợp đồng tương lai, vì có thể có nhiều hợp đồng cho một loại duy nhất, ví dụ:BTC_USDTcác cặp giao dịch, có hợp đồng vĩnh viễn, hợp đồng hàng quý, vv.exchange.GetMarkets()hàm trả về một từ điển với tên khóa của cặp kết hợp với mã hợp đồng, ví dụ:

{
    "BTC_USDT.swap" : {...},     // The key value is the Market structure
    "BTC_USDT.quarter" : {...}, 
    "LTC_USDT.swap" : {...},
    ...
}
  • Cácexchange.GetMarkets()chức năng hỗ trợ giao dịch trực tiếp, hệ thống backtesting.
  • Cácexchange.GetMarkets()chức năng trả về thông tin thị trường chỉ cho các giống được giao dịch trực tuyến trên sàn giao dịch.
  • Cácexchange.GetMarkets()chức năng không hỗ trợ hợp đồng quyền chọn.

Các sàn giao dịch không hỗ trợexchange.GetMarkets()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ợ
GetMarkets Coincheck / Bithumb / BitFlyer

{@struct/Thị trường thị trường}

exchange.GetTickers

Cácexchange.GetTickers()hàm được sử dụng để lấy dữ liệu ticker tổng hợp trao đổi (mảng cấu trúc {@struct/Ticker Ticker}).exchangetrả về dữ liệu ticker cho tất cả các cặp giao dịch khi đó là đối tượng giao dịch tại chỗ;exchangetrả về dữ liệu ticker cho tất cả các hợp đồng khi đó là đối tượng trao đổi tương lai.

Cácexchange.GetTickers()hàm trả về một mảng {@struct/Ticker Ticker} cấu trúc khi nó thành công trong yêu cầu dữ liệu, và null khi nó thất bại. {@struct/Ticker Ticker} mảng, giá trị không

Giao dịch.GetTickers()

function main() {
    var tickers = exchange.GetTickers()
    if (tickers && tickers.length > 0) {
        Log("Number of tradable items on the exchange:", tickers.length)
    }
}
def main():
    tickers = exchange.GetTickers()
    if tickers and len(tickers) > 0:
        Log("Number of tradable items on the exchange:", len(tickers))
void main() {
    auto tickers = exchange.GetTickers();
    if (tickers.Valid && tickers.size() > 0) {
        Log("Number of tradable items on the exchange:", tickers.size());
    }
}

Gọi choexchange.GetTickers()chức năng để thu thập dữ liệu thị trường tổng hợp.

/*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 = ["ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"]
    
    // Before requesting other trading pair market data, call Get Tickers
    var tickers1 = exchange.GetTickers()
    var tbl1 = {type: "table", title: "tickers1", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of tickers1) {
        tbl1.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }
    
    // Request market data for other trading pairs
    for (var symbol of arrSymbol) {
        exchange.GetTicker(symbol)
    }

    // Call GetTickers again
    var tickers2 = exchange.GetTickers()
    var tbl2 = {type: "table", title: "tickers2", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of tickers2) {
        tbl2.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify([tbl1, tbl2]) +  "`")
}
'''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 = ["ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"]
        
    tickers1 = exchange.GetTickers()
    tbl1 = {"type": "table", "title": "tickers1", "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], "rows": []}
    for ticker in tickers1:
        tbl1["rows"].append([ticker["Symbol"], ticker["High"], ticker["Open"], ticker["Low"], ticker["Last"], ticker["Buy"], ticker["Sell"], ticker["Time"], ticker["Volume"]])
    
    for symbol in arrSymbol:
        exchange.GetTicker(symbol)
    
    tickers2 = exchange.GetTickers()
    tbl2 = {"type": "table", "title": "tickers2", "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], "rows": []}
    for ticker in tickers2:
        tbl2["rows"].append([ticker["Symbol"], ticker["High"], ticker["Open"], ticker["Low"], ticker["Last"], ticker["Buy"], ticker["Sell"], ticker["Time"], ticker["Volume"]])
    
    LogStatus("`" + json.dumps([tbl1, tbl2]) +  "`")
/*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"}]
*/

json tickerToJson(const Ticker& ticker) {
    json arrJson;

    arrJson.push_back(ticker.Symbol);
    arrJson.push_back(ticker.High);
    arrJson.push_back(ticker.Open);
    arrJson.push_back(ticker.Low);
    arrJson.push_back(ticker.Last);
    arrJson.push_back(ticker.Buy);
    arrJson.push_back(ticker.Sell);
    arrJson.push_back(ticker.Time);
    arrJson.push_back(ticker.Volume);

    return arrJson;
}

void main() {
    std::string arrSymbol[] = {"ADA_USDT", "LTC_USDT", "ETH_USDT", "SOL_USDT"};
    
    auto tickers1 = exchange.GetTickers();
    json tbl1 = R"({
        "type": "table", 
        "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"],
        "rows": []
    })"_json;
    tbl1["title"] = "tickers1";
    
    for (const auto& ticker : tickers1) {
        json arrJson = tickerToJson(ticker);
        tbl1["rows"].push_back(arrJson);
    }
    
    for (const std::string& symbol : arrSymbol) {
        exchange.GetTicker(symbol);
    }
    
    auto tickers2 = exchange.GetTickers();
    json tbl2 = R"({
        "type": "table", 
        "cols": ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"],
        "rows": []
    })"_json;
    tbl2["title"] = "tickers2";
    
    for (const auto& ticker : tickers2) {
        json arrJson = tickerToJson(ticker);
        tbl2["rows"].push_back(arrJson);
    }
    
    json tbls = R"([])"_json;
    tbls.push_back(tbl1);
    tbls.push_back(tbl2);
    LogStatus("`" + tbls.dump() + "`");
}

Sử dụng đối tượng trao đổi điểm và gọiexchange.GetTickers()trước khi gọi bất kỳ chức năng thị trường nào, GetTickers chỉ trả về dữ liệu ticker của cặp giao dịch mặc định hiện tại. Sau khi gọi chức năng thị trường, nó trả về dữ liệu ticker của tất cả các giống được yêu cầu. Bạn có thể tham khảo ví dụ kiểm tra sau:

  • Chức năng này yêu cầu giao dịch tổng hợp giao diện ticker, không cần thiết lập các cặp giao dịch, mã hợp đồng trước khi gọi. Nó chỉ trả về các ticker của các loại giao dịch trực tuyến trên sàn giao dịch.
  • Hệ thống backtesting hỗ trợ chức năng này.
  • Các đối tượng Exchange không cung cấp giao diện ticker tổng hợp không hỗ trợ chức năng này.
  • Chức năng này không hỗ trợ hợp đồng quyền chọn.

Các sàn giao dịch không hỗ trợexchange.GetTickers()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ợ
GetTickers Zaif / WOO / Gemini / Coincheck / BitFlyer / Bibox Tiền tương lai_WOO / Tiền tương lai_dYdX / Tiền tương lai_Deribit / Tiền tương lai_Bibox / Tiền tương lai_Aevo

{@struct/TickerTicker}, {@fun/Market/exchange.GetTicker exchange.GetTicker}

Ký hiệu Thương mại