量化概念 19:收益率与年化(单期到多期,时间加权与资金加权)
收益率是量化里最基础的指标,也是最容易算错的。单期收益直接除,年化用复利连乘(月 2% 年化是 26.8% 不是 24%),多期有资金进出时用时间加权(评价策略)或资金加权 IRR(评价实盘)。回测报告统一用时间加权 + 复利年化,和基金净值口径一致。
收益率是量化里最基础的指标,也是最容易算错的。单期收益直接除,年化用复利连乘(月 2% 年化是 26.8% 不是 24%),多期有资金进出时用时间加权(评价策略)或资金加权 IRR(评价实盘)。回测报告统一用时间加权 + 复利年化,和基金净值口径一致。
一个服务刚上线,没用户,没登录。调用方都是内部系统,相互信任——IP 白名单就够了。 后来用户来了。要区分谁是谁。再后来有管理员、有普通用户、有只读用户。角色一多,权限判断就散在代码里——if user.role == 'admin' 写了二十遍,改一次要改二十个文件。 这时候你才开始看认证鉴权方案
回测到实盘的三座山:滑点让成交价变差,涨停跌停停牌让成交不了,容量让大资金买不动——回测里都是"默认不存在"。做法:回测时主动加滑点、打折成交率、估算容量,回测数字减去假设的水分,才是实盘真正能拿到的。
基准(benchmark)是衡量策略的尺子:策略收益减基准收益才是超额,尺子选错超额全是幻觉。基准要风格匹配、用全收益指数;超额质量看信息比率(IR)——稳定的小超额,胜过碰运气的大超额。跑赢谁,比赚了多少更重要。
一个服务每天往外吐几十 G 日志。你第一反应不是「换个压缩算法」,是「太大了,压一下」。 gzip -9 access.log,跑完一看,体积缩到十分之一。满意了。 后来日志量翻倍,gzip 跑一次要二十分钟。你开始想:能不能快点。 再后来上了 Kafka,消息要实时传。压缩不是在磁盘上慢慢压——每
争论里容易搅在一起的四样东西:事实、观点、立场、对错。大多数人以为自己在争事实,其实在争立场;以为自己有观点,其实只是站队。个人的一些零散想法,分享出来权当记录。
回测引擎的主线不是"跑得快"而是"把 A 股语义做对":自研 142 行撮合核心、价格口径必须自洽(后复权修掉除权日假跳变)、费用用 Decimal 精确到一分钱、验证逼出三个 bug——以及 Rust 为什么最终没有写(50 票实测 0.3 秒,全市场按线性外推约 30 秒)。
个人量化系统的存储选型:先刻画数据特征,再推导方案——行情/因子用 parquet、财务/任务用 SQLite、元数据用 JSON。不选择什么比选择什么更重要:DuckDB、PostgreSQL 被排除的理由,以及它们的触发条件。
调用一个外部服务失败了,第一反应是再试一次。这个直觉没错,但「再试一次」从一句代码到生产可用的重试策略,中间隔着好几层坑——每一层都是被上一层的代价逼出来的。 起点:固定次数重试 最直觉的做法:失败就重试,重试 N 次,还不行就放弃。 for i in range(3): try: return c
限流是个听起来很简单的问题:请求太多,挡一挡就行。但真到实现的时候,你会发现「怎么挡」的答案一直在变——被业务规模一层层逼着升级。 起点:固定窗口计数器 最直觉的方案:在内存里记一个计数器,当前这一秒来了多少请求,超过阈值就拒。 伪代码,不是让你抄 counter = 0 windowstart =