我用社区版跑了回测,数据是用AI下载导入的,但是跑模拟的话用不了这些数据,然后开了几天都没有一个交易,不知道是不是数据的问题还是什么问题,但很大几率是数据问题,想问下各位大佬,你们跑模拟的时候有没有这个问题?
我用社区版跑了回测,数据是用AI下载导入的,但是跑模拟的话用不了这些数据,然后开了几天都没有一个交易,不知道是不是数据的问题还是什么问题,但很大几率是数据问题,想问下各位大佬,你们跑模拟的时候有没有这个问题?
我来帮你分析一下这个问题。回测数据和模拟交易(实盘模拟)使用的数据机制确实不同,让我先查询一下相关文档。
根据文档资料,我来帮你分析这个问题。这是一个很常见的误区,回测数据和模拟交易使用的数据机制确实不同。
| 场景 | 数据来源 | 触发方式 |
|---|---|---|
| 回测 | DataManager 导入的历史数据 | 程序逐根回放历史 K 线 |
| 模拟交易 | 需要实时行情推送 | 收到实时 Tick/Bar 触发 on_tick/on_bar |
关键点:你导入的历史数据只能用于回测和策略初始化计算指标,模拟交易必须有实时行情推送才能触发交易逻辑。
根据官方文档,模拟交易(Paper Account)没有交易通常是因为:
(1)没有订阅行情
"在对某一合约进行下单和撤单操作前,用户必须先订阅该合约的行情" ——
paper_account.md
(2)策略初始化问题
"如果策略内用到了 K 线时间序列管理模块(ArrayManager)来计算变量指标的值,那么请确保历史数据的长度足够 ArrayManager 进行初始化(默认的 ArrayManager 需要 100 条数据才能初始化成功)" ——
cta_strategy.md
如果 ArrayManager 没有初始化成功,策略逻辑会在 if not am.inited 处直接返回,不会走到发单逻辑。
(3)没有配置数据服务
模拟交易时策略初始化需要调用 load_bar 加载历史数据:
"如果接口不提供历史数据,则通过配置的数据服务获取...如果没有配置数据服务,则通过访问本地数据库查询" ——
cta_strategy.md
如果你要做模拟交易,需要先有实时行情数据源。社区版可以使用 DataRecorder 模块录制行情:
在 CtaStrategy 界面观察:
inited 是否为 True —— 确认初始化完成在 VeighNa Trader 主界面:
vt_symbol 是否与查询结果一致(注意大小写、交易所后缀)你的问题大概率不是数据导入的问题,而是:
建议先用 DataRecorder 录制几天数据,或者连接 CTP 模拟盘获取实时行情,再进行模拟交易测试。
参考文档:
cta_strategy.md - CTA 策略初始化说明paper_account.md - 模拟交易模块说明data_recorder.md - 实盘行情记录模块说明