3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
根据Ptrade官方API文档以及您的实际测试现象,关于Ptrade的Python版本和模块导入限制,具体解答如下:
根据Ptrade官方API文档(如get_history和get_price接口的返回说明),Ptrade底层实际上同时支持 Python 3.5 和 Python 3.11 两个版本。
但是,您当前所在的券商环境大概率部署的是 Python 3.5 版本。正如您所推测的:
注:部分券商的Ptrade环境可能已经升级到了 Python 3.11,在 3.11 环境下是可以正常使用 f-string 的。您可以向所属券商确认是否可以切换或升级环境。
sys 模块?无法导入 sys 并非因为 Python 版本过低,而是因为 Ptrade 运行在严格的安全沙箱(Sandbox)环境中。
为了保证量化服务器的安全,防止恶意代码破坏系统环境或读取其他用户的数据,Ptrade 屏蔽了绝大多数与操作系统底层交互的内置模块,包括但不限于:
sys(系统特定参数和函数)os(操作系统接口,部分功能受限)subprocess(子进程管理)官方文档在“关于持久化”一节中也明确提到:“涉及到IO(打开的文件,实例化的类对象等)的对象是不能被序列化的”,这侧面印证了其对底层资源的严格管控。
既然在 Python 3.5 环境下无法使用 f-string,建议您在编写策略时使用以下传统的字符串格式化方法:
方案一:使用 % 格式化(Ptrade官方示例中最常用的方式)
stock = '600570.SS'
amount = 100
log.info("买入股票: %s, 数量: %d" % (stock, amount))
方案二:使用 .format() 方法
stock = '600570.SS'
amount = 100
log.info("买入股票: {}, 数量: {}".format(stock, amount))
总结:
在编写 Ptrade 策略时,建议默认以 Python 3.5 的语法标准来编写,避免使用 3.6+ 的新特性(如 f-string、海象运算符 := 等)。同时,遵循平台的沙箱规则,不要尝试调用 sys 等系统级模块,而是完全依赖 Ptrade 提供的 API(如 log.info() 替代 print,get_research_path() 获取路径等)来实现业务逻辑。