🚀 AI 一键生成 ptrade 策略代码

解决 ptrade 中 get_price 返回数据被省略号截断的问题

ptrade | 发布时间: 2026/5/22
以下内容由 EasyQuant 生成。

问题描述

get_price取值被省略号挡住?

回测中使用get_price取值后发现中间的数值都被省略号挡住,看不到具体实际的数值?

解决方案

在 ptrade 平台中,get_priceget_history 等函数返回的数据类型通常是 pandas.DataFrame。当你使用 log.info()print() 打印这些数据时,如果数据行数或列数较多,pandas 默认的显示机制会将其截断,中间的数据就会用省略号(...)代替。

要解决这个问题,你只需要在策略代码中导入 pandas 库,并修改其默认的显示设置即可。

解决方法

在策略的开头(或者 initialize 函数中),添加以下代码来解除 pandas 的显示限制:

import pandas as pd

# 显示所有列
pd.set_option('display.max_columns', None)
# 显示所有行
pd.set_option('display.max_rows', None)
# 设置显示宽度,防止数据被折行显示
pd.set_option('display.width', 1000)

完整的 ptrade 策略示例

import pandas as pd

def initialize(context):
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 修改 pandas 打印设置,解除省略号限制
    pd.set_option('display.max_columns', None)
    pd.set_option('display.max_rows', None)
    pd.set_option('display.width', 1000)

def handle_data(context, data):
    # 获取过去 50 天的历史数据
    price_df = get_price(g.security, count=50, frequency='1d')
    
    # 此时打印的数据将完整显示,不再有省略号
    log.info("\n" + str(price_df))

注意事项

  1. 性能影响:如果获取的数据量非常大(例如几千行),解除限制后全部打印到日志中可能会导致日志文件过大,甚至引起浏览器前端卡顿。建议在调试完毕后,将 pd.set_option('display.max_rows', None) 改回默认值,或者仅打印头部/尾部数据(如 log.info(price_df.head(10)))。
  2. 字典格式返回:如果你只是为了提高取数速度并在代码内部处理,不需要打印 DataFrame,可以在调用 get_price 时传入 is_dict=True,这样返回的将是字典格式,取数速度更快。