#order #order-id #tws #package #fork #next #valid

bin+lib ibtwsapi

IBKR-API-Rust 包的分支,使用更简单的接口范式

1 个不稳定版本

0.1.0 2022 年 6 月 9 日

#2#tws

Download history 24/week @ 2024-03-31 1/week @ 2024-04-07

每月 89 次下载

MIT 许可证

745KB
15K SLoC

IB-TWSAPI

本项目最初是 Brett Miller 编写的 IBKR-API-Rust 包的分支

备注

  • 并非所有 TWS 消息都已完全测试其正确性,因此该软件包最高只能视为 alpha 级质量
  • 请将任何特定、明显的错误发送给我或提交 PR 进行审查

与原始包的更改

  • 此实现不需要泛型来创建和使用自定义包装器
  • 只需要实例化一个对象,而不是两个
  • 删除了 EClient 和 Wrapper 对象周围的 ArcMutex 习语
  • 使用基于通道的事件调度器,而不是基于调用的调度器
  • 迁移到使用 rust_decimal 包,而不是 BigDecimal

说明

  • 将 example_wrapper.rs 复制到您的项目中,重命名,并根据需要重新实现功能。
  • 使用您自己的实现编写应用程序。

原始包描述

Interactive Broker 交易 API 的 Rust 版本(API_Version=9.76.01)的移植

请在此处查看最新的 IB Tws Api 文档: http://interactivebrokers.github.io/tws-api/introduction.html.

文档中包含有关配置 Trader WorkStation 和 IB Gateway 以启用 API 访问的信息。

有关此库的使用,请参阅 示例实现

客户端将使用的的主要结构和特性有 EClient ,这是一个负责连接到 TWS 或 IB Gateway 并发送请求的结构体,以及 Wrapper ,这是一个客户端将实现的特征,用于声明当应用程序从 TWS/IB Gateway 接收消息时被调用的回调函数。

示例

以下示例中,当样本应用程序连接时,TWS 将发送下一个有效的订单 ID。这将导致 Wrapper 回调方法 next_valid_id 被调用,进而启动向 TWS 发送测试请求(请参阅 TestWrapper 中的 start_requests 方法,该方法由 next_valid_id 调用)。

use log::*;
use std::thread;
use std::time::Duration;
use ibtwsapi::core::errors::*;
use ibtwsapi::examples::example_wrapper::ExampleWrapper;

pub fn main() -> Result<(), IBKRApiLibError> {
    match log4rs::init_file("./log_config.yml", Default::default()) {
        Ok(_) => (),
        Err(e) => {
            println!("Error: {}", e.to_string());
            return Err(IBKRApiLibError::ApiError(TwsApiReportableError::new(
                -1,
                "-1".to_string(),
                "Failed to create logger!!".to_string(),
            )))
        }
    };

    let mut app = ExampleWrapper::new();

    info!("getting connection...");

    //use port 7497 for TWS or 4002 for IB Gateway, depending on the port you have set
    app.client.connect("127.0.0.1", 4002, 0)?;
    loop {
        match app.process_event() {
            Ok(_) => continue,
            Err(e) =>
            {
                error!("{}", e.to_string());
                break ();
            },
        };
    }
    thread::sleep(Duration::new(2, 0));

    Ok(())
}

待办事项

  • 执行性能分析并收集性能数据
  • 运行 rust-clippy 检查器

免责声明

本软件由版权所有者和贡献者提供“原样”并且不提供任何明示或暗示的保证,包括但不限于适销性和特定用途适用性的暗示保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论这些损害是由于何种原因引起的,以及基于何种责任理论,包括合同、严格责任或侵权(包括疏忽或不计后果)。

依赖项

~8MB
~139K SLoC