#order #order-id #tws #broker #trading #api-access #interactive

bin+lib twsapi

Rust 编写的 Interactive Broker 交易 API 的移植

1 个不稳定版本

0.1.0 2021 年 1 月 29 日

159金融

每月 25 次下载

MIT 许可证

1MB
17K SLoC

IBKR-API-Rust

Rust 编写的 Interactive Broker 交易 API 的移植 (API_Version=9.76.01)

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

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

请参阅 src/examples/test_helpers/manual_tests.rs 中的示例实现,以了解该库的使用。

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

示例

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

use twsapi::core::errors::IBKRApiLibError;
use twsapi::core::client::EClient;
use std::time::Duration;
use twsapi::examples::test_helpers::TestWrapper;
use std::sync::{Arc, Mutex};
use std::thread;

fn main() -> Result<(), IBKRApiLibError> {
    let wrapper = Arc::new(Mutex::new(TestWrapper::new()));
    let app = Arc::new(Mutex::new(EClient::new(wrapper.clone())));

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

    wrapper.lock().expect("Wrapper mutex was poisoned").client = Option::from(app.clone());

    app.lock()
        .expect("EClient mutex was poisoned")
        .connect("127.0.0.1", 4002, 0)?;

    thread::sleep(Duration::new(18600, 0));

    Ok(())
}

待办事项

  • 扩展文档 - 完成
  • 编写自动化测试 - 进行中
  • 在 TestWrapper 中编写一个异步函数,以检查回调是否已填充 next_valid_id
  • 发布到 crates.io

如果您发现错误或希望提出建议,请通过 [email protected] 或提交拉取请求与我联系。

免责声明

本软件由版权所有者和贡献者提供,“现状”和“按原样”提供,并不承担任何明示或暗示的保证,包括但不限于对适销性和针对特定目的的适用性的暗示保证。在任何情况下,版权所有者或贡献者均不对任何直接、间接、偶然、特殊、示范性或后果性损害(包括但不限于替代商品或服务的采购;使用、数据或利润的损失;或业务中断)承担责任,无论这些损害是由于何种原因造成的,无论是否已告知此类损害的可能性,无论这些损害是在合同、严格责任或侵权(包括过失或不计过失)的法律理论中产生的。

依赖项

~8MB
~138K SLoC