49次发布
0.8.1 | 2024年7月8日 |
---|---|
0.7.1 | 2024年5月13日 |
0.7.0 | 2023年4月16日 |
0.6.9 | 2023年2月18日 |
0.2.10 | 2021年11月27日 |
#4 在 #回测
每月 68 次下载
用于 2 crates
445KB
9K SLoC
Barter-Data
这是一个高性能的WebSocket集成库,用于从领先的加密货币交易所流式传输公开市场数据 - 包含电池。它是
- 简单:Barter-Data的简单StreamBuilder接口允许轻松快速地设置(请参见下面的示例!)。
- 标准化:Barter-Data用于消费公开WebSocket数据的统一接口意味着每个交易所都返回一个标准化的数据模型。
- 实时:Barter-Data利用实时WebSocket集成,允许消费标准化的逐个数据点。
- 可扩展:Barter-Data高度可扩展,因此易于通过编写新的集成进行贡献!
请参见:Barter
,Barter-Integration
,Barter-Execution
和 Barter-Macro
概述
Barter-Data是一个高性能的WebSocket集成库,用于从领先的加密货币交易所流式传输公开市场数据。它提供了一套易于使用且可扩展的接口,能够实时提供标准化的交易所数据。
从用户的角度来看,主要组件是帮助初始化任意数量的交易所 MarketStream
的辅助结构 StreamBuilder
,它使用输入 Subscription
。只需构建您梦想中的 MarketStreams
和 Barter-Data
将完成其余工作!
支持的交易所订阅
交易所 | 构造函数代码 | InstrumentKinds | SubscriptionKinds |
---|---|---|---|
BinanceSpot | BinanceSpot::默认() |
Spot | PublicTrades OrderBooksL1 OrderBooksL2 |
BinanceFuturesUsd | BinanceFuturesUsd::默认() |
Perpetual | PublicTrades OrderBooksL1 OrderBooksL2 |
Bitfinex | Bitfinex |
Spot | PublicTrades |
Bitmex | Bitmex |
Perpetual | PublicTrades |
BybitSpot | BybitSpot::默认() |
Spot | PublicTrades |
BybitPerpetualsUsd | BybitPerpetualsUsd::默认() |
Perpetual | PublicTrades |
Coinbase | Coinbase |
Spot | PublicTrades |
GateioSpot | GateioSpot::默认() |
Spot | PublicTrades |
GateioFuturesUsd | GateioFuturesUsd::默认() |
Future | PublicTrades |
GateioFuturesBtc | GateioFuturesBtc::默认() |
Future | PublicTrades |
GateioPerpetualsUsd | GateioPerpetualsUsd::默认() |
Perpetual | PublicTrades |
GateioPerpetualsBtc | GateioPerpetualsBtc::默认() |
Perpetual | PublicTrades |
GateioOptionsBtc | GateioOptions::默认() |
Option | PublicTrades |
Kraken | Kraken |
Spot | PublicTrades OrderBooksL1 |
Okx | Okx |
Spot Future Perpetual Option |
PublicTrades |
示例
请参阅 barter-data-rs/examples 以获取更全面的示例选择!
多交易所公开交易
use barter_data::{
exchange::{
binance::{futures::BinanceFuturesUsd, spot::BinanceSpot},
bitmex::Bitmex,
bybit::{futures::BybitPerpetualsUsd, spot::BybitSpot},
coinbase::Coinbase,
gateio::{
option::GateioOptions,
perpetual::{GateioPerpetualsBtc, GateioPerpetualsUsd},
spot::GateioSpot,
},
okx::Okx,
},
streams::Streams,
subscription::trade::PublicTrades,
};
use barter_integration::model::instrument::kind::{
FutureContract, InstrumentKind, OptionContract, OptionExercise, OptionKind,
};
use chrono::{TimeZone, Utc};
use futures::StreamExt;
use tracing::info;
#[tokio::main]
async fn main() {
// Initialise PublicTrades Streams for various exchanges
// '--> each call to StreamBuilder::subscribe() creates a separate WebSocket connection
let streams = Streams::<PublicTrades>::builder()
.subscribe([
(BinanceSpot::default(), "btc", "usdt", InstrumentKind::Spot, PublicTrades),
(BinanceSpot::default(), "eth", "usdt", InstrumentKind::Spot, PublicTrades),
])
.subscribe([
(BinanceFuturesUsd::default(), "btc", "usdt", InstrumentKind::Perpetual, PublicTrades),
(BinanceFuturesUsd::default(), "eth", "usdt", InstrumentKind::Perpetual, PublicTrades),
])
.subscribe([
(Coinbase, "btc", "usd", InstrumentKind::Spot, PublicTrades),
(Coinbase, "eth", "usd", InstrumentKind::Spot, PublicTrades),
])
.subscribe([
(GateioSpot::default(), "btc", "usdt", InstrumentKind::Spot, PublicTrades),
])
.subscribe([
(GateioPerpetualsUsd::default(), "btc", "usdt", InstrumentKind::Perpetual, PublicTrades),
])
.subscribe([
(GateioPerpetualsBtc::default(), "btc", "usd", InstrumentKind::Perpetual, PublicTrades),
])
.subscribe([
(GateioOptions::default(), "btc", "usdt", InstrumentKind::Option(put_contract()), PublicTrades),
])
.subscribe([
(Okx, "btc", "usdt", InstrumentKind::Spot, PublicTrades),
(Okx, "btc", "usdt", InstrumentKind::Perpetual, PublicTrades),
(Okx, "btc", "usd", InstrumentKind::Future(future_contract()), PublicTrades),
(Okx, "btc", "usd", InstrumentKind::Option(call_contract()), PublicTrades),
])
.subscribe([
(BybitSpot::default(), "btc", "usdt", InstrumentKind::Spot, PublicTrades),
(BybitSpot::default(), "eth", "usdt", InstrumentKind::Spot, PublicTrades),
])
.subscribe([
(BybitPerpetualsUsd::default(), "btc", "usdt", InstrumentKind::Perpetual, PublicTrades),
])
.subscribe([
(Bitmex, "xbt", "usd", InstrumentKind::Perpetual, PublicTrades)
])
.init()
.await
.unwrap();
// Join all exchange PublicTrades streams into a single tokio_stream::StreamMap
// Notes:
// - Use `streams.select(ExchangeId)` to interact with the individual exchange streams!
// - Use `streams.join()` to join all exchange streams into a single mpsc::UnboundedReceiver!
let mut joined_stream = streams.join_map().await;
while let Some((exchange, trade)) = joined_stream.next().await {
info!("Exchange: {exchange}, MarketEvent<PublicTrade>: {trade:?}");
}
}
获取帮助
首先,查看您的问题是否可以在 API 文档 中找到。如果答案不在那里,我很乐意通过 聊天 帮助您,并尝试通过 Discord 回答您的问题。
贡献
感谢您帮助开发 Barter 生态系统!请通过 Discord 聊天 联系我们,讨论开发、新功能以及未来路线图。
添加新的交易所连接器
- 在 src/exchange/<exchange_name>.mod.rs 中添加一个新的
Connector
特征实现(例如/查看 exchange::okx::Okx)。 - 请参考下文“为现有交易所连接器添加新的订阅类型”!
为现有交易所连接器添加新的订阅类型
- 在 src/subscription/<sub_kind_name>.rs 中添加一个新的
SubscriptionKind
特征实现(例如/查看 subscription::trade::PublicTrades)。 - 定义
SubscriptionKind::Event
数据模型(例如/查看 subscription::trade::PublicTrade)。 - 定义交易所
Connector
将为新的SubscriptionKind
初始化的MarketStream
类型
例如/impl StreamSelector<SubscriptionKind> for <ExistingExchangeConnector> { ... }
- 尝试编译并遵循剩余的步骤!
- 在 barter-data-rs/examples/<sub_kind_name>_streams.rs 中添加一个示例,格式规范:)
相关项目
除了 Barter-Execution crate 之外,Barter 项目还维护以下项目:
Barter
:包含预构建交易引擎的高性能、可扩展和模块化交易组件,可用于实时交易或回测系统。Barter-Integration
:用于创建灵活网络集成的性能高、底层框架。Barter-Execution
:用于从领先的加密货币交易所流式传输公共市场数据的高性能 WebSocket 集成库。Barter-Macro
:Barter 生态系统宏。
路线图
- 添加对更多交易所的支持(易于帮助!)
- 添加对更多订阅类型的支持(易于帮助!)
许可
本项目的许可证为MIT许可证。
贡献
除非你明确表示,否则你提交给Barter-Data的任何贡献将被许可为MIT,不附带任何额外条款或条件。
依赖
~11-23MB
~337K SLoC