本文目录导读:

我来帮你分析如何观察三线距离保持的情况,不过你提到"这个python案例",我需要具体看到代码才能给出准确的分析,让我先提供一个通用的三线(通常指移动平均线)距离分析框架:
三线距离分析的核心思路
假设你有三条均线(如MA5、MA10、MA20),关注它们之间的距离变化:
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
def analyze_ma_spread(data, windows=[5, 10, 20]):
"""
分析三线距离 (三线通常指短期、中期、长期均线)
"""
# 计算均线
for w in windows:
data[f'MA{w}'] = data['close'].rolling(window=w).mean()
# 计算均线间的距离
data['MA5_MA10_spread'] = (data['MA5'] - data['MA10']) / data['MA10'] * 100 # 百分比
data['MA10_MA20_spread'] = (data['MA10'] - data['MA20']) / data['MA20'] * 100
data['MA5_MA20_spread'] = (data['MA5'] - data['MA20']) / data['MA20'] * 100
# 计算总体离散度(三条线的分散程度)
ma_cols = [f'MA{w}' for w in windows]
data['ma_spread_std'] = data[ma_cols].std(axis=1)
return data
def check_spread_state(data, threshold=2):
"""
判断三线距离状态
threshold: 距离阈值(百分比)
"""
current = data.iloc[-1]
# 判断状态
conditions = {
'多头排列且发散': current['MA5'] > current['MA10'] > current['MA20'] and
current['ma_spread_std'] > threshold,
'多头排列但收敛': current['MA5'] > current['MA10'] > current['MA20'] and
current['ma_spread_std'] <= threshold,
'空头排列且发散': current['MA5'] < current['MA10'] < current['MA20'] and
current['ma_spread_std'] > threshold,
'空头排列但收敛': current['MA5'] < current['MA10'] < current['MA20'] and
current['ma_spread_std'] <= threshold,
'交织状态': not (current['MA5'] > current['MA10'] > current['MA20'] or
current['MA5'] < current['MA10'] < current['MA20'])
}
state = [k for k, v in conditions.items() if v]
return state[0] if state else '未知状态'
def plot_ma_spread(data, windows=[5, 10, 20]):
"""
可视化三线及距离
"""
fig, axes = plt.subplots(3, 1, figsize=(12, 10))
# 1. 价格和均线
ax1 = axes[0]
ax1.plot(data['close'], label='Close', alpha=0.7)
for w in windows:
ax1.plot(data[f'MA{w}'], label=f'MA{w}')
ax1.legend()
ax1.set_title('价格与三线')
# 2. 均线间距离(百分比)
ax2 = axes[1]
ax2.plot(data['MA5_MA10_spread'], label='MA5-MA10')
ax2.plot(data['MA10_MA20_spread'], label='MA10-MA20')
ax2.axhline(y=0, color='gray', linestyle='--')
ax2.legend()
ax2.set_title('均线间距离 (%)')
ax2.set_ylabel('百分比')
# 3. 三线离散度
ax3 = axes[2]
ax3.plot(data['ma_spread_std'], label='三线离散度', color='purple')
ax3.fill_between(data.index, 0, data['ma_spread_std'], alpha=0.3)
ax3.set_title('三线整体发散/收敛程度')
plt.tight_layout()
plt.show()
关键观察指标
均线排列顺序
- 多头排列: MA5 > MA10 > MA20 (看涨趋势)
- 空头排列: MA5 < MA10 < MA20 (看跌趋势)
- 交织状态: 无法形成清晰的排列(盘整期)
距离变化趋势
# 检查距离是在扩大还是缩小
data['spread_changing'] = data['ma_spread_std'].diff()
# 最近5个周期距离是扩大还是缩小
recent_trend = data['ma_spread_std'].tail(5).diff().mean()
if recent_trend > 0:
print("均线正在发散")
else:
print("均线正在收敛")
相对位置关系
def check_position(data):
"""检查当前价格相对三线的位置"""
current = data.iloc[-1]
pos = 0
for w in [5, 10, 20]:
if current['close'] > current[f'MA{w}']:
pos += 1
return f"价格在{pos}/3条均线之上"
动态监控
def monitor_ma_state(data, min_distance=1, max_distance=3):
"""
监控三线状态
- min_distance: 过近阈值(可能转折)
- max_distance: 过远阈值(可能回归)
"""
current = data.iloc[-1]
# 检查是否出现过近或过远
if current['ma_spread_std'] < min_distance:
return "三线过于接近,很可能出现方向选择"
elif current['ma_spread_std'] > max_distance:
return "三线距离过大,可能面临回调"
else:
# 检查是否有拐点迹象
recent = data.tail(3)['ma_spread_std']
if recent.is_monotonic_increasing:
return "三线正在发散,趋势延续中"
elif recent.is_monotonic_decreasing:
return "三线正在收敛,趋势减弱中"
return "三线保持相对稳定"
使用建议
- 观察窗口: 不只看当前值,要看最近5-10天的变化趋势
- 相对阈值: 根据品种波动率设置合适的距离阈值
- 结合量价: 距离变化要配合成交量确认
- 变盘信号: 通常三线极度收敛(接近重合)后必有大的行情
如果你能提供具体的代码或数据,我可以给出更精确的分析,你的三线指的是哪三条线?移动平均线还是布林带或其他指标?