Sumber daya yang dimuat... Pemuatan...

Pasar

exchange.GetTicker

Dapatkan struktur {@struct/Ticker Ticker} dari spot atau kontrak yang sesuai dengan pasangan perdagangan saat ini, kode kontrak, yaitu data ticker.GetTicker ()fungsi adalah anggota fungsi dari pertukaran objek {@var/EXCHANGE exchange}, penggunaanexchangeFungsi anggota objek (metode) hanya terkait denganexchange, dan tidak akan diulang dalam dokumen.

Peraturanexchange.GetTicker()fungsi mengembalikan struktur {@struct/Ticker Ticker} ketika permintaan data berhasil, dan mengembalikan nilai nol ketika permintaan data gagal. {@struct/Ticker Ticker}, nilai nol

pertukaran.GetTicker() pertukaran.GetTicker (simbol)

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak yang sesuai dengan data {@struct/Ticker Ticker} yang diminta. Jika parameter ini tidak dilewati, data pasar dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default. Saat meneleponexchange.GetTicker(symbol)fungsi,exchangeJika Anda perlu meminta data pasar dengan mata uang denominasi sebagai USDT dan mata uang perdagangan sebagai BTC, parametersymboladalah:"BTC_USDT", dan formatnya adalah format pasangan perdagangan yang didefinisikan oleh platform FMZ. Saat meneleponexchange.GetTicker(symbol)fungsi,exchangeJika Anda perlu meminta data pasar kontrak abadi standar U BTC, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter .. Saat meneleponexchange.GetTicker(symbol)fungsi,exchangeJika Anda perlu meminta data pasar dari kontrak opsi standar U BTC, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter ..

lambang palsu string

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);
}

Untuk obyek pertukaran berjangka (yaitu,exchangeatauexchanges[0]), Anda perlu mengatur kode kontrak menggunakanexchange.SetContractType()fungsi sebelum memanggil fungsi ticker, yang tidak akan diulang.

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);
}

Gunakansymbolparameter untuk meminta data pasar untuk simbol tertentu (simbol spot).

PeraturanTickerdata yang dikembalikan olehexchange.GetTicker()fungsi dalam sistem backtesting.HighdanLowadalah nilai simulasi, diambil dari satu jual dan membeli satu dari pasar pada saat itu.Tickerdata yang dikembalikan olehexchange.GetTicker()Di manaHighdanLownilai didasarkan pada data yang dikembalikan oleh pertukaran terkapasTickantarmuka, yang mencakup harga tertinggi dan terendah dalam periode tertentu (biasanya periode 24 jam). Bursa yang tidak mendukungexchange.GetTicker()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetTicker Futures_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

Dapatkan struktur {@struct/Depth Depth} dari spot atau kontrak yang sesuai dengan pasangan perdagangan yang saat ini ditetapkan, kode kontrak, yaitu data buku pesanan.

Peraturanexchange.GetDepth()fungsi mengembalikan struktur {@struct/Depth Depth} jika permintaan data berhasil, dan mengembalikan null jika permintaan data gagal. {@struct/Depth Depth}, nilai nol

Pertukaran.GetDepth ((() pertukaran.GetDepth (simbol)

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak yang sesuai dengan data {@struct/Depth Depth} yang diminta. Jika parameter ini tidak dilewati, data buku pesanan dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default.exchange.GetDepth(symbol)fungsi,exchangeJika Anda perlu meminta untuk mendapatkan data buku pesanan dengan mata uang denominasi sebagai USDT dan mata uang transaksi sebagai BTC, parametersymboladalah:"BTC_USDT", dan formatnya adalah format pasangan perdagangan yang didefinisikan oleh platform FMZ.exchange.GetDepth(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan kontrak abadi standar U BTC, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter ..exchange.GetDepth(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan dari kontrak opsi standar U BTC, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. simbol palsu string

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);
}

Tesexchange.GetDepth()Fungsi:

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);
}

Ketika dikonfigurasiexchangeobyek adalah obyek bursa berjangka, menggunakansymbolparameter untuk meminta data buku pesanan dari simbol tertentu (simbol futures).

Dalam sistem backtesting, data untuk setiap kelas dikembalikan olehexchange.GetDepth()fungsi saat menggunakanSimulasi TickPada sistem backtesting, data yang dikembalikan olehexchange.GetDepth()fungsi saat menggunakanBenar-benar Tickbacktesting adalah tingkat kedua yang mendalam snapshot.

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

exchange.GetTrades

Dapatkan array struktur {@struct/Trade Trade} dari spot atau kontrak yang sesuai dengan pasangan perdagangan yang saat ini ditetapkan, kode kontrak, yaitu data transaksi pasar.

Peraturanexchange.GetTrades()fungsi mengembalikan array struktur {@struct/Trade Trade} jika permintaan data berhasil, dan mengembalikan nilai nol jika permintaan data gagal. {@struct/Trade Trade} array, nilai nol

pertukaran.GetTrades ((() exchange.GetTrades (simbol)

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak yang sesuai dengan data array {@struct/Trade Trade} yang diminta. Jika parameter ini tidak dilewati, data catatan transaksi terbaru dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default.exchange.GetTrades(symbol)fungsi,exchangeJika Anda perlu meminta untuk mendapatkan data buku pesanan dengan mata uang denominasi sebagai USDT dan mata uang perdagangan sebagai BTC, parametersymboladalah:"BTC_USDT", dan formatnya adalah format pasangan perdagangan yang didefinisikan oleh platform FMZ.exchange.GetTrades(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan kontrak abadi standar U BTC, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter ..exchange.GetTrades(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan dari kontrak opsi standar U BTC, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. simbol palsu string

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);
}

Ujilahexchange.GetTrades()Fungsi:

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);
}

Ketika dikonfigurasiexchangeobyek adalah obyek bursa berjangka, menggunakansymbolparameter untuk meminta data catatan transaksi pasar untuk simbol tertentu (simbol berjangka).

exchange.GetTrades()fungsi untuk mendapatkan pasangan perdagangan saat ini, sejarah transaksi pasar (bukan mereka sendiri) yang sesuai dengan kontrak. Beberapa bursa tidak mendukung fungsi ini, dan data spesifik yang dikembalikan adalah berapa banyak dari rentang catatan transaksi tergantung pada bursa dan perlu ditangani sesuai dengan situasi tertentu.exchange.GetRecords ()fungsi mengembalikan urutan data yang sama, yaitu, elemen terakhir array adalah data yang paling dekat dengan waktu saat ini. Peraturanexchange.GetTrades()fungsi mengembalikan array kosong saat menggunakanSimulasi Tickdata yang dikembalikan oleh sistem backtesting.exchange.GetTrades()fungsi saat digunakanBenar-benar Tickbacktesting dalam sistem backtesting adalah data order flow snapshot, yaitu array struktur {@struct/Trade Trade}. Bursa yang tidak mendukungexchange.GetTrades()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetTrades Futures_BitMart / Futures_Bibox

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

exchange.GetRecords

Dapatkan array struktur {@struct/Record Record} dari spot atau kontrak yang sesuai dengan pasangan perdagangan yang saat ini ditetapkan, kode kontrak, yaitu data K-line.

Peraturanexchange.GetRecords()fungsi mengembalikan array struktur {@struct/Record Record} ketika permintaan data berhasil, dan mengembalikan nilai nol ketika permintaan data gagal. Array, nilai nol

pertukaran.GetRecords ((() pertukaran.GetRecords (simbol) exchange.GetRecords (simbol, titik) exchange.GetRecords ((simbol, periode, batas) Pertukaran.GetRecords (periode) exchange.GetRecords ((periode, batas)

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak yang sesuai dengan data array {@struct/Record Record} yang diminta. Jika parameter ini tidak dilewati, data K-line dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default.exchange.GetRecords(symbol)fungsi,exchangeJika Anda perlu meminta untuk mendapatkan data dengan mata uang denominasi sebagai USDT dan mata uang transaksi sebagai BTC, parametersymboladalah:"BTC_USDT", dan formatnya adalah format pasangan perdagangan yang didefinisikan oleh platform FMZ.exchange.GetRecords(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan kontrak abadi standar U BTC, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter ..exchange.GetRecords(symbol)fungsi,exchangeJika Anda perlu meminta data buku pesanan dari kontrak opsi standar U BTC, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. simbol palsu string Parameterperiodmenentukan periode data garis K yang diminta, misalnya: {@var/PERIOD/PERIOD_M1 PERIOD_M1}, {@var/PERIOD/PERIOD_M5 PERIOD_M5}, {@var/PERIOD/PERIOD_M15 PERIOD_M15}, dll. Nilai parameterperiodJika parameter ini tidak dilewati, periode data K-line yang diminta secara default adalah periode K-line default dari konfigurasi real-time/backtest strategi saat ini. periode palsu nomor Parameterlimitdigunakan untuk menentukan panjang data K-line yang diminta. Jika parameter ini tidak dilewatkan, panjang permintaan default adalah jumlah maksimum bar K-line yang diminta pada saat antarmuka K-line pertukaran. Parameter ini dapat menyebabkan paging untuk menanyakan data K-line pertukaran, dan konsumsi waktu panggilan fungsi akan meningkat selama permintaan paging. batas palsu nomor

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]);
}

Dapatkan data K-line untuk periode khusus.

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]);
}

Data garis K output:

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);
}

Ketika dikonfigurasiexchangeobyek adalah obyek bursa berjangka, menggunakansymbol, period, danlimitparameter untuk meminta data K-line dari produk tertentu (produk masa depan).

Periode K-line default dapat diatur di halaman backtest dan real trading.exchange.GetRecords()fungsi, data K-line yang sesuai dengan periode parameter tersebut akan diperoleh. Jika tidak ada parameter yang ditentukan ketika fungsi dipanggil, data K-line yang sesuai akan dikembalikan sesuai dengan periode K-line yang ditetapkan dalam backtest dan parameter pasar nyata. Nilai yang dikembalikan adalah array dariRecordstruktur, data K-line yang dikembalikan akan terkumpul dari waktu ke waktu, batas atas bar K-line terkumpul dipengaruhi olehexchange.SetMaxBarLen()setting fungsi. Batas default adalah 5000 bar ketika tidak diatur. Ketika data K-line mencapai batas akumulasi bar K-line, akan diperbarui dengan menambahkan bar K-line dan menghapus bar K-line tertua (misalnya antrian masuk/keluar). Beberapa pertukaran tidak menyediakan antarmuka K-line, sehingga docker mengumpulkan data catatan transaksi pasar (Tradearray terstruktur) secara real time untuk menghasilkan K-line. Jika antarmuka K-line pertukaran mendukung pertanyaan paging, beberapa permintaan API akan dibuat ketika memanggilexchange.SetMaxBarLen()fungsi untuk mengatur panjang K-line yang lebih besar. Ketikaexchange.GetRecords()fungsi dipanggil pada awalnya, jumlah batang K-line yang diperoleh berbeda antara backtesting dan perdagangan nyata: - Sistem backtesting akan memperoleh sejumlah batang K-line sebelum dimulainya rentang waktu backtesting sebelumnya (default adalah 5000, pengaturan sistem backtesting dan jumlah data akan mempengaruhi jumlah akhir yang dikembalikan), sebagai data K-line awal. - Jumlah batang K-line yang diperoleh selama perdagangan sebenarnya didasarkan pada jumlah maksimum data yang dapat diperoleh dari antarmuka K-line dari bursa. Peraturanperiodparameter diatur menjadi 5, yang merupakan permintaan untuk mendapatkan data K-line dengan periode 5 detik.periodParameter tidak habis dibagi 60 (yaitu, periode yang diwakili tidak habis dibagi menit).exchange.GetTrades()untuk memperoleh data catatan transaksi dan mensintesis data K-line yang diperlukan.periodparameter dibagi 60, maka data garis K yang diperlukan disintesis menggunakan minimal data garis K 1 menit (jika memungkinkan, data garis K yang diperlukan disintesis menggunakan periode yang lebih besar). Simulasi level backtesting dalam sistem backtesting membutuhkan pengaturan periode K-line yang mendasari (ketika sistem backtesting mensimulasikan level backtesting, data K-line yang sesuai digunakan untuk menghasilkan data Tick sesuai dengan periode K-line yang mendasari). PeraturanC++bahasa memiliki contoh kode berikut jika Anda perlu membangun data K-line Anda sendiri:

#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);                     
}

Bursa yang tidak mendukungexchange.GetRecords()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetRecords Zaif / Coincheck / BitFlyer Futures_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

Dapatkan periode K-line yang ditetapkan pada halaman situs web platform FMZ Quant Trading saat backtesting dan menjalankan strategi dalam perdagangan langsung, yaitu periode K-line default yang digunakan saat memanggilexchange.GetRecords()fungsi tanpa melewati parameter.

Periode garis K dalam detik, nilai bulat dalam detik. Nomor

pertukaran.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

Tetapkan panjang maksimum garis K.

pertukaran.SetMaxBarLen ((n)

Parameterndigunakan untuk menentukan panjang garis K maksimum. n benar Nomor

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]);
}

Peraturanexchange.SetMaxBarLen()fungsi mempengaruhi dua aspek untuk runtime strategi cryptocurrency:

  • Berpengaruh pada jumlah batang K-line (Bars) yang diperoleh pada panggilan pertama.
  • Mempengaruhi jumlah maksimum batang K-line (Bars).

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

exchange.GetRawJSON

Dapatkan konten asli kembali oleh terakhirrestpermintaan untuk objek pertukaran saat ini ({@var/EXCHANGE exchange}, {@var/EXCHANGE/exchanges exchanges}).

Data respons untukrestpermintaan. string

exchange.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);
}

Peraturanexchange.GetRawJSON()Fungsi ini tidak didukung oleh strategi dalam trading.C++ language.

{@var/EXCHANGE pertukaran}

exchange.GetRate

Dapatkan nilai tukar yang saat ini ditetapkan untuk objek pertukaran.

Nilai saat ini dari nilai tukar objek pertukaran. Nomor

exchange.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());
}

Jikaexchange.SetRate()tidak dipanggil untuk menetapkan nilai tukar,exchange.GetRate()fungsi mengembalikan nilai tingkat default 1. Artinya, data yang terkait dengan mata uang yang ditampilkan saat ini (quoteCurrency) belum dikonversi. Jika nilai nilai tukar telah ditetapkan menggunakanexchange.SetRate(), misalnya,exchange.SetRate(7)Kemudian semua informasi harga, seperti penawaran, kedalaman, dan harga pesanan yang diperoleh melaluiexchangeobjek pertukaran akan dikonversi dengan mengalikan dengan nilai tukar yang ditetapkan7Aku tidak tahu. Jikaexchangesesuai dengan pertukaran dengan USD sebagai mata uang denominasi, setelah panggilanexchange.SetRate(7), semua harga di pasar langsung akan dikonversi ke harga yang dekat dengan CNY dengan mengalikan7Pada titik ini, nilai nilai tukar yang diperoleh dengan menggunakanexchange.GetRate()adalah7.

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

exchange.SetData

Peraturanexchange.SetData()Fungsi digunakan untuk mengatur data yang dimuat saat strategi berjalan.

Panjang string setelah parametervalueKode JSON. Nomor

exchange.SetData ((kunci, nilai)

Nama pengumpulan data. kunci benar string Data yang akan dimuat olehexchange.SetData()Struktur data adalah sama dengan format data yang diminta olehexchange.GetData()fungsi saat meminta data eksternal, yaitu:"schema": ["time", "data"]Aku tidak tahu. nilai benar Array

/*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);
    }
}

Hal ini mengharuskan bahwa data untuk parametervalueharus dalam format yang sama dengandataAnda dapat melihat bahwa timestamp1579622400000sesuai dengan waktu2020-01-22 00:00:00, dan bahwa ketika program strategi dijalankan setelah waktu ini, memanggilexchange.GetData()fungsi untuk mendapatkan data sebelum data timestamp berikutnya1579708800000, yaitu, waktu2020-01-23 00:00:00Apa yang kau dapatkan adalah[1579622400000, 123]isi data tersebut, saat program terus berjalan, waktu berubah, dan sebagainya untuk mendapatkan item data secara item. dalam contoh berikut, pada saat runtime (backtesting atau live trading), momen saat ini mencapai atau melebihi timestamp1579795200000, yangexchange.GetData()fungsi dipanggil dan nilai balik adalah:{"Time":1579795200000,"Data":["abc", 123,{"price":123}]}. "Time":1579795200000sesuai dengan1579795200000dalam data[1579795200000, ["abc", 123, {"price": 123}]]. "Data":["abc", 123, {"price": 123}]sesuai dengan data["abc", 123, {"price": 123}]]dalam[1579795200000, ["abc", 123, {"price": 123}]].

Data yang dimuat dapat berupa indikator ekonomi, data industri, indikator yang relevan, dll, yang digunakan untuk penilaian kuantitatif strategi dari semua informasi yang dapat diukur.

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

exchange.GetData

Peraturanexchange.GetData()fungsi digunakan untuk mendapatkan data dimuat olehexchange.SetData()fungsi atau disediakan oleh tautan eksternal.

Catatan dalam pengumpulan data. objek

exchange.GetData (kunci) pertukaran.GetData (kunci, waktu habis)

Nama pengumpulan data. kunci benar string Digunakan untuk mengatur cache timeout dalam milidetik. Default ke satu menit cache timeout untuk perdagangan hidup. timeout palsu nomor

/*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);
    }
}

Panggilan untuk mendapatkan data yang ditulis langsung.

/*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);
    }
}

Ini mendukung untuk meminta data melalui tautan eksternal, format data yang diminta untuk:

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

Di mana?schemaadalah format data untuk setiap catatan dalam tubuh data yang dimuat, yang ditetapkan pada["time", "data"]yang sesuai dengan format data entri per entri dalamdataatribut. Apa yang disimpan didataatribut adalah tubuh data, dengan setiap entri yang terdiri dari timestamp tingkat milidetik dan isi data (yang bisa menjadi data yang dapat dienkode JSON). Program layanan untuk pengujian, ditulis dalam 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)
}

Data tanggapan program pada saat menerima permintaan:

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

Kode strategi uji:

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"));
}

Metode panggilan untuk mendapatkan data dari tautan eksternal.

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"));
}

Minta data untuk kueri yang dibuat di platformdata data, meminta bahwa format data jawaban adalah (harus memiliki waktu, bidang data yang dijelaskan dalam skema):

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

Bidang data adalah isi data yang diperlukan, dan data dalam bidang data harus sama dengan apa yang disepakati dalam schema.exchange.GetData()fungsi dipanggil, objek JSON dikembalikan, misalnya:{"Time":1579795200000, "Data":"..."}.

Dapatkan data sekaligus untuk backtesting dan cache satu menit data untuk perdagangan langsung. dalam sistem backtesting, ketika meminta data menggunakan antarmuka akses, sistem backtesting secara otomatis menambahkanfrom(dicap waktu dalam detik),to(timestamped dalam detik) untuk permintaan, parameter sepertiperiod(periode garis K yang mendasari, bertanda waktu dalam milidetik) digunakan untuk menentukan kerangka waktu di mana data akan diperoleh.

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

exchange.GetMarkets

Peraturanexchange.GetMarkets()fungsi digunakan untuk mendapatkan informasi pasar pertukaran.

Kamus yang berisi struktur {@struct/Market Market}. objek

pertukaran.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]);
}

Contoh panggilan ke obyek bursa berjangka:

/*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() + "`");
}

Gunakan obyek pertukaran berjangka untuk memanggilexchange.GetMarkets()fungsi dalam sistem backtesting. Sebelum memanggil fungsi pasar manapun, GetMarkets hanya mengembalikan data pasar dari pasangan perdagangan default saat ini. Setelah memanggil fungsi pasar, ia mengembalikan data pasar dari semua varietas yang diminta. Anda dapat merujuk pada contoh uji berikut:

Peraturanexchange.GetMarkets()fungsi mengembalikan kamus dengan kunci bernama nama varietas perdagangan, dan untuk spot fix yang diformat sebagai pasangan perdagangan, misalnya:

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

Untuk bursa kontrak berjangka, karena mungkin ada beberapa kontrak untuk varietas yang sama, misalnyaBTC_USDTperdagangan pasangan, ada kontrak abadi, kontrak triwulanan, dan sebagainya.exchange.GetMarkets()fungsi mengembalikan kamus dengan nama kunci pasangan dikombinasikan dengan kode kontrak, misalnya:

{
    "BTC_USDT.swap" : {...},     // The key value is the Market structure
    "BTC_USDT.quarter" : {...}, 
    "LTC_USDT.swap" : {...},
    ...
}
  • Peraturanexchange.GetMarkets()Fungsi mendukung perdagangan langsung, sistem backtesting.
  • Peraturanexchange.GetMarkets()fungsi mengembalikan informasi pasar hanya untuk varietas yang diperdagangkan secara online di bursa.
  • Peraturanexchange.GetMarkets()fungsi tidak mendukung kontrak opsi.

Bursa yang tidak mendukungexchange.GetMarkets()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetMarkets Coincheck / Bithumb / BitFlyer

{@struct/Pasar Pasar}

exchange.GetTickers

Peraturanexchange.GetTickers()Fungsi ini digunakan untuk mendapatkan data ticker agregat pertukaran (saringan struktur {@struct/Ticker Ticker}).exchangeMengembalikan data ticker untuk semua pasangan perdagangan ketika itu adalah objek pertukaran spot;exchangeMengembalikan data ticker untuk semua kontrak ketika itu adalah obyek pertukaran berjangka.

Peraturanexchange.GetTickers()fungsi mengembalikan array struktur {@struct/Ticker Ticker} ketika berhasil meminta data, dan null ketika gagal. {@struct/Ticker Ticker} array, nilai nol

pertukaran.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());
    }
}

Panggilexchange.GetTickers()fungsi untuk memperoleh data pasar agregat.

/*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() + "`");
}

Gunakan spot exchange objek dan memanggilexchange.GetTickers()fungsi dalam sistem backtest. Sebelum memanggil fungsi pasar manapun, GetTickers hanya mengembalikan data ticker dari pasangan perdagangan default saat ini. Setelah memanggil fungsi pasar, ia mengembalikan data ticker dari semua varietas yang diminta. Anda dapat merujuk pada contoh uji berikut:

  • Fungsi ini meminta pertukaran untuk agregat ticker antarmuka, tidak perlu mengatur pasangan perdagangan, kode kontrak sebelum panggilan.
  • Sistem backtesting mendukung fungsi ini.
  • Objek Exchange yang tidak menyediakan antarmuka ticker agregat tidak mendukung fungsi ini.
  • Fungsi ini tidak mendukung kontrak opsi.

Bursa yang tidak mendukungexchange.GetTickers()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetTickers Zaif / WOO / Gemini / Coincheck / BitFlyer / Bibox Futures_WOO / Futures_dYdX / Futures_Deribit / Futures_Bibox / Futures_Aevo

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

Log Perdagangan