rburkholder/trade-frame
GitHub: rburkholder/trade-frame
一个 C++ 高频交易框架,聚合行情、策略、回测与执行,解决期权组合跟踪与多经纪商对接问题。
Stars: 653 | Forks: 192
# trade-frame
## 简介
这是一个:
* 用于将市场数据沉淀、组织时间序列、构建指标、编写算法并向经纪商发出订单的函数库,适用于高容量、低延迟的交易应用
* 使用这些库来实现各种手动与自动化交易场景的项目集合
该解决方案的主要目标是提供一种跟踪 [Option Combo Order](lib/TFTrading/Order_Combo.hpp) 从诞生到消亡整个生命周期的机制。使用 Interactive Brokers 的用户界面进入期权组合很容易,但似乎没有有效的方法来保持腿(legs)分组以便跟踪整体盈亏。
此库提供了使用    与  来跟踪。仓位可以组合在一起形成 。代表组合的组合仓位可以进一步组合,以表示交易组合的整体盈亏。
仓位由一个  类组成,用于记录  的买价/卖价/最新价。
 继承自 Watch 类,以提供 ,这些指标通过  实时计算。
提供 [Simulation Interface](lib/TFSimulation/SimulationInterface.hpp) 用于离线测试策略。模拟器将接受 [Orders](lib/TFTrading/Order.h) 的市价单和限价单,假设在实时会话中已从交易所捕获了买/卖价数据。实现了一个 50ms - 100ms 的延迟队列,以更好地模拟订单提交的往返时间与滑点效应。
## 示例
来自 ComboTrading 项目的图片,显示了仪器列表,并为其中一个列出的仪器提供了图表。期权的买价、卖价、价差和希腊值被绘制成图表(实时更新)。

更多图片请查看 
## 模板
AutoTrade 项目可以作为构建您自己的自动化高频交易应用的模板。
## 构建环境
使用 C++17 编译器来构建库和代码。最初是在 Windows 上构建的,但后来重点转向支持 Linux 环境。可能需要一些工作才能再次在 Windows 上构建。
使用 CMake 进行构建管理。
注意在根 CMakeFiles.txt 中使用了 '-march=native'。这将导致代码不一定能在不同 CPU 类型之间移植。如果您打算在多种 CPU 类型(例如 Intel 指令集的不同版本)上编译,请注释掉该选项。
请参阅所引用的 URL 以了解不同 CPU 版本的各种指令。
## 构建
脚本是与库版本绑定的。构建说明截至 2021/11/22。
使用 wxWidgets 需要一些依赖以支持 GTK 变体的视频驱动(我曾成功使用 Nvidia 和 Radeon 显卡)。
您需要大约 10G 的可用磁盘空间来构建项目、相关库以及
安装(来自我的 libs-build 仓库)。
使用 Debian Bookworm 作为平台。库安装程序是针对该发行版的。
安装程序可能在其他发行版或变种上无法正常工作。
DTN/IQFeed 需要 Wine 才能运行。从 IQFeed 6.2 版本开始,不再需要 wine32。
仅使用 x64 安装的 wine 可能会产生一些 wine32 提示和错误,但可以忽略。
```
# 使用 Bash 运行
# git 获取最新代码,wine 用于 IQFeed 守护进程
sudo apt-get update && sudo apt-get install git wine64 wget ttf-mscorefonts-installer
wget http://www.iqfeed.net/iqfeed_client_6_2_0_25.exe
wine64 iqfeed_client_6_2_0_25.exe
# 适用于 Linux 的 Interactive Brokers TWS
wget https://download2.interactivebrokers.com/installers/tws/stable/tws-stable-linux-x64.sh
sh tws-stable-linux-x64.sh
# 安装并构建初始环境和库
git clone https://github.com/rburkholder/libs-build.git
pushd libs-build
./build.sh tradeframe
# rdaf 是必需的,用于 rdaf 子目录中的项目 - 可选
# 这是一个大型安装,因此仅推荐给对 CERN 工具集感兴趣的人
# 需要手动安装 libtorch:https://pytorch.org/cppdocs/installing.html
./build.sh rdaf
# 一个示例使用 Wt Web 库作为接口 - 可选
# 这不是推荐的安装,但在此作为基于 Web 的参考应用程序提供
./build.sh wt
popd
# 主要 trade-frame 代码
git clone https://github.com/rburkholder/trade-frame.git
# 如果您可以访问最新的私有库,请改用以下命令:
# git clone https://github.com/rburkholder/tf2.git
# 如果您手动构建(如果将文件夹加载到 vscode 中则不需要):
cd trade-frame
mkdir build
cd build
cmake ..
# 使用 parallel 来使用更多 CPU 核心
cmake --build . --parallel 4 --config Debug
# cmake --build . --parallel 4 --config Release # 替代构建选项
# cmake --build . --target clean # 清理以重新构建
```
我使用 Visual Studio Code 作为我的 IDE。已安装以下扩展:
* C/C++ [Microsoft]
* clangd [LLVM Extensions]
* CMake [twxs]
* CMake Tools [Microsoft]
clangd 扩展提供了语言库以实现符号查找和交叉引用。
我关于此组合的笔记位于
[Visual Studio Code with CMake and Clangd](https://blog.raymond.burkholder.net/index.php?/archives/1037-Visual-Studio-Code-with-CMake-and-Clangd.html)
## 启动
* 通过 Apps -> Wine -> Programs -> IQFeed -> Watchlist 启动 IQFeed 守护程序(或从命令行运行:wine ~/.wine/drive_c/Program\ Files/DTN/IQFeed/iqconnect.exe -autoconnect &)并使用您的凭证登录,首次使用时请勾选保存用户名/密码并自动连接
* 启动 Interactive Brokers TWS 并连接到模拟交易账户
* 不要使用真实账户进行测试
* 当通过应用程序连接时,您需要进入设置启用 API 并激活端口
* IQFeedMarketSymbols 项目:
* 运行应用程序:
* Actions -> New Symbol List Remote
* 程序将花费几分钟以下载、解析并保存最新的 IQFeed 符号列表
* 会生成大量消息,无需逐一评估,除了最后的统计摘要
* 文件 -> 退出
* IQFeedGetHistory 项目:
* 获取每日 OHLC 值,用于刷新数据
* 重复符号下载(可通过 IQFeedMarketSymbols 完成)
* 运行应用程序:
* 确保 IQFeed 守护程序正在运行(您应看到报价监控中的实时更新)
* “开启” IQF
* Actions -> download n # of days:
* 0 下载符号完整历史,可能需要较长时间
* 10 运行测试
* 将开始下载一个符号
* 会有几分钟的空闲时间用于扫描符号列表
* 一系列符号的数据将开始生成
* 当出现“Process Complete”消息时,下载完成
* “关闭” IQF
* 文件 -> 退出
* 更多应用程序将在此描述...
## 背景
当前市场数据提供商与执行方:
* IQFeed:实时市场数据与历史数据
* Interactive Brokers:实时市场数据与实时订单执行
* Alpaca:实时数据与订单执行
* Phemex:实时数据与订单执行(进行中)
证券类型:
* 股票
* 期权
* 期货
* 期货期权
使用的库(使用我的 lib-build 仓库下载并构建各种依赖项):
* wxWidgets
* boost
* curl
* zlib
* hdf5
* sqlite(包含在源代码中)
* exelformat(包含在源代码中)
* rdaf(又称 ROOT)——CERN 提供的提供 Clang C++ 解释器的库(可选)
注意:代码最初在 Windows 上使用 Visual Studio 开发,目前主要在 Linux Debian 上测试。需要一些工作才能将其移植回 Windows。存在各种 Windows 相关的工件,位于不同目录中,目前尚未完全可用。
lib 目录包含我在各个项目/应用程序中使用的库集合。主要库包括:
*  - 管理交易、报价、希腊值,
*  - 模拟引擎
*  - 与 DTN IQ Feed 通信以获取 Level1 和 Level2 数据的引擎(可询问获取推荐)
*  - 与 IB 通信的引擎
*  - 一些指标
*  - 封装 HDF5 库用于存储时间序列
*  - 期权计算
*  - 管理订单、执行、组合、仓位、账户
*  - 提供多种表单、面板及相关用户界面元素
*  - 围绕 ChartDirector 的绘图与图表封装
*  - 基于 SQLite 数据库的 ORM 封装,用于维护交易记录
这些是当前支持的一些应用程序:
*  - 用作自动化交易代码模板 - 开始部分 ML 相关工作
*  - 按兴趣标记仪器并查看最近 200 根日线
*  - 进行基于期货的期权组合交易的进行中的工作
*  - 将实时买价/卖价/最新价流式写入磁盘,用于回测与训练
*  - 交易多种证券的基础知识,例如各种期权策略
*  - 理解货币交易概念的探索性代码
*  - 查询 IQFeed 以寻找可能的基于股息的股票投资的控制台应用
 - 使用 Level II 阶梯图交易期货
*  - 查看 HDF5 数据集内容
*  - 使用期货 Level II 数据进行查看与交易
*  - 自动下载并解压最新的 dtn/iqfeed mkt_symbol.txt 文件
*  - 加载历史数据以寻找交易思路
*  - 实时查看仪器
*  - 使用 ticks_ratio 支持对 SPY 进行回测,结合 libtorch LSTM 模型进行训练/预测,基于 Collector 数据
部分代码示例(未维护):
* StickShift2 - 一些用于期权交易思路的粗糙代码
* HedgedBollinger - 一些关于期货的实验,主要追踪平值隐含波动率
博客公告:[http://blog.raymond.burkholder.net/index.php?/archives/679-trade-frame-c++-securities-trading-software-development-framework.html](http://blog.raymond.burkholder.net/index.php?/archives/679-trade-frame-c++-securities-trading-software-development-framework.html)
其他可能相关的条目:[http://blog.raymond.burkholder.net/index.php?/categories/23-Trading](http://blog.raymond.burkholder.net/index.php?/categories/23-Trading)
注意:在其早期,代码使用了 MFC(Microsoft Foundation Classes)、一些 Berkeley DB 代码以及其他各种模块,
这些模块我目前不再支持。代码保留在仓库中仅具有历史价值,并可能在将来
被重写以用于当前用途。
## 测试
* IQFeed 测试:可以使用符号 TST$Y,该符号会持续 24/7 发送循环数据。(2019/03/12)
## 其他
* 2022/07/16 新增软件包依赖(已整合到 libs-build/build.sh):
* sudo apt install portaudio19-dev
* 2022/07/25 新增软件包依赖(已整合到 libs-build/build.sh):
* sudo apt install libcrypto++-dev
标签:Alpaca, Bash脚本, C++, C++17, CUDA, DTN IQFeed, ETF, Greeks, HTTP头分析, Indicators, Instrument, Interactive Brokers, Leg, libtorch, LSTM, Market Limit, Option Combo Order, Option Engine, Phemex, Portfolio, Position, PyTorch, Simulation Interface, Telegram通知, TWS API, Vectored Exception Handling, Watch, 交易执行, 仿真接口, 回测, 外汇, 多策略框架, 多资产, 实时数据, 技术指标, 数据擦除, 时间序列, 期权组合, 期货, 深度学习, 滑点模拟, 算法交易, 股票, 自动化交易, 订单类型, 通知推送, 高频交易