async / await 与 Tokio 入门
国内某 SSE 接入团队接到任务: 把老 C++ + Boost.Asio 写的行情接入网关重构成 Rust, 单台机器要同时维持 8000 条 TCP 长连接, 把 510300.SH (沪深300 ETF) 等几百只标的的 tick 流落到内部撮合面板。架构师扫一眼说: 上 tokio——别想着每条连接派一个 OS 线程, 8000 个 OS 线程在调度...
打开 →GLOBAL SEARCH
搜索在服务端完成,题目解析与答案不会进入搜索结果。登录后可搜索自己的收藏题单。
找到 30 个结果
中文题目国内某 SSE 接入团队接到任务: 把老 C++ + Boost.Asio 写的行情接入网关重构成 Rust, 单台机器要同时维持 8000 条 TCP 长连接, 把 510300.SH (沪深300 ETF) 等几百只标的的 tick 流落到内部撮合面板。架构师扫一眼说: 上 tokio——别想着每条连接派一个 OS 线程, 8000 个 OS 线程在调度...
打开 →Hook 周二下午三点,一家上海私募的量化研究员要在 T+1 风控窗口前把沪深300 成分股当日的分钟线快照拉下来,作为隔夜组合 VaR 的输入。上节课用 ThreadPoolExecutor 把 100 个同步 requests.get 压到了 1.8 秒;现在策略组想把每天的拉取面扩到 1500 只 A 股、外加 200 只港股通(Stock Conne...
打开 →开场 某私募周二上午九点三十一,沪深300 ETF(510300.SH)刚收完集合竞价,团队的 tick 处理器跑了九十秒。两个生产者线程在排空一个 Tushare 风格的行情 websocket——一个分片走 SSE(上海)回报,一个分片走 SZSE(深圳)回报——四个消费者线程各跑一个下游策略。九十三秒时,四个策略共写的盈亏累计器显示 1400000 元...
打开 →国内某头部私募的中频策略团队把 3.5.1 写的那版单线程 Monte Carlo 定价器搬上生产: 给 510300.SH (沪深300 ETF) 的欧式看涨期权报实时理论价。CPU 占用率长期挂在 8%——一台 16 核机器只有一个核在干活。负责人甩给你的任务很直接: 把 n paths 平均分到 N 个线程上, 共享一个 f64 累加器, 拿到一样的价...
打开 →A stock follows a one-factor model with beta 1.5. Market variance is 0.04 and the stock's total variance is 0.16. What idiosyncratic variance is implied?
打开 →rust · rust2021 · concurrency · threads · std-thread · send · sync · marker-traits
打开 →凌晨四点零一,你坐在 CFFEX 张江 COLO 机房楼上的值班室。你是国内一家头部私募的 Rust 工程师,负责沪深300 ETF (510300.SH) 的行情接入;早盘脚本 03:58 跑完,集合竞价 9:15 开始;此刻你的 tokio::net::UdpSocket 订阅器跑合成行情回归时报了一个序列号缺口 —— 序号 142,367,189 与 ...
打开 →字节火山引擎的某 TiKV 同事在你刚加入沪深300量化团队的第二周走过来。他抱着一台戴尔笔记本,屏幕上是 3.5.2 L3 你亲手写的那个 SPSC 环形缓冲——给 510300.SH (沪深300 ETF) 行情事件用的,生产者一个核心、消费者一个核心,中间两个 AtomicUsize 当下标。"我们要把这段代码搬进 CFFEX 张江 COLO 的 pr...
打开 →国内某头部私募的低延迟交易团队把 510300.SH (沪深300 ETF) 的行情接入和 50ETF 策略引擎之间的那一跳从 crossbeam::channel 换成手写 SPSC 环形缓冲后, P99.9 的延迟从 25 μs 掉到 6 μs——单跳省了 20 μs, 是策略整体延迟预算 ( 50 μs) 的 40%。这就是这一节课的全部出发点: Mu...
打开 →周四早上,你在上海的一家 量化 私募 的 因子 评估 会 上。 桌面 上 堆 着 K 条 信号 的 L1 + L2 诊断 包: 12 1 动量、 账面市值比、 毛利率 质量、 PEAD (post earnings announcement drift) ——每 一条 都 通过 了 L2 的 break even IC 门槛、 每 一条 月度 IC 都 在 ...
打开 →国内一家头部私募的 CSI 300 ETF 期权桌的 C++ 工程师,正在把一个新的 510300.SH 期权策略接进生产引擎。单线程回测跑十一秒;上线引擎要求一个线程从 CFFEX 行情链路喂 tick,第二个线程跑 Greeks 重估,第三个线程把订单分发到 SSE 的报盘网关。第一版在第二个 tick 就死锁了。第二版位置表被搞乱了——两条线程同时读写...
打开 →晚上 十点,你 启动 了 一个 沪深300 ETF(510300)的 5 分钟 均值回归 策略 回测,参数 扫了 三十 组,估计 要 跑 一整夜 加 半天。你 把 笔记本 一合 准备 回家,然后 突然 想起 一件 事: ssh 连接 一断,那个 Python 进程 就 死了。第二天 一早 你 还得 看 进度、还要 在 跑到 一半 时 杀掉 它 重启。这一课 ...
打开 →L1 你给 510300.SH (沪深300 ETF) 的 Monte Carlo 定价器装了 Arc 共享累加器, CPU 是被打满了, 但 perf 一打就能看到 4 个核里有大半时间在 lock mutex 自旋——4 个 worker 抢同一把锁, 串行化在了那里。下一步, 你的负责人把另一个量化老兵叫过来评审, 他扫一眼说: 「这里就不该用锁。每个...
打开 →A stock returns 1.8% while the benchmark returns 0.9%. If the stock beta is 1.1 and the risk-free rate is negligible over the horizon, what single-period alpha do you attribute to the stock?
打开 →某上海私募的多空策略台,周一早会上分析师汇报:某只白酒龙头跑赢沪深300 5.2 个百分点,「显著的 alpha」。基金经理把数据敲到 Bloomberg,跑了一遍 CAPM 回归,Jensen alpha 的 t 值 1.3——「不,这只是 beta 的 1.4 倍,加上沪深300 这一年涨了 4%,你看到的 5.2% 全在 beta 解释范围内,没有 a...
打开 →Buses arrive at a stop as a Poisson process with rate 10 per hour. You walk up at an arbitrary moment, unsynchronized with the buses. What is the expected time, in minutes, until the next bus arrives?
打开 →Under a one-factor model X = bF + epsilon with factor variance 3, asset loadings (1, 2), and idiosyncratic variances (4, 9), what are Var(X_1), Var(X_2), and Cov(X_1, X_2)?
打开 →Under a one-factor model X = bF + epsilon with factor variance 5, asset loadings (2, -1), and idiosyncratic variances (1, 4), what are Var(X_1), Var(X_2), and Cov(X_1, X_2)?
打开 →上海一家 私募 的数据工程主管在晨会上只放了一张幻灯片:沪深300 ETF 的 ticker plant 已经连续运行 19 个月没有漏一条 tick。那张图背后只有一件基础设施:三节点 Kafka 集群、按 symbol 做 partition key、replication factor 3、 min.insync.replicas=2 ,再加一个「处理...
打开 →Hook 周一下午四点收盘后,私募研究服务器上挂着两份待跑的任务:先把 100 只沪深300 成分股最近 30 个交易日的日线从米筐风格接口同步下来,再用 100 万条蒙特卡洛路径给一张 510300.SH 看涨期权定价。一颗八核 CPU 跑了二十多分钟,T+1 风控报表迟迟出不来。问题不在算法,在于代码全程单线程。这两份任务该交给的并发原语其实不同:线程池...
打开 →某私募的固定收益研究员要把过去三个月的 10 年期中国国债收益率拉成时间序列,放进久期模型的样本。AKShare 的公开接口 ak.bond china yield 不要 token、本地能跑、数据按日更新——但研究 notebook 一旦在用户面前演示时撞上 429,整场会议就要等十分钟手动 retry。本课把 AKShare 调用包成一个 fetch y...
打开 →国内某私募衍生品桌的研究主管要在不动 Monte Carlo 引擎的前提下,对同一笔 CSI 300 ETF(510300.SH)4.30 行权价的欧式 call 跑三种 payoff——call、put、二元 digital。C++98 时代的答案是一棵 PayoffBase 指针继承树;C++11 之后的答案变成一行 lambda:把它直接传进 pric...
打开 →OMS、EMS 与交易系统架构 某五因子多空股票私募在多策略平台回测夏普 1.8(扣除模型化成本)。周一以 5 亿美元名义本金上线、通过国信证券执行,中信证券 PB 提供融资。三十个交易日后,实盘夏普 0.4。这不是单一 bug —— 它是回测忽略的每一层运营基础设施合并的滑点:目标组合差分延迟到 OMS;OMS 合规闸门拒绝 20% 转入覆盖;EMS 切片...
打开 →某私募的研究员把一个 Jupyter notebook 推过来:他们在沪深300成份股上扫了 500 万个 (S, K, σ, t) 参数组合,目标是给隐含波动率曲面拟合做敏感度分析。纯 Python + scipy.stats.norm.cdf 跑了 47 分钟,他要的是把这一步压到 5 分钟以内,但策略迭代仍然由他在 notebook 里驱动——研究员不...
打开 →周一开盘前一刻钟,你在私募的研究服务器上 merge 了一段对 mean price 的「无害重构」——只是把 sum(...) / len(...) 拆成两步,方便在中间加日志。脚本照常跑完,回测照常出图。下午两点你才发现 PnL 报表上 XYZ001.SH 的当日均价对不上:你在重构时把 sum 与 len 的参数搞反了,函数对所有非空输入都返回 1 。...
打开 →开场 某私募周四下午,团队为沪深300 ETF 期权准备了四个定价器口味——Black Scholes 看涨、Black Scholes 看跌、二叉树、蒙特卡洛。研究主管开了一次代码评审,发现生产代码里有一个 StrategyFactoryAbstract 抽象类、两个 AbstractPricerBuilder 子类、Confluence 上一张 60 行...
打开 →凌晨四点四十五,上海集合竞价开盘前两小时,你坐在 CFFEX 张江 COLO 机房旁的运维室。你是国内一家头部私募 Rust 团队的负责人,沪深300 ETF (510300.SH) 做市策略;L1、L2、L3 三课合并的成果是一个名为 trading engine 的可跑二进制,策略组的研究员要昨晚通宵回归的直方图报告。终端上滚出来的一行: tick to...
打开 →周四下午,你在 SZSE 福田 COLO 机房的运维终端前盯着沪深300 ETF 行情接入面板。3.5.2 L3 你亲手写了一个 SPSC 环,目的是让你之后读生产无锁代码时心里有底;但到了生产代码,你 99% 的场合会直接去用 crossbeam queue 。今早的事故复盘把原因摆得明明白白:兄弟基金的策略组自己搓了一个 MPMC 队列,在高竞争下漏掉了...
打开 →国内某头部 quant 在 CFFEX 数据中心做股指期货 colo 部署的基础架构 lead,正在 review 一名 junior engineer 的一行 patch。这行改动把策略事件计数器上的 std::mutex 删了——这个计数器是 dashboard 每秒读一次的指标。Engineer 的理由:「计数只增不减,热点路径上也从不读它。」PR 描...
打开 →国内某多空选股私募的资深研究员把一篇顶刊工作论文转给了基金经理:「作者在沪深300成分股范围内构造了一个基于净经营资产应计的因子,样本内夏普 1.8,t 值 2.4。是否纳入生产合成因子?」基金经理翻到方法论页只回了三行字:「三个问题。(1) 论文 t 值 2.4——文献已经发了大概 300 个这种因子,多重检验调整后的门槛是多少?(2) 用了断点宇宙断点和...
打开 →