3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在Ptrade量化平台进行策略回测时,遇到“Error:回测运行失败, 错误码: 2 错误信息:可用内存不足,请稍后再创建”的报错,通常是由于您的策略在运行过程中消耗了过多的服务器内存资源,或者当前平台整体资源较为紧张导致的。
以下是导致该问题的常见原因及相应的解决方法:
set_universe 设置了全市场几千只股票,并在 handle_data 中频繁获取所有股票的历史行情(如 get_history 或 get_price)。g 中,且未及时清理,导致内存泄漏。get_index_stocks)缩小 set_universe 的范围。handle_data 中,只获取当前需要计算的股票数据,避免每次都拉取整个股票池的深历史数据。get_history 或 get_price 时,可以设置 is_dict=True。文档指出:“返回为字典格式取数速度相对较快”,且在某些情况下比生成庞大的 DataFrame/Panel 更节省内存开销。g 中缓存数据,请在数据使用完毕后及时将其删除(使用 del 关键字)或重置为空。不推荐的写法(容易导致内存不足):
def handle_data(context, data):
# 每次都获取全市场股票过去100天的分钟数据,极其消耗内存!
his = get_history(100, '1m', 'close', security_list=g.all_stocks)
g.history_data = his # 还存入全局变量,内存持续占用
推荐的写法(按需获取,及时释放):
def handle_data(context, data):
# 仅获取需要的少量数据
his = get_history(5, '1d', 'close', security_list=g.target_stocks, is_dict=True)
for stock in g.target_stocks:
if stock in his:
close_prices = his[stock]['close']
# 进行逻辑计算...
# 局部变量在函数执行完毕后会自动释放,无需存入 g 对象
通过合理管理数据请求和内存使用,可以有效避免“可用内存不足”的报错,提高回测效率。