🚀 AI 一键生成 ptrade 策略代码

如何在ptrade量化平台中使用Tushare获取金融数据?

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

问题描述

量化tushare三方库。

量化tushare三方库如何使用?

解决方案

ptrade 平台中的 Tushare 库简介

在量化交易中,数据是策略的核心。虽然 ptrade 平台本身提供了丰富的 API(如 get_historyget_fundamentals 等)来获取行情和财务数据,但有时开发者可能需要获取一些平台未提供的特色数据(如宏观经济数据、特定概念分类、新闻情绪等)。

根据 ptrade 官方文档的《支持的三方库》附录,ptrade 环境原生支持 tushare 库(版本 1.2.48)。这意味着您可以直接在策略代码中导入并使用 Tushare 来辅助您的量化策略。


如何在 ptrade 中使用 Tushare

1. 导入库与初始化 Token

Tushare 目前主要使用的是 Tushare Pro 接口,使用前需要注册并获取个人的 Token。在 ptrade 策略中,您可以在 initialize 函数中进行初始化。

import tushare as ts

def initialize(context):
    # 设置您的 Tushare Token (请替换为您自己的真实 Token)
    ts.set_token('your_tushare_token_here')
    # 初始化 pro 接口
    g.pro = ts.pro_api()
    
    g.security = '600570.SS'
    set_universe(g.security)

2. 在盘前获取 Tushare 数据

为了避免在盘中高频调用(如 handle_data)导致网络延迟或触发 Tushare 的频率限制,强烈建议在 before_trading_start 或通过 run_daily 定时在盘前获取所需数据

def before_trading_start(context, data):
    # 示例:获取前一交易日的北向资金每日资金流向
    # 注意:实际使用时需处理日期格式和节假日
    try:
        df = g.pro.moneyflow_hsgt(start_date='20231001', end_date='20231010')
        log.info("获取到的北向资金数据:\n%s" % df.head())
        # 将数据存入全局变量供盘中逻辑使用
        g.hsgt_data = df
    except Exception as e:
        log.error("Tushare 数据获取失败: %s" % e)

3. 结合 ptrade 交易 API 编写策略

下面是一个完整的示例框架:利用 Tushare 获取某些特定指标(此处以简单的每日指标为例),并在 handle_data 中结合 ptrade 的 order 函数进行交易。

import tushare as ts
import pandas as pd

def initialize(context):
    # 1. 初始化 Tushare
    ts.set_token('your_tushare_token_here')
    g.pro = ts.pro_api()
    
    # 2. 设置股票池
    g.security = '600570.SS'
    set_universe(g.security)
    
    # 3. 标识是否已获取数据
    g.data_ready = False

def before_trading_start(context, data):
    # 盘前获取 Tushare 数据
    # 假设我们通过 Tushare 获取该股票的每日基本面指标(如 PE, PB)
    # 注意 Tushare 的代码后缀与 ptrade 略有不同,Tushare 通常是 600570.SH
    ts_code = g.security.replace('.SS', '.SH').replace('.XSHG', '.SH')
    
    # 获取前一交易日的日期 (ptrade API)
    pre_date = get_trading_day(-1).strftime('%Y%m%d')
    
    try:
        df = g.pro.daily_basic(ts_code=ts_code, trade_date=pre_date)
        if not df.empty:
            g.pe_ratio = df['pe'].iloc[0]
            log.info("%s 昨日 PE 为: %s" % (g.security, g.pe_ratio))
            g.data_ready = True
        else:
            g.data_ready = False
    except Exception as e:
        log.error("Tushare 请求异常: %s" % e)
        g.data_ready = False

def handle_data(context, data):
    if not g.data_ready:
        return
        
    # 策略逻辑:如果 PE 低于 30,则买入;高于 50,则卖出
    current_position = get_position(g.security).amount
    cash = context.portfolio.cash
    
    if g.pe_ratio < 30.0 and cash > 10000:
        order_value(g.security, 10000)
        log.info("PE低于30,买入 %s" % g.security)
        g.data_ready = False # 避免当日重复下单
        
    elif g.pe_ratio > 50.0 and current_position > 0:
        order_target(g.security, 0)
        log.info("PE高于50,清仓 %s" % g.security)
        g.data_ready = False

使用 Tushare 的注意事项

  1. 网络请求与超时:Tushare 是通过 HTTP 请求获取在线数据的。在实盘或回测中,网络波动可能导致请求失败。务必使用 try...except 进行异常处理,避免策略因网络问题崩溃。
  2. 频率限制(Rate Limit):Tushare 接口有严格的积分和调用频率限制(如每分钟 N 次)。在 ptrade 中,切忌在 handle_data(尤其是分钟级或 tick 级)中调用 Tushare 接口,应尽量在 before_trading_start 中一次性拉取当日所需数据。
  3. 代码格式差异:ptrade 的股票代码后缀通常为 .SS(上交所)或 .SZ(深交所),而 Tushare 通常使用 .SH.SZ。在传参时需要进行字符串替换转换。
  4. 优先使用原生 API:对于基础的 K 线行情(get_historyget_price)和标准财务数据(get_fundamentals),建议优先使用 ptrade 自带的 API。自带 API 读取本地/内网数据,速度更快且无网络限制。Tushare 应作为特色数据的补充工具。