3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
是的,ptrade 完全支持公募 REITs(基础设施公募REITs基金)的量化交易与回测。
作为近年来备受关注的创新投资品种,公募 REITs 兼具股债特性。在 ptrade 中,官方提供了专门的 API 接口 get_reits_list,方便开发者一键获取沪深两市所有的公募 REITs 代码列表,并结合行情接口进行多因子筛选与自动化交易。
用于获取指定日期沪深市场的所有公募 REITs 基金代码列表。
date (str):查询日期,格式为 YYYYmmdd(例如 '20230403')。date 参数,默认取当前回测周期的历史日期(即 context.current_dt);在研究和交易中,默认取当天日期。list[str]),例如:['180101.SZ', '180102.SZ', ..., '508099.SS']。以下是一个完整的 ptrade 策略示例。该策略在每天尾盘(14:50)自动获取全市场公募 REITs 列表,计算它们的 5 日均线,并采用简单的均线突破策略进行轮动交易。
# -*- coding: utf-8 -*-
def initialize(context):
# 设置基准为沪深300
set_benchmark('000300.SS')
# 每天 14:50 运行一次 REITs 交易逻辑
run_daily(context, trade_reits, time='14:50')
def trade_reits(context):
# 1. 获取当前交易日全市场所有的公募 REITs 代码
reits_list = get_reits_list()
if not reits_list:
log.info("未获取到 REITs 列表")
return
log.info(f"当前交易日全市场公募 REITs 数量: {len(reits_list)}")
# 2. 获取这些 REITs 过去 5 天的历史收盘价(不包含当前周期)
# 使用 is_dict=True 可以加快数据获取速度
history_data = get_history(5, '1d', 'close', security_list=reits_list, is_dict=True)
if not history_data:
return
# 3. 遍历 REITs 列表,执行均线突破策略
for reit in reits_list:
try:
# 提取单只 REIT 的历史价格数据
reit_history = history_data.get(reit)
if reit_history is None or len(reit_history) < 5:
continue
# 计算 5 日均价
close_prices = [x[2] for x in reit_history] # 对应 dict 格式中的 close 字段
ma5 = sum(close_prices) / len(close_prices)
# 获取当前最新行情快照
snapshot = get_snapshot(reit)
if not snapshot or reit not in snapshot:
continue
current_price = snapshot[reit].get('last_px', 0)
if current_price == 0:
continue
# 获取当前持仓状态
position = get_position(reit)
# 4. 交易信号判断
# 价格突破 5 日均线且无持仓 -> 买入 1000 份
if current_price > ma5 and position.amount == 0:
order(reit, 1000)
log.info(f"【买入信号】REIT: {reit}, 当前价: {current_price} 突破 5日均线: {ma5:.3f}")
# 价格跌破 5 日均线且有持仓 -> 卖出平仓
elif current_price < ma5 and position.amount > 0:
order_target(reit, 0)
log.info(f"【卖出信号】REIT: {reit}, 当前价: {current_price} 跌破 5日均线: {ma5:.3f}")
except Exception as e:
log.error(f"处理 REIT {reit} 时发生异常: {str(e)}")
def handle_data(context, data):
# 定时任务已在 run_daily 中处理,此处保持 pass 即可
pass
limit_price)时,请务必对价格进行四舍五入处理(保留3位小数),否则可能导致柜台废单。set_volume_ratio 限制单笔成交比例,或在策略中加入日均成交额过滤,剔除流动性极差的标的。