参数扫描:从脚本读取的维度与组合数上限

参数扫描就是回放中自动回测的“要扫描的参数”区块。每个维度是一个参数键加上一串逗号分隔的取值;引擎把它们展开为笛卡尔积,上限 400 种组合,再由前推分析在每一片上挑出最佳配置。

Senzoukria · 文档 · 更新于 2026 年 9 月


位置

位置
回放 → 自动回测 → “前推 —— 寻找最佳配置” → 要扫描的参数
默认维度
在读取脚本之前为 lookback 10、20、40 · stopTicks 20、40、80 · targetTicks 40、80、160(27 种组合)
硬上限
400 种组合(MAX_COMBOS);超过时运行会被拒绝,而不是被截断
选择标准
默认 SQN;另有盈利因子、每笔期望值或每笔 Sharpe

它做什么

一次扫描会把一套策略变成一个配置网格。每个维度是一个参数键和一串像“10, 20, 40”这样输入的取值。引擎在策略基础参数之上构建所有维度的笛卡尔积(expandSweep),然后在同一批 K 线上逐个运行每种组合,顺序执行,因此运行期间界面仍然可用。

在前推分析内部,该网格会在每一片的训练部分上重新评估;得分最佳的配置随后在该片中未参与选择的那一部分上接受测试。维度下方的计数器显示“{n} 种组合 × {folds} 片 —— 约 {duration}”,让你在按下运行之前就知道代价。

维度由脚本本身推荐。一个静态读取器(parametresLus)会扫描源码中的 params.get("key", default)、params["key"]、params.key ?? default,以及包裹 params 的单行 lambda 或箭头函数别名。C++ 脚本在 v1 ABI 中不暴露 params,因此不会为它们推荐任何维度。脚本从未读取过的键会显示警告:“此脚本从不读取“{key}”:扫描它只会得到完全相同的结果。”

设置

“要扫描的参数”区块及其上方前推行的控件
设置默认值它改变什么
切片数4(输入 2–12)连续且互不重叠的折数;每一折在其前段训练、在其后段测试
训练比例0.7(0.5–0.9,步长 0.05)每一片中用于选定配置的比例;其余部分是样本外测试
选择标准SQN用于给组合排序的分数:SQN、盈利因子、每笔期望值或每笔 Sharpe。毛盈亏被有意排除在外
维度键 / 取值lookback、stopTicks、targetTicks,各三个取值每个参数一行;空的或非数值的条目会被静默丢弃
添加一个参数添加脚本读取的、尚未被任何维度使用的下一个参数,并附带推荐取值;否则添加一个空行
探索所有可读参数(n)把维度替换为从脚本读取的最多五个参数,取值围绕它们的默认值
移除此参数删除该维度行
最少交易笔数10(引擎常量)交易少于该数量的配置得分为 −∞,永远不会被选中

推荐取值是如何构建的

  • 默认值为 ≥ 2 的整数被视为窗口或计数:推荐值为一半、默认值和两倍(20 → 10、20、40)。
  • 位于 ]0, 1] 的默认值被视为比例:±0.1,并严格保持在 0 与 1 之间。
  • 其他任何数字都被视为系数:±25 %,保留两位小数。
  • qty、color 和 colour 永远不会被推荐:数量只会放大结果,而不改变任何决策。你仍然可以手动输入它们。
  • 默认按脚本读取参数的顺序推荐三个维度;闪电按钮可把它扩展到五个。

局限与陷阱

400 组合的上限不是一项性能设置。面板直说:每增加一种组合,就是在同一批数据上多抽一次;超过这个点,你衡量的是一次过拟合的运气,而不是一套策略。请收窄取值范围,或一次少扫几个参数。

读取器是静态的。它看不到在运行时拼出的键(params.get("hmm" + suffix))或对字典的遍历;这类参数必须手动输入。反过来,一旦你编辑了维度,它们就不再跟随脚本;“重新读取脚本”操作会把控制权交还。

传给去膨胀 Sharpe 的试验次数是组合数,而不是 组合数 × 切片数;干净地做验证不会被算作你的负担。关于这个计数如何进入 PSR、DSR 和 PBO,请参阅过拟合检验页面。

其他语言版本

常见问题

为什么我的扫描对每种组合都返回相同结果?
被扫描的键没有被脚本读取。面板现在会标记这一点(“此脚本从不读取…”);请换成从源码推荐的参数之一,或在你的脚本中加上相应的 params.get 调用。
我能通过跑两次来扫描超过 400 种组合吗?
可以,但每一次运行都是在同一批 K 线上多做一组抽取,而去膨胀 Sharpe 只知道当次运行的试验次数。这个上限的存在是为了让修正保持诚实;请优先用更少的维度、更大的步长。
扫描是并行运行的吗?
不是。引擎逐个运行各种组合并实时报告进度,因此在处理网格的过程中面板仍然可读。组合数旁边显示的估计时间,是为了让你在开始前规划这次运行。