加密货币与合约
加密行情数据处理器是负责通过 WebSocket 数据流接收交易所实时行情数据(标记价格、报价,以及成交、仓位变化等账户事件)、保持这些数据处于最新状态,并将其交给平台中负责为仓位定价、检测平仓和移动止损的各个组件的组件。
一个自动化平台的真实程度,取决于它的数据源。如果数据源过时,未实现盈亏和强平距离就会出错;如果它漏掉了一次账户事件,一个已经在交易所平仓的仓位仍会被显示为持仓中,或者一次止盈成交会被误判为完全平仓;如果它在某个数据流中断时凭空编造数值,仪表盘就会显示交易所本身并未提供的数字。数据源本身也会产生费用和速率限制方面的开销,因此为每个用户单独开启一路行情数据流的设计无法扩展,而对每个账户轮询 REST 接口的设计也会很快触及限制。
AlgoVesta 将公开数据与私有数据区分开来。公开的标记价格和报价,由一个共享的数据抓取器从交易所的公开数据流中读取一次,并提供给每一个账户,因此成本不会随用户数量增长;合约和现货使用不同的数据流,且同一交易品种绝不会被混用。私有的账户事件——订单更新、成交、仓位变化——则从每个账户自身经过身份验证的数据流中读取,并在一个短周期内与 REST 接口进行核对,因此一个在交易所端归零的仓位会被判定为已平仓,而一次部分止盈成交则不会被误判。过时或缺失的数据会显示为"未知",而不是被估算填充,这与"展示给你的数字必须是交易所自身的数字"这一原则一致。数据源的健康状况会被监控,一个悄然中断的数据流会被视为一次事件,而不是被当作"没有消息"。参见支持的交易所页面和标记价格词条。
两百个账户持有 BTCUSDT 仓位。共享数据抓取器保持一路标记价格数据流处于开启状态,并据此更新每个账户的未实现盈亏。当其中一个账户的止盈订单以半仓成交时,该账户的私有数据流会报告这次成交;平台记录这次部分平仓,让剩余的一半仓位继续保持开仓状态,并继续用共享数据源为其定价。如果交易所的数据流出现停滞,受影响的数值会在几秒钟内被标记为过时,而不是被冻结在最后一个数值上。