一句话回答: 「均线粘合」就是 5/10/20/30/60 日均线挤在一起、彼此差距极小,常出现在长期横盘、变盘前夜。量化它只需一个指标——均线离散度 = 这几条均线的标准差 ÷ 均值 ×100%,越小越粘合。用 AlphaFeed 批量取复权日线,几行就能扫出全池粘合候选。
看图找「均线缠在一起」很直观,但要批量筛就得把「粘合」变成一个可比较的数:
数据用 AlphaFeed 批量复权日线,计算用几行 pandas 即可。
from alphafeed import AlphaFeed
af = AlphaFeed(api_key="your-api-key") # 或 export ALPHAFEED_API_KEY 后 AlphaFeed()
symbols = ["600519.SH", "000001.SZ", "600036.SH", "000858.SZ", "600900.SH", "300750.SZ"]
bt = af.klines.batch(symbols, period="1d", count=90, adjust="forward", to_dataframe=True)
# bt 是 {symbol: DataFrame}import numpy as np
def convergence(close, mas=(5, 10, 20, 30, 60)):
vals = [close.rolling(m).mean().iloc[-1] for m in mas] # 各均线最新值
return float(np.std(vals) / np.mean(vals) * 100) # 离散度(%),越小越粘合参数与阈值说明:
参数 | 含义 | 建议 |
|---|---|---|
| 参与比较的均线 | 经典 5/10/20/30/60 |
| 取多少根日线 | ≥ 最长均线(60)+ 余量,本文 90 |
离散度阈值 | 判定粘合的上限 | 1%~3%,越小越严格 |
| 复权方式 | 必须 |
import pandas as pd
def ma_squeeze_screen(symbols, count=90, thr=1.5):
bt = af.klines.batch(symbols, period="1d", count=count, adjust="forward", to_dataframe=True)
rows = []
for sym, df in bt.items():
if df is None or len(df) < 60: # 数据不足跳过
continue
d = df.sort_values("trade_date").reset_index(drop=True)
disp = convergence(d["close"])
rows.append({"symbol": sym, "dispersion_%": round(disp, 2), "squeeze": disp <= thr})
return pd.DataFrame(rows).sort_values("dispersion_%")
print(ma_squeeze_screen(symbols, thr=3.0).to_string(index=False))
# 例如 600900.SH 0.52%、600519.SH 0.90% 离散度最小 -> 均线最粘合上例实测长江电力离散度≈0.52%、茅台≈0.90% 最粘合;宁德时代≈6.27% 明显发散。想扫全市场把 symbols 换成 universe(需 Starter+)分批传入即可。
count 给足并对不足数据跳过,否则 rolling(60) 全是 NaN。adjust="forward",除权跳空会让均线错位、离散度失真。Q:为什么用标准差除以均值,而不是直接看均线差?
A:直接比差值对高价股不公平(价格越高差得越大)。除以均值做成百分比(变异系数),不同价位的股票才能横向比较。
Q:粘合后一定会变盘吗?
A:不一定,也可能继续横盘。它只是提高了「变盘概率」的观察名单,需结合突破、量能和基本面。
Q:扫全市场会不会很慢/超额度?
A:用 klines.batch 分批(每批几百只)比逐只快很多;全市场标的池需 Starter 及以上,注意接口额度。
Q:需要付费吗?
A:小批量在免费额度内可试;universe 全市场池与大批量需 Starter 及以上,详见 AlphaFeed 定价页。
均线粘合选股的本质是「把几条均线挤在一起的程度量化成一个离散度」,用变异系数(标准差/均值)就能跨价位比较,越小越粘合。AlphaFeed 的批量复权日线让你几行扫出全池候选——但记住粘合只辨「蓄势」不辨「方向」,真正下手要等放量突破、配合量能确认。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。