本文目录导读:

你提到的“三线距离保持”通常出现在通达信/同花顺等股票软件的公式指标里,而Python案例一般是用 pandas 复现这类逻辑,由于你没有贴出具体代码,我按最常见的几种理解来说明如何“看”这个结果。
先明确“三线距离保持”指什么
常见有两种定义:
定义A(均线粘合/距离保持) 三条均线(如 MA5、MA10、MA20)之间的相对距离保持在一个小区间内,即:
abs(MA5 - MA10) / MA10 < 阈值abs(MA10 - MA20) / MA20 < 阈值- 且这种状态连续N天成立 → “保持”
定义B(三线距离变化率) 三条线两两距离的变化幅度很小,即距离“稳定”,不是粘合而是平行。
Python里怎么看结果
假设你的代码大致是:
df['ma5'] = df['close'].rolling(5).mean() df['ma10'] = df['close'].rolling(10).mean() df['ma20'] = df['close'].rolling(20).mean() df['d1'] = (df['ma5'] - df['ma10']).abs() / df['ma10'] df['d2'] = (df['ma10'] - df['ma20']).abs() / df['ma20'] df['keep'] = (df['d1'] < 0.01) & (df['d2'] < 0.01)
看“保持”的连续性
单纯 keep==True 只说明当天满足,“保持”要看连续天数:
# 连续满足天数 df['keep_days'] = df['keep'].groupby((~df['keep']).cumsum()).cumsum()
然后看:
df[df['keep_days'] >= 3] # 连续3天以上保持
看距离是否真的“稳定”
只看是否小于阈值不够,要看距离序列的波动:
# 最近20天距离的稳定性 df['d1_std'] = df['d1'].rolling(20).std() df['d2_std'] = df['d2'].rolling(20).std()
std 小 → 距离保持得好;std 大 → 距离在扩张/收缩。
看方向:是粘合还是发散
df['d1_slope'] = df['d1'].diff() # 正=发散,负=收敛
- d1、d2 都小且 slope≈0 → 三线平行保持
- d1、d2 都小且 slope<0 → 正在粘合(可能是变盘前)
- d1、d2 变大 → 距离被打破
可视化最直观
import matplotlib.pyplot as plt fig, ax = plt.subplots(2,1, figsize=(12,8), sharex=True) ax[0].plot(df['ma5'], label='MA5') ax[0].plot(df['ma10'], label='MA10') ax[0].plot(df['ma20'], label='MA20') ax[0].legend() ax[1].plot(df['d1'], label='|MA5-MA10|/MA10') ax[1].plot(df['d2'], label='|MA10-MA20|/MA20') ax[1].axhline(0.01, color='r', ls='--') # 阈值线 ax[1].legend() plt.show()
看图上:
- 上图三线是否平行/贴近
- 下图两条距离曲线是否长期在阈值线下方且平稳
判断“保持得好不好”的要点
| 观察项 | 保持好 | 保持差/将破坏 |
|---|---|---|
| 距离值 | 长期 < 阈值 | 频繁穿越阈值 |
| 距离std | 小 | 大 |
| 距离斜率 | ≈0 | 明显上升(发散) |
| 连续天数 | 长 | 短、断续 |
| 三线方向 | 同向 | 交叉、缠绕 |
如果你能贴出代码
我可以直接帮你:
- 指出代码里“保持”的判断逻辑是否正确
- 加一个“连续保持天数 + 稳定性评分”的列
- 给出可视化模板,直接跑出图来看
你把那段 Python 代码(或它对应的公式描述)发上来,我按你的实际字段名改。