3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 平台中,针对公募 REITs 的投资与监控,主要依赖以下两个核心 API:
get_reits_list(date=None):用于获取指定日期沪深市场的所有公募 REITs 基金代码列表。在回测中默认取当前回测日期,在交易或研究中默认取当天日期。get_snapshot(security):用于获取实时行情快照,从中可以提取最新成交价(last_px)等关键数据。注:折溢价率的计算通常需要 REITs 的实时价格与单位基金净值(IOPV 或最新公布的 NAV)。由于净值数据通常在盘后或通过特定财务接口更新,本示例将展示如何批量获取 REITs 列表、获取实时价格,并结合基础数据计算折溢价率的框架。
以下是一个完整的 ptrade 策略示例。策略在盘前获取所有公募 REITs 列表,并在盘中定时获取实时快照,计算折溢价并进行排序监控:
# -*- coding: utf-8 -*-
def initialize(context):
# 设置基准
set_benchmark('000300.SS')
# 初始化 REITs 股票池
g.reits_list = []
# 每天 9:30 运行一次初始化列表
run_daily(context, prepare_reits_pool, time='09:30')
# 盘中每隔 5 分钟监控一次折溢价(交易环境推荐使用 run_interval,此处以 handle_data 演示分钟级监控)
g.monitor_interval = 5
g.count = 0
def prepare_reits_pool(context):
# 获取当前交易日的所有公募 REITs 列表
g.reits_list = get_reits_list()
log.info("今日获取到公募 REITs 数量: %d" % len(g.reits_list))
# 更新股票池
if g.reits_list:
set_universe(g.reits_list)
def handle_data(context, data):
g.count += 1
if g.count % g.monitor_interval != 0:
return
if not g.reits_list:
return
log.info("------ 开始监控 REITs 实时价格与折溢价 ------")
# 1. 批量获取 REITs 实时行情快照
snapshot_dict = get_snapshot(g.reits_list)
# 2. 批量获取 REITs 基础净值信息(此处以 get_cb_info 或 get_fundamentals 框架模拟,实际中可结合估值表获取最新 NAV)
# 提示:公募 REITs 的最新净值(NAV)可通过财务数据接口或第三方数据源维护在全局变量中
# 假定我们有一个模拟的最新净值字典(实际中应从 get_fundamentals 或外部输入获取)
# 格式:{ 'REITs代码': 基金单位净值 }
mock_nav_dict = {
'508099.SS': 2.500,
'180101.SZ': 3.120
}
reits_premium_list = []
for reit in g.reits_list:
if reit in snapshot_dict:
last_price = snapshot_dict[reit].get('last_px', 0.0)
# 获取参考净值(若无则跳过或设为默认)
nav = mock_nav_dict.get(reit, None)
if last_price > 0 and nav:
# 折溢价率 = (二级市场价格 - 基金净值) / 基金净值 * 100%
premium_rate = (last_price - nav) / nav * 100
reits_premium_list.append({
'code': reit,
'name': get_stock_name(reit).get(reit, '未知'),
'price': last_price,
'nav': nav,
'premium_rate': premium_rate
})
# 3. 按折溢价率升序排序(寻找折价率最高,即最便宜的 REITs)
reits_premium_list.sort(key=lambda x: x['premium_rate'])
# 4. 打印监控结果
for item in reits_premium_list[:5]:
log.info("代码: %s | 名称: %s | 当前价: %.3f | 净值: %.3f | 折溢价率: %.2f%%" %
(item['code'], item['name'], item['price'], item['nav'], item['premium_rate']))
# 5. 轮动逻辑(示例):买入折价率最高(溢价率为负且最小)的前 2 只 REITs
if is_trade(): # 仅在实盘/模拟盘环境执行交易
# 具体的买入卖出逻辑可在此处展开,例如 order_target_value(target_code, target_value)
pass
limit_price)委托时,务必对价格进行 3 位小数的四舍五入处理。