算法炼金师 发布于15天前
回复 28
浏览 884
27
**好久没发贴了,最近再疯狂的写代码和调式策略,目前手里有8支还不错的,今天给兄弟们分享出一只还比较不错的。**
**期待兄弟们带来好消息**

#一、策略核心逻辑
策略核心在于识别并利用 ETF 二级市场价格与基金净值之间的偏离:
标的筛选:
每日筛选成交金额超过 1000 万元的 ETF(g.least_money=1e7),确保流动性充足。
通过聚宽平台或爬虫获取最新净值,优先使用实时爬虫数据(东方财富网接口),确保数据时效性。
溢价计算:
溢价率 = (开盘价 / 基金净值 - 1) × 100%
剔除分红影响(通过factor参数过滤)和异常溢价(±20% 外的数据点),避免错误信号。
交易触发条件:
卖出信号:持仓 ETF 若溢价率高于阈值(-2.5%),以开盘价下浮 2% 限价卖出。
买入信号:筛选溢价率低于 - 2.5% 的 ETF,若无符合条件则逐步放宽至 - 1.5%(g.least_premium动态调整)。
二、关键参数设置
python
运行
核心参数
g.least_premium=2.5 # 最低溢价阈值(%)
g.least_money=1.0e7 # 最小成交金额(元)
g.trade_fee_ratio=0.00025 # 交易费率(万2.5)
g.ETFNum_hold = 2 # 最大持仓数量
溢价阈值:动态调整机制确保在无套利机会时降低门槛,提高策略适应性。
成交金额限制:避免流动性不足导致的交易滑点。
单只持仓上限:分散风险,防止单只 ETF 波动过大影响整体收益。
三、交易执行机制
卖出流程:
python
运行
for etf in context.portfolio.positions:
if etf not in 低溢价列表:
order_target(etf, 0, LimitOrderStyle(开盘价*0.98))
限价单设置:通过下浮 2% 确保成交概率,避免市价单带来的冲击成本。
买入流程:
python
运行
可用资金 = context.portfolio.available_cash / 待买入数量
for etf in 低溢价列表:
买入数量 = int(可用资金 / (限价*1.005*1.00025) / 100) * 100
order_target(etf, 买入数量, LimitOrderStyle(开盘价*1.02))
资金分配:均分资金到每只标的,确保风险分散。
限价上浮 2%:应对开盘后价格上涨,提高买入成功率。

四、风险控制体系
最小交易金额:
单次买入金额≥2 万元(5/g.trade_fee_ratio),确保交易成本占比可控。
异常数据过滤:
剔除分红日基金(factor≠1),避免净值计算偏差。
过滤极端溢价数据(>|20%|),防止错误信号导致亏损。

#实测持仓记录

评论
这种实盘应该买不到,或者成交的时候滑点很高了
15天前
@clak 如果实盘,可以将滑点设置高一些,或者用专门的软件,每分钟可以交易几百次的那种,买入几率提高不少
15天前
@算法炼金师 这一点我还真没太注意,请教一下,我们如果用的是市价单下单,滑点在实盘中会起作用吗?
14天前
爬虫东财的接口稳定吗?实盘和回测用东财数据也可在聚宽回测?
14天前
@Alexsaesh 你能爬到实时的当然可以啊
14天前
@YunChen_Chiang 做些有探讨性的内容,一起进步
14天前
有逻辑上的未来数据,实盘在9:30有部分ETF没有成交出不来开盘价,但是回测9:30能取到开盘价、且参与了排序选股,并且被选中了!
14天前
2019年1月1日——2021年12月31日的回测:

14天前
2022年1月1日——2025年5月20日回测:

14天前
@cncser 感谢兄弟回测长时间周期的
14天前
@cncser 感谢兄弟回测长时间周期的
14天前
@猫哥的杂货铺 不留着了,也希望等带动多的大佬分享好的策略,一起红起来
14天前
9点半用开盘价是买不到的,之前有测过。严谨一点说是有大部分买不进,有一部分偶尔会买进,而且实时模拟有bug, 他会让你买进,但实盘就不行了
14天前