3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在量化交易中,数据是策略的核心。虽然 ptrade 平台本身提供了丰富的 API(如 get_history、get_fundamentals 等)来获取行情和财务数据,但有时开发者可能需要获取一些平台未提供的特色数据(如宏观经济数据、特定概念分类、新闻情绪等)。
根据 ptrade 官方文档的《支持的三方库》附录,ptrade 环境原生支持 tushare 库(版本 1.2.48)。这意味着您可以直接在策略代码中导入并使用 Tushare 来辅助您的量化策略。
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)
为了避免在盘中高频调用(如 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)
下面是一个完整的示例框架:利用 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
try...except 进行异常处理,避免策略因网络问题崩溃。handle_data(尤其是分钟级或 tick 级)中调用 Tushare 接口,应尽量在 before_trading_start 中一次性拉取当日所需数据。.SS(上交所)或 .SZ(深交所),而 Tushare 通常使用 .SH 和 .SZ。在传参时需要进行字符串替换转换。get_history、get_price)和标准财务数据(get_fundamentals),建议优先使用 ptrade 自带的 API。自带 API 读取本地/内网数据,速度更快且无网络限制。Tushare 应作为特色数据的补充工具。