# A股买点分析框架

综合技术面 + 估值 + 财务 + 盈利预测的完整分析模板。

## 分析步骤

### 1. 获取数据

```python
import akshare as ak
import pandas as pd
import numpy as np
from datetime import datetime, timedelta

symbol = '000333'  # 股票代码
today = datetime.now().strftime('%Y%m%d')
start_1y = (datetime.now() - timedelta(days=365)).strftime('%Y%m%d')

# K线（近1年）
df = ak.stock_zh_a_hist(symbol=symbol, period='daily',
                        start_date=start_1y, end_date=today, adjust='qfq')
```

**⚠️ 代理问题**：如果系统有全局代理，AKShare 会报 `ProxyError`。
先清除代理：
```bash
unset http_proxy https_proxy HTTP_PROXY HTTPS_PROXY
```
或 Python 内：
```python
for k in ['http_proxy','https_proxy','HTTP_PROXY','HTTPS_PROXY']:
    os.environ.pop(k, None)
```

### 2. 技术面分析

#### 价格位置
```python
current = df.iloc[-1]
year_high = df['最高'].max()
year_low = df['最低'].min()
position = (current['收盘'] - year_low) / (year_high - year_low) * 100
```

#### 均线系统
```python
for m in [5, 10, 20, 60, 120]:
    ma = pd.Series(df['收盘']).rolling(m).mean().iloc[-1]
    dist = (current['收盘'] - ma) / ma * 100  # 偏离度
```

均线多头排列 = 短期在长期之上。偏离度 >5% 警惕回调，<-5% 可能超跌。

#### ATR 波动率
```python
tr_list = []
for i in range(1, len(df.tail(20))):
    h_l = df.tail(20).iloc[i]['最高'] - df.tail(20).iloc[i]['最低']
    h_pc = abs(df.tail(20).iloc[i]['最高'] - df.tail(20).iloc[i-1]['收盘'])
    l_pc = abs(df.tail(20).iloc[i]['最低'] - df.tail(20).iloc[i-1]['收盘'])
    tr_list.append(max(h_l, h_pc, l_pc))
atr14 = sum(tr_list[-14:]) / min(14, len(tr_list))
```

#### 支撑阻力
```python
support20 = df.tail(20)['最低'].min()
resist20 = df.tail(20)['最高'].max()
support60 = df.tail(60)['最低'].min()
resist60 = df.tail(60)['最高'].max()
```

#### 量能分析
```python
avg_vol_20 = df.tail(20)['成交量'].mean()
latest_vol_ratio = df.iloc[-1]['成交量'] / avg_vol_20
```
量比 > 1.5 = 显著放量，< 0.5 = 缩量。

#### MACD
```python
closes = df['收盘'].values
ema12 = pd.Series(closes).ewm(span=12).mean().iloc[-1]
ema26 = pd.Series(closes).ewm(span=26).mean().iloc[-1]
dif = ema12 - ema26
dea = pd.Series(pd.Series(closes).ewm(span=12).mean() - pd.Series(closes).ewm(span=26).mean()).ewm(span=9).mean().iloc[-1]
```

#### 近期趋势强度
```python
up_days = len(df.tail(20)[df.tail(20)['涨跌幅'] > 0])
down_days = 20 - up_days
recent_10_return = df.tail(10)['涨跌幅'].sum()
recent_5_return = df.tail(5)['涨跌幅'].sum()
```

### 3. 估值分析

```python
# 东方财富实时行情含PE/PB/市值
df_spot = ak.stock_zh_a_spot_em()
row = df_spot[df_spot['代码'] == symbol].iloc[0]
pe_dynamic = row['市盈率-动态']
pb = row['市净率']
market_cap = row['总市值']
```

### 4. 盈利预测

```python
df_fc = ak.stock_profit_forecast_ths(symbol=symbol)
# 返回: 年度, 预测机构数, 最小值, 均值, 最大值, 行业平均数

# 计算远期PE
current_price = df.iloc[-1]['收盘']
for _, r in df_fc.iterrows():
    pe_fwd = current_price / r['均值']
    print(f"{r['年度']}E PE: {pe_fwd:.1f}x")
```

### 5. 财务基本面

**new API (长格式)**：
```python
df_f = ak.stock_financial_abstract_new_ths(symbol=symbol)
profit = df_f[df_f['metric_name'] == 'parent_holder_net_profit'].iloc[0]
yoy = profit['yoy']  # 同比增长率
```

**旧API (宽格式)**：
```python
df_f = ak.stock_financial_abstract_ths(symbol=symbol)
```

**现金流**：
```python
df_cf = ak.stock_financial_cash_ths(symbol=symbol)
```

**资产负债**：
```python
df_d = ak.stock_financial_debt_ths(symbol=symbol)
```

### 6. 买点策略模板

#### 策略A：回踩均线建仓（稳健）
```
第一买点: MA20 ± 0.5
止损: S60 - 1 (略低于中期支撑)
目标: R20 (近20日高点)
```

#### 策略B：突破确认加仓（激进）
```
第一买点: 现价轻仓
第二买点: 突破MA20后回踩确认
止损: MA10下方
目标: 前高
```

#### 策略C：等回调（最稳健）
```
买点: S20 ~ (S20 + 0.5 * ATR)
止损: S60 - ATR
目标: R20
```

### 输出格式

简洁卡片式，用 emoji + 表格，避免大段文字。包含：
- 📊 盘面概览（今日涨跌、量比、ATR）
- 📈 均线位置（表格式）
- 🎯 支撑阻力
- 💰 估值（PE/PB + 远期PE）
- ⚡ 催化剂 + ⚠️ 风险
- 具体买点/止损/目标位

### 数据源选择

| 数据 | 推荐函数 | 速度 |
|------|----------|------|
| K线/行情 | `stock_zh_a_hist()` 东方财富 | 1-2s |
| 实时行情含PE | `stock_zh_a_spot_em()` 东方财富 | ~70s(首) / 快(缓存) |
| 财务摘要(新) | `stock_financial_abstract_new_ths()` | 2-3s |
| 财务摘要(旧/宽) | `stock_financial_abstract_ths()` | 2-3s |
| 盈利预测 | `stock_profit_forecast_ths()` | 2-3s |
| 现金流 | `stock_financial_cash_ths()` | 2-3s |
| 资产负债 | `stock_financial_debt_ths()` | 2-3s |
| 主营业务 | `stock_zyjs_ths()` | 1-2s |
