#实时 #WebSocket #交易 #行情 #zerodha #异步客户端

kiteticker-async

kitectracker-rs仓库的行情模块的异步版本

2个版本

0.1.1 2023年11月17日
0.1.0 2023年10月31日

#94 in 金融

Apache-2.0

36KB
792

kiteticker-async

Kite Connect WebSocket API的异步客户端。

Crates.io Apache-2.0 Licensed

指南 | API文档

概述

官方的kiteconnect-rs与Python或Go实现相比,是一个不再维护的项目。根据这个问题,它将不会从Zerodha技术团队获得任何进一步的更新。

尽管Kite Connect REST API功能完善,但Ticker API存在滞后。以下是Rust实现的Ticker API的一些问题:- 它缺少一些在积极维护的Python & Go实现中存在的更新。 - 它不解析和序列化报价结构到正确的Rust结构体,而将其保留为未类型化的JSON值。这与在像GoJava这样的类型化语言库中实现的相同方法不同。 - 设计要求应用程序通过回调处理流式WebSocket消息。这不是Rust库设计的惯例,尤其是在下游应用程序依赖于使用tokio等框架的现代Rust异步并发原语时。

这个crate试图解决上述问题。主要目标是实现一个符合Rust异步库设计原则的异步友好设计,这些原则由tokio倡导。

用法

在Cargo.toml中将kiteticker-async crate作为依赖项添加

[dependencies]
kiteticker-async = "0.1.1"

示例

#[tokio::main]
pub async fn main() -> Result<(), String> {
  let api_key = std::env::var("KITE_API_KEY").unwrap();
  let access_token = std::env::var("KITE_ACCESS_TOKEN").unwrap();
  let ticker = KiteTickerAsync::connect(&api_key, &access_token).await?;

  let token = 408065;
  // subscribe to an instrument
  let mut subscriber = ticker
    .subscribe(&[token], Some(Mode::Full))
    .await?;

  // await quotes
  if let Ok(Some(msg)) = subscriber.next_message().await? {
    match msg {
      TickerMessage::Tick(ticks) => {
        let tick = ticks.first().unwrap();
        println!("Received tick for instrument_token {}, {}", tick.instrument_token, tick);
      }
    }
  }

  Ok(())
}

贡献

使用just运行开发任务。

$ just --list
Available recipes:
    build
    check
    doc
    doc-open
    doc-test api_key='' access_token=''
    example api_key access_token
    test api_key='' access_token=''

许可证

此项目受Apache 2.0许可证的许可。

依赖关系

~6–17MB
~253K SLoC