问题描述
回测中使用get_price取值后发现中间的数值都被省略号挡住,看不到具体实际的数值?
解决方案
在 ptrade 平台中,get_price 和 get_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))
注意事项
- 性能影响:如果获取的数据量非常大(例如几千行),解除限制后全部打印到日志中可能会导致日志文件过大,甚至引起浏览器前端卡顿。建议在调试完毕后,将
pd.set_option('display.max_rows', None)改回默认值,或者仅打印头部/尾部数据(如log.info(price_df.head(10)))。 - 字典格式返回:如果你只是为了提高取数速度并在代码内部处理,不需要打印 DataFrame,可以在调用
get_price时传入is_dict=True,这样返回的将是字典格式,取数速度更快。