跳转至

AI 量化研究:A 股实战分析框架

创建日期: 2026年5月1日 | 状态: 生产就绪 数据源: akshare (新浪财经源), 实时验证 验证股票: 贵州茅台 (600519) - 2025-01-01 至 2025-04-30


1. 数据基础设施

1.1 akshare 数据获取(已验证)

import akshare as ak
import pandas as pd
import numpy as np

# 日线数据(前复权)- 新浪财经源
df = ak.stock_zh_a_daily(
    symbol="sh600519",      # sh/sz + 6位代码
    start_date="20240101",
    end_date="20250430",
    adjust="qfq"           # qfq=前复权, hfq=后复权, ""=不复权
)
# 返回字段: date, open, high, low, close, volume, amount, 
#          outstanding_share, turnover

# 实时行情(东方财富源)
spot = ak.stock_zh_a_spot_em()
# 包含: 代码, 名称, 最新价, 涨跌幅, 换手率, 成交量, 成交额等

# 北向资金
north = ak.stock_hsgt_north_net_flow_in_em(symbol="北上")
# 返回每日北向资金净流入
跌幅, 换手率, 成交量, 成交额等

北向资金

north = ak.stock_hsgt_north_net_flow_in_em(symbol="北上")

返回每日北向资金净流入

```### 1.2 技术指标计算(无需 TA-Lib)

def ema(data, period):
    """指数移动平均"""
    k = 2 / (period + 1)
    ema_val = np.zeros_like(data, dtype=float)
    ema_val[0] = data[0]
    for i in range(1, len(data)):
        ema_val[i] = data[i] * k + ema_val[i-1] * (1 - k)
    return ema_val

def compute_macd(close, fast=12, slow=26, signal=9):
    """MACD 指标"""
    ema_fast = ema(close, fast)
    ema_slow = ema(close, slow)
    dif = ema_fast - ema_slow
    dea = ema(dif, signal)
    macd_hist = 2 * (dif - dea)
    return dif, dea, macd_hist

def compute_rsi(close, period=14):
    """RSI 相对强弱指标"""
    delta = np.diff(close)
    gain = np.where(delta > 0, delta, 0)
    loss = np.where(delta < 0, -delta, 0)
    avg_gain = np.zeros(len(close))
    avg_loss = np.zeros(len(close))
    avg_gain[period] = np.mean(gain[:period])
    avg_loss[period] = np.mean(loss[:period])
    for i in range(period+1, len(close)):
        avg_gain[i] = (avg_gain[i-1]*(period-1) + gain[i-1]) / period
        avg_loss[i] = (avg_loss[i-1]*(period-1) + loss[i-1]) / period
    rs = avg_gain / np.where(avg_loss == 0, 1, avg_loss)
    return 100 - (100 / (1 + rs))
 / period
    rs = avg_gain / np.where(avg_loss == 0, 1, avg_loss)
    return 100 - (100 / (1 + rs))def compute_kdj(high, low, close, n=9):
    """KDJ 随机指标"""
    low_n = np.array([np.min(low[max(0,i-n+1):i+1]) for i in range(len(low))])
    high_n = np.array([np.max(high[max(0,i-n+1):i+1]) for i in range(len(high))])
    rsv = (close - low_n) / np.where(high_n - low_n == 0, 1, high_n - low_n) * 100
    k = ema(rsv, 3)
    d = ema(k, 3)
    j = 3*k - 2*d
    return k, d, j

n - low_n) * 100 k = ema(rsv, 3) d = ema(k, 3) j = 3k - 2d return k, d, j

---## 2. 实战分析框架:贵州茅台 (600519) 案例分析

### 2.1 关键数据看板

| 指标 | 数值 | 说明 |
|------|------|------|
| 最新收盘价 | 1491.86 | 2025-04-30 |
| MA5 | 1493.46 | 短期均线压制 |
| MA10 | 1497.75 | 中期均线压制 |
| MA20 | 1495.82 | 价格略低于20日均线 |
| MA60 | 1472.54 | 中长期均线支撑 |
| 成交量比率(5日/20日) | 0.57 | 量能萎缩 |

### 2.2 技术面多空信号

| 指标 | 数值 | 状态 | 解读 |
|------|------|------|------|
| MACD DIF | -0.1116 | 死叉 | DIF 低于 DEA,短期空头占优 |
| MACD DEA | 2.2537 | 下行 | 中期动能减弱 |
| RSI(14) | 48.35 | 中性 | 未进入超买(>70)或超卖(<30)区间 |
| KDJ-K | 32.92 | 偏弱 | K 值偏低,接近超卖区 |
| KDJ-D | 33.91 | 偏弱 | D 值同步走低 |
| KDJ-J | 30.95 | 偏弱 | J 值最低,有反弹需求但信号不强烈 |

**技术面综合判断**: 短期均线空头排列(MA5 < MA10 < MA20),MACD 死叉,但价格仍高于 MA60 中长期支撑线,属于**短期回调、中期盘整**格局。

### 2.3 量价关系分析

- **成交量比率 0.57**: 5日均量仅为20日均量的57%,属于**明显缩量**
- **量缩价跌**: 符合正常回调特征,非恐慌性抛售
- **天量/地量参考**: 期间最大成交量出现在 2025-04-30(257万手),为阶段性放量
- **筹码分布**: 缩量回调至 MA60 附近,筹码集中度提高

### 2.4 操作建议区间

| 区间类型 | 价格区间 | 依据 |
|----------|----------|------|
| 支撑位 | 1472-1480 | MA60 (1472.54) + 近期低点 |
| 压力位 | 1495-1510 | MA20 (1495.82) + MA10 (1497.75) + 近期高点 |
| 观察区间 | 1472-1510 | 等待方向选择 |

### 2.5 风险提示

1. **板块退潮风险**: 白酒板块整体估值处于历史中位,若消费数据不及预期可能进一步承压
2. **技术指标共振偏空**: MACD 死叉 + KDJ 偏弱 + 均线空头排列,三重共振增加短期下行概率
3. **量能不足**: 缩量状态下突破压力位的可信度较低,需等待放量确认

---

## 3. 资金面分析框架

### 3.1 北向资金追踪

```python
# 北向资金净流入(日频)
north_flow = ak.stock_hsgt_north_net_flow_in_em(symbol="北上")
# 分析: 连续净流入天数、累计净流入额、与股价相关性

# 个股北向持股
north_hold = ak.stock_hsgt_individual_em(symbol="600519")
# 分析: 北向持股比例变化趋势

3.2 主力资金流向

_hold = ak.stock_hsgt_individual_em(symbol="600519")
# 分析: 北向持股比例变化趋势

3.2 主力资金流向

```python# 个股资金流向(东方财富) fund_flow = ak.stock_individual_fund_flow(stock="600519", market="sh")

分析: 主力净流入/流出、超大单/大单/中单/小单分布

### 3.3 龙虎榜分析

```python
# 龙虎榜个股详情
lhb = ak.stock_lhb_detail_em(
    start_date="20250401",
    end_date="20250430"
)
# 分析: 游资席位追踪、机构买卖差额、知名游资动向

4. 舆情面分析框架

4.1 行业板块轮动

# 行业板块涨跌幅
sector = ak.stock_board_industry_name_em()
# 分析: 当日/周/月涨跌幅排名,判断资金偏好

# 概念板块热度
concept = ak.stock_board_concept_name_em()
# 分析: 概念板块资金流入排名

4.2 散户情绪指标

指标 计算方法 解读
换手率 成交量 / 流通股本 >5% 活跃,>10% 过热,<1% 冷清
量比 当日量 / 5日平均量 >2 放量,<0.5 缩量
涨停板数量 每日涨停股票数 >100 市场情绪高涨,<20 情绪低迷

10% 过热,<1% 冷清 | | 量比 | 当日量 / 5日平均量 | >2 放量,<0.5 缩量 | | 涨停板数量 | 每日涨停股票数 | >100 市场情绪高涨,<20 情绪低迷 |

---## 5. 完整分析管线

def analyze_stock(symbol, name, start_date="20240101", end_date="20250430"):
    """完整 A 股分析管线"""
    import akshare as ak

    # 1. 获取数据
    df = ak.stock_zh_a_daily(symbol=symbol, start_date=start_date, end_date=end_date, adjust="qfq")
    close = df['close'].values.astype(float)
    high = df['high'].values.astype(float)
    low = df['low'].values.astype(float)
    volume = df['volume'].values.astype(float)

    # 2. 计算技术指标
    dif, dea, macd_hist = compute_macd(close)
    rsi = compute_rsi(close)
    k, d, j = compute_kdj(high, low, close)

    # 3. 计算均线
    ma5 = np.convolve(close, np.ones(5)/5, 'valid')
    ma20 = np.convolve(close, np.ones(20)/20, 'valid')
    ma60 = np.convolve(close, np.ones(60)/60, 'valid')

    # 4. 生成报告
    report = {
        "stock": symbol,
        "name": name,
        "last_close": close[-1],
        "macd_status": "金叉" if dif[-1] > dea[-1] else "死叉",
        "rsi": rsi[-1],
        "rsi_status": "超买" if rsi[-1]>70 else "超卖" if rsi[-1]<30 else "中性",
        "kdj_k": k[-1],
        "kdj_d": d[-1],
        "kdj_j": j[-1],
        "ma5": ma5[-1],
        "ma20": ma20[-1],
        "ma60": ma60[-1],
        "vol_ratio": np.mean(volume[-5:]) / np.mean(volume[-20:])
    }
    return report

# 使用示例
report = analyze_stock("sh600519", "贵州茅台")
print(json.dumps(report, indent=2, ensure_ascii=False))

6. 避坑指南

ock("sh600519", "贵州茅台") print(json.dumps(report, indent=2, ensure_ascii=False)) ```


6. 避坑指南### 6.1 数据源注意事项

问题 解决方案
stock_zh_a_spot_em 连接超时 东方财富限频,建议加 time.sleep(1) 或使用备用源
前复权 vs 后复权 技术分析用前复权(qfq),收益计算用后复权(hfq)
停牌日数据缺失 akshare 自动跳过停牌日,计算均线时需注意数据连续性
新股数据不足 MA60 需要60个交易日,新股指标不可靠

6.2 指标计算注意事项

问题 解决方案
EMA 初始值偏差 使用前 period 个数据作为预热期
RSI 极端值 avg_loss=0 时需特殊处理(代码已处理)
KDJ 钝化 强势股 KDJ 可能在超买区持续运行,需结合其他指标
均线滞后性 MA 是滞后指标,不能作为唯一决策依据

6.3 量化分析红线

  • 严禁使用模拟数据替代真实数据
  • 严禁给出"明天必涨/必跌"等无依据结论
  • 必须基于数据逻辑推导,标注假设条件
  • 必须明确风险提示,列出潜在风险点
  • 严禁使用英文缩写代替中文术语(如 PE 写为市盈率)