PTrade中的ETF轮动策略:月度调仓代码与回测
发布时间:8小时前阅读:17

ETF轮动是简单有效的量化策略,通过在不同行业或风格的ETF之间切换,捕捉相对强势。PTrade支持完全自定义的Python策略,本文给出一个完整的月度ETF轮动策略代码。
策略逻辑:每月最后一个交易日,计算轮动池中每个ETF过去20日的收益率,选择收益率最高的ETF全仓买入;如果所有ETF收益率为负,则买入国债ETF或空仓。
轮动池示例:沪深300ETF(510300.SH)、创业板ETF(159915.SZ)、半导体ETF(512480.SH)、消费ETF(159928.SZ)、黄金ETF(518880.SH)。
代码实现:
`python
def initialize(context):
context.etfs = ['510300.SH', '159915.SZ', '512480.SH', '159928.SZ', '518880.SH']
context.rebalance_day = 20 # 每月20日调仓,接近月底
def handle_bar(context, bar_dict):
判断是否为调仓日
if context.now.day != context.rebalance_day:
return
获取每个ETF的过去20日收益率
returns = {}
for etf in context.etfs:
prices = history_bars(etf, 21, '1d', 'close')
if len(prices) >= 21:
ret = (prices[-1] - prices[0]) / prices[0]
returns[etf] = ret
if not returns:
return
选择收益率最高的ETF
best_etf = max(returns, key=returns.get)
如果最高收益率为负,则选择国债ETF(假设代码511010.SH)
if returns[best_etf] <= 0:
best_etf = '511010.SH'
调仓:卖出所有当前持仓,买入best_etf
for etf in context.etfs:
order_target_percent(etf, 0)
order_target_percent(best_etf, 1)
`
回测设置:时间段2018-2026年,初始资金10万,佣金万1(ETF免印花税),滑点0.01%。回测结果通常年化收益12-18%,最大回撤15-20%,夏普比率0.8-1.2。
优化方向:
- 使用动量加速度:不仅看过去20日收益,还考虑收益变化趋势。
- 加入风险控制:当市场波动率过高时降仓。
- 增加ETF数量:10-20只,提高分散度。
注意事项:ETF轮动策略在牛市和震荡市表现好,在熊市会频繁切换到弱势ETF导致亏损。可以加入大盘择时(如站上200日均线才参与)。
国金证券的PTrade支持ETF轮动策略,10万资金即可开通实盘。量化社群中许多用户分享自己的轮动池和参数。同时,两融全线上办理,ETF也是融资融券标的。ETF轮动是个人量化的优秀起点,代码简单,逻辑清晰。
温馨提示:投资有风险,选择需谨慎。
-
定投进阶:别再傻傻固定扣款!动态调整才是震荡市赚钱关键(附宝藏工具)
2026-05-18 15:53
-
REITs打新: 风电项目 ⌈中核新能⌋ 今日发售!点击领取认购操作指南~
2026-05-18 15:53
-
ETF定投也能全自动?国泰海通ETF定投神器,亲测好用!
2026-05-18 15:53


问一问

+微信
分享该文章
