Sumber dimuat naik... memuat...

Perdagangan

exchange.Buy

Peraturanexchange.Buy()Fungsi ini digunakan untuk meletakkan pesanan beli.Buy()fungsi adalah fungsi ahli objek pertukaran {@var/EXCHANGE exchange}.Buy()fungsi beroperasi pada akaun pertukaran yang terikat kepada objek pertukaranexchange. Tujuan fungsi (metode) ahliexchangeobjek hanya berkaitan denganexchange, dan ia tidak akan diulangi selepas dokumentasi.

Perintah yang berjaya mengembalikan ID pesanan, perintah yang gagal mengembalikan nilai sifar. AtributIdstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pasangan dagangan spotETH_USDTurutan pertukaran OKX adalah:ETH-USDT,1547130415509278720. Apabila memanggilexchange.Buy()fungsi untuk meletakkan pesanan, pesanan nilai pulanganIdadalah konsisten denganIdatribut struktur order {@struct/Order Order}.

rentetan, nilai sifar

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

Peraturanpriceparameter digunakan untuk menetapkan harga pesanan. harga betul nombor Peraturanamountparameter digunakan untuk menetapkan jumlah pesanan. jumlah betul nombor Parameter yang diperluaskan yang boleh mengeluarkan maklumat yang disertakan ke log pesanan ini,argparameter boleh lulus lebih daripada satu. arg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong 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);
}

Nombor siri yang dikembalikan olehexchange.Buy()boleh digunakan untuk menyoal maklumat 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);
}

Apabila meletakkan pesanan untuk kontrak niaga hadapan cryptocurrency, perlu berhati-hati untuk memastikan bahawa arah perdagangan ditetapkan dengan betul, kerana ketidakcocokan antara arah perdagangan dan fungsi perdagangan akan mengakibatkan ralat:

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 pasaran spot.

Apabila meletakkan pesanan untuk kontrak niaga hadapan, anda mesti memberi perhatian kepada sama ada arah perdagangan ditetapkan dengan betul, kerana kesilapan akan dilaporkan jika arah perdagangan dan fungsi perdagangan tidak sesuai. Saiz pesanan untuk kontrak niaga hadapan cryptocurrency adalah jumlah kontrak jika tidak ditentukan. Parameterpriceditetapkan kepada-1untuk meletakkan pesanan pasaran, yang memerlukan antarmuka penempatan pesanan bursa untuk menyokong pesanan pasaran.amountadalah jumlah wang dalam mata wang pesanan. Apabila meletakkan pesanan pasaran untuk kontrak niaga hadapan cryptocurrency, parameter jumlahamountadalah bilangan kontrak. Terdapat beberapa bursa cryptocurrency yang tidak menyokong antara muka pesanan pasaran semasa perdagangan langsung. Jumlah pesanan untuk pesanan beli pasaran pada beberapa bursa spot adalah bilangan syiling perdagangan. Sila rujukArahan Khas untuk PertukaranPanduan Pengguna untuk butiran lanjut. Jika anda menggunakan versi lama dari docker, nilai pulangan perintahIddaripadaexchange.Buy()fungsi mungkin berbeza daripada nilai pulangan pesananIdyang diterangkan dalam dokumen semasa.

{@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 meletakkan pesanan jual.

Perintah yang berjaya mengembalikan ID pesanan, perintah yang gagal mengembalikan nilai sifar.Idstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pasangan dagangan spotETH_USDTurutan pertukaran OKX adalah:ETH-USDT,1547130415509278720. Apabila memanggilexchange.Sell()fungsi untuk meletakkan pesanan, pesanan nilai pulanganIdadalah konsisten denganIdatribut struktur order {@struct/Order Order}. rentetan, nilai sifar

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

Peraturanpriceparameter digunakan untuk menetapkan harga pesanan. harga betul nombor Peraturanamountparameter digunakan untuk menetapkan jumlah pesanan. jumlah betul nombor Parameter yang diperluaskan yang boleh mengeluarkan maklumat yang disertakan ke log pesanan ini,argparameter boleh lulus lebih daripada satu. arg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong 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);
}

Nombor siri yang dikembalikan olehexchange.Sell()boleh digunakan untuk menyoal maklumat 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);
}

Apabila meletakkan pesanan untuk kontrak niaga hadapan cryptocurrency, perlu berhati-hati untuk memastikan bahawa arah perdagangan ditetapkan dengan betul, kerana ketidakcocokan antara arah perdagangan dan fungsi perdagangan akan mengakibatkan ralat:

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 pasaran spot.

Apabila meletakkan pesanan untuk kontrak niaga hadapan, anda mesti memberi perhatian kepada sama ada arah perdagangan ditetapkan dengan betul, kerana kesilapan akan dilaporkan jika arah perdagangan dan fungsi perdagangan tidak sepadan. Parameterpriceditetapkan kepada-1untuk meletakkan pesanan pasaran, yang memerlukan antara muka penempatan pesanan bursa untuk menyokong pesanan pasaran.amountadalah jumlah dalam mata wang dagangan. Apabila meletakkan pesanan pasaran untuk kontrak niaga hadapan cryptocurrency, parameter jumlahamountTerdapat beberapa pertukaran cryptocurrency yang tidak menyokong antarmuka pesanan pasaran semasa perdagangan langsung. Jika anda menggunakan versi lama dari docker, nilai pulangan perintahIddaripadaexchange.Sell()fungsi mungkin berbeza daripada nilai pulangan pesananIdyang diterangkan dalam dokumen semasa.

{@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 meletakkan pesanan.

Jika pesanan berjaya diletakkan, ID pesanan dikembalikan; jika pesanan gagal, nilai sifar dikembalikan.Idstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pesanan pasangan dagangan spotETH_USDTdaripada bursa OKX ialah:ETH-USDT,1547130415509278720. Apabila memanggilexchange.CreateOrder(symbol, side, price, amount)fungsi untuk meletakkan pesanan, nilai pulangan pesananIdadalah konsisten denganIdsifat struktur order {@struct/Order Order}. rentetan, nilai sifar

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

Parametersymboldigunakan untuk menentukan pasangan dagangan tertentu dan kod kontrak pesanan.exchange.CreateOrder(symbol, side, price, amount)fungsi untuk meletakkan pesanan,exchangeadalah objek pertukaran spot. Jika mata wang pesanan adalah USDT dan mata wang perdagangan adalah BTC, parametersymbolialah:"BTC_USDT", dalam format pasangan dagangan yang ditakrifkan oleh platform FMZ.exchange.CreateOrder(symbol, side, price, amount)fungsi untuk meletakkan pesanan,exchangeadalah objek pertukaran niaga hadapan. Jika pesanan adalah pesanan kontrak kekal standard U BTCs, parametersymbolialah:"BTC_USDT.swap", dan formatnya adalah gabunganPasangan dagangandanKod kontrakditakrifkan oleh platform FMZ, dipisahkan oleh watak ..exchange.CreateOrder(symbol, side, price, amount)fungsi untuk meletakkan pesanan,exchangeadalah objek pertukaran niaga hadapan. Jika pesanan adalah pesanan kontrak opsyen standard U BTCs, parametersymbolialah:"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Pilihan BTC-240108-40000-C sebagai contoh), dan format adalah gabunganPasangan daganganyang ditakrifkan oleh platform FMZ dan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, dipisahkan oleh watak .. lambang betul senar PerkhidmatansideParameter digunakan untuk menentukan arah dagangan pesanan. Untuk objek pertukaran spot, nilai pilihansideparameter adalah:buy, sell. buybermaksud membeli, dansellBermakna menjual. Untuk objek pertukaran niaga hadapan, nilai pilihansideparameter adalah:buy, closebuy, sell, closesell. buybermaksud membuka kedudukan panjang,closebuybermaksud menutup kedudukan panjang,sellbermaksud membuka kedudukan pendek, danclosesellbermaksud menutup kedudukan pendek.

sisi betul senar Parameterpricedigunakan untuk menetapkan harga pesanan. Harga -1 menunjukkan bahawa pesanan adalah pesanan pasaran. harga betul nombor Parameteramountdigunakan untuk menetapkan kuantiti pesanan. Sila ambil perhatian bahawa apabila pesanan adalah pesanan beli pasaran, kuantiti pesanan adalah jumlah pembelian; kuantiti pesanan pesanan beli pasaran beberapa bursa spot adalah bilangan syiling perdagangan. Untuk butiran, sila rujukArahan Khas untuk Pertukarandalam Panduan Pengguna. jumlah betul nombor Parameter dilanjutkan boleh output maklumat tambahan untuk log pesanan ini.argparameter boleh diteruskan. arg palsu Sebarang jenis yang disokong oleh sistem, seperti rentetan, nombor, bool, objek, array, nilai sifar, dan lain-lain.

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 objek pertukaran niaga hadapan dipanggilexchange.CreateOrder()fungsi untuk meletakkan pesanan.

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

exchange.CancelOrder

Peraturanexchange.CancelOrder()Fungsi digunakan untuk membatalkan pesanan. AtributIdstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pesanan pasangan dagangan spotETH_USDTdaripada bursa OKX ialah:ETH-USDT,1547130415509278720. ParameterorderIdtelah berlalu dalam apabila memanggilexchange.CancelOrder()fungsi untuk membatalkan pesanan adalah konsisten denganIdsifat struktur order {@struct/Order Order}.

Peraturanexchange.CancelOrder()fungsi mengembalikan nilai yang benar, contohnyatruebermakna permintaan pesanan dibatalkan telah dihantar dengan berjaya. Jika ia mengembalikan nilai palsu, sepertifalse, bermakna permintaan pesanan membatalkan gagal dihantar. Nilai yang dikembalikan hanya mewakili kejayaan atau kegagalan permintaan yang dihantar untuk menentukan sama ada pertukaran membatalkan pesanan.exchange.GetOrders()untuk menentukan sama ada perintah itu dibatalkan. bool

Pertukaran. Batalkan Perintah Pertukaran. Batalkan Perintah ((PesanId,... args)

PeraturanorderIdParameter digunakan untuk menentukan pesanan yang akan dibatalkan. Perintah betul nombor, rentetan Parameter yang diperluaskan, anda boleh mengeluarkan maklumat yang dilampirkan ke log pengeluaran ini,argparameter boleh lulus lebih daripada satu. arg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong 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 API FMZ yang boleh menghasilkan fungsi output log seperti:Log(), exchange.Buy(), exchange.CancelOrder()boleh diikuti oleh beberapa parameter output yang disertakan selepas parameter yang diperlukan.exchange.CancelOrder(orders[i].Id, orders[i]), supaya apabila membatalkan pesanan yang id adalahorders[i].Id, maklumat orders output dengan ia. iaitu, struktur {@struct/Order Order}orders[i].

Jika anda menggunakan versi yang lebih lama dari docker, parameter orderId fungsi exchange.CancelOrder( mungkin berbeza dari orderId yang diterangkan dalam dokumen semasa.

{@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 maklumat pesanan.

Mencari butiran pesanan mengikut nombor pesanan, dan mengembalikan struktur {@struct/Order Order} jika pertanyaan berjaya, atau mengembalikan null jika pertanyaan gagal. {@struct/Order Order}, nilai sifar

pertukaran.GetOrder ((orderId)

PeraturanorderIdParameter digunakan untuk menentukan urutan yang akan ditanyakan. AtributIdstruktur order {@struct/Order Order} platform FMZ terdiri daripada kod produk bursa dan ID pesanan asal bursa, dipisahkan dengan koma Inggeris.Idformat pesanan pasangan dagangan spotETH_USDTdaripada bursa OKX ialah:ETH-USDT,1547130415509278720. ParameterorderIdtelah berlalu dalam apabila memanggilexchange.GetOrder()fungsi untuk menyoal perintah adalah konsisten denganIdsifat struktur order {@struct/Order Order}.

Perintah betul senar

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 tidak disokong oleh beberapa pertukaran.AvgPriceAtribut dalam struktur {@struct/Order Order} nilai pulangan adalah harga purata transaksi. Sesetengah bursa tidak menyokong medan ini, dan jika mereka tidak, ia ditetapkan kepada 0. Jika anda menggunakan versi lama dari docker,orderIdparameterexchange.GetOrder()fungsi boleh berbeza dariorderIdyang diterangkan dalam dokumentasi semasa. Bursa yang tidak menyokongexchange.GetOrder()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
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 pelbagai struktur {@struct/Order Order} jika permintaan data berjaya, dan ia mengembalikan nilai sifar jika permintaan data gagal. {@struct/Order Order} array, nilai sifar

pertukaran.GetOrders() pertukaran.GetOrders (simbol)

Parametersymboldigunakan untuk menetapkansimbol transaksiatauJulat simbol transaksiuntuk ditanyakan. Untuk objek pertukaran spot, jikasymbolparameter tidak diteruskan, data pesanan yang tidak lengkap untuk semua produk spot akan diminta. Bagi objek pertukaran niaga hadapan, jikasymbolJika parameter tidak diteruskan, lalai adalah untuk meminta data pesanan yang belum selesai dari semua jenis dalam julat dimensi pasangan dagangan semasa dan kod kontrak.

simbol palsu senar

/*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 meletakkan pesanan beli untuk beberapa pasangan dagangan yang berbeza pada separuh harga semasa, dan kemudian menyoal maklumat 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 niaga hadapan untuk meletakkan pesanan untuk beberapa pasangan dagangan yang berbeza dan kod kontrak. Letakkan pesanan pada harga yang jauh dari harga rakan kongsi, simpan pesanan dalam keadaan yang tidak dipenuhi, dan permintaan pesanan dengan pelbagai 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);
}

Apabila memanggilexchange.GetOrders()fungsi, lulus dalamSymbolparameter untuk meminta data pesanan untuk pasangan dagangan tertentu dan kod kontrak.

DalamGetOrdersfungsi, senario penggunaan parameter simbol diringkaskan seperti berikut:

Klasifikasi Objek Pertukaran simbol Parameter Lingkup pertanyaan Perhatikan
Spot Jangan lulus parameter simbol Bertanya semua pasangan dagangan spot Untuk semua senario panggilan, jika antara muka pertukaran tidak menyokongnya, satu ralat akan dilaporkan dan nilai sifar akan dikembalikan.
Spot Tentukan jenis dagangan, parameter simbol adalah: BTC_USDT Mencari pasangan dagangan BTC_USDT yang ditentukan Untuk objek pertukaran spot, format parameter simbol adalah: BTC_USDT
Masa hadapan Jangan lulus parameter simbol Mencari semua produk dagangan dalam julat dimensi pasangan dagangan semasa dan kod kontrak Jika pasangan dagangan semasa adalah BTC_USDT dan kod kontrak adalah swap, semua kontrak kekal dengan margin USDT akan ditanyakan.GetOrders("USDT.swap")
Masa hadapan Tentukan jenis dagangan, parameter simbol adalah: BTC_USDT.swap Mencari kontrak kekal berasaskan USDT untuk BTC tertentu Untuk objek pertukaran niaga hadapan, format simbol parameter adalah: gabunganPasangan dagangandanKod kontrakditakrifkan oleh platform FMZ, dipisahkan dengan aksara"..
Masa hadapan Tentukan julat produk dagangan, parameter simbol adalah: USDT.swap Mencari semua kontrak kekal berasaskan USDT -
Bursa niaga hadapan yang menyokong opsyen Jangan lulus parameter simbol Mencari semua kontrak opsyen dalam julat dimensi pasangan dagangan semasa Jika pasangan dagangan semasa adalah BTC_USDT, kontrak ditetapkan kepada kontrak opsyen, contohnya, kontrak opsyen Binance: BTC-240108-40000-C
Bursa niaga hadapan yang menyokong opsyen Menentukan produk perdagangan tertentu Mencari kontrak opsyen yang ditentukan Sebagai contoh, untuk Bursa niaga hadapan Binance, parameter simbol adalah: BTC_USDT.BTC-240108-40000-C
Bursa niaga hadapan yang menyokong opsyen Tentukan julat produk dagangan, parameter simbol adalah: USDT.option Mencari semua kontrak opsyen berasaskan USDT -

DalamGetOrdersfungsi, permintaan objek pertukaran niaga hadapan Julat dimensi diringkaskan seperti berikut:

simbol Parameter Penentuan Julat Permintaan Perhatikan
USDT.swap Julat kontrak kekal berasaskan USDT. Untuk

dimensi yang tidak disokong oleh antara muka API pertukaran, Kesilapan akan dilaporkan dan nilai null akan dikembalikan apabila memanggil. USDT.futures. USDT berasaskan kontrak penghantaran. USD.swap. Rentang mata wang berasaskan kekal kontrak. USD.futures. Rentang penghantaran berasaskan mata wang kontrak. USDT.option.Rentang kontrak pilihan berasaskan USDT. USD.option. Rentang kontrak pilihan berasaskan mata wang. USDT.futures_combo. Pelbagai kombinasi CFD. Futures_Deribit Exchange USD.futures_ff. Pelbagai kontrak penghantaran margin bercampur. Futures_Kraken Exchange. $USD.swap_pf. $USD.swap_pf. ∙ ∙ Futures_Kraken Exchange ∙

Apabila akaun yang diwakili oleh objek pertukaranexchangetidak mempunyai pesanan yang menunggu dalamJulat pertanyaanatauInstrumen dagangan tertentu(perintah aktif dalam keadaan yang tidak dipenuhi), memanggil fungsi ini mengembalikan array kosong, iaitu:[]. Pertukaran berikut memerlukan instrumen untuk lulus dalam parameter instrumen ketika menyoal pesanan yang tidak selesai pada masa ini. Apabila memanggil fungsi GetOrders dengan pertukaran ini, jika parameter instrumen tidak diteruskan, hanya pesanan yang tidak selesai dari instrumen semasa yang diminta, bukan pesanan yang tidak selesai dari semua instrumen (kerana antara muka pertukaran tidak menyokong ini). Zaif, MEXC, LBank, Korbit, Coinw, BitMart, Bithumb, BitFlyer, BigONE.

Bursa yang tidak menyokongexchange.GetOrders()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
GetOrders Futures_Bibox

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

exchange.GetHistoryOrders

Peraturanexchange.GetHistoryOrders()fungsi digunakan untuk mendapatkan pasangan dagangan semasa, pesanan sejarah untuk kontrak; ia menyokong spesifikasi jenis dagangan tertentu.

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

pertukaran.GetHistoryOrders() pertukaran.GetHistoryOrders (simbol) pertukaran.GetHistoryOrders ((simbol, sejak) exchange.GetHistoryOrders ((simbol, sejak, had) pertukaran.GetHistoryOrders ((sejak) pertukaran.GetHistoryOrders ((sejak, had)

PeraturansymbolParameter digunakan untuk menentukan simbol perdagangan.BTC_USDTpasangan dagangan, contohnya, apabilaexchangeadalah objek pertukaran spot, format parameter untuksymboladalahBTC_USDTJika ia adalah objek pertukaran niaga hadapan, mengambil kontrak kekal sebagai contoh, format parameter untuksymbolialah:BTC_USDT.swap. Jika anda sedang menyoal data pesanan kontrak opsyen, menetapkan parametersymbolkepada"BTC_USDT.BTC-240108-40000-C"(mengambil Binance Option BTC-240108-40000-C sebagai contoh).Pasangan daganganyang ditakrifkan oleh platform FMZ dan kod kontrak opsyen khusus yang ditakrifkan oleh bursa, dipisahkan oleh watak .. Jika parameter ini tidak diteruskan, data pesanan pasangan dagangan dan kod kontrak yang ditetapkan pada masa ini akan diminta secara lalai.

simbol palsu senar PeraturansinceParameter digunakan untuk menentukan timestamp permulaan pertanyaan dalam mili saat. sejak palsu nombor PerkhidmatanlimitParameter digunakan untuk menentukan bilangan perintah untuk pertanyaan. had palsu nombor

function main() {
    var historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
}
def main():
    historyOrders = exchange.GetHistoryOrders()
    Log(historyOrders)
void main() {
    auto historyOrders = exchange.GetHistoryOrders();
    Log(historyOrders);
}
  • Bilakahsymbol, since, limitJika parameter tidak ditentukan, pertanyaan lalai adalah pasangan dagangan semasa, pesanan sejarah kontrak. Menyoal pesanan sejarah dalam julat tertentu yang terdekat dengan masa semasa, julat pertanyaan bergantung pada julat pertanyaan tunggal antara muka pertukaran.
  • Apabilasymbolparameter ditentukan, query sejarah pesanan untuk jenis perdagangan yang ditetapkan.
  • Apabilasinceparameter ditentukan, pertanyaan dalam arah masa semasa menggunakansincecap waktu sebagai masa permulaan.
  • Jikalimitparameter ditentukan, pertanyaan dikembalikan selepas jumlah yang mencukupi entri.
  • Fungsi ini hanya disokong untuk pertukaran yang menyediakan antara muka pertanyaan pesanan sejarah.

Bursa yang tidak menyokongexchange.GetHistoryOrders()fungsi:

Nama Fungsi Pertukaran Spot yang tidak disokong Pertukaran niaga hadapan tanpa sokongan
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 menetapkan ketepatanexchangeobjek pertukaranhargadanJumlah pesanan, selepas ditetapkan, sistem akan mengabaikan data yang berlebihan secara automatik.

pertukaran.SetPrecision ((hargaPrecision, jumlahPrecision)

PeraturanpricePrecisionparameter digunakan untuk mengawal ketepatan data harga. hargaKetepatan betul nombor PeraturanamountPrecisionparameter digunakan untuk mengawal ketepatan jumlah data yang akan dipesan. JumlahKeterangan betul nombor

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 menyokong fungsi ini, dan ketepatan numerik sistem backtesting dikendalikan secara automatik.

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

exchange.SetRate

Tetapkan kadar pertukaran semasa objek pertukaran.

pertukaran.SetRate ((rate))

PeraturanrateParameter digunakan untuk menentukan kadar pertukaran penukaran. kadar betul nombor

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 kadar pertukaran telah ditetapkan menggunakanexchange.SetRate()Kemudian semua maklumat harga seperti tickers, kedalaman, harga pesanan, dan lain-lain untuk pertukaran yang diwakili oleh semasaexchangeobjek pertukaran akan ditukar dengan mengalikannya dengan kadar pertukaran yang ditetapkan 7.exchangeadalah pertukaran dengan dolar AS sebagai mata wang denominasi.exchange.SetRate(7), semua harga di pasaran langsung akan ditukar kepada harga yang hampirCNYnama dengan mengalikan dengan 7.

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

exchange.IO

Peraturanexchange.IO()fungsi digunakan untuk panggilan antara muka lain yang berkaitan dengan objek pertukaran.

Peraturanexchange.IO()fungsi memanggil antara muka lain yang berkaitan dengan objek pertukaran, mengembalikan data tindak balas yang diminta pada panggilan yang berjaya dan ia mengembalikan null pada panggilan yang gagal. string, nombor, bool, objek, array, null, dan mana-mana jenis lain yang disokong oleh sistem

exchange.IO(k,... args)

PeraturankParameter digunakan untuk menetapkan jenis panggilan, dengan nilai pilihan"api", "currency", "base", "trade_margin", "trade_normal", "public_base", "mbase", selfTradePreventionMode, simulate, cross, dual, unifieddan seterusnya. k betul senar Parameter yang diperluaskan, lulus mengikut senario panggilan tertentu,argOleh kerana mekanisme polimorfik dariexchange.IO()fungsi, tetapan parameter yang berbeza sepadan dengan fungsi yang berbeza.exchange.IO()Fungsi tidak pasti. arg betul rentetan, nombor, bool, objek, susunan, sifar dan mana-mana jenis lain yang disokong 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)Borang panggilanexchange.IO()fungsi, adalah perlu untuk memahami antara muka API pertukaran dan memeriksa dokumentasi yang berkaitan terlebih dahulu. ini akan membolehkan anda untuk memperluaskan fungsi yang tidak ditambah kepada platform FMZ.POSTpermintaan tidak memerlukan anda untuk bimbang tentang penyulitan, menandatangani, atau mengesahkan parameter, yang sudah dikendalikan oleh FMZ di bahagian bawah, selagi anda mengisi parameter yang sepadan.OKX Exchangekontrak niaga hadapan, dan menggunakan parameterrawuntuk lulus parameter perintah:

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 (iaitu, parameter permintaan HTTP) adalah rentetan, ia perlu ditulis dalam tanda petik tunggal (iaitu, 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);
}

Ia menyokong lulus dalam parameter url lengkap yang boleh mengabaikan operasi menukar alamat pangkalan (menyebutexchange.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());
}

Bertukar pasangan dagangan bursa semasa, supaya ia akan menukar pasangan dagangan yang dikonfigurasi oleh kodpada 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 asas yang berbeza untuk antara muka ticker dan antara muka perdagangan, misalnya, Bitfinex Futures mempunyai dua alamat, satu untuk antara muka ticker dan yang lain untuk antara muka perdagangan.exchange.SetBase("xxx"). Bitfinex niaga hadapan menukar alamat asas antara muka awam menggunakanexchange.IO("mbase", "xxx").

I. Untuk pertukaran berpusat pada mata wang kripto panggilan antara muka API lain yang tidak disatukan secara seragam, dengan parameterkditetapkan kepada"api":

exchange.IO("api", httpMethod, resource, params, raw)
  • httpMethod : Parameter adalah jenis rentetan, isi jenis permintaanPOST, GET, dan lain-lain
  • sumber: Parameter adalah jenis rentetan dan mengisi laluan permintaan; Ia menyokong penggunaan laluan permintaan lengkap, lihat contoh rujukan untuk butiran.
  • Parameter adalah jenis rentetan, diisi dengan parameter permintaan, dikodkan denganURL.
  • raw: Parameter adalah parameter rentetan mentah dan boleh ditinggalkan.

Peraturanexchange.IO("api", httpMethod, resource, params, raw)panggilan fungsi akan mengakses antara muka pertukaran dan mengembalikan null jika panggilan gagal dan ralat berlaku. Hanya perdagangan sebenar menyokong memanggilexchange.IO("api", httpMethod, resource, params, raw) function.

Untuk menukar pasangan dagangan, parameterkditetapkan kepada"currency":

exchange.IO("currency", currency)
  • mata wang: Parameter adalah jenis rentetan dengan format huruf besar seragam, menggunakan garis bawah untuk memisahkanbaseCurrencydaripadaquoteCurrency, sepertiBTC_USDT.

    1. Backtesting sistem kini menyokong menukar pasangan dagangan (hanya untuk mata wang digital spot pertukaran objek), apabila backtesting, anda perlu memberi perhatian bahawa anda hanya boleh beralih ke pasangan dagangan dengan mata wang yang sama, sebagai contoh, pasangan dagangan semasa adalahETH_BTChanya boleh beralih keLTC_BTC, bukan untukLTC_USDT.
    2. Untuk kontrak niaga hadapan cryptocurrency, objek pertukaran menukar pasangan dagangan dan kod kontrak perlu ditetapkan semula untuk menentukan kontrak mana yang akan didagangkan.
    3. Menggunakan fungsi {@fun/Account/exchange.SetCurrency exchange.SetCurrency} untuk menukar pasangan dagangan adalah sama seperti menggunakanexchange.IO("currency", currency)untuk menukar pasangan dagangan.

III. Digunakan untuk menukar mod akaun leveraged objek pertukaran mata wang kripto spot:

  • Parameterkditetapkan kepada"trade_margin"untuk beralih ke mod akaun leverage spot. meletakkan pesanan dan mendapatkan aset akaun akan mengakses antara muka leveraged spot bursa. Jika bursa membezakan antara margin penuh dan margin terpencil dalam leverage spot, gunakan:exchange.IO("trade_super_margin")untuk beralih kepada margin penuh untuk akaun leveraged, danexchange.IO("trade_margin")untuk beralih kepada margin terpencil untuk akaun leveraged.
  • Parameterkditetapkan kepada"trade_normal"untuk beralih semula ke mod akaun spot biasa.

Bursa spot yang menyokong beralih antara model akaun leveraged:

Pertukaran Nota khas
OKX Pasangan perdagangan dalam mod akaun leveraged berbeza dari yang biasa, beberapa pasangan perdagangan mungkin tidak memilikinya.exchange.IO("trade_super_margin")untuk beralih kepada kedudukan penuh untuk akaun leveraged dan penggunaanexchange.IO("trade_margin")untuk beralih ke kedudukan oleh kedudukan.trade_normaluntuk beralih ke mod spot biasa.exchange.IO("tdMode", "cross")untuk menentukan secara langsung mod leverage.
Huobi Pasangan dagangan mod akaun leveraged berbeza dari yang biasa, beberapa pasangan dagangan mungkin tidak memilikinya.trade_marginuntuk beralih ke kedudukan akaun leverage mengikut kedudukan, menggunakantrade_super_marginuntuk beralih ke kedudukan penuh akaun leverage.trade_normaluntuk beralih ke mod mata wang-mata wang biasa.
Binance Mod akaun leveraged dibahagikan kepada kedudukan mengikut kedudukan dan kedudukan penuh, penggunaantrade_marginuntuk beralih ke kedudukan oleh kedudukan, menggunakantrade_super_marginuntuk beralih ke kedudukan penuh, gunakantrade_normaluntuk beralih ke mod mata wang-mata wang biasa.
GateIO Mod akaun leveraged dibahagikan kepada kedudukan mengikut kedudukan dan kedudukan penuh, penggunaantrade_marginuntuk beralih ke kedudukan oleh kedudukan, menggunakantrade_super_marginuntuk beralih ke kedudukan penuh, gunakantrade_normaluntuk beralih ke mod mata wang-mata wang biasa.
AscendEx Penggunaanexchange.IO("trade_margin")untuk beralih ke mod akaun leverage danexchange.IO("trade_normal")untuk beralih semula ke mod akaun biasa.
WOO Penggunaanexchange.IO("trade_margin")untuk beralih ke mod akaun leverage danexchange.IO("trade_normal")untuk beralih semula ke mod akaun biasa.
CoinEx Penggunaanexchange.IO("trade_margin")untuk beralih ke mod akaun leveraged danexchange.IO("trade_normal")untuk beralih semula ke mod akaun biasa.

IV. Fungsi suis lain:Lihatlahexchange.IO()fungsi untukFungsi suis laindalam 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 mengeluarkan log penempatan pesanan dan pengeluaran di kawasan lajur log. Apabila dipanggil, tiada pesanan diletakkan, hanya log transaksi yang dikeluarkan dan direkodkan.

pertukaran.Log ((pesananJenis, harga, jumlah) pertukaran.Log ((pesananJenis, harga, jumlah,... args)

PeraturanorderTypeparameter digunakan untuk menetapkan jenis log output, nilai pilihan 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 betul nombor Perkhidmatanpriceparameter digunakan untuk menetapkan harga yang dipaparkan dalam log output. harga betul nombor PerkhidmatanamountParameter digunakan untuk menetapkan jumlah pesanan yang diletakkan yang dipaparkan dalam log output. jumlah betul nombor Parameter yang diperluaskan yang boleh mengeluarkan maklumat yang disertakan ke log ini,argparameter boleh lulus lebih daripada satu. arg palsu rentetan, nombor, bool, objek, array, null dan jenis lain yang disokong 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)boleh digunakan untuk pesanan dagangan langsung mengikuti ujian, simulasi penempatan pesanan, dan ia boleh membantu dalam penempatan pesanan log.exchange.IO} berfungsi untuk mengakses antara muka pertukaran untuk membuat pesanan bersyarat, tetapi menggunakanexchange.IO()fungsi tidak output maklumat log urus niaga dalam rekod log dagangan hidup.exchange.Log()fungsi boleh digunakan untuk melengkapkan log output untuk merekod maklumat penempatan pesanan, dan yang sama berlaku untuk operasi pengeluaran pesanan.

ApabilaorderTypeparameter ialahLOG_TYPE_CANCEL, yangpriceParameter adalah urutan Id pesanan ditarik balik yang digunakan untuk mencetak log pengeluaran apabila pesanan ditarik balik secara langsung menggunakanexchange.IO()fungsi.exchange.Log()fungsi adalah fungsi ahli objek pertukaran {@var/EXCHANGE exchange}, berbeza 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 pengiraan penyulitan tandatangan.

Peraturanexchange.Encode()fungsi mengembalikan pengekodan nilai hash yang dikira. senar

exchange.Encode ((algo, inputFormat, outputFormat, data) exchange.Encode ((algo, inputFormat, outputFormat, data, kunciFormat, kunci)

Parameteralgoadalah algoritma yang digunakan untuk pengiraan pengekodan. tetapan yang disokong 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.256 parameter.algojuga menyokong: text.encoder.utf8, text.decoder.utf8, text.encoder.gbk, text.decoder.gbk, untuk pengekodan dan penyahkodan rentetan. Parameteralgojuga menyokong: ed25519 algoritma. Ia menyokong penggunaan algoritma hash yang berbeza, contohnya parameteralgoboleh ditulis sebagai ed25519.md5, ed25519.sha512, dll. Sokonganed25519.seedpengiraan. sesuatu betul senar Digunakan untuk menentukan format datadataparameter.inputFormatparameter boleh ditetapkan kepada salah satu daripada: raw, hex, base64, dan string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. inputFormat betul senar Digunakan untuk menentukan format output data.outputFormatparameter menyokong tetapan berikut: raw, hex, base64, string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. outputFormat betul senar Parameterdataadalah data yang akan diproses. data betul senar Digunakan untuk menentukan format datakeyparameter.keyparameter boleh ditetapkan kepada salah satu daripada: raw, hex, base64, dan string. raw bermaksud data adalah data mentah, hex bermaksud data adalahhexdikodkan, base64 bermaksud data adalahbase64dikodkan, dan string bermaksud data adalah rentetan. keyFormat palsu senar Perkhidmatankeyparameter digunakan untuk menentukan kunci yang digunakan dalam pengiraan tandatangan, dan ia boleh digunakan sebagai rentetan plaintext."{{accesskey}}", "{{secretkey}}"untuk merujuk kepadaaccessKeydansecretKeyyang dikonfigurasi dalam objek pertukaran {@var/EXCHANGE exchange}. kunci palsu senar

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 kedudukan BitMEX (wss protokol):

Hanya perdagangan sebenar menyokong memanggilexchange.Encode()fungsi."{{accesskey}}", "{{secretkey}}"rujukan hanya sah apabilaexchange.Encode()fungsi digunakan.

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

exchange.Go

Fungsi sokongan asynchronous pelbagai benang boleh mengubah operasi semua fungsi yang disokong menjadi pelaksanaan serentak asynchronous.

Peraturanexchange.Go()fungsi mengembalikan objek serentak dengan serta-merta, dan anda boleh menggunakanwait()kaedah objek serentak itu untuk mendapatkan hasil permintaan serentak. objek

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

Peraturanmethodparameter digunakan untuk menentukan nama fungsi serentak. Perhatikan bahawa parameter adalah rentetan nama fungsi, bukan rujukan fungsi. kaedah betul senar Parameter untukmelaksanakan fungsi secara serentak, mungkin terdapat lebih daripada satu parameterarg. Jenis dan nombor parameterargbergantung kepada parameterfungsi pelaksanaan serentak. arg palsu string, nombor, bool, objek, array, fungsi, null, dan semua jenis lain yang disokong 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", kerananull == undefinedadalah sah dalam 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);
}

Menghubungiwait()kaedah pada objek serentak yang telah dilepaskan akan melaporkan ralat:

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 serentak kepada pelbagai pertukaran ticker:

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

Permintaan serentak untukexchange.IO("api", ...)fungsi:

Fungsi ini hanya mewujudkan tugas pelaksanaan berbilang benang apabila dijalankan dalam perdagangan sebenar, backtesting tidak menyokong pelaksanaan tugas serentak berbilang benang (backtesting tersedia, tetapi masih dijalankan secara berurutan). Selepasexchange.Go()fungsi mengembalikan objek,wait()fungsi dipanggil melalui objek itu untuk mendapatkan data yang dikembalikan oleh benang.wait()fungsi mesti dipanggil untuk mendapatkan data sebelum benang akan dibebaskan secara automatik.wait()fungsi ditentukan, utas tidak akan dibebaskan secara automatik walaupun masa tamat berlaku. Hasil utas mesti diperoleh sebelum ia akan dibebaskan secara automatik (tidak kira kejayaan atau kegagalan panggilan antara muka untuk akses serentak).wait()fungsi tanpa mengira sama ada pelaksanaan berjaya atau gagal, dan sumber benang yang diminta olehexchange.Go()fungsi mesti dibebaskan secara automatik oleh pelabuhan. Peraturanwait()kaedah menyokong parameter timeout: Tanpa parameter timeout, iaitu,wait(), atau dengan parameter timeout 0, iaitu,wait(0).wait()blok fungsi dan menunggu sehingga thread serentak selesai berjalan, mengembalikan hasil pelaksanaan thread serentak. Tetapkan parameter waktu henti -1, iaituwait(-1).wait()fungsi kembali dengan segera, dengan nilai pulangan yang berbeza untuk bahasa pengaturcaraan yang berbeza, lihat subbahagian ini untuk panggilan contoh. Tetapkan parameter masa lapang tertentu,wait(300), danwait()Fungsi akan menunggu maksimum 300 milisaat sebelum kembali.

Jika hasil pulangan akhirwait()fungsi tidak diperolehi, sumber thread tidak akan dibebaskan secara automatik, yang akan membawa kepada pengumpulan utas yang diminta, dan lebih daripada 2000 akan melaporkan ralat:"too many routine wait, max is 2000". Fungsi yang disokong:GetTicker, GetDepth, GetTrades, GetRecords, GetAccount, GetOrders, GetOrder, CancelOrder, Buy, Sell, GetPositions, IO. Semua fungsi ini dilaksanakan berdasarkan objek pertukaran semasa {@var/EXCHANGE exchange} apabila dipanggil secara serentak. Perbezaan antara bahasa Python dan bahasa JavaScript adalah bahawawait()fungsi objek serentak dalam bahasa Python mengembalikan dua parameter. Parameter pertama adalah hasil yang dikembalikan oleh panggilan API asynchronous, dan parameter kedua menunjukkan sama ada panggilan asynchronous 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}

Pasaran Akaun