Eugen Soloviov
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.
Articles
保真度关卡:由粗到细的回测会更快地愚弄你——除非廉价代理的排序方式与昂贵评估一致
下钻式/多保真度搜索(ASHA、逐次减半、Hyperband)以低成本方式筛选成千上万个配置,只将存活者提升到昂贵的完整评估阶段。这是一种真实的加速——但如果低保真度的排序与高保真度的排序不一致,它就会悄无声息地崩溃。我们测量了折数-排序相关性:在只用一折时,Spearman ρ 可能低至 0.03(排序几乎是随机的),随着折数累积,逐步升高到 0.43、0.67、0.78、0.91。修复方法是设置一道强制性关卡——先测量 ρ(廉价, 完整),并自动将最低保真度提升到 ρ ≥ 0.5 的第一个档位。
随机搜索 vs 智能搜索:交叉点在评估成本,而非算法本身
当单次回测很便宜时,简单的打乱 Sobol 序列在原始吞吐量上碾压所有"智能"采样器——TPE、CMA-ES、ASHA 要缴纳 Python ask/tell 税,导致速度下降 20 倍,在相同墙钟时间内评估的点数远远更少,因而落败。让每次评估变得昂贵(多时间框架 + walk-forward 折)之后,交叉点就翻转了。我们测量了这两种情形,以及为什么折叠排名保真度(ρ@1 从 0.03 升至 0.43)是剪枝能否奏效的前提条件。
双轴参数空间:为什么你的大部分参数扫描几乎是免费的
并非所有参数的搜索成本都相同。一个策略的参数会分裂为一条昂贵轴(指标——需要在整个序列上重新计算)和一条廉价轴(决策阈值——对预计算信号做一次 O(n) 遍历)。由于指标对阈值不变,你只需计算一次,就能以约 5,600 cfg/s 的速度扫描数千种阈值配置——比每种配置都重新计算大约便宜 1,600 倍。这是对维度灾难的一次重新定价。
框架税:当你的回测库比手写的 pandas 循环还慢
我们在同一个参数扫描任务上对八个回测引擎进行了基准测试——15万根K线、80个HMA交叉组合、交易笔数严格锁定在2707笔。两个最受欢迎的事件驱动框架的速度居然比手写的 pandas 循环还慢,而一个向量化/编译型引擎完成同样的工作快了约13000倍。这是一篇关于主流库从未被设计用来摊销的逐K线开销的研究。
回测过拟合概率(PBO):你的搜索跑赢抛硬币了吗?
Deflated Sharpe Ratio 给获胜策略定价;PBO 给挑出它的那次搜索定价。组合对称交叉验证(Combinatorially Symmetric Cross-Validation)在一个 1000x200 的表现矩阵上跑 C(16,8) = 12,870 次训练/测试切分,问的是:样本内赢家会不会落入样本外的后一半?几乎每个人都会看错的地方——PBO 的零假设值是 0.5,不是 1。在 200 个零优势策略上,最佳样本内年化夏普比率 1.98 在样本外坍缩到 0.06,PBO = 0.476:如同抛硬币,彻底过拟合。植入一个真实优势(年化夏普比率 2.38),PBO 降到 0.001,样本内的 3.73 在样本外仍保住 2.34。在纯随机游走上跑移动平均线网格,同样没有任何样本外的技巧——60 个矩阵平均 PBO 0.463,在统计上和零假设无法区分——而在其中一个具有代表性的矩阵上,这场海市蜃楼十分鲜明:最佳样本内夏普比率 2.33 坍缩到样本外中位数 -0.22,PBO 0.573,63% 的概率会亏钱。
IPC 税:把回测引擎放到 socket 背后会损失 13%——而这几乎与 socket 无关
我们把一个 numba 回测内核逐行移植到 Rust,并以四种方式跨进程边界调用它,用等价性校验确认到最后一笔交易都完全一致的 PnL。把整条 1.2 MB 的价格序列通过 Unix socket 传输一次,成本约 2 毫秒——约占整个任务耗时的 0.1%。对同一份数据做 JSON 编码,成本是原始字节的 1348 倍;健谈式的逐组合调用把数据重复传输了 80 次;逐 bar 调用模式会在一个 2.0 秒的任务上白白付出 2.1 秒的纯 IPC 开销。边界本身很便宜,税出在你如何跨越它。
Deflated Sharpe Ratio:你回测里的'赢家',有多少能扛过多重检验?
参数搜索是一台制造运气的机器。在纯噪声上——1,000 个真实优势为零的策略——最佳年化夏普比率平均达到 1.63,朴素显著性检验 100% 的时候都会宣布发现。我们构建受控的真实基准,证明 Deflated Sharpe Ratio、Harvey-Liu 折价法与 White's Reality Check 能够恢复诚实:假发现率从 1.000 降到 0.001-0.057,噪声上限之上的真实优势仍以接近 1 的功效被保留——还有一个真实的陷阱(相关网格),在那里原始 DSR 会过度折损,其结论必须放在一整条有效试验数估计的区间上通读,而不是只看一个数字。
目标函数设计:你优化的那个指标,正悄悄替你选好了策略
要搜索'最好'的策略,你必须先定义什么是'最好'——而那个标量,会悄悄替你选出赢家。在带有已知优势的合成数据上(600 个种子,T=2000,80 个候选阈值),朴素的逐笔(per-trade)夏普比率会加冕一张彩票:它在 56% 的种子上选出曝光率低于 5% 的赢家,在 57% 的种子上发生退化——在最极端的那个种子上,8 笔交易的样本内夏普比率高达 21.09,样本外却崩塌到 0.13。诚实的修复几乎平淡无奇:在整条时间线上测量,它从不退化(样本外 1.71)。交易笔数(conf_k)收缩与曝光率下限可以给逐笔指标打补丁,但即便完全修复,它们也只能追平整条时间线夏普比率(1.70 对 1.71)——永远无法超过它。古德哈特定律,在回测里,配上受控的真实基准。
前视偏差:一根 K 线的错误如何从纯噪声中凭空制造出 15 的夏普比率
一项对细微前视泄漏如何悄然抬高回测表现的受控研究。在完全没有真实优势的情况下,同 K 线成交从纯噪声中制造出 +14.8 的年化夏普比率;提前一根 K 线窥视指标则制造出 +4.8。本文给出完整分类、实测量级,以及在它耗费你真金白银之前如何检测每一种泄漏。
回测引擎速度阶梯:笔记本 CPU 上 298 倍提速,PnL 精确到最后一笔交易
对同一个 80 组合参数扫描的五种实现,全部验证产出完全相同的 PnL:pandas 的 rolling.apply 耗时 69.9 秒,numpy 3.1 秒,numba 2.0 秒,并行 numba 0.23 秒——在一台 Apple M2 Max 上、硬件零改动,实测提速 298 倍,即便相对一个称职的向量化基准也仍快约 13 倍。每一级阶梯到底带来了什么、为什么 GPU 不是那块缺失的拼图,以及海量参数搜索中真正的瓶颈藏在哪里。
researcher:面向人类与 AI 智能体的可搜索量化研究档案库
我们如何构建 researcher.marketmaker.cc —— 一个统一的、支持全文搜索的量化研究档案库(arXiv 论文、GitHub 仓库、量化博客、TradingView Pine 脚本),人类可以浏览,AI 智能体可以通过 MCP 查询。
algo-investor-skills:用 Claude Code 技能打造经得起骗局质疑的投资人方案
深入解读 algo-investor-skills —— 一套 Claude Code 技能,能把一个算法交易策略从原始的实测事实,一路打造成经过审计、以诚实为先的投资人方案。六个可组合的技能、一个金融模型引擎、一套独立验证的证明包,以及一道绝不编造任何数字的强制性怀疑型投资人审计关卡。