Sumber daya yang dimuat... Pemuatan...

Perdagangan

exchange.Buy

Peraturanexchange.Buy()Fungsi ini digunakan untuk menempatkan pesanan beli.Buy()fungsi adalah anggota fungsi dari exchange object {@var/EXCHANGE exchange}.Buy()fungsi beroperasi pada rekening pertukaran yang terikat pada objek pertukaranexchangeTujuan dari fungsi anggota (metode) dariexchangeobjek hanya terkait denganexchange, dan tidak akan diulang setelah dokumentasi.

Perintah yang berhasil mengembalikan ID pesanan, perintah yang gagal mengembalikan nilai nol. AtributnyaIdstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pasangan perdagangan spotETH_USDTurutan pertukaran OKX adalah:ETH-USDT,1547130415509278720Aku tidak tahu. Saat meneleponexchange.Buy()fungsi untuk menempatkan pesanan, nilai kembali pesananIdadalah konsisten denganIdatribut dari struktur order {@struct/Order Order}.

string, nilai nol

pertukaran.Membeli ((harga, jumlah) pertukaran.Beli ((harga, jumlah,... args)

PeraturanpriceParameter digunakan untuk mengatur harga pesanan. harga benar Nomor PeraturanamountParameter digunakan untuk mengatur jumlah pesanan. jumlah benar nomor Parameter yang diperluas yang dapat menghasilkan informasi yang menyertainya ke log pesanan ini,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, null dan jenis lain yang didukung oleh sistem

function main() {
    var id = exchange.Buy(100, 1);
    Log("id:", id);
}
def main():
    id = exchange.Buy(100, 1)
    Log("id:", id)
void main() {
    auto id = exchange.Buy(100, 1);
    Log("id:", id);
}

Nomor urutan yang dikembalikan olehexchange.Buy()dapat digunakan untuk menanyakan informasi pesanan dan membatalkan pesanan.

// The following is an error call
function main() {
    exchange.SetContractType("quarter")
  
    // Set the shorting direction
    exchange.SetDirection("sell")     
    // If you place a buy order, an error will be reported, and shorting can only be sold
    var id = exchange.Buy(50, 1)

    // Set the long direction
    exchange.SetDirection("buy")      
    // If you place a sell order, it will report an error, go long, only buy
    var id2 = exchange.Sell(60, 1)    
  
    // Set direction to close long positions
    exchange.SetDirection("closebuy")    
    // If you place a buy order, it will report an error, close long, only sell
    var id3 = exchange.Buy(-1, 1)        
  
    // Set direction to close short positions
    exchange.SetDirection("closesell")   
    // If you place a sell order, it will report an error, close short, only buy
    var id4 = exchange.Sell(-1, 1)       
}
# The following is an error call
def main():
    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    id = exchange.Buy(50, 1)
    exchange.SetDirection("buy")
    id2 = exchange.Sell(60, 1)
    exchange.SetDirection("closebuy")
    id3 = exchange.Buy(-1, 1)
    exchange.SetDirection("closesell")
    id4 = exchange.Sell(-1, 1)
// The following is an error call
void main() {
    exchange.SetContractType("quarter");
    exchange.SetDirection("sell");
    auto id = exchange.Buy(50, 1);
    exchange.SetDirection("buy");
    auto id2 = exchange.Sell(60, 1);
    exchange.SetDirection("closebuy");
    auto id3 = exchange.Buy(-1, 1);
    exchange.SetDirection("closesell");
    auto id4 = exchange.Sell(-1, 1);
}

Ketika menempatkan pesanan untuk kontrak berjangka cryptocurrency, perhatian harus diambil untuk memastikan bahwa arah perdagangan ditetapkan dengan benar, karena ketidakcocokan antara arah perdagangan dan fungsi perdagangan akan menghasilkan kesalahan:

direction is sell, invalid order type Buy
direction is buy, invalid order type Sell
direction is closebuy, invalid order type Buy
direction is closesell, invalid order type Sell
// For example, the trading pair: ETH_BTC, place a buy order at the market price
function main() {
    // Place a buy order at the market price and buy ETH coins with a value of 0.1 BTC (denominated currency)
    exchange.Buy(-1, 0.1)    
}
def main():
    exchange.Buy(-1, 0.1)
void main() {
    exchange.Buy(-1, 0.1);
}

Perintah pasar spot.

Saat menempatkan pesanan untuk kontrak berjangka, Anda harus memperhatikan apakah arah perdagangan ditetapkan dengan benar, karena kesalahan akan dilaporkan jika arah perdagangan dan fungsi perdagangan tidak cocok. Parameterpricediatur untuk-1untuk menempatkan pesanan pasar, yang membutuhkan antarmuka penempatan pesanan bursa untuk mendukung pesanan pasar.amountadalah jumlah uang dalam mata uang pesanan. Ketika menempatkan pesanan pasar untuk kontrak berjangka cryptocurrency, parameter jumlahamountadalah jumlah kontrak. Ada beberapa bursa cryptocurrency yang tidak mendukung antarmuka pesanan pasar selama perdagangan langsung. Jumlah pesanan untuk pesanan beli pasar di beberapa bursa spot adalah jumlah koin perdagangan. Silakan lihatInstruksi Khusus untuk PertukaranPanduan Pengguna untuk rincian. Jika Anda menggunakan versi lama dari docker, nilai kembali dari perintahIddariexchange.Buy()fungsi mungkin berbeda dari nilai kembali dari pesananIddijelaskan dalam dokumen ini.

{@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@fun/Futures/exchange.SetDirection exchange.SetDirection}

exchange.Sell

Peraturanexchange.Sell()fungsi digunakan untuk menempatkan pesanan jual.

Perintah yang berhasil mengembalikan order Id, perintah yang gagal mengembalikan nilai nol.Idstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pasangan perdagangan spotETH_USDTurutan pertukaran OKX adalah:ETH-USDT,1547130415509278720. Ketika memanggilexchange.Sell()fungsi untuk menempatkan pesanan, nilai kembali pesananIdadalah konsisten denganIdatribut dari struktur order {@struct/Order Order}. string, nilai nol

pertukaran.Menjual ((harga, jumlah) pertukaran.Menjual ((harga, jumlah,... args)

PeraturanpriceParameter digunakan untuk mengatur harga pesanan. harga benar Nomor PeraturanamountParameter digunakan untuk mengatur jumlah pesanan. jumlah benar nomor Parameter yang diperluas yang dapat menghasilkan informasi yang menyertainya ke log pesanan ini,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, null dan jenis lain yang didukung oleh sistem

function main(){
    var id = exchange.Sell(100, 1)
    Log("id:", id)
}
def main():
    id = exchange.Sell(100, 1)
    Log("id:", id)
void main() {
    auto id = exchange.Sell(100, 1);
    Log("id:", id);
}

Nomor urutan yang dikembalikan olehexchange.Sell()dapat digunakan untuk menanyakan informasi pesanan dan membatalkan pesanan.

// The following is an error call
function main() {
    exchange.SetContractType("quarter")
  
    // Set the shorting direction
    exchange.SetDirection("sell")     
    // If you place a buy order, an error will be reported, and shorting can only be sold
    var id = exchange.Buy(50, 1)                  

    // Set the long direction
    exchange.SetDirection("buy")      
    // If you place a sell order, it will report an error, go long, only buy
    var id2 = exchange.Sell(60, 1)    
  
    // Set direction to close long positions
    exchange.SetDirection("closebuy")    
    // If you place a buy order, it will report an error, close long, only sell
    var id3 = exchange.Buy(-1, 1)        
  
    // Set direction to close short positions
    exchange.SetDirection("closesell")   
    // If you place a sell order, it will report an error, close short, only buy
    var id4 = exchange.Sell(-1, 1)       
}
# The following is an error call
def main():
    exchange.SetContractType("quarter")
    exchange.SetDirection("sell")
    id = exchange.Buy(50, 1)
    exchange.SetDirection("buy")
    id2 = exchange.Sell(60, 1)
    exchange.SetDirection("closebuy")
    id3 = exchange.Buy(-1, 1)
    exchange.SetDirection("closesell")
    id4 = exchange.Sell(-1, 1)
// The following is an error call
void main() {
    exchange.SetContractType("quarter");
    exchange.SetDirection("sell");
    auto id = exchange.Buy(50, 1);
    exchange.SetDirection("buy");
    auto id2 = exchange.Sell(60, 1);
    exchange.SetDirection("closebuy");
    auto id3 = exchange.Buy(-1, 1);
    exchange.SetDirection("closesell");
    auto id4 = exchange.Sell(-1, 1);
}

Ketika menempatkan pesanan untuk kontrak berjangka cryptocurrency, perhatian harus diambil untuk memastikan bahwa arah perdagangan ditetapkan dengan benar, karena ketidakcocokan antara arah perdagangan dan fungsi perdagangan akan menghasilkan kesalahan:

direction is sell, invalid order type Buy
direction is buy, invalid order type Sell
direction is closebuy, invalid order type Buy
direction is closesell, invalid order type Sell
// For example, the trading pair: ETH_BTC, place a sell order at the market price
function main() {
    // Note: place a market order to sell, sell 0.2 ETH
    exchange.Sell(-1, 0.2)   
}
def main():
    exchange.Sell(-1, 0.2)
void main() {
    exchange.Sell(-1, 0.2);
}

Perintah pasar spot.

Saat menempatkan pesanan untuk kontrak berjangka, Anda harus memperhatikan apakah arah perdagangan ditetapkan dengan benar, karena kesalahan akan dilaporkan jika arah perdagangan dan fungsi perdagangan tidak cocok. Parameterpricediatur untuk-1untuk menempatkan pesanan pasar, yang membutuhkan antarmuka penempatan pesanan bursa untuk mendukung pesanan pasar.amountadalah jumlah dalam mata uang perdagangan. Ketika menempatkan pesanan pasar untuk kontrak berjangka cryptocurrency, parameter jumlahamountAda beberapa pertukaran cryptocurrency yang tidak mendukung antarmuka pesanan pasar selama perdagangan langsung. Jika Anda menggunakan versi lama dari docker, nilai kembali dari perintahIddariexchange.Sell()fungsi mungkin berbeda dari nilai kembali dari pesananIddijelaskan dalam dokumen ini.

{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Futures/exchange.SetContractType exchange.SetContractType}, {@fun/Futures/exchange.SetDirection exchange.SetDirection}

exchange.CreateOrder

Peraturanexchange.CreateOrder()fungsi digunakan untuk menempatkan pesanan.

Jika pesanan berhasil ditempatkan, ID pesanan dikembalikan; jika pesanan gagal, nilai nol dikembalikan.Idstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pesanan dari pasangan perdagangan spotETH_USDTdari bursa OKX adalah:ETH-USDT,1547130415509278720. Ketika memanggilexchange.CreateOrder(symbol, side, price, amount)fungsi untuk menempatkan pesanan, nilai yang dikembalikan dari pesananIdadalah konsisten denganIdproperti dari struktur order {@struct/Order Order}. string, nilai nol

exchange.CreateOrder ((simbol, sisi, harga, jumlah) exchange.CreateOrder ((simbol, sisi, harga, jumlah,... args)

Parametersymboldigunakan untuk menentukan pasangan perdagangan tertentu dan kode kontrak pesanan.exchange.CreateOrder(symbol, side, price, amount)fungsi untuk menempatkan pesanan,exchangeadalah objek pertukaran spot. Jika mata uang pesanan adalah USDT dan mata uang perdagangan adalah BTC, parametersymboladalah:"BTC_USDT", dalam format pasangan perdagangan yang didefinisikan oleh platform FMZ.exchange.CreateOrder(symbol, side, price, amount)fungsi untuk menempatkan pesanan,exchangeadalah objek pertukaran berjangka. Jika pesanan adalah pesanan kontrak abadi standar BTCs U, parametersymboladalah:"BTC_USDT.swap", dan formatnya adalah kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter ..exchange.CreateOrder(symbol, side, price, amount)fungsi untuk menempatkan pesanan,exchangeadalah objek pertukaran berjangka. Jika pesanan adalah pesanan kontrak opsi standar U BTCs, parametersymboladalah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh), dan formatnya adalah kombinasi daripasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. simbol benar string PeraturansideParameter digunakan untuk menentukan arah perdagangan order. Untuk obyek pertukaran spot, nilai opsional darisideparameter adalah:buy, sell. buyberarti membeli, dansellberarti menjual. Untuk obyek pertukaran berjangka, nilai opsional darisideparameter adalah:buy, closebuy, sell, closesell. buyberarti membuka posisi panjang,closebuyberarti menutup posisi panjang,sellberarti membuka posisi pendek, danclosesellberarti menutup posisi pendek.

sisi benar string Parameterpricedigunakan untuk menetapkan harga order. harga -1 menunjukkan bahwa order adalah order pasar. harga benar nomor Parameteramountdigunakan untuk menetapkan jumlah pesanan. Harap dicatat bahwa ketika pesanan adalah pesanan beli pasar, jumlah pesanan adalah jumlah pembelian; jumlah pesanan pesanan beli pasar beberapa bursa spot adalah jumlah koin perdagangan. Untuk rincian, silakan lihatInstruksi Khusus untuk Pertukarandalam Panduan Pengguna. jumlah benar nomor Parameter diperluas dapat output informasi tambahan ke order log ini.argparameter dapat dilewati. arg palsu Setiap jenis yang didukung oleh sistem, seperti string, nomor, bool, objek, array, nilai nol, dll.

function main() {
    var id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01)           // Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
    // var id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01)   // Futures exchange objects place orders for BTC's U-standard perpetual contracts
    Log("Order Id:", id)
}
def main():
    id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01)          # Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
    # id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01)   # Futures exchange objects place orders for BTC's U-standard perpetual contracts
    Log("Order Id:", id)
void main() {
    auto id = exchange.CreateOrder("BTC_USDT", "buy", 60000, 0.01);           // Spot exchange objects place orders for currency-to-currency transactions BTC_USDT trading pairs
    // auto id = exchange.CreateOrder("BTC_USDT.swap", "buy", 60000, 0.01);   // Futures exchange objects place orders for BTC's U-standard perpetual contracts
    Log("Order Id:", id);
}

Objek pertukaran spot dan obyek pertukaran futures disebutexchange.CreateOrder()fungsi untuk menempatkan pesanan.

{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}

exchange.CancelOrder

Peraturanexchange.CancelOrder()fungsi digunakan untuk membatalkan pesanan. AtributnyaIdstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pesanan dari pasangan perdagangan spotETH_USDTdari bursa OKX adalah:ETH-USDT,1547130415509278720Aku tidak tahu. ParameterorderIdmelewati saat memanggilexchange.CancelOrder()fungsi untuk membatalkan pesanan adalah konsisten denganIdproperti dari struktur order {@struct/Order Order}.

Peraturanexchange.CancelOrder()fungsi mengembalikan nilai benar, misalnyatrueberarti bahwa permintaan order pembatalan telah dikirim dengan sukses. Jika mengembalikan nilai palsu, sepertifalse, berarti bahwa permintaan order pembatalan gagal dikirim. Nilai yang dikembalikan hanya mewakili keberhasilan atau kegagalan permintaan yang dikirim untuk menentukan apakah bursa membatalkan pesanan. Anda dapat meneleponexchange.GetOrders()untuk menentukan apakah perintah dibatalkan. bool

Pertukaran. Batalkan Pesenan ((PesenanId) Pertukaran. Batalkan Pesenan ((PesenanId,... args)

PeraturanorderIdParameter digunakan untuk menentukan order yang akan dibatalkan. Perintah benar nomor, string Parameter diperpanjang, Anda dapat keluarkan informasi yang terlampir ke log penarikan ini,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, null dan jenis lain yang didukung oleh sistem

function main(){
    var id = exchange.Sell(99999, 1)
    exchange.CancelOrder(id)
}
def main():
    id = exchange.Sell(99999, 1)
    exchange.CancelOrder(id)
void main() {
    auto id = exchange.Sell(99999, 1);
    exchange.CancelOrder(id);
}

Batalkan pesanan.

function main() {
    if (exchange.GetName().includes("Futures_")) {
        Log("Set the contract as: perpetual contract, set the trade direction as: open long position.")
        exchange.SetContractType("swap")
        exchange.SetDirection("buy")
    }
    
    var ticker = exchange.GetTicker()
    exchange.Buy(ticker.Last * 0.5, 0.1)
    
    var orders = exchange.GetOrders()
    for (var i = 0 ; i < orders.length ; i++) {
        exchange.CancelOrder(orders[i].Id, "Cancelled orders:", orders[i])
        Sleep(500)
    }
}
def main():
    if exchange.GetName().find("Futures_") != -1:
        Log("Set the contract as: perpetual contract, set the trade direction as: open long position.")
        exchange.SetContractType("swap")
        exchange.SetDirection("buy")
    
    ticker = exchange.GetTicker()
    exchange.Buy(ticker["Last"] * 0.5, 0.1)            

    orders = exchange.GetOrders()
    for i in range(len(orders)):
        exchange.CancelOrder(orders[i]["Id"], "Cancelled orders:", orders[i])
        Sleep(500)
void main() {
    if (exchange.GetName().find("Futures_") != std::string::npos) {
        Log("Set the contract as: perpetual contract, set the trade direction as: open long position.");
        exchange.SetContractType("swap");
        exchange.SetDirection("buy");
    }            

    auto ticker = exchange.GetTicker();
    exchange.Buy(ticker.Last * 0.5, 0.1);            

    auto orders = exchange.GetOrders();
    for (int i = 0 ; i < orders.size() ; i++) {
        exchange.CancelOrder(orders[i].Id, "Cancelled orders:", orders[i]);
        Sleep(500);
    }
}

Fungsi FMZ API yang dapat menghasilkan fungsi log output seperti:Log(), exchange.Buy(), exchange.CancelOrder()dapat diikuti oleh beberapa parameter output yang menyertainya setelah parameter yang diperlukan.exchange.CancelOrder(orders[i].Id, orders[i]), sehingga ketika membatalkan pesanan yang Id adalahorders[i].Id, informasi orders output dengan itu. yaitu, struktur {@struct/Order Order} dariorders[i].

Jika Anda menggunakan versi yang lebih tua dari docker, parameter orderId dari fungsi exchange.CancelOrder() mungkin berbeda dari orderId yang dijelaskan dalam dokumen saat ini.

{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}

exchange.GetOrder

Peraturanexchange.GetOrder()fungsi digunakan untuk mendapatkan informasi pesanan.

Menanyakan detail urutan sesuai dengan nomor urutan, dan mengembalikan struktur {@struct/Order Order} jika permintaan berhasil, atau mengembalikan null jika permintaan gagal. {@struct/Order Order}, nilai nol

tukar.GetOrder (OrderId)

PeraturanorderIdParameter digunakan untuk menentukan urutan yang akan ditanyakan. AtributnyaIdstruktur order {@struct/Order Order} dari platform FMZ terdiri dari kode produk pertukaran dan ID pesanan asli pertukaran, dipisahkan oleh koma bahasa Inggris.Idformat pesanan dari pasangan perdagangan spotETH_USDTdari bursa OKX adalah:ETH-USDT,1547130415509278720Aku tidak tahu. ParameterorderIdmelewati saat memanggilexchange.GetOrder()fungsi untuk menanyakan perintah adalah konsisten denganIdproperti dari struktur order {@struct/Order Order}.

Perintah benar string

function main(){
    var id = exchange.Sell(1000, 1)
    // Parameter id is the order number, you need to fill in the number of the order you want to query
    var order = exchange.GetOrder(id)      
    Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:",
        order.DealAmount, "Status:", order.Status, "Type:", order.Type)
}
def main():
    id = exchange.Sell(1000, 1)
    order = exchange.GetOrder(id)
    Log("Id:", order["Id"], "Price:", order["Price"], "Amount:", order["Amount"], "DealAmount:", 
        order["DealAmount"], "Status:", order["Status"], "Type:", order["Type"])
void main() {
    auto id = exchange.Sell(1000, 1);
    auto order = exchange.GetOrder(id);
    Log("Id:", order.Id, "Price:", order.Price, "Amount:", order.Amount, "DealAmount:", 
        order.DealAmount, "Status:", order.Status, "Type:", order.Type);
}

Peraturanexchange.GetOrder()Fungsi ini tidak didukung oleh beberapa pertukaran.AvgPriceAtribut dalam struktur {@struct/Order Order} dari nilai pengembalian adalah harga rata-rata transaksi. Beberapa bursa tidak mendukung bidang ini, dan jika tidak, ditetapkan menjadi 0. Jika Anda menggunakan versi lama dari docker,orderIdparameter dariexchange.GetOrder()fungsi dapat berbeda dariorderIddijelaskan dalam dokumentasi saat ini. Bursa yang tidak mendukungexchange.GetOrder()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetOrder Zaif / Coincheck / Bitstamp

{@struct/Order Order}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}

exchange.GetOrders

Peraturanexchange.GetOrders()Fungsi digunakan untuk mendapatkan pesanan yang belum selesai.

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

pertukaran.GetOrders ((() exchange.GetOrders (simbol)

Parametersymboldigunakan untuk mengaturSimbol transaksiataurentang simbol transaksiuntuk diinterogasi. Untuk obyek pertukaran spot, jikasymbolparameter tidak dilewati, data pesanan yang belum selesai dari semua produk spot akan diminta. Untuk obyek pertukaran futures, jikasymbolparameter tidak diteruskan, default adalah untuk meminta data order yang belum selesai dari semua varietas dalam kisaran dimensi pasangan perdagangan saat ini dan kode kontrak.

lambang palsu string

/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

function main() {
    var arrSymbol = ["ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"]

    for (var symbol of arrSymbol) {
        var t = exchange.GetTicker(symbol)
        exchange.CreateOrder(symbol, "buy", t.Last / 2, 0.01)
    }

    var spotOrders = exchange.GetOrders()

    var tbls = []
    for (var orders of [spotOrders]) {
        var tbl = {type: "table", title: "test GetOrders", cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")

    // Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
    return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
'''

import json

def main():
    arrSymbol = ["ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"]

    for symbol in arrSymbol:
        t = exchange.GetTicker(symbol)
        exchange.CreateOrder(symbol, "buy", t["Last"] / 2, 0.01)

    spotOrders = exchange.GetOrders()

    tbls = []
    for orders in [spotOrders]:
        tbl = {"type": "table", "title": "test GetOrders", "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], "rows": []}
        for order in orders:
            tbl["rows"].append([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        tbls.append(tbl)

    LogStatus("`" + json.dumps(tbls) +  "`")

    return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"ETH_USDT", "BTC_USDT", "LTC_USDT", "SOL_USDT"};
    
    for (const auto& symbol : arrSymbol) {
        auto t = exchange.GetTicker(symbol);
        exchange.CreateOrder(symbol, "buy", t.Last / 2, 0.01);
    }

    auto spotOrders = exchange.GetOrders();

    json tbls = R"([])"_json;
    std::vector<std::vector<Order>> arr = {spotOrders};
    for (const auto& orders : arr) {
        json tbl = R"({
            "type": "table", 
            "title": "test GetOrders", 
            "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"],
            "rows": []
        })"_json;

        for (const auto& order : orders) {
            json arrJson = R"([])"_json;

            arrJson.push_back("Symbol");
            arrJson.push_back("Id");
            arrJson.push_back(order.Price);
            arrJson.push_back(order.Amount);
            arrJson.push_back(order.DealAmount);
            arrJson.push_back(order.AvgPrice);
            arrJson.push_back(order.Status);
            arrJson.push_back(order.Type);
            arrJson.push_back(order.Offset);
            arrJson.push_back(order.ContractType);

            tbl["rows"].push_back(arrJson);
        }

        tbls.push_back(tbl);
    }
    
    LogStatus(_D(), "\n", "`" + tbls.dump() + "`");

    return;
}

Gunakan objek pertukaran spot untuk menempatkan pesanan beli untuk beberapa pasangan perdagangan yang berbeda pada setengah harga saat ini, dan kemudian menanyakan informasi pesanan yang belum selesai.

/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

    for (var symbol of arrSymbol) {
        var t = exchange.GetTicker(symbol)
        exchange.CreateOrder(symbol, "buy", t.Last / 2, 1)
        exchange.CreateOrder(symbol, "sell", t.Last * 2, 1)
    }

    var defaultOrders = exchange.GetOrders()
    var swapOrders = exchange.GetOrders("USDT.swap")
    var futuresOrders = exchange.GetOrders("USDT.futures")
    var btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap")

    var tbls = []
    var arr = [defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders]
    var tblDesc = ["defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"]
    for (var index in arr) {
        var orders = arr[index]
        var tbl = {type: "table", title: tblDesc[index], cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}
        for (var order of orders) {
            tbl.rows.push([order.Symbol, order.Id, order.Price, order.Amount, order.DealAmount, order.AvgPrice, order.Status, order.Type, order.Offset, order.ContractType])
        }
        tbls.push(tbl)
    }

    LogStatus("`" + JSON.stringify(tbls) +  "`")

    // Print out the information once and then return to prevent the order from being executed during the subsequent backtest and affecting data observation
    return
}
'''backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
'''

import json

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

    for symbol in arrSymbol:
        t = exchange.GetTicker(symbol)
        exchange.CreateOrder(symbol, "buy", t["Last"] / 2, 1)
        exchange.CreateOrder(symbol, "sell", t["Last"] * 2, 1)

    defaultOrders = exchange.GetOrders()
    swapOrders = exchange.GetOrders("USDT.swap")
    futuresOrders = exchange.GetOrders("USDT.futures")
    btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap")

    tbls = []
    arr = [defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders]
    tblDesc = ["defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"]
    for index in range(len(arr)):
        orders = arr[index]
        tbl = {"type": "table", "title": tblDesc[index], "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], "rows": []}
        for order in orders:
            tbl["rows"].append([order["Symbol"], order["Id"], order["Price"], order["Amount"], order["DealAmount"], order["AvgPrice"], order["Status"], order["Type"], order["Offset"], order["ContractType"]])
        tbls.append(tbl)

    LogStatus("`" + json.dumps(tbls) +  "`")

    return
/*backtest
start: 2024-05-21 00:00:00
end: 2024-09-05 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

void main() {
    auto arrSymbol = {"BTC_USDT.swap", "BTC_USDT.quarter", "ETH_USDT.swap", "ETH_USDT.quarter"};
    
    for (const auto& symbol : arrSymbol) {
        auto t = exchange.GetTicker(symbol);
        exchange.CreateOrder(symbol, "buy", t.Last / 2, 1);
        exchange.CreateOrder(symbol, "sell", t.Last * 2, 1);
    }
    
    auto defaultOrders = exchange.GetOrders();
    auto swapOrders = exchange.GetOrders("USDT.swap");
    auto futuresOrders = exchange.GetOrders("USDT.futures");
    auto btcUsdtSwapOrders = exchange.GetOrders("BTC_USDT.swap");
    
    json tbls = R"([])"_json;
    std::vector<std::vector<Order>> arr = {defaultOrders, swapOrders, futuresOrders, btcUsdtSwapOrders};
    std::string tblDesc[] = {"defaultOrders", "swapOrders", "futuresOrders", "btcUsdtSwapOrders"};
    for (int index = 0; index < arr.size(); index++) {
        auto orders = arr[index];
        json tbl = R"({
            "type": "table", 
            "cols": ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"],
            "rows": []
        })"_json;
        tbl["title"] = tblDesc[index];
    
        for (const auto& order : orders) {
            json arrJson = R"([])"_json;

            arrJson.push_back(order.Symbol);
            arrJson.push_back(to_string(order.Id));    // The Id attribute type in the Order structure is TId, which is encoded using a C++ function to_string built into the FMZ platform.
            arrJson.push_back(order.Price);
            arrJson.push_back(order.Amount);
            arrJson.push_back(order.DealAmount);
            arrJson.push_back(order.AvgPrice);
            arrJson.push_back(order.Status);
            arrJson.push_back(order.Type);
            arrJson.push_back(order.Offset);
            arrJson.push_back(order.ContractType);
    
            tbl["rows"].push_back(arrJson);
        }
    
        tbls.push_back(tbl);
    }
    
    LogStatus(_D(), "\n", "`" + tbls.dump() + "`");
    
    return;
}

Menggunakan objek pertukaran berjangka untuk menempatkan pesanan untuk beberapa pasangan perdagangan yang berbeda dan kode kontrak. Tempatkan pesanan dengan harga yang jauh dari harga mitra, simpan pesanan dalam keadaan yang belum terpenuhi, dan kueri pesanan dengan berbagai cara.

function main() {
    var orders = exchange.GetOrders("BTC_USDT")           // Examples of spot products
    // var orders = exchange.GetOrders("BTC_USDT.swap")   // Examples of futures products
    Log("orders:", orders)
}
def main():
    orders = exchange.GetOrders("BTC_USDT")          # Examples of spot products
    # orders = exchange.GetOrders("BTC_USDT.swap")   # Examples of futures products
    Log("orders:", orders)
void main() {
    auto orders = exchange.GetOrders("BTC_USDT");           // Examples of spot products
    // auto orders = exchange.GetOrders("BTC_USDT.swap");   // Examples of futures products
    Log("orders:", orders);
}

Saat meneleponexchange.GetOrders()fungsi, lulus diSymbolparameter untuk meminta data order untuk pasangan perdagangan tertentu dan kode kontrak.

DalamGetOrdersfungsi, skenario penggunaan parameter simbol diringkas sebagai berikut:

Klasifikasi Objek Exchange simbol Parameter Ruang lingkup kueri Pernyataan
Tempat Jangan lulus parameter simbol Pertanyaan semua pasangan perdagangan spot Untuk semua skenario panggilan, jika antarmuka pertukaran tidak mendukungnya, kesalahan akan dilaporkan dan nilai nol akan dikembalikan.
Tempat Tentukan jenis perdagangan, parameter simbol adalah: BTC_USDT Menanyakan pasangan perdagangan BTC_USDT yang ditentukan Untuk objek pertukaran spot, format parameter simbol adalah: BTC_USDT
Masa Depan Jangan lulus parameter simbol Mencari semua produk perdagangan dalam kisaran dimensi pasangan perdagangan saat ini dan kode kontrak Jika pasangan perdagangan saat ini adalah BTC_USDT dan kode kontraknya adalah swap, semua kontrak abadi dengan margin USDT akan ditanyakan.GetOrders("USDT.swap")
Masa Depan Tentukan jenis perdagangan, parameter simbol adalah: BTC_USDT.swap Mencari kontrak abadi berbasis USDT untuk BTC tertentu Untuk obyek pertukaran berjangka, format simbol parameter adalah: kombinasi daripasangan perdagangandankode kontrakdidefinisikan oleh platform FMZ, dipisahkan oleh karakter"..
Masa Depan Tentukan rentang produk perdagangan, parameter simbol adalah: USDT.swap Mencari semua kontrak abadi berbasis USDT -
Bursa berjangka yang mendukung opsi Jangan lulus parameter simbol Mencari semua kontrak opsi dalam kisaran dimensi pasangan perdagangan saat ini Jika pasangan perdagangan saat ini adalah BTC_USDT, kontrak ditetapkan sebagai kontrak opsi, misalnya, kontrak opsi Binance: BTC-240108-40000-C
Bursa berjangka yang mendukung opsi Tentukan produk perdagangan tertentu Mencari kontrak opsi yang ditentukan Misalnya, untuk Binance Futures Exchange, parameter simbol adalah: BTC_USDT.BTC-240108-40000-C
Bursa berjangka yang mendukung opsi Tentukan rentang produk perdagangan, parameter simbol adalah: USDT.option Mencari semua kontrak opsi berbasis USDT -

DalamGetOrdersfungsi, permintaan objek bursa berjangka kisaran dimensi diringkas sebagai berikut:

simbol Parameter Definisi Jangkauan Permintaan Pernyataan
USDT.swap Rentang kontrak abadi berbasis USDT. Untuk

dimensi yang tidak didukung oleh antarmuka API pertukaran, kesalahan akan dilaporkan dan nilai nol akan dikembalikan ketika Menelpon. USDT.futures. USDT berbasis rentang kontrak pengiriman. {\cH00FFFF}$USD.swap {\cH00FFFF}Rentang mata uang berbasis abadi kontrak. {\cH00FFFF}USD.futures {\cH00FFFF}Rentang pengiriman berdasarkan mata uang kontrak. {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT-based options contract range {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT-based options contract range {\cH00FFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFFFF}$USDT.option {\cH00FFFF}$USDT.option {\cH00FFFFFF}$USDT-based options contract range {\cH00FFFFFF}$USDT.option range. USD.option Rentang kontrak opsi berbasis mata uang. USDT.futures_combo Rentang kombinasi CFD. Futures_Deribit Exchange USD.futures_ff Rangkaian kontrak pengiriman margin campuran. Futures_Kraken Exchange {\cH00FFFF}$USD.swap_pf {\cH00FFFF}Rangkaian kontrak abadi margin campuran. ♫ Futures_Kraken Exchange ♫

Ketika akun yang diwakili oleh objek pertukaranexchangetidak memiliki perintah yang menunggu dalamrentang kueriatauInstrumen perdagangan tertentu(perintah aktif dalam keadaan tidak terpenuhi), memanggil fungsi ini mengembalikan array kosong, yaitu:[]Aku tidak tahu. Pertukaran berikut mengharuskan instrumen untuk lulus dalam parameter instrumen saat menanyakan pesanan yang saat ini belum selesai. Ketika memanggil fungsi GetOrders dengan pertukaran ini, jika parameter instrumen tidak diteruskan, hanya pesanan yang belum selesai dari instrumen saat ini yang diminta, bukan pesanan yang belum selesai dari semua instrumen (karena antarmuka pertukaran tidak mendukung ini). Zaif, MEXC, LBank, Korbit, Coinw, BitMart, Bithumb, BitFlyer, BigONE.

Bursa yang tidak mendukungexchange.GetOrders()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetOrders Futures_Bibox

{@struct/Order Order}, {@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetHistoryOrders exchange.GetHistoryOrders}

exchange.GetHistoryOrders

Peraturanexchange.GetHistoryOrders()Fungsi ini digunakan untuk mendapatkan pasangan perdagangan saat ini, pesanan historis untuk kontrak; ini mendukung spesifikasi varietas perdagangan tertentu.

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

exchange.GetHistoryOrders ((() exchange.GetHistoryOrders (simbol) exchange.GetHistoryOrders (simbol, sejak) exchange.GetHistoryOrders ((simbol, sejak, batas) exchange.GetHistoryOrders (sejak) exchange.GetHistoryOrders ((sejak, batas)

PeraturansymbolParameter digunakan untuk menentukan simbol perdagangan.BTC_USDTpasangan perdagangan, misalnya, ketikaexchangeadalah objek pertukaran spot, format parameter untuksymboladalahBTC_USDTJika itu adalah obyek pertukaran berjangka, mengambil kontrak abadi sebagai contoh, format parameter untuksymboladalah:BTC_USDT.swapAku tidak tahu. Jika Anda menanyakan data pesanan kontrak opsi, atur parametersymboluntuk"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh).pasangan perdagangandidefinisikan oleh platform FMZ dan kode kontrak opsi khusus yang didefinisikan oleh bursa, dipisahkan oleh karakter .. Jika parameter ini tidak dilewati, data order dari pasangan perdagangan yang saat ini ditetapkan dan kode kontrak akan diminta secara default.

lambang palsu string PeraturansinceParameter digunakan untuk menentukan timestamp awal kueri dalam milidetik. sejak palsu nomor PeraturanlimitParameter digunakan untuk menentukan jumlah perintah untuk query. batas palsu nomor

function main() {
    var historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
}
def main():
    historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
void main() {
    auto historyOrders = exchange.GetHistoryOrders();
    Log(historyOrders);
}
  • Kapan?symbol, since, limitparameter tidak ditentukan, kueri default adalah pasangan perdagangan saat ini, pesanan kontrak historis. Kueri pesanan historis dalam kisaran tertentu yang terdekat dengan waktu saat ini, kisaran kueri tergantung pada kisaran kueri tunggal antarmuka pertukaran.
  • Ketikasymbolparameter ditentukan, query riwayat order untuk jenis perdagangan yang ditetapkan.
  • Ketikasinceparameter ditentukan, query ke arah waktu saat ini menggunakansinceStempel waktu sebagai waktu awal.
  • Jikalimitparameter ditentukan, query dikembalikan setelah jumlah cukup entri.
  • Fungsi ini hanya didukung untuk pertukaran yang menyediakan antarmuka permintaan pesanan historis.

Bursa yang tidak mendukungexchange.GetHistoryOrders()Fungsi:

Nama Fungsi Pertukaran Spot yang tidak didukung Pertukaran Futures Tanpa Dukungan
GetHistoryOrders Zaif / Upbit / Coincheck / Bitstamp / Bithumb / BitFlyer / BigONE Futures_dYdX / Futures_Bibox / Futures_ApolloX

{@struct/Order Order}, {@fun/Trade/exchange.GetOrder exchange.GetOrder}, {@fun/Trade/exchange.GetOrders exchange.GetOrders}

exchange.SetPrecision

exchange.SetPrecision()fungsi digunakan untuk mengatur presisi dariexchangeobjek pertukaranhargadanjumlah pesanan, setelah diatur, sistem akan mengabaikan data berlebih secara otomatis.

setPrecision ((hargaPrecision, jumlahPrecision)

PeraturanpricePrecisionparameter digunakan untuk mengontrol ketepatan data harga. hargaPrecision benar Nomor PeraturanamountPrecisionParameter digunakan untuk mengontrol presisi jumlah data yang akan dipesan. JumlahPenerangan benar nomor

function main(){
    // Set the decimal precision of price to 2 bits, and the decimal precision of variety order amount to 3 bits
    exchange.SetPrecision(2, 3)
}
def main():
    exchange.SetPrecision(2, 3)
void main() {
    exchange.SetPrecision(2, 3);
}

Sistem backtesting tidak mendukung fungsi ini, dan akurasi numerik dari sistem backtesting ditangani secara otomatis.

{@fun/Trade/exchange.Buy exchange.Buy}, {@fun/Trade/exchange.Sell exchange.Sell}

exchange.SetRate

Atur nilai tukar saat ini dari objek pertukaran.

exchange.SetRate (tingkat)

Peraturanrateparameter digunakan untuk menentukan nilai tukar konversi. Tingkat benar Nomor

function main(){
    Log(exchange.GetTicker())
    // Set exchange rate conversion
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    // Set to 1, no conversion
    exchange.SetRate(1)
}
def main():
    Log(exchange.GetTicker())
    exchange.SetRate(7)
    Log(exchange.GetTicker())
    exchange.SetRate(1)
void main() {
    Log(exchange.GetTicker());
    exchange.SetRate(7);
    Log(exchange.GetTicker());
    exchange.SetRate(1);
}

Jika nilai nilai tukar telah ditetapkan menggunakanexchange.SetRate()Kemudian semua informasi harga seperti ticker, kedalaman, harga pesanan, dll untuk pertukaran yang diwakili oleh arusexchangeobjek pertukaran akan dikonversi dengan mengalikannya dengan nilai tukar yang ditetapkan dari 7.exchangeadalah pertukaran dengan dolar AS sebagai mata uang denominasi.exchange.SetRate(7), semua harga di pasar langsung akan dikonversi ke harga yang dekat denganCNYNominal dengan mengalikan dengan 7.

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

exchange.IO

Peraturanexchange.IO()fungsi digunakan untuk panggilan antarmuka lain yang terkait dengan objek pertukaran.

Peraturanexchange.IO()fungsi memanggil antarmuka lain yang terkait dengan objek pertukaran, mengembalikan data respons yang diminta pada panggilan yang berhasil dan mengembalikan nol pada panggilan yang gagal. string, number, bool, object, array, null, dan jenis lain yang didukung oleh sistem

exchange.IO(k,... args)

PeraturankParameter digunakan untuk mengatur jenis panggilan, dengan nilai opsional"api", "currency", "base", "trade_margin", "trade_normal", "public_base", "mbase", selfTradePreventionMode, simulate, cross, dual, unifieddan sebagainya. k benar string Parameter diperluas, lulus sesuai dengan skenario panggilan tertentu,argKarena mekanisme polimorfik dariexchange.IO()fungsi, pengaturan parameter yang berbeda sesuai dengan fungsi yang berbeda.exchange.IO()Fungsi tidak pasti. arg benar string, number, bool, object, array, null dan jenis lain yang didukung oleh sistem

function main() {
    var arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    
    // Call exchange.IO to access the exchange's bulk order interface directly
    var ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", JSON.stringify(arrOrders))
    Log(ret)
}
import json
def main():
    arrOrders = [
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}, 
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ]
    ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", json.dumps(arrOrders))
    Log(ret)
void main() {
    json arrOrders = R"([
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"},
        {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"2","posSide":"long"}
    ])"_json;
    auto ret = exchange.IO("api", "POST", "/api/v5/trade/batch-orders", "", arrOrders.dump());
    Log(ret);
}

Menggunakanexchange.IO("api", httpMethod, resource, params, raw)bentuk panggilan dariexchange.IO()fungsi, perlu untuk memahami antarmuka API dari pertukaran dan memeriksa dokumentasi yang relevan terlebih dahulu. ini akan memungkinkan Anda untuk memperluas fungsi yang tidak ditambahkan ke platform FMZ.POSTpermintaan tidak memerlukan Anda untuk khawatir tentang enkripsi, penandatanganan, atau memverifikasi parameter, yang sudah ditangani oleh FMZ di bagian bawah, selama Anda mengisi parameter yang sesuai.OKX Exchangekontrak berjangka, dan menggunakan parameterrawuntuk melewati parameter urutan:

var amount = 1
var price = 10
var basecurrency = "ltc"
function main () {
    // Note that both amount.toString() and price.toString() have a ' character on the left and right side
    var message = "symbol=" + basecurrency + "&amount='" + amount.toString() + "'&price='" + price.toString() + "'&side=buy" + "&type=limit"
    var id = exchange.IO("api", "POST", "/v1/order/new", message)
}
amount = 1
price = 10
basecurrency = "ltc"
def main():
    message = "symbol=" + basecurrency + "&amount='" + str(amount) + "'&price='" + str(price) + "'&side=buy" + "&type=limit"
    id = exchange.IO("api", "POST", "/v1/order/new", message)
void main() {
    auto amount = 1.0;
    auto price = 10.0;
    auto basecurrency = "ltc";
    string message = format("symbol=%s&amount=\"%.1f\"&price=\"%.1f\"&side=buy&type=limit", basecurrency, amount, price);
    auto id = exchange.IO("api", "POST", "/v1/order/new", message);
}

Jika nilai kunci dalamparamsparameter (yaitu, parameter permintaan HTTP) adalah string, itu perlu ditulis dalam tanda kutip tunggal (yaitu, simbol ') di sekitar nilai parameter untuk membungkus nilai parameter.

function main() {
    var ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
    Log(ret)
}
def main():
    ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
    Log(ret)
void main() {
    auto ret = exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC");
    Log(ret);
}

Hal ini mendukung melewati di parameter url lengkap yang dapat menghilangkan operasi beralih alamat dasar (menelponexchange.SetBase()fungsi).

function main(){
    var ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
}
def main():
    ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT")
    Log(ret)
void main() {
    auto ret = exchange.IO("api", "GET", "/api/v5/trade/orders-pending", "instType=SPOT");
    Log(ret);
}

Contoh panggilan tanpa parameterraw:

function main() {
    // For example, if you set the current trading pair of the exchange object to BTC_USDT at the beginning of the live trading, print the current trading pair tickers
    Log(exchange.GetTicker())
    // Switch the trading pair to LTC_BTC      
    exchange.IO("currency", "LTC_BTC")
    Log(exchange.GetTicker())
}
def main():
    Log(exchange.GetTicker())
    exchange.IO("currency", "LTC_BTC")
    Log(exchange.GetTicker())
void main() {
    Log(exchange.GetTicker());
    exchange.IO("currency", "LTC_BTC");
    Log(exchange.GetTicker());
}

Mengubah pasangan perdagangan pertukaran saat ini, sehingga akan mengubah pasangan perdagangan yang dikonfigurasi oleh kodepada penciptaan perdagangan langsungataupada backtest.

function main () {
    // exchanges[0] is the first exchange object added when the live trading is created 
    exchanges[0].IO("base", "https://api.huobi.pro")
}
def main():
    exchanges[0].IO("base", "https://api.huobi.pro")
void main() {
    exchanges[0].IO("base", "https://api.huobi.pro");
}```
For example, the default base address when the exchange object is wrapped is ```https://api.huobipro.com```, and when you need to switch to ```https://api.huobi.pro```, use the following code to switch:
```javascript
function main() {
    exchange.SetBase("https://api.bitfinex.com")
    exchange.IO("mbase", "https://api-pub.bitfinex.com")
}
def main():
    exchange.SetBase("https://api.bitfinex.com")
    exchange.IO("mbase", "https://api-pub.bitfinex.com")
void main() {
    exchange.SetBase("https://api.bitfinex.com");
    exchange.IO("mbase", "https://api-pub.bitfinex.com");
}

Untuk pertukaran dengan alamat dasar yang berbeda untuk antarmuka ticker dan antarmuka perdagangan, misalnya, Bitfinex Futures memiliki dua alamat, satu untuk antarmuka ticker dan yang lainnya untuk antarmuka perdagangan.exchange.SetBase("xxx"). Bitfinex berjangka beralih alamat dasar antarmuka publik menggunakanexchange.IO("mbase", "xxx").

I. Untuk pertukaran yang berpusat pada cryptocurrency panggilan antarmuka API lainnya yang tidak terkapsul secara seragam, dengan parameterkdiatur untuk"api":

exchange.IO("api", httpMethod, resource, params, raw)
  • httpMethod : Parameter adalah jenis string, isi jenis permintaanPOST, GET, dll.
  • sumber: Parameter ini adalah jenis string dan mengisi jalur permintaan; Ini mendukung penggunaan jalur permintaan lengkap, lihat contoh referensi untuk rincian.
  • Parameter: Parameter adalah jenis string, diisi dengan parameter permintaan, dikodekan denganURL.
  • raw: Parameter adalah parameter string mentah dan dapat dilewatkan.

Peraturanexchange.IO("api", httpMethod, resource, params, raw)panggilan fungsi akan mengakses antarmuka pertukaran dan mengembalikan null jika panggilan gagal dan terjadi kesalahan. Hanya perdagangan nyata mendukung panggilanexchange.IO("api", httpMethod, resource, params, raw) function.

II. Untuk beralih pasangan perdagangan, parameterkdiatur untuk"currency":

exchange.IO("currency", currency)
  • mata uang: Parameter adalah jenis string dengan format huruf besar yang seragam, menggunakan tanda bawah untuk memisahkanbaseCurrencydariquoteCurrency, sepertiBTC_USDT.

    1. Sistem backtesting sekarang mendukung switching trading pairs (hanya untuk mata uang digital spot exchange objects), ketika backtesting, Anda perlu memperhatikan bahwa Anda hanya dapat beralih ke trading pairs dengan mata uang denominasi yang sama, misalnya, pasangan perdagangan saat ini adalahETH_BTChanya bisa beralih keLTC_BTC, tidak untukLTC_USDT.
    2. Untuk kontrak berjangka cryptocurrency, objek pertukaran beralih pasangan perdagangan dan kode kontrak perlu ditetapkan kembali untuk menentukan kontrak mana yang akan diperdagangkan.
    3. Menggunakan fungsi {@fun/Account/exchange.SetCurrency exchange.SetCurrency} untuk beralih pasangan perdagangan adalah persis sama dengan menggunakanexchange.IO("currency", currency)untuk menukar pasangan perdagangan.

III. Digunakan untuk beralih ke mode akun leveraged objek pertukaran cryptocurrency spot:

  • Parameterkdiatur untuk"trade_margin"untuk beralih ke mode akun leverage spot. menempatkan pesanan dan memperoleh aset akun akan mengakses pertukarans spot leveraged interface. Jika bursa membedakan antara margin penuh dan margin terisolasi dalam leverage spot, gunakan:exchange.IO("trade_super_margin")untuk beralih ke margin penuh untuk akun leveraged, danexchange.IO("trade_margin")untuk beralih ke margin terisolasi untuk akun leveraged.
  • Parameterkdiatur untuk"trade_normal"untuk beralih kembali ke mode akun spot normal.

Bursa spot yang mendukung beralih antara model akun leveraged:

Pertukaran Catatan Khusus
OKX Pasangan perdagangan dalam mode akun leveraged berbeda dari yang normal, beberapa pasangan perdagangan mungkin tidak memilikinya.exchange.IO("trade_super_margin")untuk beralih ke posisi penuh untuk akun leveraged dan menggunakanexchange.IO("trade_margin")untuk beralih ke posisi dengan posisi.trade_normaluntuk beralih ke mode spot normal.exchange.IO("tdMode", "cross")untuk secara langsung menentukan mode leverage.
Huobi Pasangan perdagangan mode akun leveraged berbeda dari yang normal, beberapa pasangan perdagangan mungkin tidak memilikinya.trade_marginuntuk beralih ke posisi akun leverage berdasarkan posisi, menggunakantrade_super_marginuntuk beralih ke leverage account posisi penuh.trade_normaluntuk beralih ke mode mata uang-mata uang normal.
Binance Modus akun leveraged dibagi menjadi posisi per posisi dan posisi penuh, penggunaantrade_marginuntuk beralih ke posisi dengan posisi, menggunakantrade_super_marginuntuk beralih ke posisi penuh, gunakantrade_normaluntuk beralih ke mode mata uang-mata uang normal.
Gerbang Modus akun leveraged dibagi menjadi posisi per posisi dan posisi penuh, penggunaantrade_marginuntuk beralih ke posisi dengan posisi, menggunakantrade_super_marginuntuk beralih ke posisi penuh, gunakantrade_normaluntuk beralih ke mode mata uang-mata uang normal.
AscendEx Penggunaanexchange.IO("trade_margin")untuk beralih ke mode akun leverage danexchange.IO("trade_normal")untuk beralih kembali ke mode akun normal.
WOO Penggunaanexchange.IO("trade_margin")untuk beralih ke mode akun leverage danexchange.IO("trade_normal")untuk beralih kembali ke mode akun normal.
CoinEx Penggunaanexchange.IO("trade_margin")untuk beralih ke mode akun leveraged danexchange.IO("trade_normal")untuk beralih kembali ke mode akun normal.

IV. Fungsi switching lainnya:Lihatlahexchange.IO()fungsi untukFungsi switching lainnyadalam Panduan Pengguna.

{@fun/NetSettings/exchange.SetBase exchange.SetBase}, {@fun/Account/exchange.SetCurrency exchange.SetCurrency}, {@var EXCHANGE_OP_IO_CONTROL}

exchange.Log

Peraturanexchange.Log()fungsi digunakan untuk output log penempatan order dan penarikan di area kolom log. Ketika dipanggil, tidak ada pesanan yang ditempatkan, hanya log transaksi yang output dan dicatat.

exchange.Log ((orderJenis, harga, jumlah) exchange.Log ((orderJenis, harga, jumlah,... args)

PeraturanorderTypeparameter digunakan untuk mengatur jenis log output, nilai opsional adalah {@var/LOG_TYPE/LOG_TYPE_BUY LOG_TYPE_BUY}, {@var/LOG_TYPE/LOG_TYPE_SELL LOG_TYPE_SELL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}. orderJenis benar nomor PeraturanpriceParameter digunakan untuk mengatur harga yang ditampilkan dalam log output. harga benar nomor PeraturanamountParameter digunakan untuk mengatur jumlah pesanan yang ditampilkan dalam log output. jumlah benar nomor Parameter diperluas yang dapat output informasi yang menyertai log ini,argparameter dapat dilewati lebih dari satu. arg palsu string, number, bool, object, array, null dan jenis lain yang didukung oleh sistem

var id = 123
function main() {
    // Order type buy, price 999, amount 0.1
    exchange.Log(LOG_TYPE_BUY, 999, 0.1)      
    // Cancel the order
    exchange.Log(LOG_TYPE_CANCEL, id)         
}
id = 123
def main():
    exchange.Log(LOG_TYPE_BUY, 999, 0.1)
    exchange.Log(LOG_TYPE_CANCEL, id)
void main() {
    auto id = 123;
    exchange.Log(LOG_TYPE_BUY, 999, 0.1);
    exchange.Log(LOG_TYPE_CANCEL, id);
}

Menggunakanexchange.Log(orderType, price, amount)salah satu skenario yang paling umum adalah menggunakan {@fun/Trade/exchange.IOexchange.IO} fungsi untuk mengakses antarmuka pertukaran untuk membuat pesanan bersyarat, tetapi menggunakanexchange.IO()fungsi tidak output informasi log transaksi dalam catatan log perdagangan hidup.exchange.Log()fungsi dapat digunakan untuk melengkapi log output untuk merekam informasi penempatan pesanan, dan hal yang sama berlaku untuk operasi penarikan pesanan.

KetikaorderTypeparameter adalahLOG_TYPE_CANCEL, yangpriceParameter adalah urutan Id order ditarik yang digunakan untuk mencetak log penarikan ketika order ditarik langsung menggunakanexchange.IO()Fungsi.exchange.Log()fungsi adalah fungsi anggota dari objek pertukaran {@var/EXCHANGE exchange}, berbeda dengan fungsi global {@fun/Log Log}.

{@fun/Log Log}, {@var/EXCHANGE exchange}, {@var/LOG_TYPE/LOG_TYPE_BUY LOG_TYPE_BUY}, {@var/LOG_TYPE/LOG_TYPE_SELL LOG_TYPE_SELL}, {@var/LOG_TYPE/LOG_TYPE_CANCEL LOG_TYPE_CANCEL}

exchange.Encode

Peraturanexchange.Encode()Fungsi digunakan untuk perhitungan enkripsi tanda tangan.

Peraturanexchange.Encode()fungsi mengembalikan pengkodean nilai hash yang dihitung. string

exchange.Encode ((algo, inputFormat, outputFormat, data) exchange.Encode ((algo, inputFormat, outputFormat, data, keyFormat, key)

Parameteralgoadalah algoritma yang digunakan untuk perhitungan pengkodean. Pengaturan yang didukung adalah: raw (tidak menggunakan algoritma), sign, signTx, md4, md5, sha256, sha512, sha1, keccak256, sha3.224, sha3.256, sha3.384, sha3.512, sha3.keccak256, sha3.keccak512, sha512.384, sha512.256, sha512.224, emd160, ripke2b.256, blake2b.512, blake2s.128, blake2s.256algojuga mendukung: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk, untuk pengkodean dan dekodean string.algojuga mendukung: ed25519 algoritma. Ini mendukung penggunaan algoritma hash yang berbeda, misalnya parameteralgodapat ditulis sebagai ed25519.md5, ed25519.sha512, dll. Mendukunged25519.seedperhitungan. sesuatu benar string Digunakan untuk menentukan format data daridataparameter.inputFormatparameter dapat diatur ke salah satu dari: raw, hex, base64, dan string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. inputFormat benar string Digunakan untuk menentukan format data output.outputFormatparameter mendukung pengaturan berikut: raw, hex, base64, string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. outputFormat benar string Parameterdataadalah data yang akan diproses. data benar string Digunakan untuk menentukan format data darikeyparameter.keyparameter dapat diatur ke salah satu dari: raw, hex, base64, dan string. raw berarti data adalah data mentah, hex berarti data adalahhexdikodekan, base64 berarti data adalahbase64dikodekan, dan string berarti data adalah string. keyFormat palsu string Peraturankeyparameter digunakan untuk menentukan kunci yang digunakan dalam perhitungan tanda tangan, dan dapat digunakan sebagai string plaintext."{{accesskey}}", "{{secretkey}}"untuk merujuk padaaccessKeydansecretKeydikonfigurasi dalam objek pertukaran {@var/EXCHANGE exchange} kunci palsu string

function main() {
    var APIKEY = "your Access Key(Bitmex API ID)"
    var expires = parseInt(Date.now() / 1000) + 10
    var signature = exchange.Encode("sha256", "string", "hex", "GET/realtime" + expires, "hex", "{{secretkey}}")
    var client = Dial("wss://www.bitmex.com/realtime", 60)
    var auth = JSON.stringify({args: [APIKEY, expires, signature], op: "authKeyExpires"})
    var pos = 0
    client.write(auth)
    client.write('{"op": "subscribe", "args": "position"}')
    while (true) {
        bitmexData = client.read()
        if(bitmexData.table == 'position' && pos != parseInt(bitmexData.data[0].currentQty)){
            Log('position change', pos, parseInt(bitmexData.data[0].currentQty), '@')
            pos = parseInt(bitmexData.data[0].currentQty)
        }
    }
}
import time
def main():
    APIKEY = "your Access Key(Bitmex API ID)"
    expires = int(time.time() + 10)
    signature = exchange.Encode("sha256", "string", "hex", "GET/realtime" + expires, "hex", "{{secretkey}}")
    client = Dial("wss://www.bitmex.com/realtime", 60)
    auth = json.dumps({"args": [APIKEY, expires, signature], "op": "authKeyExpires"})
    pos = 0
    client.write(auth)
    client.write('{"op": "subscribe", "args": "position"}')
    while True:
        bitmexData = json.loads(client.read())
        if "table" in bitmexData and bitmexData["table"] == "position" and len(bitmexData["data"]) != 0 and pos != bitmexData["data"][0]["currentQty"]:   
            Log("position change", pos, bitmexData["data"][0]["currentQty"], "@")
            pos = bitmexData["data"][0]["currentQty"]
void main() {
    auto APIKEY = "your Access Key(Bitmex API ID)";
    auto expires = Unix() + 10;
    auto signature = exchange.Encode("sha256", "string", "hex", format("GET/realtime%d", expires), "hex", "{{secretkey}}");
    
    auto client = Dial("wss://www.bitmex.com/realtime", 60);
    json auth = R"({"args": [], "op": "authKeyExpires"})"_json;            

    auth["args"].push_back(APIKEY);
    auth["args"].push_back(expires);
    auth["args"].push_back(signature);
    auto pos = 0;
    client.write(auth.dump());
    client.write("{\"op\": \"subscribe\", \"args\": \"position\"}");
    while(true) {
        auto bitmexData = json::parse(client.read());
        if(bitmexData["table"] == "position" && bitmexData["data"][0].find("currentQty") != bitmexData["data"][0].end() && pos != bitmexData["data"][0]["currentQty"]) {
            Log("test");
            Log("position change", pos, bitmexData["data"][0]["currentQty"], "@");
            pos = bitmexData["data"][0]["currentQty"];
        }
    }
}

Contoh push perubahan posisi BitMEX (protocol wss):

Hanya perdagangan nyata mendukung panggilanexchange.Encode()Fungsi."{{accesskey}}", "{{secretkey}}"Referensi hanya berlaku jikaexchange.Encode()fungsi digunakan.

{@var/EXCHANGE exchange}, {@fun/Global/Encode Encode}

exchange.Go

Fungsi pendukung asinkron multi-threaded dapat mengubah operasi semua fungsi yang didukung menjadi eksekusi serentak asinkron.

Peraturanexchange.Go()fungsi mengembalikan objek bersamaan segera, dan Anda dapat menggunakanwait()metode dari objek bersamaan untuk mendapatkan hasil permintaan bersamaan. objek

pertukaran.Go (metode) pertukaran.Go ((metode,... args)

Peraturanmethodparameter digunakan untuk menentukan nama fungsi bersamaan. Perhatikan bahwa parameter adalah string nama fungsi, bukan referensi fungsi. metode benar string Parameter untukFungsi yang dilakukan secara bersamaan, mungkin ada lebih dari satu parameterarg. Jenis dan jumlah parameterargtergantung pada parameter darifungsi eksekusi bersamaanAku tidak tahu. arg palsu string, number, bool, object, array, function, null, dan semua tipe lain yang didukung oleh sistem

function main(){
    // The following four operations are concurrently executed asynchronously by multiple threads and do not take time and return immediately
    var a = exchange.Go("GetTicker")
    var b = exchange.Go("GetDepth") 
    var c = exchange.Go("Buy", 1000, 0.1)
    var d = exchange.Go("GetRecords", PERIOD_H1)
           
    // Call the wait method to wait for the return of the ticker results asynchronously 
    var ticker = a.wait()            
    // Returns the depth, or null if it fails 
    var depth = b.wait()             
    // return order number, limited to 1 second timeout, if timeout, returns undefined, the object can continue to call wait if the last wait timeout 
    var orderId = c.wait(1000)
    if(typeof(orderId) == "undefined") {
        // Timeout, reacquire
        orderId = c.wait()
    }
    var records = d.wait()
}
def main():
    a = exchange.Go("GetTicker")
    b = exchange.Go("GetDepth")
    c = exchange.Go("Buy", 1000, 0.1)
    d = exchange.Go("GetRecords", PERIOD_H1)            

    ticker, ok = a.wait()
    depth, ok = b.wait()
    orderId, ok = c.wait(1000)
    if ok == False:
        orderId, ok = c.wait()
    records, ok = d.wait()
void main() {
    auto a = exchange.Go("GetTicker");
    auto b = exchange.Go("GetDepth");
    auto c = exchange.Go("Buy", 1000, 0.1);
    auto d = exchange.Go("GetRecords", PERIOD_H1);            

    Ticker ticker;
    Depth depth;
    Records records;
    TId orderId;
    a.wait(ticker);
    b.wait(depth);
    if(!c.wait(orderId, 300)) {
        c.wait(orderId);
    }
    d.wait(records);
}

Exchange.Go()contoh penggunaan fungsi, untuk menentukanundefineduntuk digunakantypeof(xx) === "undefined", karenanull == undefinedadalah valid di JavaScript.

function main() {
    var d = exchange.Go("GetRecords", PERIOD_H1)
    // Waiting for K-line results
    var records = d.wait()
    // Here waits an asynchronous operation that has been waited and finished, it will return null, and log the error message
    var ret = d.wait()
}
def main():
    d = exchange.Go("GetRecords", PERIOD_H1)
    records, ok = d.wait()
    ret, ok = d.wait()
void main() {
    auto d = exchange.Go("GetRecords", PERIOD_H1);
    Records records;
    d.wait(records);
    Records ret;
    d.wait(ret);
}

Menelponwait()Metode pada objek paralel yang telah dirilis akan melaporkan kesalahan:

function main() {
    while(true) {
        var beginTS = new Date().getTime()
        var arrRoutine = []
        var arrTicker = []
        var arrName = []
        for(var i = 0; i < exchanges.length; i++) {
            arrRoutine.push(exchanges[i].Go("GetTicker"))
            arrName.push(exchanges[i].GetName())
        }            

        for(var i = 0; i < arrRoutine.length; i++) {
            arrTicker.push(arrRoutine[i].wait())
        }
        var endTS = new Date().getTime()            

        var tbl = {
            type: "table", 
            title: "ticker", 
            cols: ["index", "name", "latest-deal-price"], 
            rows: []
        }
        
        for(var i = 0; i < arrTicker.length; i++) {
            tbl.rows.push([i, arrName[i], arrTicker[i].Last])
        }            

        LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", endTS - beginTS, "millisecond", "\n", "`" + JSON.stringify(tbl) + "`")
        Sleep(500)
    }
}
import time 
import json
def main():
    while True:
        beginTS = time.time()
        arrRoutine = []
        arrTicker = []
        arrName = []
        for i in range(len(exchanges)):
            arrRoutine.append(exchanges[i].Go("GetTicker"))
            arrName.append(exchanges[i].GetName())            

        for i in range(len(exchanges)):
            ticker, ok = arrRoutine[i].wait()
            arrTicker.append(ticker)            

        endTS = time.time()
        tbl = {
            "type": "table", 
            "title": "ticker", 
            "cols": ["index", "name", "latest-deal-price"], 
            "rows": [] 
        }            

        for i in range(len(arrTicker)):
            tbl["rows"].append([i, arrName[i], arrTicker[i]["Last"]])            

        LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", endTS - beginTS, "second", "\n", "`" + json.dumps(tbl) + "`")
        Sleep(500)
void main() {
    while(true) {
        int length = exchanges.size();
        auto beginTS = UnixNano() / 1000000;
        Ticker arrTicker[length] = {};
        string arrName[length] = {};
        
        // Note that to add several exchange objects, several exchanges[n].Go functions have to be executed here, this example is to add four exchange objects, the details can be modified
        auto r0 = exchanges[0].Go("GetTicker");
        auto r1 = exchanges[1].Go("GetTicker");
        auto r2 = exchanges[2].Go("GetTicker");
        auto r3 = exchanges[3].Go("GetTicker");
        GoObj *arrRoutine[length] = {&r0, &r1, &r2, &r3};
        
        for(int i = 0; i < length; i++) {
            arrName[i] = exchanges[i].GetName();
        }            

        for(int i = 0; i < length; i++) {
            Ticker ticker;
            arrRoutine[i]->wait(ticker);
            arrTicker[i] = ticker;
        }        
        auto endTS = UnixNano() / 1000000;            

        json tbl = R"({
            "type": "table", 
            "title": "ticker", 
            "cols": ["index", "name", "latest-deal-price"], 
            "rows": [] 
        })"_json;            

        for(int i = 0; i < length; i++) {
            json arr = R"(["", "", ""])"_json;
            arr[0] = format("%d", i);
            arr[1] = arrName[i];
            arr[2] = format("%f", arrTicker[i].Last);
            tbl["rows"].push_back(arr);
        }            

        LogStatus(_D(), "Total time taken to obtain tickers from multiple exchanges concurrently:", format("%d", endTS - beginTS), "millisecond", "\n", "`" + tbl.dump() + "`");
        Sleep(500);
    }
}

Akses bersamaan ke beberapa ticker pertukaran:

function main() {
    /*  
        Testing with OKX futures order interface
        POST /api/v5/trade/order        
    */
    
    var beginTS = new Date().getTime()
    var param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
    var ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    var ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    var ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", JSON.stringify(param))
    
    var id1 = ret1.wait()
    var id2 = ret2.wait()
    var id3 = ret3.wait()
    var endTS = new Date().getTime()                

    Log("id1:", id1)
    Log("id2:", id2)
    Log("id3:", id3)
    Log("Concurrent order placement time consumption:", endTS - beginTS, "millisecond")
}
import time
import json
def main():
    beginTS = time.time()
    param = {"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"}
    ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
    ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))
    ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", json.dumps(param))            

    id1, ok1 = ret1.wait()
    id2, ok2 = ret2.wait()
    id3, ok3 = ret3.wait()
    endTS = time.time()            

    Log("id1:", id1)
    Log("id2:", id2)
    Log("id3:", id3)
    Log("Concurrent order placement time consumption:", endTS - beginTS, "second")
void main() {
    auto beginTS = UnixNano() / 1000000;
    json param = R"({"instId":"BTC-USDT-SWAP","tdMode":"cross","side":"buy","ordType":"limit","px":"16000","sz":"1","posSide":"long"})"_json;
    auto ret1 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
    auto ret2 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());
    auto ret3 = exchange.Go("IO", "api", "POST", "/api/v5/trade/order", "", param.dump());            

    json id1 = R"({})"_json;
    json id2 = R"({})"_json;
    json id3 = R"({})"_json;            

    ret1.wait(id1);
    ret2.wait(id2);
    ret3.wait(id3);
    auto endTS = UnixNano() / 1000000;            

    Log("id1:", id1);
    Log("id2:", id2);
    Log("id3:", id3);
    Log("Concurrent order placement time consumption:", endTS - beginTS, "millisecond");
}

Serentakexchange.IO("api", ...)Fungsi:

Fungsi ini hanya membuat tugas eksekusi multi-threaded saat berjalan dalam perdagangan nyata, backtesting tidak mendukung eksekusi tugas serentak multi-threaded (backtesting tersedia, tetapi masih dijalankan secara berurutan). Setelahexchange.Go()fungsi mengembalikan objek, nyawait()fungsi dipanggil melalui objek itu untuk mendapatkan data yang dikembalikan oleh thread.wait()fungsi harus dipanggil untuk mendapatkan data sebelum thread akan dirilis secara otomatis.wait()jika fungsi ditentukan, thread tidak akan dirilis secara otomatis bahkan jika timeout terjadi. Hasil thread harus diperoleh sebelum dirilis secara otomatis (terlepas dari keberhasilan atau kegagalan panggilan antarmuka untuk akses bersamaan).wait()fungsi terlepas dari apakah eksekusi berhasil atau gagal, dan sumber daya dari thread yang diminta olehexchange.Go()fungsi harus dilepaskan secara otomatis oleh docker. Peraturanwait()Metode ini mendukung parameter timeout: Tanpa parameter timeout, yaitu,wait(), atau dengan parameter timeout 0, yaitu,wait(0).wait()fungsi blok dan menunggu sampai thread bersamaan telah selesai berjalan, mengembalikan hasil dari thread paralels eksekusi. Atur parameter timeout -1, yaituwait(-1).wait()fungsi mengembalikan langsung, dengan nilai pengembalian yang berbeda untuk bahasa pemrograman yang berbeda, lihat subbagian ini untuk contoh panggilan. Tetapkan parameter timeout tertentu,wait(300), danwait()fungsi akan menunggu maksimal 300 milidetik sebelum kembali.

Jika hasil dari hasil akhirwait()fungsi tidak diperoleh, sumber daya thread tidak akan dirilis secara otomatis, yang akan menyebabkan akumulasi thread yang diminta, dan lebih dari 2000 akan melaporkan kesalahan:"too many routine wait, max is 2000"Aku tidak tahu. Fungsi yang didukung:GetTicker, GetDepth, GetTrades, GetRecords, GetAccount, GetOrders, GetOrder, CancelOrder, Buy, Sell, GetPositions, IO. Semua fungsi ini dijalankan berdasarkan objek pertukaran {@var/EXCHANGE exchange} saat dipanggil secara bersamaan. Perbedaan antara bahasa Python dan bahasa JavaScript adalah bahwawait()fungsi dari objek bersamaan dalam bahasa Python mengembalikan dua parameter. parameter pertama adalah hasil yang dikembalikan oleh panggilan API asinkron, dan parameter kedua menunjukkan apakah panggilan asinkron selesai.


def main():
    d = exchange.Go("GetRecords", PERIOD_D1)
    # ok will return True definitely, unless the strategy is stopped
    ret, ok = d.wait()          
    # If the wait times out, or if it waits for an instance that has already ended, ok returns False
    ret, ok = d.wait(100)  

{@fun/Global/Mail_Go Mail_Go}, {@fun/Global/HttpQuery_Go HttpQuery_Go}, {@fun/Global/EventLoop EventLoop}

Pasar Rekening