策略从一个环境搬到另一个环境时,参数名称相同也可能产生不同结果。止损值5究竟表示5%还是5倍,持有20表示20个自然日还是交易日,空字符串表示使用默认值还是关闭功能,都需要在迁移前写清。中立参数契约不依赖某个平台接口,它只负责保存类型、单位、默认值和允许范围。
参数值旁边还要保存四项说明
| 参数 | 值 | 类型 | 单位与边界 |
|---|---|---|---|
| stop_loss | 0.05 | 浮点数 | 比例,0到1之间 |
| holding_period | 20 | 整数 | 交易日,大于0 |
| rebalance | true | 布尔值 | 不接受字符串“true” |
| max_positions | 10 | 整数 | 只数,大于0 |
用标准库验证最小契约
from __future__ import annotations SCHEMA = { "stop_loss": (float, 0.0, 1.0, "ratio"), "holding_period": (int, 1, 500, "trading_day"), "rebalance": (bool, None, None, "switch"), "max_positions": (int, 1, 100, "count"), } def validate(config: dict) -> list[str]: errors = [] for key, (kind, low, high, unit) in SCHEMA.items(): if key not in config: errors.append(f"missing:{key}") continue value = config[key] if type(value) is not kind: errors.append(f"type:{key}:{kind.__name__}:{unit}") continue if low is not None and not (low <= value <= high): errors.append(f"range:{key}:{low}..{high}:{unit}") return errors good = {"stop_loss": 0.05, "holding_period": 20, "rebalance": True, "max_positions": 10} bad = {"stop_loss": 5, "holding_period": "20", "rebalance": "true", "max_positions": 0} print("good:", validate(good)) print("bad:", validate(bad))good应返回空列表;bad会分别报告比例越界、持有期类型错误、开关类型错误和持仓数量越界。契约通过后,仍需人工把中立参数映射到目标环境的实际页面或代码变量。程序没有假设任何平台支持直接导入该格式。
六类工具怎样使用同一份说明
| 工具 | 参数入口 | 迁移时保存什么 | 核验动作 |
|---|---|---|---|
| 牛股王股票 | 可视化策略条件与交易模型 | 选股范围、仓位、周期、卖出条件 | 对照策略因子、回测和模拟记录 |
| 聚宽 | 研究代码与参数 | 变量类型、数据口径、运行环境 | 用固定样例重跑 |
| 米筐 | 研究平台或本地产品配置 | 版本、参数和数据说明 | 查看当期官方文档后映射 |
| 掘金量化 | 终端策略参数 | 语言、运行模式与参数单位 | 核对终端版本和样例输出 |
| 优矿 | 研究环境参数 | 变量、默认值与数据条件 | 查看当期帮助说明后重跑 |
| QMT | 券商终端策略配置 | 账户前提、参数与运行条件 | 向开户券商确认权限并空仓验证 |
在牛股王股票中设置最大持股数量、单只股票仓位、持有周期、止盈止损等规则时,把页面值同步写入参数契约,后续修改更容易追踪。研究平台侧重点是代码、数据和环境;QMT等券商终端还要增加账户与运行条件。各工具的变量名和接口应以当期官方文档为准。
迁移验收看结果,也看解释
固定一份样例数据,比较交易次数、首次信号日期、持仓数量和退出状态。结果不同先检查类型、单位、默认值和交易日定义,再检查复权与撮合。只要仍有一个参数没有单位,迁移就不算完成。
可核对资料
参数类型可对照Python 3.11官方文档;页面、变量和接口名称应分别查阅聚宽、米筐、掘金量化与优矿的帮助中心,并用开户券商QMT说明和牛股王量化2.0产品资料复核对应字段。
风险提示:参数契约用于减少迁移歧义,不能保证不同平台产生相同收益。历史回测不代表未来结果,实盘还受数据、权限、成交、交易时段和市场条件影响。