个人交易系统开发与设计(一)

一. 整体架构总览

采用C++高性能核心+Python策略层的混合架构,遵循经典的「数据 → 策略 → 回测/实盘」分层设计。

quantTrading/
├── src/          # C++ 核心库(计算密集型)→ 编译为 quant_core_py 扩展
│   ├── core/         # 基础类型 (Tick/Bar/Order/Signal)
│   ├── indicators/   # 技术指标 (SMA/EMA/MACD/RSI/BOLL/ATR) + 注册表
│   ├── factor/       # 多因子引擎 (DAG 计算图)
│   ├── risk/         # 风控 (仓位/止损/回撤)
│   └── python_bridge/ # pybind11 绑定 → Python 可调用
├── quant/        # Python 框架层
│   ├── data/         # 数据源(akshare) + Parquet 存储 + 交易日历
│   ├── engine/       # 回测引擎/模拟券商/投资组合/绩效报告
│   ├── strategies/   # 策略基类 + demo/advanced 策略
│   ├── signal/       # 实盘信号生产与导出
│   └── utils/        # 结构化日志
├── scripts/      # CLI 入口(下载/回测/优化/实盘)
├── config/       # YAML 配置
└── tests/        # C++(gtest) + Python(pytest) 测试


核心设计决策:性能关键路径放在 C++,策略灵活层放在 Python,通过 pybind11 桥接。 
这也是量化系统的常见最佳实践——技术指标、因子计算、风控都是纯数值运算,用 C++ 可
以获得数十倍性能提升,而策略逻辑需要频繁迭代,用 Python 便于快速实验。

二. C++ 高性能核心


2.1 技术指标(indicators/)

每个指标都是「批量计算 + 增量更新」双模式,这是流式行情下的关键设计。以 SMA 为例:

void SMA::update(double price) {
    if (count_ < period_) {
        buffer_[head_] = price;
        sum_ += price;
        ...

环形缓冲区(head_ 指针取模):增量模式只需 O(1) 时间更新,无需重算整个窗口。
滑动求和(sum_ += price; sum_ -= prices[i-period_+1]):批量计算用增量式
求和替代每次全窗口求和,把 O(n·k) 降到 O(n)。
registry.h 用单例 + 工厂函数 + 类型擦除实现插件式指标注册:
class IndicatorRegistry {
public:
    using FactoryFunc = std::function<std::unique_ptr<IndicatorBase>
(const std::string& params)>;
    static IndicatorRegistry& instance();
    ...
#define REGISTER_INDICATOR(name, factory) ...


2.2 因子引擎(factor/engine.h)

采用**计算图(DAG)**模式:

FactorNode 是抽象计算节点,派生 Momentum/Reversal/Volatility/VolumeRatio 等因子。
FactorEngine 统一管理输入数据与因子,compute_all() 批量执行,支持拓扑排序预留。
因子的可组合性为后续扩展复杂因子提供了清晰接口。

2.3 风控(risk/risk_manager.h)

设计了完整的风控规则链:仓位限制、单笔金额、日交易次数、连续止损暂停、个股止损、总回撤控制。
通过 RiskVerdict 枚举表达拒绝原因,RiskManager 聚合各规则,支持开仓前/盘中/收盘后三阶段检
查——这是实盘系统必备的安全网。

2.4 pybind11 桥接(python_bridge/)

将 C++ 类型与枚举暴露给 Python,PYBIND11_MODULE(quant_core_py, m) 作为入口。策略层可直接 
from quant_core_py import SMA, Bollinger, FactorEngine。

三. Python 框架层(quant/)


3.1. 数据层(data/)

BaseDataSource 抽象接口:定义 stock_list / daily_bar / trade_calendar,akshare_source 
是其实现。面向接口编程使将来替换数据源(如 Tushare、聚宽)无需改动上层。
ParquetStore:按 {code}.parquet 单文件存日线,追加合并去重逻辑保证增量更新幂等;
同时支持 Level2 数据按日期分文件存储。
TradingCalendar:交易日历,用 set 做 O(1) 判断,周末判断做兜底,并支持本地 CSV 缓存。


3.2. 回测引擎(engine/)

这是系统最核心的部分,采用事件驱动架构,四个模块职责分明:

模块              职责
broker.py    模拟券商:委托撮合、费用计算、滑点
portfolio.py    投资组合:现金/持仓/交易日志/每日净值
backtest.py    事件循环:推送行情→收集信号→撮合
reporter.py    绩效指标与图表
BacktestEngine.run() 的核心流程:


对每一天 date:
  收集所有股票的当日 K 线 → bars_today
  对每只股票调用 strategy.on_bar() 收集信号
  对每条信号下单 → broker.execute() 撮合(含滑点、限价判断)
  portfolio.update() 结算 → record_daily() 记录净值
broker.py 细致地模拟了真实交易:市价/限价单、滑点(百分比或固定跳数)、佣金(有最低5元)、
印花税(仅卖出)。portfolio.py 用加权平均成本法计算持仓成本,并生成每日快照。

reporter.py 计算总收益、年化、最大回撤、夏普比率、卡玛比率、胜率等核心指标,并输出资金曲线+
月度收益热力图。

3.3. 策略层(strategies/)


base.py 的 Strategy 定义了策略契约:on_init 初始化 + on_bar/on_tick 返回
交易信号。

demo 策略(教学示例):双均线交叉 ma_cross(金叉买/死叉卖)、布林带回归 
bollinger_revert(触下轨买/触上轨卖)、网格交易 grid_trade(多层网格低买高卖)。

advanced 策略:截面动量 momentum(买过去 N 日涨幅 Top 20%)、多因子选股 
factor_portfolio(调用 C++ 因子引擎算分,z-score 标准化后加权选 Top N)、策略
组合器 portfolio_combiner。注意 ma_cross 策略直接调用 C++ 的 SMA 类做批量预计算,
很好地展示了 C++/Python 混合调用的实战用法。

3.4. 实盘信号(signal/)

producer.py 定时跑策略生成信号,exporter.py 将信号写成 JSON 文件供 QMT(券商量化终端)
读取执行——实现了「信号生成与执行解耦」。

四. 脚本与配置

scripts/ 是整套系统的 CLI 入口,形成完整工作流:
1. download_data.py   → 从 akshare 下载行情到本地 Parquet
2. run_backtest.py    → 运行回测,输出绩效报告和图表
3. param_optimize.py  → 网格搜索参数(itertools.product 穷举组合)
4. start_live.py      → 实盘信号生成,导出供 QMT 读取
config/*.yaml 集中管理股票池、策略参数、风控阈值、执行模式,实现配置与代码分离。

五.值得学习的亮点

C++/Python 混合架构:把纯计算(指标/因子/风控)下沉到 C++,策略逻辑留在 Python,
兼顾性能与灵活性,是生产级量化系统的标准做法。
指标双模式设计:批量 + 增量更新 + 环形缓冲区,O(1) 流式更新。
插件式注册表:REGISTER_INDICATOR 宏自动注册,零侵入扩展。
配置驱动实盘:通过 YAML 启停策略、调参、设风控,无需改代码。
三层风控:开仓前/盘中/收盘后分阶段风控,保证实盘安全。


六.可改进方向(仅供参考)

portfolio.py 通过遍历 broker.orders 反查佣金,可用 order_id 建立索引优化。
producer.produce() 目前把所有策略输出都归为 hold,未真正输出买卖动作,实盘逻
辑有待完善。portfolio_combiner 的 combine_signals() 目前只记录日志未返回合成
信号,尚未完成。回测引擎每根 bar 用 DataFrame 过滤查找,日频可接受,但 tick 级
别需优化。如需我深入讲解某个模块(如回测撮合细节、因子引擎的 C++ 实现,或如何扩展
一个新策略),可以告诉我。

内容概要:本文系统介绍了嵌入式应用层感知底层变化的三种典型方式——轮询、回调函数和观察者模式,通过温控系统的实际案例对比分析其原理优劣。轮询由应用层主动周期性查询数据,实现简单但占用CPU资源且实时性差;回调机制由底层在数据变化时主动通知应用层,提升了实时性和效率,但仅支持单响应且存在耦合;观察者模式通过“订阅-通知”机制实现对多的事件广播,彻底解耦模块间依赖,扩展性强,适用于复杂系统。文章还简要提及消息队列事件总线作为更高级的异步通信方案,并指出这些技术背后对应的设计模式思想,强调在嵌入式开发中掌握软件架构设计的重要性。; 适合人群:具备C语言基础和嵌入式开发经验的初级至中级研发人员,尤其适合正在学习模块解耦系统架构设计的工程师。; 使用场景及目标:①理解嵌入式系统中模块间通信的不同实现方式及其适用条件;②掌握如何从轮询过渡到观察者模式以提升系统实时性、可维护性和扩展性;③学习在资源受限环境下应用设计模式解决实际问题的方法。; 阅读建议:此资源以实际代码示例贯穿始终,建议读者结合文中提供的C语言实现代码进行动手实践,深入体会每种方式在中断处理、CPU利用率和模块耦合度方面的差异,并尝试将其应用于自己的项目中进行对比优化。
内容概要:本文系统深入地讲解了VS Code代码高亮自定义的底层原理全链路实践技术,涵盖从基础配置到专家级主题开发的完整知识体系。文章首先剖析了VS Code高亮系统的分层架构、TextMate作用域规范及token分词机制,明确了语法解析、作用域匹配主题渲染的核心流程。随后提出三大自定义层级:轻量化配置(基于settings.json快速调整基础语法元素)、精细化Scope定制(利用textMateRules实现多语言差异细粒度控制)以及完整主题开发(通过Yeoman脚手架创建可发布的独立主题)。文中提供了适用于Python、JavaScript、Java、C/C++、Go、HTML/CSS等主流语言的专属高亮方案,并融合工业级护眼配色美学原则,强调低饱和、层级清晰、主次分明的视觉设计。同时配套作用域查询工具使用、故障排查、配置优先级、团队同步等工程化落地策略,形成闭环的技术指南。; 适合人群:具备基本编程经验的开发者,尤其是希望提升编码效率视觉体验的前端、后端、全栈及跨语言开发人员,适用于工作1-5年并有个性化编辑器定制需求的技术人员;; 使用场景及目标:①解决默认主题高亮模糊、配色刺眼、语法区分度低等问题;②实现多语言差异化高亮团队统视觉规范;③开发发布专属VS Code主题;④构建护眼、高效、美观的个性化编码环境; 阅读建议:学习过程中应结合VS Code实际环境操作,利用Developer: Inspect Editor Tokens and Scopes工具验证作用域,优先从轻量化配置入手,逐步过渡到精细化规则主题开发,注意配置优先级冲突排查,同时参考文中的标准化配色模板避坑准则,确保美观性稳定性兼顾。
代码转载自:https://pan.quark.cn/s/a4b39357ea24 Realtek 8192FU Linux USB无线网卡驱动 license platform Linux 6.4 Ubuntu Kali Centos Rocky Linux ArchLinux Linux Mint Fedora ~~原始代码来源于: Internet Archive 。 ~~ ~~点击这里:下载原文件 。 ~~ -- ~~原始文档里说支持Linux内核版本。 但不支持 Linux 内核以上的版本,也不支持 / 以上的版本。 ~~ -- 经过多次修改后,在原来的基础上,增加了对 Linux 内核 的支持,以及对 / /的支持。 目前已测试的Linux发行版及结果: 已通过: * ; * ; * ; * ; * ; * ; * ; * ; * ; 其他未测试的,如果内核版本符合上述要求,通常情况下是可以使用的,但不能完全肯定。 使用方式 安装内核头文件 安装编译器: 然后进入驱动代码目录: 编译并安装: 装载到内核模块: 注意:USB网卡上的指示灯可能不会闪烁,但是设备这时候可以使用了。 查看USB接口列表: 如果出现的问题就需要先安装: 查看USB设备信息: 关键信息看最后行: 则说明该设备已经跟驱动匹配上了; 则说明没有找到设备对应的驱动。 驱动跟设备匹配成功的情况: 驱动匹配失败的情况: 成功之后,就可以去配置无线网络了。 驱动的卸载: 对 的支持 每次内核更新之后,驱动都需要手动重新编译安装,可能比较麻烦。 使用,可以在更新内核时自动完成驱动的编译和安装。 安装内核头文件 安装编译器: 安装 使用:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值