面向研究与交易代码的 Git 核心
周五下午四点。一家 A 股 私募 的基金经理走过来问:「昨天你跑的 沪深300 动量回测,能不能重现?早上 Sharpe 看起来不太对。」你打开 notebook,已经被改过两次——因子回看从 60 个交易日改成了 90 个,滑点假设也不知何时动过。没有 git 时你在靠记忆复原数字;有了 git, git log oneline 、 git checkou...
打开 →GLOBAL SEARCH
搜索在服务端完成,题目解析与答案不会进入搜索结果。登录后可搜索自己的收藏题单。
找到 30 个结果
中文题目周五下午四点。一家 A 股 私募 的基金经理走过来问:「昨天你跑的 沪深300 动量回测,能不能重现?早上 Sharpe 看起来不太对。」你打开 notebook,已经被改过两次——因子回看从 60 个交易日改成了 90 个,滑点假设也不知何时动过。没有 git 时你在靠记忆复原数字;有了 git, git log oneline 、 git checkou...
打开 →周二上午十一点。你的分支 feature/risk factor z 在本地终于跑通——沪深300 因子归因回测 Sharpe 三位小数都对上了审查者期望。你 git push ,在内网 GitLab 开了 MR,一小时内审查者要求改两处,并指出你的分支已落后 main 四个提交,因为同事刚合了另一个修同模块的 MR。第 1 课教你在一台机器上操作 git;...
打开 →周三下午两点。一家 A 股 私募 的资深同事打开你的 MR,标题是 feat(risk): 添加 沪深300 因子 z 列至业绩归因 。改了 12 个文件。二十秒之内审查线上铺满了「文件末尾多一个空行」「这个 import 没用到」「第 47 行行尾有空白」「import 没排序」之类的评论。你能感到审查时间正在漏走——这些评论没一条是关于你因子逻辑对不对的...
打开 →上海一家 私募 的 风控 主管 批准 了 你 的 L3 manifest,但 在 部署 步 上 停 住:「开发者 把 一行 修复 合 入 main,这 时 镜像 从 哪 来?谁 打 tag?谁 扫描?谁 推 到 Aliyun ACR?谁 对 feed dev 跑 kubectl apply ?明天 生产 上 在 1.0.1 里 发现 bug,谁 把 它 翻 ...
打开 →一位 私募 量化 团队 的 资深 研究员 在 原 研究 PR 上 线 半 年 之后 把 报告 递 给 一 位 初级 队友。"重新 跑 一 遍。基金 经理 在 问 这 个 信号 在 2024 年 数据 上 是否 还 work。" 初级 从 共享 盘 拉 出 notebook 打 开,第一 个 错误 立 刻 撞 上 来: ImportError: cannot ...
打开 →国内某私募衍生品桌的研究主管要在不动 Monte Carlo 引擎的前提下,对同一笔 CSI 300 ETF(510300.SH)4.30 行权价的欧式 call 跑三种 payoff——call、put、二元 digital。C++98 时代的答案是一棵 PayoffBase 指针继承树;C++11 之后的答案变成一行 lambda:把它直接传进 pric...
打开 →周三晚上九点,你在一家上海私募的策略组里,把白天调好的 A 股因子算子打包发给同事,让他在另一台机器上跑同样的回测。他 git clone 完,进到目录里直接 python main.py ,立刻就崩了: ModuleNotFoundError: No module named 'xyzprice' 。你叫他先 cd src && python main.p...
打开 →周一上午,你在上海的一家 量化 私募。研究主管 在桌边停下来,看了一眼你 上周提交的 12 1 动量 信号的 DSL,问了一句话:「IC 是 多少?」这就是 4.2.3 模块 整个 评估 工序的 起点。你 已经 按 4.2.2 的 规范 把 信号 构造 完毕——alpha 公式 写好了,标准化 流水 跑通了,T+1 滞后 处理过了——下一步 不是 再 优化 ...
打开 →沪深300 期权做市的私募,盘中 14:23 出现单边行情,CFFEX IF 主力合约成交骤增。值班 quant developer 在飞书智能助手里收到一条钉钉机器人推送:『KafkaConsumerLagHigh:feedhandler warehouse 消费组 lag 10000,持续 5m』。打开 Grafana,dashboard 名字叫 fee...
打开 →某私募的研究员把一个 Jupyter notebook 推过来:他们在沪深300成份股上扫了 500 万个 (S, K, σ, t) 参数组合,目标是给隐含波动率曲面拟合做敏感度分析。纯 Python + scipy.stats.norm.cdf 跑了 47 分钟,他要的是把这一步压到 5 分钟以内,但策略迭代仍然由他在 notebook 里驱动——研究员不...
打开 →某周四 早上,上海 某 量化 私募 的 投决会。L1 L3 全部 走 完 的 5 日 动量 策略 摆 在 Confluence 上:事件驱动 引擎、十 项 真实性 清单 全 绿、deflated Sharpe 0.8、PBO 0.35。研究员 问 投资 总监:「什么时候 上 实盘?」投资 总监 不 回答 这 个 问题。她 连 问 四 个 反 问 题。 十 节...
打开 →上海一家 私募 的电子交易主管把一名资深工程师拉到一边:「期权做市新策略要求 沪深300 ETF 的 top of book 在策略线程内到达延迟不超过 50 微秒。我们现在跑 Kafka 是 3 毫秒——差了三个数量级。怎么办?」诚实的答案是「先量,再按 rung 一级一级往下挪」。L2 把你留在 Kafka 这一级—— acks='all' 端到端毫秒级...
打开 →国内某头部私募的低延迟交易团队把 510300.SH (沪深300 ETF) 的行情接入和 50ETF 策略引擎之间的那一跳从 crossbeam::channel 换成手写 SPSC 环形缓冲后, P99.9 的延迟从 25 μs 掉到 6 μs——单跳省了 20 μs, 是策略整体延迟预算 ( 50 μs) 的 40%。这就是这一节课的全部出发点: Mu...
打开 →某私募的量化基础设施工程师把一个棘手问题摆到桌上:回测代码一份要在 CI 上跑(必须 deterministic、必须秒级、必须无网络),另一份要在研究 notebook 里跑(必须真接口、必须有缓存),两边的调用点不能动。本课把前三节的全部产物——L1 的 simulate basket 、L2 的 make cohort ,L3 的 fetch yiel...
打开 →一位 头部 量化 私募 基金 经理 周五 走 进 研究 总监 的 办公室 端 着 一 张 幻灯片 —— 五 年 评估 窗口 上 沪深 300 横截面 净 扣 成本 后 夏普 比率 2.0,t 统计量 4.5,样本外 净 值 曲线 漂亮 至极。研究 总监 翻 到 方法 学 那 页。"你 的 N 是 多少?" "我 在 相同 窗口 上 筛 了 大约 100 个 ...
打开 →国内某头部私募(类似鸣熙资产)C++ 团队的第二个 sprint,组长把一个迷你定价库交给你独立负责。上一任留给你一份 600 行的 main.cpp ,能编、能跑、打印三个数,零测试。下个 sprint 的任务清单里包括加上一个 put call parity 的健全性检查、把库挂到一个策略二进制里、并通过一次把「单文件 C++ 工程」列为 P2 反模式的...
打开 →上海一家 私募 的 quant 把 L2 产出的 feed handler:1.0.0 镜像推到 内部 registry,问 平台 组 怎么 把 它 部署 到 测试 集群。负责 工程师 直接 反 问:「你 的 docker compose.yml 本地 长 什么 样?你 的 manifests/ 在 测试 集群 长 什么 样?」quant 两份 都 没有,手...
打开 →上海陆家嘴某头部私募的中频组用了七年的 C++ 报单 / 回测框架, 这一周决定把对接券商 CTP 柜台的协议适配层用 Rust 重写。组里资深工程师拿到任务的第一天敲了四条命令:装工具链、新建项目、构建、运行。九十秒后磁盘上多了一个二进制文件并打印了一行字。同样的循环在 C++ Fundamentals (3.4.1) 里要写 CMakeLists.txt...
打开 →周二上午十点的滚动均值 某私募研究台周二上午十点。你刚把 3.2.2 收尾那条 8 步管道交给量化团队,篮子是沪深300 ETF(510300.SH)和三只 A 股票面 ,日收益矩阵 (252, 4) 。PM 把它拉到全市场场景版本——篮子扩到 100 只票、回溯 100 个交易日——结果纯 Python 嵌套循环算出来的 20 日滚动均值跑了 11 秒,下...
打开 →A 股 一家 私募 的 quant,下午 三点半 收盘 之后 收到 数据团队 的 一条 消息:「今天 沪深300 ETF 的 tick 文件 落到 /data/market data/cn/equity/tick/20250424/ 了,你 看看 行数 对不对、品种 有没有 缺、总成交额 大概 多少。」她 不打算 写一个 Python 脚本——这种 「看一眼...
打开 →周日晚上 11 点的消息 某私募的中后台周日晚上甩来一条消息:风控组明早要用你写的 summarise.py 跑一份沪深300成分股的 tick 滚动 VWAP,他们那台服务器装的是干净的 Python 3.11、没装你电脑上的任何包。你抓起脚本一看,它现在还是 notebook 里那个用 print 打日志、入口写在最后一格、依赖装在 /anaconda3...
打开 →周三晚上 11 点,你在某 私募 量化组里维护着一个内部小包 xyzprice :封装 涨跌停 价计算、复权因子拼接、T+1 持仓核算这三件每周都要做的事。组里另外两位 PM 想直接 pip install xyzprice 就能用,而不是每次复制粘贴你脚本里那几个函数。 pyproject.toml 已经写好,pytest 测试全绿——下一步只剩四件事:构...
打开 →国内某私募的 C++ 研究桌周一例会:新入职的研究员上线了 mean double 、 mean float 、 mean long double 三份函数——同一个九行的均值计算被复制了三次,只是浮点精度不同。Senior C++ engineer 的 review 意见只有一句话:「这里要写成模板。」周五新人交回的版本里,三份代码合成了一个 templa...
打开 →上海一家 私募 中等频率股票策略团队的量化开发收到任务:两周内从零搭一条 沪深300 ETF 的 ticker plant。手头握住 3.6.3 的仓库(TimescaleDB hypertable, ticks raw(symbol, ts, price, size, side) , (symbol, ts) 主键)、L1 的消息词汇、L2 的 Kafka...
打开 →国内某私募 CSI 300 ETF 期权桌的风险分析师在翻夜间对账日志:四十笔 510300 期权报价的隐含波动率(IV)显示为整齐的 1.0 。这不是市场信号,而是上一代 IV 求解器在「未收敛」时使用的 sentinel value。当下游的偏斜模型把 1.0 一起平均进去,报告的偏斜被肉眼可见地拖偏,早会因此浪费了三十分钟去追一个根本不存在的数字。修复...
打开 →Hook 周三晚上九点,深圳一家私募的波动率小组要在 T+1 风控窗口前更新沪深300 ETF(510300.SH)覆盖期权组合的隔夜 VaR 输入。研究员把上节课的 ProcessPoolExecutor 推到了 32 颗核,但每个标的 5,000 个交易日的 GARCH(1,1) 方差递推单跑仍要 0.8 秒——把 800 只 A 股一起标定就是 10 ...
打开 →一位 三十亿 规模 私募 量化 基金 的 新 研究员 周一 早会 端 PPT 走 进 会议室。"上周 我 在 沪深300 上 找到 夏普 等于 2 的 信号 —— 5 日 动量 加 行业 中性化,扣 5 bp 交易 成本,回测 2015 到 2023。" 基金 经理 问 四 个 问题。第一,"你 开始 之前 的 待 检验 假设 是 什么?" 沉默 —— 假设...
打开 →某沪深300指增私募的策略部署组组长周一早会带着三份交付物走进风控委员会。PM 刚审批通过一只新主动股票策略,研究组把 4.2 alpha 管线(截面动量 + 质量 + 价值的复合 alpha,样本内 IR 约 0.5)、4.3 因子暴露矩阵 B (Barra 风格 5 个 + 中信一级行业 10 个 + 国家因子)、4.4.2 Barra 风险模型 (Si...
打开 →国内私募量化的早盘 09:18,CFFEX IF 主力合约 tick 经过 feed handler 落入 TimescaleDB,过去三周一切正常。今早值班手机突然弹一条飞书电话呼叫:『KafkaConsumerLagHigh:feedhandler warehouse lag 10000,持续 5m,runbook 见 https://runbooks....
打开 →凌晨 02:14,沪深300 期权做市的私募量化值班手机响起。一条 SSE 50ETF 的报价在落库前出现了 11 秒延迟,下一档 CFFEX IF 主力的对冲单也跟着卡住。你打开堡垒机,登进 feed handler consumer 的容器,敲下熟悉的 tail f /var/log/... ——什么都没有,因为容器里根本没有 /var/log/ 。再敲...
打开 →