#kraken #trading #exchange #api-calls

bin+lib krakenrs

Rust 对 Kraken REST API 和 WebSocket API 的绑定,用于现货交易

16 个稳定版本 (4 个主要版本)

5.2.3 2022年1月24日
5.2.2 2021年12月24日
4.1.0 2021年12月19日
3.0.0 2021年12月19日
1.0.1 2021年9月20日

#11 in #kraken

Download history 15/week @ 2024-03-15 43/week @ 2024-03-29 7/week @ 2024-04-05

每月下载量 54

WTFPL 许可证

130KB
2.5K SLoC

krakenrs

非官方的 Kraken 现货交易 API 的 Rust 绑定。

这个库提供了一个 Rust 客户端对象,实现了 Kraken REST API 中的许多调用,具有惯用的 Rust 接口,包括获取标价信息和制作市场及限价订单。此外,它还提供了对 Kraken WS API 的访问,包括订阅流和提交订单。

支持公共和私有 API,但不是所有的调用和选项都公开,只有所需的那些。如果您需要的内容缺失,欢迎提交补丁!只需在 github 上打开一个问题或 pull request。

功能

要获取 WebSocket API,必须启用 "ws" 功能。默认情况下它是开启的。否则,您只能获取 REST API,它可以做所有相同的事情(更多),但具有更严格的速率限制。

多线程

与一些其他绑定不同,这些不是异步 API(尽管 WebSocket 流是隐式异步的)。

我们选择为 Kraken REST API 版本创建阻塞 API 有几个原因

  • 简单
  • 易于调试
  • 当尝试并行多次调用私有 REST API 时,我们经常看到无效的 nonce 错误,这是因为 nonce 是基于时间戳的,但多个请求同时创建和发送时,这本质上是竞态条件,有时具有更高 nonce 的请求会被 Kraken 首先处理,从而使其他请求无效。

此外,REST API 有相当严格的速率限制,因此并行发送大量请求实际上是不可能的。

相反,似乎依赖Websockets API更好,无论你是否需要使用异步运行时,它都易于使用,并且不需要对REST API进行大量调用。

示例

REST API

    use krakenrs::{KrakenRestConfig, KrakenRestAPI};
    use serde_json::to_string_pretty;

    fn main() {
        let kc_config = KrakenRestConfig::default();
        let api = KrakenRestAPI::try_from(kc_config).expect("could not create kraken api");

        println!(
          to_string_pretty(
            api.asset_pairs(vec!["XBT/USD", "SOL/BTC"]).expect("api call failed")
          ).unwrap()
        );

        println!(
          to_string_pretty(
            api.ticker(vec!["XBT/USD"]).expect("api call failed")
          ).unwrap()
        );
    }

Websockets API

    use krakenrs::{KrakenWsConfig, KrakenWsAPI};
    use std::{
        collections::BTreeMap,
        time::Duration,
        thread,
    };

    fn main() {
        let pairs = vec!["XBT/USD".to_string(), "SOL/XBT".to_string()];

        let ws_config = KrakenWsConfig {
            subscribe_book: pairs.clone(),
            book_depth: 10,
        };
        let api = KrakenWsAPI::new(ws_config).expect("could not connect to websockets api");

        loop {
            thread::sleep(Duration::from_millis(500));
            let books = pairs
                .iter()
                .map(|pair| (pair.clone(), api.get_book(pair)))
                .collect::<BTreeMap<_, _>>();

            for (pair, book) in books {
                println!("{}", pair);
                println!("{:?}", book);
            }
            if api.stream_closed() { return; }
        }
    }

KrakenWsAPI对象在内部启动一个工作线程,该线程驱动WebSocket连接。如果您不希望这样,可以导入KrakenWsClient对象,并根据需要安排工作线程,同时使用ApiResult对象的句柄在其他线程中观察最新数据。

免责声明

自行承担风险。如果您使用此组件构建交易软件并因错误而遭受损失,我不承担责任。

Rest API 示例

krak二进制目标是用于练习REST API功能的简单示例。它是一个命令行目标,可以解析凭据文件,连接到Kraken,并执行单个API调用,然后打印响应。

用法

  • 构建一切:cargo build
  • 运行 ./target/debug/krak --help 获取用法信息。例如,您可以使用 ./krak system-status 查看交易系统的当前状态,或者使用 ./krak asset-pairs./krak ticker AAVEUSD 查看资产对和当前价格。
  • 如果您想使用私有API,请转到您的Kraken账户并创建一个API密钥。然后创建一个包含您的凭据的json文件,其架构如下
    {
       "key": "ASDF",
       "secret: "jklw=="
    }
    
  • 私有API的调用示例:./krak path/to/creds get-open-orders ./krak path/to/creds --validate market-buy 0.02 AAVEUSD

Websockets Feed 示例

krak-feed二进制目标可以订阅并打印WebSocket数据流的输出。

用法

  • 构建一切:cargo build
  • 运行 ./target/debug/krak-feed --help 获取用法信息。例如,./krak-feed book XBT/USD 将持续显示比特币/美元的订单簿。

其他感兴趣的项目

参考

依赖关系

~11-30MB
~452K SLoC