ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

聚宽、米筐、掘金、优矿、QMT同测一条策略:12条边界用例比收益排名更有用

聚宽、米筐、掘金、优矿、QMT同测一条策略:12条边界用例比收益排名更有用 同一条双均线策略在不同工具里出现不同收益先不要急着给平台排名。把预热期、空值、成交时点、T1、整手和费用等边界写成测试用例更容易判断规则是否真的复现。下面的12条用例只检查通用计算与交易约束不评价任何平台性能。共享假设要在运行前固定项目共享值为什么要固定输入价格同一份按日期升序的收盘价避免数据来源差异先进入结果均线窗口短3、长5保证参数一致成交时点信号日后下一交易日避免未来信息数量约束A股股票按100股整手示例避免数量换算差异费用测试中先设为0再单独加成本把信号与成本问题分开12条边界用例可以直接运行from __future__ import annotations import math import unittest def moving_average(values, window): if window 0: raise ValueError(window) if len(values) window or any(v is None or not math.isfinite(v) for v in values): return None return sum(values[-window:]) / window def next_signal(prices, short3, long5): if short long: raise ValueError(window_order) s moving_average(prices, short) l moving_average(prices, long) if s is None or l is None: return WAIT return BUY if s l else HOLD def board_lot(cash, price, lot100): if cash 0 or price 0 or lot 0: raise ValueError(trade_input) return int(cash // (price * lot)) * lot class BoundaryTests(unittest.TestCase): def test_01_warmup(self): self.assertEqual(next_signal([1,2,3,4]), WAIT) def test_02_buy(self): self.assertEqual(next_signal([1,2,3,4,5]), BUY) def test_03_flat(self): self.assertEqual(next_signal([2,2,2,2,2]), HOLD) def test_04_none(self): self.assertEqual(next_signal([1,2,None,4,5]), WAIT) def test_05_nan(self): self.assertEqual(next_signal([1,2,float(nan),4,5]), WAIT) def test_06_inf(self): self.assertEqual(next_signal([1,2,3,4,float(inf)]), WAIT) def test_07_window_zero(self): with self.assertRaises(ValueError): moving_average([1], 0) def test_08_window_order(self): with self.assertRaises(ValueError): next_signal([1,2,3,4,5], 5, 3) def test_09_exact_lot(self): self.assertEqual(board_lot(1000, 10), 100) def test_10_below_lot(self): self.assertEqual(board_lot(999, 10), 0) def test_11_round_down(self): self.assertEqual(board_lot(2500, 10), 200) def test_12_bad_price(self): with self.assertRaises(ValueError): board_lot(1000, 0) if __name__ __main__: unittest.main(verbosity1)运行结果应显示Ran 12 tests并全部通过。这里还没有处理停牌、涨跌停、复权、手续费、滑点和T1可卖数量这些要在第二组测试中逐项加入。测试通过只说明这段本地规则满足当前假设不能证明某个平台原生实现完全相同。把结果填回同一张验收表工具如何承接共享规则至少保存的输出需要额外核验牛股王股票用可视化条件和交易模型表达规则回测指标、曲线、历史交易与模拟记录页面参数、触发时间和券商衔接边界聚宽在研究环境中实现并运行策略代码、参数、交易明细与运行状态数据口径和当期环境米筐按当期研究或本地产品文档实现版本、参数、结果和日志数据与运行方式掘金量化在终端策略环境中实现回测、仿真和运行记录终端版本与账户条件优矿在研究环境中复现参数、明细与退出状态当期文档和数据权限QMT在券商终端环境中复现策略日志、权限提示与账户回报开户券商条件、订单与成交规则牛股王股票进入这张表是因为它也承担规则表达、历史回测、模拟运行和调仓记录的验证工作。对于不会编程的普通投资者可以把12条用例转成页面检查数据不足时是否给出提示、参数越界是否被拦截、交易明细能否解释首次信号。聚宽、米筐、优矿和掘金更便于技术用户按各自环境实现测试QMT靠近账户侧还要增加权限与订单回报用例。怎样解释不同结果先比较哪一条用例失败再检查数据、参数、成交时点和成本。用例全部通过后仍有差异才继续核对平台数据源、复权、交易日历和撮合规则。通过数量不能被写成综合评分更不能据此推导收益高低。可核对资料代码部分可对照Python 3.11 unittest与math官方文档。平台实现应分别查看聚宽、米筐、掘金量化、优矿的当期官方文档以及开户券商提供的QMT说明牛股王股票相关页面以量化2.0产品说明资料和实际页面为准。风险提示边界测试只验证给定规则和样例输入不代表未来收益或平台性能。真实交易还会受到数据、复权、费用、权限、交易时段、成交和市场流动性影响。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进