javascript - coin-base pro web socket 当前订单簿副本(2 级)
问题描述
嗨,是否可以将订单簿的最新副本保存在来自 2 级 Web 套接字提要的数组中,类似于它在网站上的方式或在作为快照返回的第一条消息中的方式
从 2 级更新返回的快照为 type="snapshot"
这就是我尝试使用 type="l2update" 重新创建的内容
问题是我如何使用 l2updade 来保留订单簿的准确副本,或者至少从网络套接字获取顶级询价和出价,而不是对“getProductOrderBook”进行查询
const websocket = new CoinbasePro.WebsocketClient(
["BTC-EUR"],
"wss://ws-feed.pro.coinbase.com",
null,
{ channels: [
{
"name": "level2"
}
]
});
websocket.on('message', data => {
var bids = [];
var asks = [];
var x= 0;
var x2 = 0;
if(data.changes[0][0] == "buy"){
if(x <= 100){
bids[x] = parseFloat(data.changes[0][1]);
x++;
}else{
x = 0;
bids[x] = parseFloat(data.changes[0][1]);
x++;
}
}
if(data.changes[0][0] == "sell"){
if(x2 <= 100){
asks[x2] = parseFloat(data.changes[0][1]);
x2++;
}else{
x2 = 0;
asks[x2] = parseFloat(data.changes[0][1]);
x2++;
}
}
console.log(data);
});
解决方案
直接在数组中做是没用的复杂。我会在对象中执行此操作,并在需要时将对象转换为数组。像(我假设product_id
总是BTC-EUR
):
let asks;
let bids;
websocket.on("message", data => {
if(data.type == "snapshot") {
asks = {};
bids = {};
data.asks.forEach(([price, amount]) => (asks[price] = parseFloat(amount)));
data.bids.forEach(([price, amount]) => (bids[price] = parseFloat(amount)));
return;
}
if(data.type == "l2update") data.changes.forEach(change => {
const [action, price, amount] = change;
const obj = action == "buy" ? bids : asks;
const parsed = parseFloat(amount);
if(parsed) obj[price] = parsed;
else delete obj[price];
});
});
比你总是可以得到数组(反之亦然,没有测试):
Object.entries(asks).map(([pr, am]) => [parseFloat(pr), am]).sort((a, b) => a[0] - b[0]);
Object.entries(bids).map(([pr, am]) => [parseFloat(pr), am]).sort((a, b) => b[0] - a[0]);
希望这可以帮助。
推荐阅读
- laravel-5 - Laravel Blade '@' 函数
- python-3.x - 为什么我升级后 pip3 不工作?
- javascript - 嵌套数组在一行中定义,然后在之后未定义(javascript)
- java - JavaFX如何获取3D场景中对象的坐标
- lua - 触摸功能 Roblox Studio
- vue.js - VueStrorefront + vsf-payment-paypal 中的 update_client_config_error 错误
- javascript - 为“让”添加值
- ios - 如何为用户输入文本时将动态创建的每个单元格设置按钮操作(Swift 4)?
- python - 如何将自定义异常抛出到正在运行的任务中
- python - 如何根据列表中每个子项的长度制作布尔掩码?或者我如何过滤掉所有长于 x 的字符串?