#trading #stock #async #tdameritrade

tdameritrade_rust

TD Ameritrade API 的非官方 Rust 库

6 个版本

0.1.6 2023 年 6 月 3 日
0.1.5 2023 年 6 月 2 日
0.1.4 2022 年 11 月 5 日
0.1.3 2022 年 10 月 27 日
0.1.2 2022 年 9 月 29 日

#38金融

50 每月下载量

MIT 许可证

190KB
3K SLoC

tdameritrade_rust

TD Ameritrade API 的非官方 Rust 库

0.1.6 版本新功能

  • 实现了 SyncTDAClient 和 AsyncTDAClient 的克隆功能

0.1.5 版本新功能

  • 增加了内部可变性

0.1.4 版本新功能

  • 创建了 OrderBuilder 以简化 TD Ameritrade 的订单构建。
  • 使用 OrderBuilder 创建了股票订单模板
  • 在 examples 目录下更新了 trading_async.rs 和 trading_sync.rs 以展示 OrderBuilder
  • 集成了使用 TDAClient Error 创建新客户端
  • 更新了账户输出结构体

tdameritrade_rust 的 OrderBuilder 受到 Alex Golec 的 OrderBuilder 的启发,OrderBuilder 来自 tda api。他的 OrderBuilder 文档 是一个绝佳的资源,应与此库的 OrderBuilder 兼容。

功能

  • tdameritrade_rust 支持同步/异步
  • tdameritrade_rust 自动处理身份验证
  • tdameritrade_rust 简化了从 TD Ameritrade 创建令牌文件的过程

安装

将以下内容添加到您的 Cargo.toml 中

[dependencies]
tdameritrade_rust = "0.1.6"

入门指南

  • TD Ameritrade API 网站 注册
  • 转到“我的应用”部分并添加一个新的应用
  • 点击您的应用并复制消费者密钥
  • 点击应用的详细信息部分并复制回调 URL
  • 下载 chromedriver
  • 复制以下代码,替换字段,运行代码,并在提示时登录以从 TD Ameritrade 接收令牌文件
use tdameritrade_rust::init;

fn main() {
    // Create Token File
    init::create_token_file(
        "chrome_driver_path".into(), // Path To Chromedriver
        "[email protected]".into(), // Client Id (Consumer Key)
        "redirect_uri".into(), // Redirect URI (Callback URL)
        "token_file_path".into(), // Where To Put Token File After Completion 
    )
}

同步

  • 创建令牌文件后,创建一个 TD Ameritrade 客户端以访问 API 端点。以下是一个使用同步客户端的示例
use tdameritrade_rust::{
    output::quotes::{QuoteType, Quotes},
    SyncTDAClient, TDAClientError,
};
mod config;

fn main() -> Result<(), TDAClientError> {
    // Create Synchronous TDAClient
    let client = SyncTDAClient::new(
        config::client_id(),
        config::redirect_uri(),
        config::token_path(),
    )?;

    // Get Quote
    let symbol = "AAPL";
    let res = client.get_quote(symbol)?;
    let res_json = serde_json::from_str::<Quotes>(&res)?;

    if let QuoteType::Equity(equity) = &res_json.symbol[symbol] {
        println!("{}", equity.close_price);
    }

    // Get Quotes
    let symbols = vec!["AAPL", "AMZN", "AMD", "NVDA"];
    let res = client.get_quotes(&symbols)?;
    let res_json = serde_json::from_str::<Quotes>(&res)?;

    for symbol in symbols.into_iter() {
        if let QuoteType::Equity(equity) = &res_json.symbol[symbol] {
            println!("{}", equity.close_price)
        }
    }

    Ok(())
}

异步

  • 创建令牌文件后,创建一个 TD Ameritrade 客户端以访问 API 端点。以下是一个使用异步客户端的示例
use tdameritrade_rust::{
    output::quotes::{QuoteType, Quotes},
    AsyncTDAClient, TDAClientError,
};
mod config;

#[tokio::main]
async fn main() -> Result<(), TDAClientError> {
    // Create Asynchronous TDAClient
    let client = AsyncTDAClient::new(
        config::client_id(),
        config::redirect_uri(),
        config::token_path(),
    )?;

    // Get Quote
    let symbol = "AAPL";
    let res = client.get_quote(symbol).await?;
    let res_json = serde_json::from_str::<Quotes>(&res)?;

    if let QuoteType::Equity(equity) = &res_json.symbol[symbol] {
        println!("{}", equity.close_price);
    }

    // Get Quotes
    let symbols = vec!["AAPL", "AMZN", "AMD", "NVDA"];
    let res = client.get_quotes(&symbols).await?;
    let res_json = serde_json::from_str::<Quotes>(&res)?;

    for symbol in symbols.into_iter() {
        if let QuoteType::Equity(equity) = &res_json.symbol[symbol] {
            println!("{}", equity.close_price)
        }
    }

    Ok(())
}

未来计划

  • 我计划使 watchlist 端点更容易使用
  • 我计划支持流式传输

免责声明

tdameritrade_rust 在 MIT 许可证 下发布

tdameritrade_rust 是一个非官方的API包装器。它绝不代表 TD Ameritrade 或任何关联组织所认可或支持。作者对使用此包可能引起的任何损害不承担任何责任。有关更多详细信息,请参阅 LICENSE 文件。

依赖项

约 11–26MB
约 401K SLoC