问题描述
【2024-04-08 16:12:54.637】 0D:\qmt\python\新建策略文件.py_SH00030032SyntaxError:(unicode error) 'utf-8' codec can't decode byte 0xbb in position 0: invalid start byte (<string>, line 13)
不知道是什么原因,求帮助
解决方案
在 QMT(迅投/国信)量化平台中遇到 SyntaxError: (unicode error) 'utf-8' codec can't decode byte 0xbb in position 0: invalid start byte 报错,通常是因为代码文件的编码格式与 Python 解释器预期的编码格式不匹配。特别是当你的代码中包含中文字符(如中文注释、中文打印输出等)时,最容易触发此错误。
根据 QMT 官方 API 文档的规范,QMT 统一脚本的编码格式是 GBK。
解决办法
你只需要在你的 Python 策略代码的**最前一行(第一行)**加上编码声明即可:
#coding:gbk
或者
#encoding:gbk
完整示例
修改后的代码结构应该如下所示:
#coding:gbk
def init(ContextInfo):
# 初始化函数
print("策略初始化成功")
ContextInfo.set_universe(['000300.SH'])
def handlebar(ContextInfo):
# 盘中运行函数
print("当前运行到K线索引:", ContextInfo.barpos)
补充排查步骤
如果加上 #coding:gbk 后仍然报错,请检查以下几点:
- 确保声明在第一行:
#coding:gbk必须放在文件的绝对第一行,前面不能有任何空行或其他注释。 - 检查外部编辑器编码:如果你是在 QMT 自带的【策略编辑器】之外(例如使用 VSCode、PyCharm 等)编写的
.py文件,然后导入到 QMT 中,请确保在外部编辑器中将文件保存为 GBK 编码(或 ANSI 编码),而不是 UTF-8。 - 重新编译运行:修改代码并添加编码声明后,记得点击编辑器上方的“编译”按钮保存策略,然后再点击“运行”或“回测”。