🚀 AI 一键生成 ptrade 策略代码

PTrade 研究工具:使用 Seaborn 绘制高级策略分析图表

ptrade | 发布时间: 2025/12/23
以下内容由 EasyQuant 生成。

问题描述

如何用 Seaborn 画图分析策略结果?

解决方案

在 PTrade 量化交易平台中,Seaborn 是一个基于 Matplotlib 的高级数据可视化库,非常适合在 研究(Research) 环境中对策略的回测结果、历史行情或因子数据进行统计分析。

通常,我们在“回测”模块生成交易记录,然后在“研究”模块中提取数据并画图分析。

以下是如何在 PTrade 研究环境中使用 Seaborn 进行策略结果分析的完整流程和代码示例。

核心步骤

  1. 获取数据:使用 get_price 获取标的的历史数据(模拟策略净值)和基准数据。
  2. 数据处理:计算日收益率、累计收益率等指标。
  3. 绘图分析
    • 收益分布图 (Histogram/KDE):分析策略收益的波动性和肥尾特征。
    • 累计收益曲线 (Line Plot):对比策略与基准的走势。
    • 相关性热力图 (Heatmap):分析策略与大盘的相关性。

PTrade 研究环境代码示例

您可以将以下代码直接复制到 PTrade 的 研究(Notebook) 单元格中运行。

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt

# 1. 设置绘图风格
#设置风格为 darkgrid,适合金融数据展示
sns.set_theme(style="darkgrid") 
# 处理中文显示问题 (根据PTrade环境不同,可能需要调整字体,这里使用通用设置)
plt.rcParams['font.sans-serif'] = ['SimHei'] 
plt.rcParams['axes.unicode_minus'] = False

# 2. 获取数据 (模拟策略分析场景)
# 假设我们要分析 '600570.SS' (恒生电子) 作为策略标的,对比 '000300.SS' (沪深300)
# 获取过去 250 个交易日的数据
stock_code = '600570.SS'
benchmark_code = '000300.SS'
count = 250

# 使用 PTrade API 获取收盘价
df_stock = get_price(stock_code, count=count, frequency='1d', fields=['close'])
df_bench = get_price(benchmark_code, count=count, frequency='1d', fields=['close'])

# 3. 数据处理
# 提取收盘价列并重命名
data = pd.DataFrame({
    'Strategy': df_stock['close'],
    'Benchmark': df_bench['close']
})

# 计算日收益率 (Pct Change)
returns = data.pct_change().dropna()

# 计算累计收益率 (Cumulative Returns)
cum_returns = (1 + returns).cumprod() - 1

# 4. 使用 Seaborn 进行可视化分析

# --- 图表 1: 收益率分布分析 (直方图 + 核密度估计) ---
plt.figure(figsize=(12, 6))
plt.title('日收益率分布对比 (Daily Returns Distribution)', fontsize=14)
# 绘制策略收益分布
sns.histplot(returns['Strategy'], kde=True, stat="density", color="blue", label='Strategy', alpha=0.4)
# 绘制基准收益分布
sns.histplot(returns['Benchmark'], kde=True, stat="density", color="red", label='Benchmark', alpha=0.4)
plt.legend()
plt.show()

# --- 图表 2: 累计收益趋势对比 (折线图) ---
plt.figure(figsize=(12, 6))
plt.title('累计收益率趋势 (Cumulative Returns)', fontsize=14)
# Seaborn lineplot 需要长格式数据(Long Format)或直接传入 Series
sns.lineplot(data=cum_returns)
plt.ylabel('Cumulative Returns')
plt.xlabel('Date')
plt.show()

# --- 图表 3: 收益相关性热力图 (Heatmap) ---
plt.figure(figsize=(8, 6))
plt.title('策略与基准相关性矩阵 (Correlation Matrix)', fontsize=14)
# 计算相关系数矩阵
corr_matrix = returns.corr()
# 绘制热力图,annot=True 显示数值,cmap='coolwarm' 设置冷暖色调
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm', vmin=-1, vmax=1, square=True)
plt.show()

# --- 图表 4: 联合分布图 (Jointplot) ---
# 用于观察策略收益与基准收益的回归关系
g = sns.jointplot(x="Benchmark", y="Strategy", data=returns, kind="reg", height=8, color="m")
g.fig.suptitle('策略 vs 基准 回归分析', y=1.02, fontsize=14)
plt.show()

代码解析

  1. 数据准备

    • 利用 get_price 获取了股票和指数的收盘价。在实际策略分析中,您可以将 df_stock 替换为您回测产生的实际净值序列。
    • 计算了 pct_change()(日涨跌幅)和 cumprod()(累计净值),这是量化分析的基础数据。
  2. 图表 1:收益分布 (histplot)

    • 作用:观察策略收益是否服从正态分布,是否存在“肥尾”现象(即极端行情发生的概率是否比正态分布高)。
    • Seaborn 优势kde=True 参数可以自动添加核密度曲线,直观展示概率密度。
  3. 图表 2:累计收益 (lineplot)

    • 作用:最直观的业绩展示,对比策略与基准的跑赢/跑输情况。
    • Seaborn 优势:自动处理时间序列索引作为 X 轴,且默认配色美观。
  4. 图表 3:相关性热力图 (heatmap)

    • 作用:分析策略是否只是简单的 Beta 收益(即随大盘涨跌)。如果相关性过高(接近 1),说明策略缺乏 Alpha(超额收益);如果相关性较低且收益为正,说明策略具有独特的抗风险能力。
  5. 图表 4:联合分布 (jointplot)

    • 作用:展示策略收益与基准收益的散点图,并拟合回归线。回归线的斜率近似于策略的 Beta 值。

常见问题 (Q&A)

Q: 为什么在 PTrade 中中文显示为方框?
A: 这是因为 Matplotlib 默认字体不支持中文。代码中 plt.rcParams['font.sans-serif'] = ['SimHei'] 是用来指定黑体字体的。如果 PTrade 服务器未安装 SimHei,可以尝试使用 Microsoft YaHeiWenQuanYi Micro Hei,或者直接使用英文标签以避免乱码。

Q: 如何分析策略的最大回撤?
A: Seaborn 主要用于统计绘图。计算回撤通常先通过 Pandas 计算 drawdown = (cum_returns + 1) / (cum_returns + 1).cummax() - 1,然后使用 sns.lineplot 绘制回撤区域图(fill_between 效果在 Matplotlib 中实现更方便,但 Seaborn 也可以画线)。

Q: 这段代码可以在“回测”模式的 handle_data 中运行吗?
A: 不建议。handle_data 是逐根 K 线运行的,频率极高。绘图操作非常耗时,会严重拖慢回测速度,且回测日志中无法交互式查看图表。请在回测结束后的 “研究” 模块中运行此代码。