问题描述
日志里面有成交,但模拟账户没有变动,K 线也出不来,可能是什么原因?谢谢
解决方案
遇到 QMT 平台中“日志有成交,但模拟账户无变动且 K 线不显示”的问题,通常是由于运行模式选择错误、账号绑定遗漏或图表输出配置不当引起的。以下是详细的排查步骤和解决方法:
1. 检查运行模式(回测 vs 运行)
QMT 平台分为“回测”和“运行”两种模式:
- 回测模式:点击“回测”按钮,策略会基于历史数据运行,调用的是虚拟账号。此时日志里打印的成交是历史回测的撮合结果,不会反映在您的模拟交易账户或实盘账户中。
- 运行模式:点击“运行”按钮,策略会根据实时行情驱动。如果您希望模拟账户有变动,必须确保策略处于“运行”模式,并且在“模型交易”中将其设置为“实盘/模拟”状态。
2. 检查资金账号是否正确绑定
如果在模拟/实盘模式下账户依然没有变动,请检查代码中是否正确设置了交易账号。在 init 函数中必须调用 ContextInfo.set_account() 绑定您的模拟资金账号,并且在下单函数(如 passorder)中传入正确的账号。
正确示例:
def init(ContextInfo):
# 绑定您的模拟资金账号
ContextInfo.account = '您的模拟账号ID'
ContextInfo.set_account(ContextInfo.account)
def handlebar(ContextInfo):
# 下单时传入正确的账号
passorder(23, 1101, ContextInfo.account, '000001.SZ', 5, -1, 100, ContextInfo)
3. 排查 K 线不显示的原因
K 线或指标无法在图表上显示,通常有以下几个原因:
- 未补充历史数据:QMT 是基于本地数据驱动的。请前往【数据管理】补充对应品种和周期的历史数据。
- 未调用绘图函数:如果希望在主图或副图上看到策略生成的信号或指标线,必须在
handlebar中调用ContextInfo.paint()函数。例如:ContextInfo.paint('my_indicator', value, -1, 0)。 - 运行位置设置错误:在策略编辑器的【基本信息】中,检查“位置”是否设置正确(主图、主图叠加或副图)。如果在非行情界面点击运行,策略会默认使用基本信息中设置的“默认品种”和“默认周期”,如果这些没有设置,图表可能无法正常渲染。
总结建议
- 确认点击的是运行而不是回测。
- 检查
init中是否写了ContextInfo.set_account('模拟账号')。 - 检查【数据管理】中是否下载了该股票的 K 线数据。
- 确保在行情界面(主图)下启动策略,或者在策略参数中指定了正确的默认品种。