#市场数据 #数据交换 #回测 #交易 #投资 #加密货币 #股票

barter-data

高性能且标准化的WebSocket集成,适用于领先的加密货币交易所 - 包含电池

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#回测

Download history 21/week @ 2024-04-28 14/week @ 2024-05-05 163/week @ 2024-05-12 38/week @ 2024-05-19 13/week @ 2024-05-26 23/week @ 2024-06-02 16/week @ 2024-06-09 8/week @ 2024-06-16 26/week @ 2024-06-23 283/week @ 2024-06-30 305/week @ 2024-07-07 21/week @ 2024-07-14 15/week @ 2024-07-21 36/week @ 2024-07-28 8/week @ 2024-08-04 8/week @ 2024-08-11

每月 68 次下载
用于 2 crates

MIT 许可证

445KB
9K SLoC

Barter-Data

这是一个高性能的WebSocket集成库,用于从领先的加密货币交易所流式传输公开市场数据 - 包含电池。它是

  • 简单:Barter-Data的简单StreamBuilder接口允许轻松快速地设置(请参见下面的示例!)。
  • 标准化:Barter-Data用于消费公开WebSocket数据的统一接口意味着每个交易所都返回一个标准化的数据模型。
  • 实时:Barter-Data利用实时WebSocket集成,允许消费标准化的逐个数据点。
  • 可扩展:Barter-Data高度可扩展,因此易于通过编写新的集成进行贡献!

请参见:BarterBarter-IntegrationBarter-ExecutionBarter-Macro

Crates.io MIT licensed Build Status Discord chat

API文档 | 聊天

概述

Barter-Data是一个高性能的WebSocket集成库,用于从领先的加密货币交易所流式传输公开市场数据。它提供了一套易于使用且可扩展的接口,能够实时提供标准化的交易所数据。

从用户的角度来看,主要组件是帮助初始化任意数量的交易所 MarketStream 的辅助结构 StreamBuilder,它使用输入 Subscription。只需构建您梦想中的 MarketStreamsBarter-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 聊天 联系我们,讨论开发、新功能以及未来路线图。

添加新的交易所连接器

  1. 在 src/exchange/<exchange_name>.mod.rs 中添加一个新的 Connector 特征实现(例如/查看 exchange::okx::Okx)。
  2. 请参考下文“为现有交易所连接器添加新的订阅类型”!

为现有交易所连接器添加新的订阅类型

  1. 在 src/subscription/<sub_kind_name>.rs 中添加一个新的 SubscriptionKind 特征实现(例如/查看 subscription::trade::PublicTrades)。
  2. 定义 SubscriptionKind::Event 数据模型(例如/查看 subscription::trade::PublicTrade)。
  3. 定义交易所 Connector 将为新的 SubscriptionKind 初始化的 MarketStream 类型
    例如/ impl StreamSelector<SubscriptionKind> for <ExistingExchangeConnector> { ... }
  4. 尝试编译并遵循剩余的步骤!
  5. 在 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