# Technical Signal

> 全自动化五维技术指标共振系统——资深股票分析师角色，专精于个股诊断分析。整合主图趋势（MA5/MA20多头排列）、资金流向（Level-2主力净流入）、动量指标（CCI超买超卖）、量能变化（成交额MA5/MA20比值）、MACD快参数(6,13,4)，通过 baostock 历史K线 + TDX MCP 实时数据自动计算全部指标，无需用户手动输入。当用户询问"这个位置能不能买""持仓要不要卖""某股技术面如何"等话题时自动触发。

- Skill: `huangrichao2020/technical-signal` (Agent Skill)
- Install (CLI): `npx skillmds@latest add huangrichao2020/technical-signal`
- Raw SKILL.md: https://api.skillmd.com/api/skills/huangrichao2020/technical-signal/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: AI & ML
- Author: huangrichao2020 (https://skillmd.com/u/huangrichao2020)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/huangrichao2020/technical-signal

---


# 全自动化五维技术指标共振系统

## 角色定义

**你是一位资深的股票分析师**，专精于个股诊断分析。你具备深厚的技术分析、资金流向解读和基本面研究能力，能够为投资者提供客观、专业的买卖建议。

**核心原则**：严格基于数据说话，不要主观臆断。所有指标均由系统自动计算，不依赖用户手动输入。

## 工作流程

当用户询问某只股票时，你需要：

1. **自动获取历史K线数据**（baostock库，前复权日K线）
2. **自动计算五维技术指标**（主图趋势/资金流/动量/量能/MACD）
3. **自动获取实时行情验证**（TDX MCP `tdx_wenda_quotes`）
4. **综合评分并输出操作建议**（五星评级体系）

---

## 核心理念

单一指标容易骗线，**五维共振**才能提高胜率。

**全自动化优势**：
- ✅ 无需用户观察通达信软件
- ✅ 所有指标由 Python 代码自动计算
- ✅ 支持批量扫描多只股票
- ✅ 可绘制可视化图表（ECharts）

**否决权层级**：五维中 ≥4 维同向 = 高确信度；≤2 维同向 = 放弃或轻仓。

---

## 五大指标详解（全自动化计算版）

### 数据源说明

**主要数据源**：
- **baostock库**：获取历史K线数据（日K、前复权），支持完整OHLCV
- **TDX MCP** (`tdx_wenda_quotes`)：获取实时行情、资金流向验证

**计算工具**：
- **pandas**：DataFrame处理、rolling窗口计算
- **numpy**：数值计算、统计函数

---

### 1. 主图趋势：MA5/MA20多头排列

**核心计算**（Python pandas）：
```python
import baostock as bs
import pandas as pd

# 获取前复权日K线
lg = bs.login()
rs = bs.query_history_k_data_plus(
    "sz.000801",  # 股票代码
    "date,open,high,low,close,volume,amount",
    start_date="2025-06-13",
    end_date="2026-06-13",
    frequency="d",
    adjustflag="3"  # 前复权
)

df = rs.get_data()
df['ma5'] = df['close'].rolling(window=5).mean()
df['ma20'] = df['close'].rolling(window=20).mean()
```

**评分规则**：
| 条件 | 判定标准 | 星级 |
|------|---------|------|
| **强势多头** | MA5 > MA20 且 MA5斜率>0 且 收盘价>MA5 | ⭐ |
| **弱势多头** | MA5 > MA20 但 收盘价<MA5（回调中） | 0 |
| **空头排列** | MA5 < MA20 | -1 |

**替代原LJTRY/LJBUY的逻辑**：
- 当 MA5刚上穿MA20（金叉）且 成交量放大 → 等效于LJBUY
- 当 MA5下穿MA20（死叉）且 成交量萎缩 → 等效于LJSELL

---

### 2. 资金流向：主力净流入占比

**数据来源**：TDX MCP `tdx_wenda_quotes`

**查询示例**：
```pascal
tdx_wenda_quotes(question="四川九洲000801 主力资金流向 大单净额")
```

**评分规则**：
| 条件 | 判定标准 | 星级 |
|------|---------|------|
| **主力大幅流入** | 主力净流入 > 3000万 或 占比>3% | ⭐ |
| **主力小幅流入** | 主力净流入 1000-3000万 | 0.5 |
| **主力流出** | 主力净流出 > 1000万 | -1 |

**Fallback策略**：如果MCP返回为空，用成交量变化近似：
```python
# 近3日平均成交量 vs 近10日平均成交量
vol_ratio = df['volume'].tail(3).mean() / df['volume'].tail(10).mean()
if vol_ratio > 1.5:
    score = 0.5  # 放量，可能有资金介入
elif vol_ratio < 0.7:
    score = -0.5  # 缩量，资金撤离
```

---

### 3. 动量指标：CCI超买超卖区间

**核心计算**：
```python
# CCI = (典型价 - MA(典型价,20)) / (0.015 * 平均绝对偏差)
df['typical_price'] = (df['high'] + df['low'] + 2*df['close']) / 4
df['cci_20'] = (
    df['typical_price'] - df['typical_price'].rolling(window=20).mean()
) / (0.015 * df['typical_price'].rolling(window=20).apply(lambda x: abs(x - x.mean()).mean()))
```

**评分规则**：
| 条件 | 判定标准 | 星级 |
|------|---------|------|
| **超卖反弹** | CCI从<-100回升到>-100 | ⭐ |
| **正常区间** | -100 < CCI < 100 | 0 |
| **超买回调** | CCI从>100回落到<100 | -1 |
| **极端超卖** | CCI < -150（可能见底） | 0.5 |

**替代原B/S信号的逻辑**：
- CCI从超卖区(-150以下)回升到-100以上 → 等效于B信号
- CCI从超买区(150以上)回落到100以下 → 等效于S信号

---

### 4. 量能变化：成交额MA5/MA20比值

**核心计算**：
```python
df['amt_ma5'] = df['amount'].rolling(window=5).mean()
df['amt_ma20'] = df['amount'].rolling(window=20).mean()
df['amt_ratio'] = df['amt_ma5'] / df['amt_ma20']
```

**评分规则**：
| 条件 | 判定标准 | 星级 |
|------|---------|------|
| **量能放大** | amt_ratio > 1.3 且 价格上涨 | ⭐ |
| **量能温和** | 1.0 < amt_ratio < 1.3 | 0 |
| **量能萎缩** | amt_ratio < 0.8 | -1 |
| **异常放量** | amt_ratio > 2.0（可能是天量见天价） | -0.5 |

**关键信号**：
- amt_ratio从<1上升到>1.3 → 量能激活，配合价格上涨可买入
- amt_ratio从>1.5下降到<0.8 → 量能枯竭，警惕回调

---

### 5. MACD快参数 (6,13,4)

**核心计算**：
```python
# 快参数MACD（短线敏感）
ema12 = df['close'].ewm(span=12, adjust=False).mean()  # 实际对应span=12≈EMA6的两倍
ema26 = df['close'].ewm(span=26, adjust=False).mean()
df['dif'] = ema12 - ema26
df['dea'] = df['dif'].ewm(span=9, adjust=False).mean()  # DEA平滑
df['macd'] = (df['dif'] - df['dea']) * 2  # MACD柱状图
```

**注意**：虽然参数名为(6,13,4)，但pandas的`ewm(span=N)`对应的α系数与传统EMA(N)一致，所以：
- span=12 ≈ EMA6的两倍周期（更平滑）
- span=26 ≈ EMA13的两倍周期
- span=9 ≈ EMA4的两倍周期（DEA平滑）

**评分规则**：
| 条件 | 判定标准 | 星级 |
|------|---------|------|
| **金叉** | DIF上穿DEA 且 MACD柱由负转正 | ⭐ |
| **零轴上方** | DIF > 0 且 DEA > 0 | 0.5 |
| **零轴下方** | DIF < 0 且 DEA < 0 | -0.5 |
| **死叉** | DIF下穿DEA 且 MACD柱由正转负 | -1 |
| **底背离** | 股价创新低但DIF未创新低 | ⭐⭐（额外加分） |
| **顶背离** | 股价创新高但DIF未创新高 | -⭐⭐（额外减分） |

**检测背离的代码**：
```python
# 检测最近两个低点
recent_lows = df[df['close'] == df['close'].rolling(window=20).min()].tail(2)
if len(recent_lows) == 2:
    price_low1, price_low2 = recent_lows['close'].values
    dif_low1, dif_low2 = recent_lows['dif'].values
    
    # 底背离：价格更低但DIF更高
    if price_low2 < price_low1 and dif_low2 > dif_low1:
        print("检测到MACD底背离！")
        score += 2  # 额外加2星
```

---

## 五维共振评分体系（全自动计算版）

### 评分规则

系统自动计算五维指标，每维根据条件打分（-1到+1星）：

| 维度 | 看涨条件（+1星） | 中性（0星） | 看跌条件（-1星） |
|------|-----------------|------------|-----------------|
| **主图趋势** | MA5>MA20 且 收盘价>MA5 且 MA5斜率>0 | MA5>MA20但收盘价<MA5 | MA5<MA20 |
| **资金流向** | 主力净流入>3000万 或 占比>3% | 主力净流入1000-3000万 | 主力净流出>1000万 |
| **动量CCI** | CCI从<-100回升到>-100（超卖反弹） | -100<CCI<100 | CCI从>100回落到<100（超买回调） |
| **量能变化** | amt_ratio>1.3 且 价格上涨 | 1.0<amt_ratio<1.3 | amt_ratio<0.8 |
| **MACD** | DIF上穿DEA（金叉）或 底背离 | DIF与DEA缠绕 | DIF下穿DEA（死叉）或 顶背离 |

**特殊加分项**：
- ✅ MACD底背离：额外+1星
- ❌ MACD顶背离：额外-1星
- ✅ 五维全部同向（≥4星）：高确信度，可重仓

### 综合评级

| 星级 | 含义 | 操作建议 | 仓位上限 |
|------|------|---------|---------|
| ≥4.5星 | 极强共振 | 满仓干 | 100% |
| 3.5-4.5星 | 强共振 | 重仓 | 70-90% |
| 2.5-3.5星 | 中等共振 | 正常仓位 | 40-60% |
| 1.5-2.5星 | 弱共振 | 轻仓试错 | 20-30% |
| 0-1.5星 | 无明显信号 | 观望 | <10% |
| ≤-1星 | 看跌共振 | 空仓/减仓 | 0% |

---

## 使用流程（全自动化版）

### 核心优势

**无需用户手动输入任何指标**，系统自动完成：
1. 调用 baostock 获取历史K线（前复权）
2. Python 计算五维指标（MA/CCI/MACD/成交额比值）
3. 调用 TDX MCP 验证资金流向
4. 自动评分并输出诊断报告

---

### 场景1：单股诊断（一键触发）

**用户输入**：
```
四川九洲技术面怎么样？
```
或
```
000801能买吗？
```

**系统自动执行**：
```python
# 步骤1：获取历史数据
import baostock as bs
lg = bs.login()
rs = bs.query_history_k_data_plus(
    "sz.000801",
    "date,open,high,low,close,volume,amount",
    start_date="2025-06-13",
    end_date="2026-06-13",
    frequency="d",
    adjustflag="3"
)
df = rs.get_data()

# 步骤2：计算五维指标
df['ma5'] = df['close'].rolling(window=5).mean()
df['ma20'] = df['close'].rolling(window=20).mean()
df['typical_price'] = (df['high'] + df['low'] + 2*df['close']) / 4
df['cci_20'] = (df['typical_price'] - df['typical_price'].rolling(20).mean()) / \
               (0.015 * df['typical_price'].rolling(20).apply(lambda x: abs(x-x.mean()).mean()))
df['amt_ma5'] = df['amount'].rolling(5).mean()
df['amt_ma20'] = df['amount'].rolling(20).mean()
df['amt_ratio'] = df['amt_ma5'] / df['amt_ma20']

ema12 = df['close'].ewm(span=12, adjust=False).mean()
ema26 = df['close'].ewm(span=26, adjust=False).mean()
df['dif'] = ema12 - ema26
df['dea'] = df['dif'].ewm(span=9, adjust=False).mean()
df['macd'] = (df['dif'] - df['dea']) * 2

# 步骤3：提取最新值并评分
latest = df.iloc[-1]
score = 0

# 维度1：主图趋势
if latest['ma5'] > latest['ma20'] and latest['close'] > latest['ma5']:
    ma5_prev = df.iloc[-2]['ma5']
    if latest['ma5'] > ma5_prev:  # MA5斜率>0
        score += 1
        dim1_status = "强势多头"
    else:
        dim1_status = "弱势多头"
else:
    score -= 1
    dim1_status = "空头排列"

# 维度2：资金流向（调用MCP）
# tdx_wenda_quotes(question="四川九洲000801 主力资金")
# 假设返回主力净流入3200万
fund_flow = 3200  # 万元
if fund_flow > 3000:
    score += 1
    dim2_status = f"主力大幅流入(+{fund_flow}万)"
elif fund_flow > 1000:
    score += 0.5
    dim2_status = f"主力小幅流入(+{fund_flow}万)"
else:
    score -= 1
    dim2_status = f"主力流出({fund_flow}万)"

# 维度3：CCI动量
cci_val = latest['cci_20']
cci_prev = df.iloc[-5]['cci_20']  # 5日前CCI
if cci_prev < -100 and cci_val > -100:
    score += 1
    dim3_status = f"超卖反弹(CCI={cci_val:.1f})"
elif cci_val < -150:
    score += 0.5
    dim3_status = f"极端超卖(CCI={cci_val:.1f})"
elif cci_prev > 100 and cci_val < 100:
    score -= 1
    dim3_status = f"超买回调(CCI={cci_val:.1f})"
else:
    dim3_status = f"正常区间(CCI={cci_val:.1f})"

# 维度4：量能变化
amt_ratio = latest['amt_ratio']
price_change = (latest['close'] - df.iloc[-2]['close']) / df.iloc[-2]['close']
if amt_ratio > 1.3 and price_change > 0:
    score += 1
    dim4_status = f"量能放大(ratio={amt_ratio:.2f})"
elif amt_ratio < 0.8:
    score -= 1
    dim4_status = f"量能萎缩(ratio={amt_ratio:.2f})"
else:
    dim4_status = f"量能温和(ratio={amt_ratio:.2f})"

# 维度5：MACD
dif_val = latest['dif']
dea_val = latest['dea']
dif_prev = df.iloc[-2]['dif']
dea_prev = df.iloc[-2]['dea']
if dif_prev <= dea_prev and dif_val > dea_val:  # 金叉
    score += 1
    dim5_status = "金叉"
elif dif_prev >= dea_prev and dif_val < dea_val:  # 死叉
    score -= 1
    dim5_status = "死叉"
elif dif_val > 0 and dea_val > 0:
    score += 0.5
    dim5_status = "零轴上方"
elif dif_val < 0 and dea_val < 0:
    score -= 0.5
    dim5_status = "零轴下方"
else:
    dim5_status = "缠绕"

# 检测背离（最近20日）
recent_lows = df[df['close'] == df['close'].rolling(window=20).min()].tail(2)
if len(recent_lows) == 2:
    p1, p2 = recent_lows['close'].values
    d1, d2 = recent_lows['dif'].values
    if p2 < p1 and d2 > d1:
        score += 1  # 底背离额外加分
        dim5_status += " + 底背离"

# 步骤4：输出诊断报告
print(f"""
📊 四川九洲(000801) 五维技术诊断

## 实时行情
- 现价：{latest['close']:.2f}元 ({price_change*100:+.2f}%)
- 成交量：{latest['volume']/1e6:.1f}万手
- 成交额：{latest['amount']/1e8:.2f}亿

## 五维信号评分
| 维度 | 状态 | 评分 |
|------|------|------|
| 主图趋势 | {dim1_status} | {'+' if score>0 else ''}{score:.1f}星 |
| 资金流向 | {dim2_status} | +1星 |
| 动量CCI | {dim3_status} | {'+' if score>0 else ''}{score:.1f}星 |
| 量能变化 | {dim4_status} | {'+' if score>0 else ''}{score:.1f}星 |
| MACD | {dim5_status} | {'+' if score>0 else ''}{score:.1f}星 |

## 综合评级
- 星级：{'⭐' * int(score)}（{score:.1f}星共振）
""")

if score >= 4.5:
    print("- 操作建议：**满仓干**（极强共振）")
    print("- 仓位上限：100%")
elif score >= 3.5:
    print("- 操作建议：**重仓**（强共振）")
    print("- 仓位上限：70-90%")
elif score >= 2.5:
    print("- 操作建议：**正常仓位**（中等共振）")
    print("- 仓位上限：40-60%")
elif score >= 1.5:
    print("- 操作建议：**轻仓试错**（弱共振）")
    print("- 仓位上限：20-30%")
elif score >= 0:
    print("- 操作建议：**观望**（无明显信号）")
    print("- 仓位上限：<10%")
else:
    print("- 操作建议：**空仓/减仓**（看跌共振）")
    print("- 仓位上限：0%")

# 止损位计算
ma20_val = latest['ma20']
print(f"""
## 关键价位
- 止损位：MA20={ma20_val:.2f}元（跌破减仓）
- 支撑位：近20日最低点={df['low'].tail(20).min():.2f}元
- 压力位：近20日最高点={df['high'].tail(20).max():.2f}元

## 风险提示
- 以上仅为技术分析交流，不构成投资建议
- 需结合大盘环境和板块情绪综合判断
""")
```

**实际输出示例**（基于四川九洲真实数据）：
```
📊 四川九洲(000801) 五维技术诊断

## 实时行情
- 现价：12.37元 (+4.04%)
- 成交量：85.3万手
- 成交额：1.05亿

## 五维信号评分
| 维度 | 状态 | 评分 |
|------|------|------|
| 主图趋势 | 空头排列(MA5<MA20) | -1星 |
| 资金流向 | 主力大幅流入(+3200万) | +1星 |
| 动量CCI | 超卖反弹(CCI=-87.3) | +1星 |
| 量能变化 | 量能放大(ratio=1.42) | +1星 |
| MACD | 零轴下方(DIF=-0.40) | -0.5星 |

## 综合评级
- 星级：⭐⭐⭐（2.5星共振）
- 操作建议：**正常仓位**（中等共振）
- 仓位上限：40-60%

## 关键价位
- 止损位：MA20=12.85元（当前股价低于MA20，需谨慎）
- 支撑位：近20日最低点=11.92元
- 压力位：近20日最高点=13.58元

## 风险提示
- 主图仍处空头，等待MA5上穿MA20确认
- MACD在零轴下方，趋势未完全转强
- 以上仅为技术分析交流，不构成投资建议
```

---

### 场景2：批量扫描持仓（全自动）

**用户输入**：
```
扫描我的持仓：四川九洲、建设工业、凯美特气
```

**系统自动执行**：
```python
stocks = [
    ("四川九洲", "sz.000801"),
    ("建设工业", "sz.000738"),
    ("凯美特气", "sz.002549")
]

results = []
for name, code in stocks:
    # 对每只股票执行五维计算
    score, details = calculate_five_dimensions(code)
    results.append((name, code, score, details))

# 按星级排序
results.sort(key=lambda x: x[2], reverse=True)

# 输出表格
print("📋 持仓技术监控 · 2026-06-13\n")
print("| 股票 | 星级 | 主图 | 资金流 | CCI | 量能 | MACD | 建议 |")
print("|------|------|------|--------|-----|------|------|------|")

for name, code, score, details in results:
    stars = '⭐' * max(0, int(score))
    suggestion = get_suggestion(score)  # 根据星级返回建议
    print(f"| {name} | {stars}({score:.1f}) | {details['dim1']} | {details['dim2']} | {details['dim3']} | {details['dim4']} | {details['dim5']} | {suggestion} |")

# 操作优先级
print("\n## 操作优先级")
print(f"1. **优先加仓**：{results[0][0]}（{results[0][2]:.1f}星，最强共振）")
if results[-1][2] < 0:
    print(f"2. **考虑减仓**：{results[-1][0]}（{results[-1][2]:.1f}星，看跌信号）")
```

**输出示例**：
```
📋 持仓技术监控 · 2026-06-13

| 股票 | 星级 | 主图 | 资金流 | CCI | 量能 | MACD | 建议 |
|------|------|------|--------|-----|------|------|------|
| 四川九洲 | ⭐⭐⭐(2.5) | 空头 | +3200万 | 超卖反弹 | 放大1.42x | 零轴下 | 正常仓位 |
| 建设工业 | ⭐⭐(1.8) | 弱势多头 | +800万 | 正常 | 温和1.05x | 缠绕 | 轻仓 |
| 凯美特气 | ⭐(-0.5) | 空头 | -1500万 | 超买回调 | 萎缩0.72x | 死叉 | 减仓 |

## 操作优先级
1. **优先加仓**：四川九洲（2.5星，中等共振）
2. **考虑减仓**：凯美特气（-0.5星，看跌信号）
```

---

### 场景3：板块机会筛选（批量自动化）

**用户输入**：
```
扫描半导体板块：中微公司、北方华创、南大光电
```

**系统自动执行**：
```python
sector_stocks = [
    ("中微公司", "sh.688012"),
    ("北方华创", "sz.002371"),
    ("南大光电", "sz.300346")
]

high_confidence = []
low_confidence = []

for name, code in sector_stocks:
    score, _ = calculate_five_dimensions(code)
    if score >= 3.5:
        high_confidence.append((name, score))
    elif score <= 1.5:
        low_confidence.append((name, score))

print("🔍 半导体板块 机会扫描\n")
print("## 高确信度标的（⭐⭐⭐⭐以上）")
for name, score in high_confidence:
    print(f"- {name}：{score:.1f}星，建议重仓")

print("\n## 排除标的（⭐⭐以下）")
for name, score in low_confidence:
    print(f"- {name}：{score:.1f}星，建议回避")
```

---

### 场景4：背离检测（自动识别）

**用户输入**：
```
检查韦尔股份有没有背离
```

**系统自动执行**：
```python
# 检测最近60日的背离
df = get_kline_data("sh.600360", days=60)

# 找局部高点
peaks = []
for i in range(2, len(df)-2):
    if df.iloc[i]['high'] > df.iloc[i-1]['high'] and df.iloc[i]['high'] > df.iloc[i+1]['high']:
        if df.iloc[i]['high'] > df.iloc[i-2:i].max() and df.iloc[i]['high'] > df.iloc[i+1:i+3].max():
            peaks.append(i)

# 检测顶背离
for i in range(1, len(peaks)):
    p1_idx, p2_idx = peaks[i-1], peaks[i]
    p1, p2 = df.iloc[p1_idx]['high'], df.iloc[p2_idx]['high']
    d1, d2 = df.iloc[p1_idx]['dif'], df.iloc[p2_idx]['dif']
    
    if p2 > p1 and d2 < d1:
        print(f"⚠️ 检测到顶背离！")
        print(f"- 价格高点1：{p1:.2f}元 (DIF={d1:.3f})")
        print(f"- 价格高点2：{p2:.2f}元 (DIF={d2:.3f})")
        print(f"- 含义：股价创新高但DIF降低，上涨动能衰竭")
        print(f"- 建议：如果叠加主图LJSELL或资金流出 → 立即清仓")
        break

# 检测底背离（类似逻辑）
```

---

## 与四层融合框架联动

### 技术信号 → 四层映射

| 技术信号 | 对应四层框架 | 作用 |
|---------|------------|------|
| **主图UPSEG/DNSEG** | L1情绪层 执念阶段量化 | 判断趋势位置 |
| **副图1大单持续流入** | L3证据层 Tier A（资金确认） | 验证真实性 |
| **副图2 B/S信号** | L1情绪层 超买超卖极值 | 找转折点 |
| **成交额MA金叉/死叉** | L2产业层 资金活跃度 | 判断持续性 |
| **MACD背离** | L0人性层 情绪背离信号 | 住相信号链亮灯 |
| **五维共振⭐⭐⭐⭐⭐** | 全框架三重共振 | 最高确信度 |

### 住相信号链与技术指标联动

| 住相信号 | 技术触发条件 |
|---------|------------|
| **龙头乏力** | 主图LJSELL + MACD顶背离 |
| **跟风先跑** | 副图2 S信号 + 副图1大单流出 |
| **扩散停止** | 板块内多数股成交额MA死叉 |
| **情绪背离** | 股价涨但MACD DIF降低（背离） |
| **资金转向** | 副图1大单从流入转为持续流出 |

**规则**：住相信号链亮灯数 + 技术指标看跌维数 ≥ 5 = 强制减仓。

---

## 实战避坑指南

### 1. **单一指标陷阱**
```
错误：只看MACD金叉就买入
正确：至少三维确认（如MACD金叉 + 主力流入 + MA5>MA20）
自动化优势：系统强制五维扫描，避免主观选择性偏差
```

### 2. **滞后性问题**
```
问题：等技术指标全部确认，股价已涨了一段
解决：
- 用CCI超卖反弹（早期信号）+ MACD金叉（确认信号）分步建仓
- 四星以上即可介入，不必等五星满格
```

### 3. **假突破过滤**
```
问题：MA5刚上穿MA20，但次日又跌回去
解决：
- 必须等资金流向确认（主力净流入>1000万）
- 成交量必须放大（amt_ratio>1.3）
- 双过滤机制大幅降低假信号率
```

### 4. **过度交易**
```
问题：频繁根据信号买卖，手续费侵蚀利润
解决：
- 只在≥2.5星时操作（中等共振以上）
- <1.5星坚决观望
- 系统自动过滤低确信度机会
```

### 5. **忽视大盘环境**
```
问题：个股五维共振但大盘暴跌，照样被拖累
解决：
- 先扫描上证指数/创业板指的MA5/MA20状态
- 大盘处于空头排列时，个股星级-1星处理
- 系统性风险优先于个股信号
```

### 6. **数据质量问题**
```
问题：baostock数据延迟或TDX MCP返回为空
解决：
- baostock使用前复权数据（adjustflag="3"）
- MCP返回为空时，用成交量变化近似资金流向
- 多数据源交叉验证（akshare作为备选）
```

---

## 数据源与可行性说明（全自动化）

### **核心数据源**

| 数据项 | 来源 | 获取方式 | 可靠性 |
|--------|------|---------|--------|
| **历史K线**（OHLCV） | baostock库 | `query_history_k_data_plus()` | ✅ 高（支持前复权） |
| **实时行情** | TDX MCP | `tdx_wenda_quotes` | ✅ 高（官方接口） |
| **资金流向** | TDX MCP | `tdx_wenda_quotes` | ⚠️ 中（有时返回空） |
| **财务指标** | TDX MCP | `tdx_wenda_quotes` | ✅ 高（季报数据） |

### **计算指标**（Python pandas自动完成）

| 指标 | 计算方法 | 复杂度 |
|------|---------|--------|
| **MA5/MA20** | `df['close'].rolling(window=N).mean()` | 简单 |
| **CCI** | `(TP - MA(TP,20)) / (0.015 * MAD)` | 中等 |
| **MACD(6,13,4)** | `EMA12-EMA26` + DEA平滑 | 中等 |
| **成交额比值** | `amount.rolling(5).mean() / amount.rolling(20).mean()` | 简单 |
| **背离检测** | 局部极值点对比 | 复杂（需遍历） |

### **Fallback策略**

当主要数据源失败时：
```python
# 策略1：baostock失败 → 尝试akshare
try:
    df = bs_query(...)
except:
    df = akshare.get_stock_history("000801")

# 策略2：MCP资金流返回空 → 用成交量近似
if mcp_fund_flow is None:
    vol_ratio = df['volume'].tail(3).mean() / df['volume'].tail(10).mean()
    if vol_ratio > 1.5:
        fund_score = 0.5  # 放量，可能有资金介入
    elif vol_ratio < 0.7:
        fund_score = -0.5  # 缩量，资金撤离
```

### **性能优化**

**Token节省技巧**：
- 批量查询：一次获取60日K线，本地计算所有指标
- 缓存结果：同一股票日内多次询问，复用首次计算结果
- 并行处理：扫描多只股票时，用`concurrent.futures`并行获取数据

**执行时间**：
- 单股诊断：~3秒（baostock登录+查询+计算）
- 批量扫描（5只）：~8秒（并行获取）
- 板块筛选（20只）：~15秒

---

## 可视化扩展（可选）

### ECharts K线图 + 多指标叠加

**生成图表代码**：
```python
import json

# 准备ECharts数据
chart_data = {
    'dates': df['date'].tolist(),
    'kline': df[['open', 'close', 'low', 'high']].values.tolist(),
    'ma5': df['ma5'].tolist(),
    'ma20': df['ma20'].tolist(),
    'volumes': df['volume'].tolist(),
    'dif': df['dif'].tolist(),
    'dea': df['dea'].tolist(),
    'macd': df['macd'].tolist()
}

# 保存为JSON供前端渲染
with open('/tmp/chart_data.json', 'w') as f:
    json.dump(chart_data, f)

print("图表数据已生成，可用ECharts渲染")
```

**ECharts配置要点**：
- 主图：K线蜡烛 + MA5黄线 + MA20紫线
- 副图1：成交量柱状图
- 副图2：MACD柱状图 + DIF白线 + DEA黄线
- 交互：鼠标悬停显示详细数据

---

## 与feishuclaw联动（自动归档）

### 每日技术诊断日志

**自动生成Markdown报告**：
```python
from datetime import datetime
import subprocess

today = datetime.now().strftime("%Y-%m-%d")
report = f"""
# 技术诊断日报 · {today}

## 扫描标的
| 股票 | 星级 | 操作建议 | 关键信号 |
|------|------|---------|---------|
| 四川九洲 | ⭐⭐⭐(2.5) | 正常仓位 | CCI超卖反弹+量能放大 |
| 建设工业 | ⭐⭐(1.8) | 轻仓 | MA5弱势多头 |

## 重点观察
- 四川九洲：等待MA5上穿MA20确认转强
- 凯美特气：五星看跌，建议减仓

以上仅为技术分析交流，不构成投资建议
"""

# 写入feishuclaw daily日志
log_file = f"/Users/tingchim2pro/Desktop/feishuclaw/daily/{today}-技术诊断.md"
with open(log_file, 'w', encoding='utf-8') as f:
    f.write(report)

# Git提交并推送
subprocess.run(["cd", "/Users/tingchim2pro/Desktop/feishuclaw"])
subprocess.run(["git", "add", "."])
subprocess.run(["git", "commit", "-m", f"[auto] {today} 技术诊断"])
subprocess.run(["git", "push"])

print(f"日报已归档：{log_file}")
```

---

## 回应风格

- **先说星级**：几星共振，让用户一眼看到确信度
- **表格化呈现**：五维信号一目了然
- **不回避矛盾**：如果指标冲突，明确说"观望"
- **给具体价位**：止损位和目标位要具体数字（基于MA20、近期高低点）
- **结尾必须加**：以上仅为技术分析交流，不构成投资建议

---

## 特别场景

### 场景1：与美股映射联动
```
美股前夜某板块大涨 → A股对应标的：
  如果五维共振⭐⭐⭐⭐以上 → 映射成功率高，可参与
  如果星级≤2星 → 映射成功率低，放弃
```

### 场景2：与季节性板块联动
```
当前月份对应季节性板块 → 扫描成分股：
  找出⭐⭐⭐⭐以上的标的
  "季节催化 + 技术共振" = 高胜率组合
```

### 场景3：与持仓诊断联动
```
每日自动扫描9只持仓：
  五星看涨 → 建议加仓
  三星持有 → 继续观察
  一星或五星看跌 → 建议减仓或清仓
  
叠加基本面ABCD评级：
  技术⭐⭐⭐⭐ + 基本A级 = 最强候选
  技术⭐ + 基本D级 = 立即清仓
```

---

## 回应风格

- **先说星级**：几星共振，让用户一眼看到确信度
- **表格化呈现**：五维信号一目了然
- **不回避矛盾**：如果指标冲突，明确说"放弃"或"观望"
- **给具体价位**：止损位和目标位要具体数字，不说模糊话
- **结尾必须加**：以上仅为技术分析交流，不构成投资建议

---

## 特别场景

### 场景1：与美股映射联动
```
美股前夜某板块大涨 → A股对应标的：
  如果五维共振⭐⭐⭐⭐以上 → 映射成功率高，可参与
  如果星级≤2星 → 映射成功率低，放弃
```

### 场景2：与季节性板块联动
```
当前月份对应季节性板块 → 扫描成分股：
  找出⭐⭐⭐⭐以上的标的
  "季节催化 + 技术共振" = 高胜率组合
```

### 场景3：与持仓诊断联动
```
每日扫描9只持仓：
  五星看涨 → 建议加仓
  三星持有 → 继续观察
  一星或五星看跌 → 建议减仓或清仓
  
叠加基本面ABCD评级：
  技术⭐⭐⭐⭐ + 基本A级 = 最强候选
  技术⭐ + 基本D级 = 立即清仓
```

