Sumber daya yang dimuat... Pemuatan...

Penjelasan Rinci FMZ Quant API Upgrade: Meningkatkan Pengalaman Desain Strategi

Penulis:FMZ~Lydia, Dibuat: 2024-07-05 09:44:08, Diperbarui: 2024-09-20 08:52:30

[TOC]

img

Pengantar

Setelah 9 tahun iterasi teknis, FMZ Quant Trading Platform telah direkonstruksi berkali-kali, meskipun sebagai pengguna kita mungkin tidak menyadarinya.

Untuk membuat desain strategi lebih nyaman, logika perdagangan lebih jelas, dan lebih mudah bagi pemula untuk memulai, platform telah memperbarui antarmuka API yang digunakan oleh strategi. Docker yang menggunakan versi terbaru dapat mengaktifkan fitur baru ini. Platform ini masih kompatibel dengan panggilan antarmuka lama sejauh mungkin. Informasi tentang fitur baru antarmuka API telah diperbarui ke dokumentasi API dari FMZ Quant Trading Platform:

Panduan sintaksis:https://www.fmz.com/syntax-guidePanduan Pengguna:https://www.fmz.com/user-guide

Jadi mari kita lihat dengan cepat antarmuka mana yang telah ditingkatkan dan perubahan apa yang diperlukan untuk menggunakan strategi lama untuk membuatnya kompatibel dengan API saat ini.

1. antarmuka API baru

Ditambahkan pertukaran.GetTickers fungsi

Untuk merancang strategi multi-produk dan strategi pemantauan pasar yang lengkap, antarmuka pasar agregat sangat penting. Untuk membuat strategi lebih mudah dikembangkan dan menghindari penemuan ulang acara, FMZ Quant Trading Platform merangkum API pertukaran jenis ini.

Jika pertukaran tidak memiliki antarmuka ini (pertukaran individu), ketika memanggilexchange.GetTickers(), muncul pesan kesalahan: Tidak didukung.

Fungsi ini tidak memiliki parameter dan akan mengembalikan data pasar real-time dari semua varietas dalam antarmuka pasar agregat bursa.

exchange.GetTickers()fungsi adalah versi permintaan penuh fitur dariexchange.GetTicker()fungsi (lihat dengan hati-hati, perbedaan antara kedua nama fungsi ini hanya tunggal dan jamak).

Kami menggunakan lingkungan simulasi titik OKX untuk pengujian:

function main() {
    exchange.IO("simulate", true)

    var tickers = exchange.GetTickers()
    if (!tickers) {
        throw "tickers error"
    }

    var tbl = {type: "table", title: "test tickers", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var i in tickers) {
        var ticker = tickers[i]
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return tickers.length
}

img

Ditambahkan fungsi Exchange.CreateOrder

Yang baru ditambahkanexchange.CreateOrder()fungsi adalah fokus dari upgrade ini.exchange.CreateOrder()adalah untuk menentukan jenis dan arah pesanan dalam parameter fungsi secara langsung. Dengan cara ini, tidak lagi tergantung pada pasangan perdagangan saat ini, kode kontrak, arah perdagangan dan pengaturan lain dari sistem.

Dalam skenario penempatan pesanan perdagangan multi-spesies dan skenario bersamaan, kompleksitas desain sangat berkurang.exchange.CreateOrder()fungsi adalahsymbol, side, price, amount.

Uji menggunakan lingkungan simulasi berjangka OKX:

function main() {
    exchange.IO("simulate", true)

    var id1 = exchange.CreateOrder("ETH_USDT.swap", "buy", 3300, 1)
    var id2 = exchange.CreateOrder("BTC_USDC.swap", "closebuy", 70000, 1)
    var id3 = exchange.CreateOrder("LTC_USDT.swap", "sell", 110, 1)

    Log("id1:", id1, ", id2:", id2, ", id3:", id3)
}

img

Dengan cara ini, hanya tigaexchange.CreateOrder()panggilan fungsi digunakan untuk menempatkan tiga pesanan berjangka dari berbagai jenis dan arah.

Ditambahkan fungsi Exchange.GetHistoryOrders

Yang baru ditambahkanexchange.GetHistoryOrders()Fungsi ini juga membutuhkan dukungan antarmuka pertukaran.

Untuk menanyakan pesanan historis, antarmuka yang diimplementasikan oleh berbagai pertukaran sangat bervariasi:

  • Beberapa mendukung kueri berhalaman, sementara yang lain tidak;
  • Beberapa bursa memiliki periode jendela kueri, yaitu pesanan yang lebih tua dari N hari tidak dapat ditanyakan;
  • Sebagian besar pertukaran mendukung kueri pada waktu tertentu, tetapi beberapa tidak; Antarmuka tersebut dikemas dengan tingkat kompatibilitas tertinggi, dan dalam penggunaan yang sebenarnya, perhatian harus diberikan kepada apakah mereka memenuhi persyaratan dan harapan strategi.

Deskripsi fungsi rinci tidak diulang di sini, Anda dapat merujuk manual sintaksis dalam dokumentasi API:

https://www.fmz.com/syntax-guide#fun_exchange.gethistoryorders

Diuji menggunakan Binance spot trading environment:

function main() {
    var orders = exchange.GetHistoryOrders("ETH_USDT")

    // Write to chart
    var tbl = {type: "table", title: "test GetHistoryOrders", 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])
    }
    
    LogStatus("orders.length:", orders.length, "\n", "`" + JSON.stringify(tbl) +  "`")
}

img

Ditambahkan fungsi exchange.GetPositions

Versi lama dari fungsi pengumpulan data posisi adalahexchange.GetPosition(). Upgrade ini menambahkan fungsi akuisisi posisi baru untuk lebih cocok dengan semantik nama fungsi:exchange.GetPositions(). Pada saat yang sama, masih kompatibel / ditingkatkan dengan fungsi GetPosition.

Perhatikan bahwa kedua nama fungsi hanya berbeda dengan s terakhir. Karena GetPositions lebih semantik benar, disarankan untuk menggunakan GetPositions di masa depan.

Peraturanexchange.GetPositions()fungsi memiliki tiga bentuk panggilan:

  • Pertukaran.GetPositions ((() Ketika tidak ada parameter yang dilewatkan, data posisi dari semua varietas dalam dimensi saat ini diminta sesuai dengan pengaturan aruspasangan perdagangan / kode kontrak.

  • exchange.GetPositions ((ETH_USDT.swap) Saat menentukan informasi produk tertentu (format ETH_USDT.swap didefinisikan oleh platform FMZ), minta data posisi produk tertentu. Misalnya:BTC_USD.swap, ETH_USDT.swap, ETH_USDT.quarter, dll. BTC_USD.swap: Kontrak abadi berbasis mata uang BTC. ETH_USDT.swap: Kontrak abadi berbasis ETH. ETH_USDT.quarter: kontrak pengiriman ETH berdasarkan U setiap triwulan. BTC_USD.BTC-USD-201226-24250-C: Kontrak opsi berbasis koin BTC.

  • exchange.GetPositions ((USDT.swap) Minta data posisi untuk semua produk sesuai dengan kisaran dimensi yang ditentukan. USDT.swap: rentang kontrak abadi berbasis U. USDT.futures: rentang kontrak pengiriman berbasis U. USD.swap: rentang kontrak abadi berbasis koin. USD.futures: rentang kontrak pengiriman berbasis koin. USDT.option: rentang kontrak opsi berbasis U. USD.option: rentang kontrak opsi berbasis koin.

    Beberapa divisi dimensi kontrak pertukaran khusus: USDT.futures_combo: Futures_Deribit exchange's spread combination contract. USD.futures_ff: Futures_Kraken exchange kontrak pengiriman margin campuran. USD.swap_pf: Futures_Kraken exchange's mixed margin perpetual contract. Untuk dimensi yang tidak didukung oleh antarmuka API pertukaran, kesalahan akan dilaporkan dan nilai nol akan dikembalikan saat dipanggil.

Uji menggunakan lingkungan simulasi berjangka OKX:

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    var p1 = exchange.GetPositions()
    var p2 = exchange.GetPositions("BTC_USDT.swap")

    var tbls = []
    for (var positions of [p1, p2]) {
        var tbl = {type: "table", title: "test GetPosition/GetPositions", cols: ["Symbol", "Amount", "Price", "FrozenAmount", "Type", "Profit", "Margin", "ContractType", "MarginLevel"], rows: []}
        for (var p of positions) {
            tbl.rows.push([p.Symbol, p.Amount, p.Price, p.FrozenAmount, p.Type, p.Profit, p.Margin, p.ContractType, p.MarginLevel])
        } 
        tbls.push(tbl)
    }

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

img

Ketika parameter diteruskan keexchange.GetPositions()fungsi adalahETH_USDT.swap, data posisi kontrak abadi berbasis U ETH dapat diperoleh.

Ketika parameter dariexchange.GetPositions()fungsi tidak diteruskan, data posisi semua kontrak abadi berbasis U yang terdaftar di bursa dapat diperoleh (karena pasangan perdagangan saat ini adalah BTC_USDT dan kontraknya adalah swap, permintaan didasarkan pada pasangan perdagangan saat ini dan kisaran dimensi kontrak).exchange.GetPositions("USDT.swap")dan menentukan rentang permintaan.

2. Peningkatan antarmuka API

Update Exchange.GetTicker fungsi

Peningkatan utama fungsi pasarexchange.GetTicker()Ini memungkinkan fungsi untuk meminta data pasar secara langsung sesuai dengan informasi produk yang ditentukan oleh parameter tanpa pasangan perdagangan saat ini dan kode kontrak. Ini menyederhanakan proses penulisan kode. Pada saat yang sama, masih kompatibel dengan metode panggilan tanpa melewati parameter, dan kompatibel dengan strategi platform lama sejauh mungkin.

Parametersymbolmemiliki format yang berbeda untuk spot/future untuk objek pertukaranexchange:

  • Objek pertukaran spot Formatnya adalah:AAA_BBB, AAA mewakili baseCurrency, yaitu mata uang perdagangan, dan BBB mewakili quoteCurrency, yaitu mata uang penetapan harga. Misalnya: pasangan perdagangan spot BTC_USDT.
  • Objek pertukaran futures Formatnya adalah:AAA_BBB.XXX, AAA mewakili baseCurrency, yaitu mata uang perdagangan, BBB mewakili quoteCurrency, yaitu mata uang penetapan harga, dan XXX mewakili kode kontrak, seperti perpetual contract swap. Nama mata uang semuanya dalam huruf besar, dan kode kontrak dalam huruf kecil. Misalnya: BTC_USDT.swap, kontrak abadi berbasis U BTC. Diuji menggunakan Binance Futures live environment:
var symbols = ["BTC_USDT.swap", "BTC_USDT.quarter", "BTC_USD.swap", "BTC_USD.next_quarter", "ETH_USDT.swap"]

function main() {
    exchange.SetCurrency("ETH_USD")
    exchange.SetContractType("swap")

    var arr = []
    var t = exchange.GetTicker()
    arr.push(t)

    for (var symbol of symbols) {
        var ticker = exchange.GetTicker(symbol)
        arr.push(ticker)
    }

    var tbl = {type: "table", title: "test GetTicker", cols: ["Symbol", "High", "Open", "Low", "Last", "Buy", "Sell", "Time", "Volume"], rows: []}
    for (var ticker of arr) {
        tbl.rows.push([ticker.Symbol, ticker.High, ticker.Open, ticker.Low, ticker.Last, ticker.Buy, ticker.Sell, ticker.Time, ticker.Volume])
    }

    LogStatus("`" + JSON.stringify(tbl) +  "`")
    return arr
}

img

Meminta batch data pasar untuk simbol tertentu telah menjadi jauh lebih sederhana.

Update Exchange.GetDepth fungsi

Mirip dengan fungsi GetTicker,exchange.GetDepth()fungsi juga menambahkan parameter simbol. ini memungkinkan kita untuk secara langsung menentukan simbol ketika meminta data kedalaman.

Diuji menggunakan Binance Futures live environment:

function main() {
    exchange.SetCurrency("LTC_USD")
    exchange.SetContractType("swap")

    Log(exchange.GetDepth())
    Log(exchange.GetDepth("ETH_USDT.quarter"))
    Log(exchange.GetDepth("BTC_USD.swap"))
}

img

Perbarui fungsi exchange.GetTrades

Mirip dengan fungsi GetTicker,exchange.GetTrades()fungsi juga menambahkan parameter simbol. ini memungkinkan kita untuk menentukan simbol langsung ketika meminta data transaksi pasar.

Diuji menggunakan Binance Futures live environment:

function main() {
    var arr = []
    var arrR = []
    var symbols = ["LTC_USDT.swap", "ETH_USDT.quarter", "BTC_USD.swap"]    

    for (var symbol of symbols) {
        var r = exchange.Go("GetTrades", symbol)
        arrR.push(r)
    }

    for (var r of arrR) {
        arr.push(r.wait())
    }
    
    var tbls = []
    for (var i = 0; i < arr.length; i++) {
        var trades = arr[i]
        var symbol = symbols[i]

        var tbl = {type: "table", title: symbol, cols: ["Time", "Amount", "Price", "Type", "Id"], rows: []}
        for (var trade of trades) {
            tbl.rows.push([trade.Time, trade.Amount, trade.Price, trade.Type, trade.Id])
        }

        tbls.push(tbl)
    }

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

img

Upgrade ini juga kompatibel dengan parameter simbol yang ditentukan olehexchange.Go()fungsi saat memanggil antarmuka API platform secara bersamaan.

Update Exchange.GetRecords fungsi

Fungsi GetRecords telah sangat disesuaikan kali ini. Selain mendukung parameter simbol untuk secara langsung menentukan informasi jenis data K-line yang diminta, parameter periode asli dipertahankan untuk menentukan periode K-line, dan parameter batas ditambahkan untuk menentukan panjang K-line yang diharapkan saat diminta. Pada saat yang sama, ini juga kompatibel dengan versi lama fungsi GetRecords yang hanya melewati parameter periode.

Metode panggilan dariexchange.GetRecords()Fungsi adalah:

  • pertukaran.GetRecords ((() Jika tidak ada parameter yang ditentukan, data K-line dari produk yang sesuai dengan pasangan perdagangan/kode kontrak saat ini diminta.
  • tukar.GetRecords ((60 * 15) Bila hanya parameter periode K-line yang ditentukan, data K-line dari produk yang sesuai dengan pasangan perdagangan/kode kontrak saat ini diminta.
  • exchange.GetRecords ((BTC_USDT.swap) Ketika hanya informasi produk yang ditentukan, data K-line dari produk yang ditentukan diminta. Periode K-line adalah periode K-line default yang ditetapkan dalam antarmuka backtesting strategi atau dalam perdagangan langsung.
  • exchange.GetRecords ((BTC_USDT.swap, 60 * 60) Tentukan informasi produk dan periode garis K khusus untuk meminta data garis K.
  • exchange.GetRecords ((BTC_USDT.swap, 60, 1000) Tentukan informasi produk, tentukan periode garis K spesifik, dan tentukan panjang garis K yang diharapkan untuk meminta data garis K. Perhatikan bahwa ketika parameter batas melebihi panjang maksimum permintaan tunggal dari pertukaran, permintaan paging akan dihasilkan (yaitu, beberapa panggilan ke antarmuka K-line pertukaran).

Diuji menggunakan Binance Futures live environment:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    var r1 = exchange.GetRecords()
    var r2 = exchange.GetRecords(60 * 60)
    var r3 = exchange.GetRecords("BTC_USDT.swap")
    var r4 = exchange.GetRecords("BTC_USDT.swap", 60)
    var r5 = exchange.GetRecords("LTC_USDT.swap", 60, 3000)

    Log("r1 time difference between adjacent bars:", r1[1].Time - r1[0].Time, "Milliseconds, Bar length:", r1.length)
    Log("r2 time difference between adjacent bars:", r2[1].Time - r2[0].Time, "Milliseconds, Bar length:", r2.length)
    Log("r3 time difference between adjacent bars:", r3[1].Time - r3[0].Time, "Milliseconds, Bar length:", r3.length)
    Log("r4 time difference between adjacent bars:", r4[1].Time - r4[0].Time, "Milliseconds, Bar length:", r4.length)
    Log("r5 time difference between adjacent bars:", r5[1].Time - r5[0].Time, "Milliseconds, Bar length:", r5.length)
}

img

Update fungsi Exchange.GetOrders

Fungsi GetOrders juga menambahkansymbolparameter, yang dapat digunakan untuk menentukan simbol tertentu dan menanyakan pesanan yang belum selesai (pending orders) dari simbol itu; juga mendukung menanyakan pesanan yang belum selesai (pending orders) dari semua simbol dalam kisaran dimensi yang ditentukan.

Peraturanexchange.GetOrders()fungsi dapat dipanggil dengan cara berikut:

  • pertukaran.GetOrders ((() Untuk bursa berjangka: Bila tidak ada parameter yang dilewati, semua pesanan yang belum selesai (pending orders) untuk semua instrumen dalam kisaran dimensi saat ini diminta sesuai dengan parameter saat inipasangan perdagangan / kode kontrakpengaturan. Untuk bursa spot: Ketika tidak ada parameter yang dilewati, permintaan dibuat untuk semua pesanan yang belum selesai (pending orders) dari semua produk spot.
  • exchange.GetOrders ((BTC_USDT.swap) atau exchange.GetOrders ((BTC_USDT) Untuk bursa berjangka: exchange.GetOrders ((BTC_USDT.swap), query semua order yang belum terbayar (pending orders) untuk kontrak abadi berbasis BTCs USDT. Untuk bursa spot: exchange.GetOrders ((BTC_USDT), query semua order yang belum selesai (pending orders) untuk pasangan perdagangan spot BTC_USDT.
  • Hanya didukung untuk bursa berjangka exchange.GetOrders ((USDT.swap) menentukan kisaran dimensi untuk meminta pesanan yang belum selesai (pesanan tertunda) untuk semua varietas Kisaran dimensi konsisten dengan kisaran dalam fungsi GetPositions. Misalnya: exchange.GetOrders ((USDT.swap) meminta semua pesanan yang belum selesai (pending orders) dari semua varietas dalam rentang kontrak abadi berbasis U.

Uji menggunakan lingkungan simulasi berjangka OKX:

function main() {
    exchange.IO("simulate", true)

    exchange.SetCurrency("BTC_USDT")
    exchange.SetContractType("swap")

    // Write to chart
    var tbls = []
    for (var symbol of ["null", "ETH_USDT.swap", "USDT.swap"]) {
        var tbl = {type: "table", title: symbol, cols: ["Symbol", "Id", "Price", "Amount", "DealAmount", "AvgPrice", "Status", "Type", "Offset", "ContractType"], rows: []}

        var orders = null
        if (symbol == "null") {
            orders = exchange.GetOrders()
        } else {
            orders = exchange.GetOrders(symbol)
        }

        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) +  "`")
}

Bila tidak ada parameter yang diteruskan, pesanan yang belum selesai (pesanan yang menunggu) dari semua varietas dalam kisaran dimensi pasangan perdagangan saat ini (BTC_USDT) dan kode kontrak (swap) diminta.

Ketika parameterETH_USDT.swapDilihat pada tabel di atas, pesanan yang belum selesai (pending orders) dari kontrak abadi berbasis USDT ETH diminta.

Ketika string"USDT.swap"Jika kontrak perpetual berbasis USDT disetujui, pesanan yang belum selesai (pending orders) dari semua kontrak perpetual berbasis USDT diminta.

Update fungsi exchange.GetPosition

Ini masih kompatibel dengan nama fungsi akuisisi posisi lama, dan juga menambahkan parameter simbol, yang dapat menentukan informasi jenis data posisi tertentu yang diminta. Penggunaan fungsi ini sama persis denganexchange.GetPositions().

Pembaruanexchange.IOfungsi

Untukexchange.IO("api", ...)panggilan fungsi, semua objek pertukaran telah ditingkatkan untuk mendukung langsung melewati alamat permintaan lengkap. Misalnya, jika Anda ingin memanggil antarmuka OKX:

// Dapatkanhttps://www.okx.com/api/v5/account/max-withdrawal ccy: BTC

Mendukung penulisan langsung ke alamat dasarhttps://www.okx.comtanpa harus beralih alamat dasar pertama dan kemudian memanggil fungsi IO.

Uji menggunakan lingkungan simulasi berjangka OKX:

function main() {
    exchange.IO("simulate", true)

    return exchange.IO("api", "GET", "https://www.okx.com/api/v5/account/max-withdrawal", "ccy=BTC")
}

img

3. Dampak antarmuka API

Mempengaruhi fungsi exchange.GetOrder

Upgrade ini terutama mempengaruhi parameteriddariexchange.GetOrder(id)Parameter id diubah dari id pesanan pertukaran asli ke format string yang berisi produk perdagangan. Semua ID pesanan yang terkapas pada platform FMZ dalam format ini.

Misalnya:

  • ID pesanan asli pertukaran yang didefinisikan dalam pesanan pertukaran adalah:123456Sebelum upgrade ini, jika Anda ingin memanggil fungsi GetOrder, order Id yang diteruskan adalah123456.
  • Kode produk yang dinamakan oleh bursa yang ditentukan dalam pesanan pertukaran:BTC-USDTAku tidak tahu. Perhatikan bahwa ini mengacu pada kode produk perdagangan yang dinamakan oleh bursa, bukan pasangan perdagangan yang didefinisikan oleh platform FMZ.

Setelah upgrade ini, format parameter id yang perlu dilewati keexchange.GetOrder(id)Fungsi disesuaikan dengan:BTC-USDT,123456.

Pertama, izinkan saya menjelaskan mengapa desain ini dibuat: Karena fungsi CreateOrder telah ditingkatkan untuk menentukan jenis order secara langsung (jenis order yang ditempatkan mungkin berbeda dari pasangan perdagangan dan kode kontrak yang saat ini ditetapkan). Jika ID order yang dikembalikan tidak berisi informasi jenis, maka ID order ini tidak akan dapat digunakan. Karena saat memeriksa order, kita tidak tahu jenis (kontrak) order untuk. Sebagian besar bursa memerlukan spesifikasi parameter yang menggambarkan kode jenis saat memeriksa dan membatalkan order.

Bagaimana untuk kompatibel dengan dampak ini: Jika Anda menggunakanexchange.IOfungsi untuk memanggil antarmuka pesanan pertukaran secara langsung untuk menempatkan pesanan, nilai yang dikembalikan umumnya berisi simbol asli pertukaran (kode produk) dan id pesanan asli. Kemudian menggabungkan keduanya dengan koma bahasa Inggris akan menjadi ID pesanan yang sesuai dengan definisi platform FMZ. Demikian pula, jika Anda menggunakan antarmuka pesanan yang terkapsul platform FMZ untuk melakukan pesanan, karena awal ID pesanan adalah kode produk perdagangan, jika Anda perlu menggunakan ID pesanan asli, cukup hapus kode produk dan koma.

Mempengaruhi fungsi Exchange.CancelOrder

Dampak dari peningkatan ini padaexchange.CancelOrder()fungsi adalah sama denganexchange.GetOrder() function.

Memengaruhi fungsi pertukaran.Beli

Dampak dari peningkatan ini padaexchange.Buy()fungsi adalah sama denganexchange.GetOrder()fungsi. ID pesanan yang dikembalikan olehexchange.Buy()fungsi adalah struktur baru, misalnya, ID yang dikembalikan saat menempatkan pesanan berjangka di OKX exchange adalah:LTC-USDT-SWAP,1578360858053058560.

Mempengaruhi fungsi pertukaran.

Dampak dari peningkatan ini padaexchange.Sell()fungsi adalah sama denganexchange.GetOrder()fungsi. ID pesanan yang dikembalikan olehexchange.Sell()fungsi adalah struktur baru, misalnya, ID yang dikembalikan saat menempatkan pesanan berjangka di OKX exchange adalah:ETH-USDT-SWAP,1578360832820125696.

Mempengaruhi fungsi exchange.GetPosition

Hanya objek pertukaran berjangka yang mendukung fungsi ini. Untuk fungsi exchange.GetPosition() untuk mendapatkan data posisi, nama exchange.GetPositions() baru ditambahkan, dan kedua perilaku sama persis.

Definisi lama: fungsi exchange.GetPosition(, ketika dipanggil tanpa menentukan parameter apa pun, memperoleh data posisi kontrak tertentu yang ditetapkan oleh pasangan perdagangan saat ini dan kode kontrak. Setelah penyesuaian dan modifikasi, definisi baru: fungsi exchange.GetPosition(, ketika dipanggil tanpa menentukan parameter apa pun, memperoleh posisi semua varietas dalam kisaran dimensi yang ditentukan oleh pasangan perdagangan dan kode kontrak yang ditetapkan saat ini.

Misalnya, pasangan perdagangan saat ini adalah BTC_USDT dan kode kontraknya adalah swap.

exchange.GetPosition() // Equivalent to calling exchange.GetPosition("USDT.swap")

Fungsi ini akan meminta data posisi kontrak abadi berbasis U dari semua mata uang.

Mempengaruhi fungsi exchange.GetOrders

  1. Untuk pertukaran spot:

Definisi lama: fungsi exchange.GetOrders(, ketika dipanggil tanpa menentukan parameter apa pun, mendapatkan semua pesanan yang belum selesai dari pasangan perdagangan saat ini. Setelah penyesuaian dan modifikasi, definisi baru adalah: fungsi exchange.GetOrders ((), ketika dipanggil tanpa menentukan parameter apa pun, mendapatkan pesanan yang belum selesai dari semua pasangan perdagangan spot.

  1. Untuk bursa berjangka:

Definisi lama: fungsi exchange.GetOrders(, ketika dipanggil tanpa menentukan parameter apa pun, mendapatkan semua pesanan yang belum selesai dari kontrak tertentu yang ditetapkan oleh pasangan perdagangan saat ini dan kode kontrak. Setelah penyesuaian dan modifikasi, definisi baru adalah: fungsi exchange.GetOrders(), ketika dipanggil tanpa menentukan parameter apa pun, mendapatkan semua pesanan yang belum selesai dari kisaran dimensi yang ditentukan oleh pasangan perdagangan saat ini dan kode kontrak.

Misalnya, pasangan perdagangan saat ini adalah BTC_USD dan kode kontraknya adalah kuartal.

exchange.GetOrders()   // Equivalent to calling exchange.GetOrders("USD.futures")

Fungsi ini akan meminta data pesanan yang belum terhitung dari semua kontrak berjangka berbasis koin.

4. Penyesuaian Struktural

Struktur Ticker

Pembaruan ini menambahkan bidang Simbol ke struktur Ticker, yang mencatat informasi pasar dari struktur Ticker saat ini. Format bidang ini persis sama dengan format parameter simbol dariexchange.GetTicker() function.

Struktur Orde

Pembaruan ini menambahkan bidang Simbol untuk struktur Order, dan format bidang ini persis sama dengan format parameter simbol dariexchange.GetTicker()fungsi. Pembaruan ini juga memodifikasi bidang ID dari struktur Pesenan, mencatat informasi produk dan informasi pesanan asli dalam format ID pesanan baru.exchange.GetOrder()fungsi, yang tidak akan diulang di sini.

Struktur Posisi

Pembaruan ini menambahkan kolom Simbol ke struktur Posisi. Format bidang ini persis sama dengan format parameter simbol dariexchange.GetTicker() function.

5. Sistem pengujian balik

Menurut platform strategi API upgrade interface, sistem backtesting platform telah diperbarui secara sinkron; Selain itu sistem backtesting telah menambahkan dukungan untuk:

  • Mendukung lebih banyak data backtesting pertukaran.
  • Mendukung backtesting data untuk semua varietas pertukaran.
  • Perdagangan campuran untuk pengiriman berbasis U, berbasis mata uang, dan kontrak abadi.
  • Objek pertukaran berjangka mendukung pertukaran pasangan perdagangan selama backtesting.

Pembaruan Tambahan

1. bidang baru Ekuitas dan UPnL dalam struktur akun

Pertanian diAccountstruktur dikembalikan olehGetAccountFungsi anggota dari obyek pertukaran berjangka telah diperluas.

  • Ekuitas Total ekuitas mata uang aset margin saat ini. Kecuali untuk beberapa bursa berjangka yang tidak mendukung bidang ini, sebagian besar bursa mendukung bidang ini.

  • UPnL Keuntungan dan kerugian yang belum direalisasikan dari semua posisi yang dipegang dalam mata uang aset margin saat ini.

Fungsi SetMarginLevel ditingkatkan untuk mendukung parameter simbol

Fungsi anggota SetMarginLevel dari objek pertukaran berjangka telah ditingkatkan dan simbol parameter telah ditambahkan.

Contoh pengujian:

function main() {
    exchange.SetCurrency("ETH_USDT")
    exchange.SetContractType("swap")
    
    // The current trading pair is ETH_USDT, the contract code is swap, and the leverage value is set to 10
    exchange.SetMarginLevel(10)
    
    // Directly specify the trading pair BTC_USDT, contract code swap, and set the leverage value to 20
    exchange.SetMarginLevel("BTC_USDT.swap", 20)
}

3. Struktur Pasar yang dikembalikan oleh fungsi GetMarkets menambahkan bidang CtValCcy

BidangCtValCcymencatat unit nilai kontrak. Unit nilai kontrak dapat: BTC, USD, ETH, dll. LapanganCtValmencatat nilai kontrak produk yang diperdagangkan di bursa, dan satuan adalah mata uang yang dicatat diCtValCcycontohnya:CtValadalah 0,01 danCtValCcyadalah BTC, yang berarti bahwa kontrak bernilai 0,01 BTC.


Lebih banyak