别再只知道日线了!微盘股分钟级择时,可能是下一片蓝海
最近量化群里风向有点微妙——前阵子还满屏“小市值轮动”、“微盘股增强”,这阵子突然冒出不少人在聊 ** SAR指标 ** 。有人说用它做风控择时效果炸裂,也有人嗤之以鼻说“抛物线转向早就过时了”。
我扒了几个群友发出来的曲线图,嘿,底部和顶部标记的好好的,还真像那么回事。但仔细一看,大部分人还在用 ** 日线 ** 做微盘股指数择时,日内波动基本被平滑掉了。
微盘股这玩意儿,日内的急涨急跌你吃得消吗?日线信号出来的时候,可能已经滑了三个点,滞后太多,不利于量化策略使用,实际量化策略使用盘中120分钟内最适合风控等操作。
** 所以我把同花顺883418(微盘股指数)的复刻代码改了一版——支持任意分钟频率,顺手把SAR指标也塞了进去。 ** 今天就把这套代码和实测思考分享出来,是骡子是马,拉出来遛遛。
一、微盘股指数:量化的“圣杯”还是“巨坑”?📊
先给不熟的朋友科普一下: ** 同花顺883418 ** 俗称微盘股指数,成分股是市值最小的 ** 400只票 ** (剔除ST、退市、北交所、科创板),每日调仓,等权编制。
这玩意儿过去两年吊打沪深300,年化收益接近 ** 40% ** ,但回撤起来也是爹妈不认——2024年那波小微盘流动性危机,一个月跌了 ** 30%+ ** 。
所以我一直觉得: ** 裸多微盘股就是送人头,必须加上择时风控。 **
而 ** SAR(抛物线转向) ** 的特点恰好适合做趋势跟踪——它会给出一根“止损线”,价格在线上一路持有,一旦跌破就翻空。参数简单,没有未来函数,对参数不敏感,简直就是微盘股这种高波动品种的 ** 天然风控器 ** 🎯
二、代码核心改动:从日线到分钟级,不是简单的“改个参数” ⚙️
原始社区版代码只支持日线回测,我主要干了 ** 三件事 ** :
1️⃣ 底层数据拉取支持任意分钟频率(60m/30m/15m/120m)
** 关键逻辑: **
-
日内每一根K线,都需要知道每个成分股的**“上一根收盘价” ** ——如果是当日第一根,就用 ** 昨日日线收盘**;否则用上一根分钟的收盘。
-
然后按等权权重,加权计算指数当根K线的开高低收。
# 逐根合成示例 idx\_open = prev\_index\_close \* sum( (open/prev\_close) \* weight ) idx\_close = prev\_index\_close \* sum( (close/prev\_close) \* weight )
这样就能保证每一根分钟K线都是 ** 可交易、无未来 ** 的真实指数线。
2️⃣ 加入自适应缓存(频率区分)
不同频率的指数计算结果是 ** 完全不同的数据 ** (因为分钟K线合成路径依赖),所以我给缓存key加上了 frequency
参数,避免60m和30m串数据。首次运行后,下次直接秒出。
3️⃣ 集成了SAR计算和可视化
直接调用 calc_psar ,在K线图上把SAR点画出来。 ** 红点代表多头趋势,绿点代表空头 ** ——一眼就能看出啥时候该跑路。
三、实测:60分钟级别的微盘股指数长啥样?📈
我用代码跑了一段 ** 2026‑03‑15 到 2026‑05‑19 ** 的60分钟K线(频率= 60m ),参数:
- 成分股数量n=400
- 流动性过滤:过去20日日均成交额≥2000万,有效交易天数≥12天
- 剔除ST、8开头、4开头
对比了同花顺,完全一致。
结果画出来的图长这样(部分截图):
🖼️ [图片:60分钟K线+SAR点示意图]
** 说几个肉眼看到的: **
-
** 分钟K线的波动比日线剧烈得多 **
日内经常出现2%以上的实体阴线,而日线可能只是一根小阴。如果你只在日线级别做风控,这些日内亏损是硬吃的。说白了,日线反应太慢,等你看到信号,黄花菜都凉了。 -
** SAR的转向点非常密集 **
在高波动的微盘股环境下,60分钟SAR可能一个月给出5‑6次多空切换信号。 ** 这不一定是坏事 ** ——宁可多交点手续费,也别一次亏20%。做量化的都懂,活着比什么都重要。 -
** SAR空头信号时,指数确实进入主跌段 **
比如4月中旬那波,SAR连续绿点,指数从高位回撤约7%。如果等日线SAR翻绿,估计到4月底了,那时候已经跌傻了。
补充:这套代码到底怎么用?(附实战操作指南)🛠️
看到很多朋友留言问:“代码跑通了,但具体怎么下单?能不能用在个股上?”
我把 ** 使用场景、规则、个股适配性 ** 一次性说清楚,不吹不黑。
一、核心定位:这不是一个“选股策略”,而是一个“仓位风向标” 🧭
你跑出来的 df_60m 是 ** 微盘股指数 ** (类似大盘指数),而不是个股信号。
它的作用是告诉你: ** 当前整个微盘股板块的趋势强度 ** ,从而决定你应该重仓、轻仓还是空仓。
类比:你看天气预报决定带不带伞。指数SAR就是那个“24小时降雨概率”。
二、两种最有效的实战用法
✅ 用法1:择时(单独做一个ETF/一篮子微盘股策略)
如果你的策略基于固定池子(不一定是微盘池,要活学活用呀老铁们),例如以微小盘为池子,可以据此进行择时 ,可以直接根据指数SAR信号进行择时买卖。
** 规则示例(60分钟级别): **
- ** 开多信号 ** :当前K线收盘价 > SAR值,且SAR趋势向上(
sar_trend=1),并且 ** 连续满足2根K线 ** (过滤假信号)。 - ** 平多/翻空信号 ** :收盘价跌破SAR值,且SAR趋势转为
-1,直接清仓。
⚠️ 实盘注意:60分钟信号每天可能出现1‑2次。建议在 ** 收盘前最后15分钟 ** 确认信号,次日开盘执行,避免盘中频繁交易。别问我怎么知道的,说多了都是泪。
`# 伪代码逻辑
if df\['sar\_trend'] == 1 and df\['close'] > df\['sar'] and atr\_ratio > 0.02:
position = 100%
elif df\['sar\_trend'] == -1 or df\['close'] < df\['sar']:
position = 0%
else: position = position # 持有不变`
其中 atr_ratio = ATR(20) / close ,当波动率过低(<2%)时停止交易,震荡市减少打脸。
✅ 用法2:风控层(配合你现有的日线微盘股轮动策略)
这是 ** 性价比最高的用法 ** ——不需要改动你原来的选股和日线调仓逻辑,只加一个**“紧急刹车”**。
** 操作流程: **
- ** 日线层面 ** :你原有策略每天选股、等权买入(假设满仓)。
- ** 盘中/盘后 ** :实时计算60分钟微盘股指数的SAR。
- ** 风控规则 ** :
- 如果60分钟SAR连续 ** 2根 ** 绿柱(空头趋势),盘中将仓位 ** 减半或清仓 ** 。
- 如果60分钟SAR连续 ** 3根 ** 绿柱,清仓至0%。
- 重新出现连续2根红柱后,恢复原仓位。
这样你既保留了日线选股的超额收益,又躲过了微盘股指数日内级别的急跌(比如2024年1月那波,60分钟SAR提前8小时给出离场信号)。实测能少亏不少。
三、个股能不能用SAR?——客观说:效果远不如指数 ❌
很多朋友会问:“那我能不能直接用这个SAR算个股,然后买卖茅台、宁德时代?”
** 答案:不推荐,原因有三。 **
1️⃣ 个股噪音太大,SAR会被震成筛子
微盘股指数是 ** 400只股票等权平均 **
,个股的随机波动被平滑了。而单只个股随时可能因为一个公告、一个股东减持、甚至一个大户的买卖盘走出完全随机的走势。
实测:在沪深300成分股上跑60分钟SAR,胜率不足45%,年化夏普常为负。 ** 不是指标不好,是指数天然适合趋势跟踪,个股不一定。 **
2️⃣ 个股的“趋势”经常是庄家画出来的
SAR假设价格能真实反映供需,但在A股小盘股中,流动性差,几笔对倒就能改变技术形态。你会看到股价明明跌破SAR,第二天又大幅高开拉回——来回打脸。我当年就被这样玩过,气得摔鼠标。
3️⃣ 更好的个股替代方案
如果你非要给个股加趋势风控,建议用 ** 自适应移动平均(AMA) ** 或 ** Hull移动平均 ** ,对参数敏感度更低。或者改用 ** 日线SAR + 成交量确认 ** (放量跌破才止损)。
** 唯一例外 ** :市值大于200亿、日均成交额>5亿的流动性充裕个股,60分钟SAR有一定参考意义,但也要搭配RSI背离过滤。
四、最小化可行产品(MVP)代码示例 💻
假设你在聚宽研究环境已经跑通了指数,下一步如何在回测中使用信号?
# 假设你已经有了 df\_60m(包含 close, sar, sar\_trend)# 每天下午14:45获取最新一根60分钟线的信号
def get\_sar\_signal(current\_time):
# 找到当天最新的一根60分钟K线
latest = df\_60m\[df\_60m.index < current\_time].iloc\[-1]
if latest\['close'] > latest\['sar'] and latest\['sar\_trend'] > 0:
return 1 # 多头
elif latest\['close'] < latest\['sar'] and latest\['sar\_trend'] < 0:
return -1 # 空头
else:
return 0 # 震荡
# 在每日调仓函数中调用
signal = get\_sar\_signal(context.current\_dt)if signal == -1:
# 清仓所有微盘股持仓
for stock in context.portfolio.positions:
order\_target(stock, 0)
elif signal == 1 and context.portfolio.positions\_value == 0: # 重新买入原有选股列表(可加缓冲,避免频繁开仓) buy\_stocks()
五、最后的忠告💡
-
** 不要直接照搬参数 **
SAR的step和max_step建议用过去2年数据做网格搜索,不同指数、年份的最优参数差异很大。别偷懒。 -
** 分钟级信号必须考虑交易成本 **
微盘股印花税+佣金+滑点,一次全仓调仓成本约0.3%‑0.5%。如果60分钟SAR一个月给出10次信号,成本或吃掉3%‑5%——除非你的超额收益能覆盖。算不清账的建议先拿计算器按按。 -
** 先用模拟盘跑三个月 **
这套代码最值钱的不是技术实现,而是让你在低风险环境下体验**“震荡市来回止损”**的心理折磨。真金白银上去之前,先看看自己扛不扛得住。 -
瑕不掩瑜,这个SAR指标对于一篮子股票或指数的确具有不错的效果,或可加入你的弹药库,减少你的策略曲线波动。
最后 🎁
免费的赞和 在看,是持续更新的动力。 后台回复‘SAR’获取源码。
_ 有问题评论区见——个股SAR踩过坑的也欢迎现身说法,一起吐槽。 _
** 风险提示: ** 本文仅作策略思路分享,不构成投资建议。量化交易存在重大亏损风险,请谨慎评估自身能力。别脑子一热就梭哈。