[TOC]
Ini adalah artikel ketiga tentang amalan kuantitatif pertukaran DEX Kali ini kami akan memperkenalkan panduan penggunaan protokol Vertex.
Dalam rangka kerja pertukaran terpencar tradisional (DEX), peniaga kuantitatif sering perlu berkompromi: sama ada menerima kegelinciran tinggi dan kecekapan pelaksanaan rendah model pembuat pasaran automatik (AMM), atau jatuh ke dalam dilema teknikal pemecahan kecairan silang rantaian dan fungsi terbitan tunggal. Kemunculan Protokol Vertex sedang mentakrifkan semula sempadan dalam rantaian strategi kuantitatif melalui eksperimen gabungan “terpencar + peringkat institusi” - tidak ada dilema “pilih satu daripada dua” di sini, hanya keseimbangan muktamad kelajuan, kedalaman dan kebebasan.
Sebagai DEX pertama yang menyepadukan kumpulan mudah tunai berbilang rantaian bersatu, buku pesanan hibrid (CLOB) dan pasaran mata wang terbenam, Vertex mengambil “pengalaman terpusat, jiwa terpencar” sebagai terasnya dan membuka laluan unik untuk pedagang kuantitatif:
Takrif baharu tentang kelajuan dan kecairan
Dengan evolusi berterusan teknologi blockchain, sempadan antara pertukaran terpusat tradisional (CEX) dan pertukaran terdesentralisasi (DEX) semakin kabur. Sebagai hab platform Vertex, Vertex Edge bukan sahaja membentuk semula kelajuan transaksi dan kecairan, tetapi juga menggabungkan teknologi pemadanan pesanan yang sangat baik dan kelebihan penjagaan diri melalui penyepaduan silang rantai, membawa pengalaman DeFi baharu kepada pedagang global.
Menyatukan kecairan silang rantaian: memecahkan pemecahan kecairan Dalam pasaran tradisional, kecairan antara rantaian yang berbeza sering berpecah-belah, menyebabkan peniaga tidak dapat menikmati harga dan kedalaman transaksi terbaik. Vertex Edge dilahirkan dalam konteks ini, merealisasikan perkongsian segerak kecairan kekal merentas pelbagai rantaian melalui rangkaian buku pesanan bersatu. Pada masa ini, Vertex Edge telah meliputi kecairan kontrak kekal pada 7 rantaian arus perdana termasuk Arbitrum, Base, Sei, Blast, Mantle, Sonic dan Abstract, supaya peniaga tidak perlu lagi bimbang tentang penyebaran kecairan, dan boleh berdagang pada harga terbaik, benar-benar mencapai kecairan global yang lancar.
Perdagangan buku pesanan hibrid: keseimbangan sempurna antara padanan ultra pantas dan penyelesaian dalam rantaian Vertex Edge mengguna pakai model dagangan buku pesanan hibrid, dan teknologi terasnya termasuk:
Pemadanan buku pesanan luar rantai: Menggunakan mekanisme pemadanan luar rantaian berkelajuan ultra tinggi untuk mencapai pemadanan pesanan dengan kependaman hanya 5-15 milisaat, setanding dengan kebanyakan pertukaran terpusat; Enjin risiko dalam rantaian dan AMM: Sistem pengurusan risiko dan pembuat pasaran automatik (AMM) digunakan pada setiap rantaian yang disokong untuk memastikan pesanan boleh diselesaikan dengan cara yang selamat dan telus selepas padanan. Seni bina ini bukan sahaja memastikan tindak balas urus niaga yang sangat pantas, tetapi juga menyediakan pengguna dengan keselamatan terdesentralisasi melalui penyelesaian dalam rantaian, membolehkan peniaga menikmati prestasi peringkat CEX sambil mengekalkan kebebasan penjagaan diri aset.
Fungsi berbilang akaun: mengurus berbilang akaun dalam dompet tunggal dan memperuntukkan dana dengan lebih cekap; Kedudukan spot yang dileveraj: Gunakan semua aset sebagai margin untuk mencapai kecekapan modal yang lebih tinggi; Pengurusan risiko yang fleksibel: Deposit, kedudukan dan data untung rugi dipertimbangkan secara bersatu untuk mengawal pendedahan risiko dengan tepat.
Log masuk alamat halaman “protokol puncak”:
Vertex adalah sama seperti kebanyakan DEX Selepas log masuk ke dalam dapp, anda perlu menyambung ke dompet untuk kebenaran Sistem sub-akaun Vertex dibezakan berdasarkan label mengambil bahagian dalam pengiraan alamat dompet untuk mendapatkan alamat dompet sub-akaun.
Sebagai contoh, gunakanWalletConnectAlamat dompet semasa menyambung ialah:0x7a5ec2748e9065794491a8d29dcf3f9edb8d7c43
, label lalai ialah “lalai”, dan alamat sub-akaun yang dikira ialah:0x7a5ec2748e9065794491a8d29dcf3f9edb8d7c4364656661756c740000000000
. Teg lalai ialah:64656661756c740000000000
。
Vertex menyokong pengecasan semula berbilang aset Secara amnya, anda memilih untuk mengecas semula USDC sebagai margin dan terus menggunakan dompet yang disambungkan untuk memindahkan transaksi. Perlu diingatkan bahawa operasi seperti mengeluarkan, memindahkan, menghantar token dan memindahkan sub-akaun pada Vertex akan menggunakan USDC, dan yurannya tidak rendah, jadi operasi ini perlu dipanggil dengan berhati-hati.
Beralih kepada rantaian lain:
Pada puncak, rantai yang berbeza mempunyai maklumat konfigurasi yang berbeza seperti nod, pengindeks dan ID rantai Rantaian lalai untuk enkapsulasi FMZ ialahArbitrum One
boleh digunakan.Log(HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=contracts"))
Tanya ID rantaian, maklumat kontrak yang digunakan, dsb.
Selepas log masuk ke FMZ.COM, pada halaman konfigurasi pertukaran, pilih “Cryptocurrency”, pilih Vertex Exchange, anda boleh terus mengkonfigurasi kunci proksi dompet pada dapp Sudah tentu, anda juga boleh mengkonfigurasi kunci persendirian dompet Pada Vertex, anda boleh menggunakan antara muka untuk menguruskan keizinan / penyahizinan kunci proksi dan operasi lain, yang juga lebih mudah.
Kunci Proksi:
Sebagai contoh, pada halaman hujung hadapan pertukaran DEX puncak: Penyemak imbas Chrome (hidupkan penyahpepijatan) -> Aplikasi -> Storan Setempat -> https://app.vertex -> tetapan pengguna vertex
Konfigurasikan Vertex Exchange
Dua perkara perlu dikonfigurasikan pada FMZ Yang pertama ialah alamat dompet (bukan alamat kunci proksi yang digunakan untuk menandatangani, ia mesti alamat dompet yang disambungkan ke dapp). Yang kedua ialah kunci rahsia yang digunakan untuk menandatangani (ia boleh menjadi kunci peribadi dompet atau kunci proksi). Memandangkan kunci proksi boleh digunakan, alamat dompet dan kunci yang dikonfigurasikan tidak semestinya sepasang.
Sistem sub-akaun Vertex dikenal pasti dengan tag Teg lalai yang digunakan pada FMZ ialahdefault
Akaun utama teg, jika anda perlu menukar, anda boleh menggunakannya dalam kod:
exchange.IO("subAccountTag", "default") // 切换到主子账号
exchange.IO("subAccountTag", "test01") // 切换到标签名为 test01 的子账号
Selepas mengkonfigurasi maklumat konfigurasi pertukaran dan menggunakan program penjaga yang boleh mengakses antara muka puncak, kami boleh mula menulis beberapa kod untuk operasi praktikal.
Kami menggunakan sub-akaun utama untuk ujian (sub-akaun dengan teg: lalai), dan kami gunakanArbitrumrangkaian.
function main() {
var markets = exchange.GetMarkets()
if (!markets) {
throw "get markets error"
}
var tbl = {
type: "table",
title: "test markets",
cols: [
"key", "Symbol", "BaseAsset", "QuoteAsset", "TickSize", "AmountSize", "PricePrecision", "AmountPrecision", "MinQty",
"MaxQty", "MinNotional", "MaxNotional", "CtVal", "CtValCcy"
],
rows: []
}
for (var symbol in markets) {
var market = markets[symbol]
tbl.rows.push([
symbol, market.Symbol, market.BaseAsset, market.QuoteAsset, market.TickSize, market.AmountSize,
market.PricePrecision, market.AmountPrecision, market.MinQty, market.MaxQty, market.MinNotional, market.MaxNotional, market.CtVal, market.CtValCcy
])
}
LogStatus("`" + JSON.stringify(tbl) + "`")
return markets
}
Dapat dilihat bahawa jenis kontrak pada Vertex ialah kontrak berasaskan USDC, margin ialah USDC dan nilai kontrak mewakili mata wang yang sepadan, contohnya.BTC_USDC.swap
Iaitu, kontrak BTC berasaskan USDC, satu kontrak mewakili kedudukan BTC. Kod di atas menunjukkan cara meminta maklumat pasaran kontrak dan mengeluarkan pelbagai kandungan.
function main() {
var depths = [{"symbol": "ETH_USDC"}, {"symbol": "SOL_USDC"}, {"symbol": "BTC_USDC"}]
for (var ele of depths) {
ele["depth"] = exchange.GetDepth(ele["symbol"] + ".swap")
}
var tbls = []
for (var ele of depths) {
var tbl = {"type": "table", "title": ele["symbol"], "cols": ["level", "price", "amount"], "rows": []}
var depth = ele["depth"]
for (var i = 0 ; i < 3 ; i++) {
tbl["rows"].push(["卖" + (i + 1), depth.Asks[i].Price, depth.Asks[i].Amount])
}
tbl["rows"].reverse()
for (var i = 0 ; i < 3 ; i++) {
tbl["rows"].push(["买" + (i + 1), depth.Bids[i].Price, depth.Bids[i].Amount])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
}
function main() {
var arrTrades = [{"symbol": "ETH_USDC"}, {"symbol": "SOL_USDC"}, {"symbol": "BTC_USDC"}]
for (var ele of arrTrades) {
ele["trades"] = exchange.GetTrades(ele["symbol"] + ".swap")
}
var tbls = []
for (var ele of arrTrades) {
var tbl = {"type": "table", "title": ele["symbol"], "cols": ["Time", "Price", "Amount", "side"], "rows": []}
var trades = ele["trades"]
for (var trade of trades) {
tbl["rows"].push([_D(trade.Time), trade.Price, trade.Amount, trade.Type == 0 ? "买入" : "卖出"])
}
tbls.push(tbl)
}
LogStatus("`" + JSON.stringify(tbls) + "`")
}
function main() {
let c = KLineChart({
overlay: true
})
let bars = exchange.GetRecords("SOL_USDC.swap")
if (!bars) {
return
}
bars.forEach(function(bar, index) {
c.begin(bar)
Log(index, bar)
c.close()
})
}
Carta puncak
Lukisan operasi strategi FMZ
function main() {
var fundings = exchange.GetFundings()
var tbl = {
"type": "table",
"title": "GetFundings",
"cols": ["Symbol", "Interval", "Time", "Rate"],
"rows": [],
}
for (var f of fundings) {
tbl["rows"].push([f.Symbol, f.Interval / 3600000, _D(f.Time), f.Rate * 100 + " %"])
}
LogStatus(_D(), "\n`" + JSON.stringify(tbl) + "`")
}
Kitaran kadar pembiayaan ialah 1 jam.
Max Order Size Gets the max order size possible of a given product for a given subaccount.
function main() {
// GET [GATEWAY_REST_ENDPOINT]/query?type=max_order_size&product_id={product_id}&sender={sender}&price_x18={price_x18}&direction={direction}
// price_x18=3000000000000000000000 : 3000 USDC
// product_id=4 : ETH_USDC.swap
// sender=0x123 : e.g. 0x123
return HttpQuery("https://gateway.prod.vertexprotocol.com/query?type=max_order_size&product_id=4&sender=0x123&price_x18=3000000000000000000000&direction=short")
}
Data yang dikembalikan oleh permintaan akhir ialah:{"status":"success","data":{"max_order_size":"170536415320344899"},"request_type":"query_max_order_size"}
Ia boleh dilihat bahawa akaun semasa aset yang tersedia untuk kontrak kekal Ethereum dengan harga 3000, kuantiti pesanan maksimum untuk pesanan jual ialah: 0.17 ETH
Linked Signer Retrieves current linked signer of a provided subaccount
function main() {
return HttpQuery("https://gateway.prod.vertexprotocol.com/query?type=linked_signer&subaccount=0x123")
}
Maklumat kebenaran ditemui:
{“status”:“success”,“data”:{“linked_signer”:“0x79119…”},“request_type”:“query_linked_signer”} Alamat “0x79119…” ialah alamat proksi untuk membenarkan transaksi pesanan apabila menyambung ke dompet pada halaman hadapan Vertex. Keizinan ini boleh dibatalkan atau ditambah (melalui panggilan API).
Berikut adalah fokus artikel ini Kami telah lama sibuk hanya untuk menjalankan urus niaga dengan mudah dan cepat di bursa terdesentralisasi.
Uji perdagangan yang lebih mudah dan buat pesanan had biasa.
function main() {
var id1 = exchange.CreateOrder("ETH_USDC.swap", "buy", 2000, 0.1)
var id2 = exchange.CreateOrder("SOL_USDC.swap", "buy", 60, 2)
Log("ETH_USDC.swap id1:", id1)
Log("SOL_USDC.swap id2:", id2)
var orders = exchange.GetOrders("USDC.swap")
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])
}
LogStatus("`" + JSON.stringify(tbl) + "`")
}
function main() {
var orders = exchange.GetOrders("USDC.swap")
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])
exchange.CancelOrder(order.Id)
}
LogStatus("`" + JSON.stringify(tbl) + "`")
return exchange.GetOrders()
}
function main() {
// 使用市价单下单持仓
exchange.SetCurrency("ETH_USDC")
exchange.SetContractType("swap")
exchange.Buy(-1, 0.01)
var positions = exchange.GetPositions()
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])
}
LogStatus("`" + JSON.stringify(tbl) + "`")
}
Perlu diingatkan bahawa data yang disediakan oleh API Vertex menyimpang daripada kandungan yang dipaparkan pada halaman hujung hadapan Vertex, terutamanya disebabkan oleh perbezaan dalam harga pegangan purata dan keuntungan dan kerugian pegangan Perkara ini telah disampaikan semula kepada pasukan Vertex dan mungkin dinaik taraf dan dikemas kini kemudian.
4、Trigger Order
Memandangkan Tertib Pencetus puncak adalah bebas daripada titik akhir,exchange.IO
Apabila membuat pesanan bersyarat untuk fungsi, anda perlu menentukanTrigger: https://trigger.prod.vertexprotocol.com
, mari teruskan dengan operasi praktikal.
function main() {
// isTrigger : true
var nonce = exchange.IO("nonce", true) // 如果是 Trigger Order 订单用到的 nonce 需要指定 isTrigger : true
// flag , reduceOnly
var expiration = exchange.IO("expiration", "GTC", false) // 设置订单为GTC类型,非只减仓
// params
var params = {
"place_order": {
"product_id": 4,
"order": {
"sender": "0x123...",
"priceX18": "4100000000000000000000",
"amount": "-100000000000000000",
"expiration": expiration,
"nonce": nonce
},
"trigger": {
"price_above": "4000000000000000000000"
}
}
}
return exchange.IO("api", "POST", "https://trigger.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params))
}
Di bawah titik akhir pencetus, terdapat juga:
Kaedah panggilan adalah serupa dengan Letakkan Pesanan Pencetus, jadi saya tidak akan menerangkan butiran di sini.
Teg subakaun lalai ialah:default
, kami bertukar kepada teg tersuai:subAcc02
。
function main() {
exchange.IO("subAccountTag", "subAcc02")
return exchange.GetAccount()
}
Apabila memindahkan wang ke alamat sub-akaun, Vertex sebenarnya akan membuat sub-akaun ini.
Nonce akaun perlu disoal dan dihantar ke dalam parameter antara muka pemindahan sebagai parameter.
function main() {
var ret = HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x123...")
var obj = JSON.parse(ret)
var nonce = obj["data"]["tx_nonce"]
Log("nonce:", nonce)
var params = {
"transfer_quote": {
"tx": {
// default -> subAcc02
"sender": "0xabc...", // default
"recipient": "0xdef...", // subAcc02
"amount": "7000000000000000000",
"nonce": nonce
}
}
}
return exchange.IO("api", "POST", "https://gateway.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params))
}
Contohnya: 0xabc… sepadan dengan alamat sub-akaun dengan teg lalai. 0xdef… sepadan dengan alamat sub-akaun dengan tag subAcc02. 0x123… ialah alamat dompet.
function main() {
var ret = HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x123...")
var obj = JSON.parse(ret)
var nonce = obj["data"]["tx_nonce"]
Log("nonce:", nonce)
var params = {
"withdraw_collateral": {
"tx": {
"sender": "0xabc...", // default
"productId": 0, // USDC : 0 , precision : 6
"amount": "10000000", // 10 USDC
"nonce": nonce
}
}
}
return exchange.IO("api", "POST", "https://gateway.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params))
}
Beri perhatian kepada ketepatan USDC.
function main() {
var ret = HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x123...")
var obj = JSON.parse(ret)
var nonce = obj["data"]["tx_nonce"]
Log("nonce:", nonce)
var params = {
"mint_lp": {
"tx": {
"sender": "0xabc...", // default
"productId": 31, // USDT_USDC
"amountBase": "10000000000000000000",
"quoteAmountLow": "9999900000000000000",
"quoteAmountHigh": "10100000000000000000",
"nonce": nonce,
}
}
}
return exchange.IO("api", "POST", "https://gateway.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params))
}
Token LP Mint untuk pasangan daganganUSDT_USDC
Kumpulan pertukaran menambah kecairan.
function main() {
var ret = HttpQuery("https://gateway.prod.vertexprotocol.com/v1/query?type=nonces&address=0x123...")
var obj = JSON.parse(ret)
var nonce = obj["data"]["tx_nonce"]
Log("nonce:", nonce)
var params = {
"burn_lp": {
"tx": {
"sender": "0xabc...", // default
"productId": 31, // USDT_USDC
"amount": "7500000000000000000",
"nonce": nonce,
}
}
}
return exchange.IO("api", "POST", "https://gateway.prod.vertexprotocol.com/v1/execute", "", JSON.stringify(params))
}
Titik akhir antara muka websocket:wss://gateway.prod.vertexprotocol.com/v1/ws
。
[🚧🚧🚧ing…]
Ujian di atas adalah berdasarkan kustodian terkini Anda perlu memuat turun kustodian terkini untuk menyokong agregator Vertex DEX.
Terima kasih atas sokongan anda dan terima kasih kerana membaca.