Metadata-Version: 2.4
Name: levistock
Version: 0.1.2
Summary: A股市场数据SDK
License: MIT
Requires-Python: >=3.8
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: requests>=2.28.0
Requires-Dist: tqdm>=4.0.0
Dynamic: license-file

# levistock

A股市场数据 SDK，封装东方财富、财联社、同花顺、开盘红、i问财常用接口。

## 安装

```bash
pip install levistock
```

或从 GitHub 安装最新版：

```bash
pip install git+https://github.com/fleetinglife/levistock.git
```

## 快速开始

```python
import levistock as lk

# 大盘指数
lk.market_index_em()

# 涨停池
lk.stock_zt_pool_em()

# 行业板块
lk.sector_em()
```

---

## 接口文档

### 工具

#### `is_trade_day()`

判断今天是否为A股交易日。

```python
if lk.is_trade_day():
    print("今天是交易日")
```

| 返回值 | 说明 |
|--------|------|
| `bool` | True=交易日，False=非交易日 |

---

### 大盘 market

#### `market_index_em()`

获取A股常用大盘指数实时行情（东方财富），返回上证指数、深证成指、创业板指、科创50、沪深300、中证500。

```python
data = lk.market_index_em()
for item in data:
    print(f"{item['name']}: {item['price']} ({item['change_pct']}%)")
```

| 字段 | 说明 |
|------|------|
| name | 指数名称 |
| code | 指数代码 |
| price | 最新价 |
| change_pct | 涨跌幅(%) |
| change_amt | 涨跌额 |
| volume | 成交量 |
| amount | 成交额(元) |
| high | 最高价 |
| low | 最低价 |
| open | 开盘价 |
| pre_close | 昨收价 |

---

#### `market_index_all_em()`

获取全部大盘指数，字段同 `market_index_em()`。

```python
data = lk.market_index_all_em()
print(f"共 {len(data)} 个指数")
```

---

#### `market_emotion_cls()`

获取A股市场情绪数据（财联社），包含涨跌分布、封板率、连板梯队等。

```python
data = lk.market_emotion_cls()
print(f"市场热度: {data['market_degree']}")
print(f"上涨家数: {data['up_down_dis']['rise_num']}")
print(f"涨停家数: {data['up_down_dis']['up_num']}")
print(f"封板率: {data['up_ratio']}")
```

| 字段 | 说明 |
|------|------|
| market_degree | 市场热度(0-100) |
| shsz_balance | 两市成交额 |
| shsz_balance_change_px | 较上日成交额变化 |
| up_ratio | 封板率 |
| up_ratio_num | 封板数量 |
| up_open_num | 炸板数量 |
| performance | 昨涨停今表现 |
| up_open_ratio | 高开率 |
| profit_ratio | 获利率 |
| up_down_dis | 涨跌分布(dict) |
| limit_up_board | 连板梯队(dict) |

---

#### `market_wind_cls()`

获取今日风口板块列表（财联社）。

```python
data = lk.market_wind_cls()
for item in data:
    print(f"{item['plate_name']}: {item['catalyst'][:30]}...")
```

| 字段 | 说明 |
|------|------|
| plate_code | 板块代码 |
| plate_name | 板块名称 |
| catalyst | 催化剂描述 |

---

#### `market_wind_stocks_cls(plate_code)`

获取风口板块龙头股（财联社）。

| 参数 | 说明 |
|------|------|
| plate_code | 板块代码，通过 `market_wind_cls()` 获取 |

```python
wind = lk.market_wind_cls()
stocks = lk.market_wind_stocks_cls(wind[0]["plate_code"])
```

| 字段 | 说明 |
|------|------|
| secu_code | 股票代码（含市场前缀） |
| secu_name | 股票名称 |
| last_px | 现价 |
| change | 涨跌幅 |
| continuous | 连板次数 |

---

#### `market_mainline_cls()`

获取今日主线机会（财联社），返回主线题材、板块及龙头股。

```python
data = lk.market_mainline_cls()
print(data)
```

---

### 板块 sector

#### `sector_em(sector_type="industry")`

获取A股板块列表（东方财富），支持行业板块和概念板块。

| 参数 | 说明 |
|------|------|
| sector_type | `"industry"` 行业板块（默认），`"concept"` 概念板块 |

```python
# 行业板块
industry = lk.sector_em()

# 概念板块
concept = lk.sector_em(sector_type="concept")
```

| 字段 | 说明 |
|------|------|
| sector_code | 板块代码 |
| sector_name | 板块名称 |
| change_pct | 涨跌幅(%) |
| amount | 成交额(元) |
| main_inflow | 主力净流入(元) |
| lead_stock_name | 领涨股名称 |
| lead_stock_code | 领涨股代码 |
| lead_stock_chg | 领涨股涨跌幅(%) |
| up_count | 上涨家数 |
| down_count | 下跌家数 |

---

#### `sector_stocks_em(sector_code)`

获取板块成分股（东方财富），行业板块和概念板块通用。

| 参数 | 说明 |
|------|------|
| sector_code | 板块代码，如 `"BK1033"` |

```python
stocks = lk.sector_stocks_em("BK1033")
```

| 字段 | 说明 |
|------|------|
| stock_code | 股票代码 |
| stock_name | 股票名称 |

---

#### `sector_stock_belong_em(stock_codes)`

批量查询股票所属行业板块（东方财富）。

| 参数 | 说明 |
|------|------|
| stock_codes | 股票代码列表，如 `["000001", "600001"]` |

```python
data = lk.sector_stock_belong_em(["000001", "600001", "300001"])
for item in data:
    print(f"{item['stock_name']} → {item['sector_name']}")
```

| 字段 | 说明 |
|------|------|
| stock_code | 股票代码 |
| stock_name | 股票名称 |
| sector_name | 所属行业板块 |

---

#### `sector_industry_cls()`

获取A股行业板块实时行情（财联社），按涨跌幅从高到低排序。

```python
data = lk.sector_industry_cls()
# 按主力净流入排序
sorted_data = sorted(data, key=lambda x: x["main_fund_diff"], reverse=True)
```

| 字段 | 说明 |
|------|------|
| secu_name | 板块名称 |
| secu_code | 板块代码 |
| change | 涨跌幅 |
| main_fund_diff | 主力净流入(元) |
| limit_up | 上涨家数 |
| limit_down | 下跌家数 |
| limit_up_num | 涨停家数 |
| limit_down_num | 跌停家数 |
| first_stock | 领涨股信息(dict) |

---

#### `sector_ranking_kph(date)`

获取历史精选板块列表（开盘红），仅支持历史日期。

| 参数 | 说明 |
|------|------|
| date | 交易日期，格式 `"YYYY-MM-DD"`，必须小于今天 |

```python
data = lk.sector_ranking_kph(date="2026-05-06")
```

| 字段 | 说明 |
|------|------|
| plate_id | 板块ID |
| plate_name | 板块名称 |
| change_pct | 涨跌幅(%) |
| amount | 成交额(元) |
| net_inflow | 净流入(元) |
| turnover_rate | 换手率(%) |
| stock_count | 成分股数量 |

---

#### `sector_ranking_stocks_kph(plate_id, date)`

获取精选板块内股票详情（开盘红），每个板块返回前20条。

| 参数 | 说明 |
|------|------|
| plate_id | 板块ID，通过 `sector_ranking_kph()` 获取 |
| date | 交易日期，格式 `"YYYY-MM-DD"`，必须小于今天 |

```python
plates = lk.sector_ranking_kph(date="2026-05-06")
stocks = lk.sector_ranking_stocks_kph(plates[0]["plate_id"], date="2026-05-06")
```

| 字段 | 说明 |
|------|------|
| code | 股票代码 |
| name | 股票名称 |
| price | 现价 |
| change_pct | 涨跌幅(%) |
| amount | 成交额(元) |
| main_net | 主力净额(元) |
| limit_tag | 板块标签 |
| rank_tag | 龙虎榜标签 |
| chg_1d | 1日涨幅(%) |
| chg_5d | 5日涨幅(%) |
| chg_20d | 20日涨幅(%) |

---

### 股票 stock

#### `stock_zh_spot_em(filter_st=True)`

获取A股全量实时行情（东方财富）。

| 参数 | 说明 |
|------|------|
| filter_st | 是否过滤ST股，默认 `True` |

```python
data = lk.stock_zh_spot_em()
print(f"股票数: {len(data)}")
```

| 字段 | 说明 |
|------|------|
| stock_code | 股票代码 |
| stock_name | 股票名称 |
| price | 现价 |
| change_pct | 涨跌幅(%) |
| change_amt | 涨跌额 |
| volume | 成交量(手) |
| amount | 成交额(元) |
| turnover_rate | 换手率(%) |
| pe_ttm | 市盈率TTM |
| volume_ratio | 量比 |
| high | 最高价 |
| low | 最低价 |
| open | 开盘价 |
| pre_close | 昨收价 |
| total_market | 总市值(元) |
| circ_market | 流通市值(元) |
| pb | 市净率PB |

---

#### `stock_spot_em(stock_codes)`

获取指定股票实时行情（东方财富），最多支持100只。

| 参数 | 说明 |
|------|------|
| stock_codes | 股票代码列表，如 `["000001", "600001"]`，最多100只 |

```python
data = lk.stock_spot_em(["000001", "600001", "300001"])
for item in data:
    print(f"{item['stock_name']}: {item['price']} ({item['change_pct']}%)")
```

字段同 `stock_zh_spot_em()`。

---

#### `stock_zt_pool_em(date=None)`

获取涨停板股票池（东方财富），支持历史日期查询。

| 参数 | 说明 |
|------|------|
| date | 交易日期，格式 `"YYYYMMDD"`，默认今天 |

```python
# 今日涨停
data = lk.stock_zt_pool_em()

# 历史涨停
data = lk.stock_zt_pool_em(date="20260506")
```

| 字段 | 说明 |
|------|------|
| stock_code | 股票代码 |
| stock_name | 股票名称 |
| price | 现价(元) |
| change_pct | 涨跌幅(%) |
| continuous | 连板次数 |
| first_zt_time | 首次涨停时间 |
| last_zt_time | 最后涨停时间 |
| open_times | 炸板次数 |
| amount | 成交额(元) |
| turnover_rate | 换手率(%) |
| main_inflow | 主力净流入(元) |
| sector | 所属行业板块 |

---

#### `stock_zt_pool_cls()`

获取当日涨停池（财联社），含涨停原因，仅支持当天。

```python
data = lk.stock_zt_pool_cls()
for item in data:
    print(f"{item['secu_name']}: {item['up_reason']}")
```

| 字段 | 说明 |
|------|------|
| secu_code | 股票代码（含市场前缀） |
| secu_name | 股票名称 |
| last_px | 现价(元) |
| change | 涨跌幅 |
| up_reason | 涨停原因 |

---

#### `stock_changes_em(change_type="8201", filter_st=True)`

获取实时盘口异动股票列表（东方财富）。

| 参数 | 说明 |
|------|------|
| change_type | 异动类型，默认 `"8201"` 火箭发射，支持22种类型 |
| filter_st | 是否过滤ST及三板，默认 `True` |

常用异动类型：

| 类型值 | 说明 |
|--------|------|
| `"8201"` | 火箭发射 |
| `"8202"` | 快速反弹 |
| `"8193"` | 大笔买入 |
| `"8205"` | 封涨停板 |
| `"64"` | 有大买盘 |

```python
# 火箭发射
data = lk.stock_changes_em()

# 大笔买入
data = lk.stock_changes_em(change_type="8193")
```

---

#### `stock_changes_detail_em(stock_code, market, date=None)`

获取个股盘口异动明细（东方财富）。

| 参数 | 说明 |
|------|------|
| stock_code | 股票代码，如 `"000001"` |
| market | 市场，`"0"` 深市，`"1"` 沪市 |
| date | 日期，格式 `"YYYYMMDD"`，默认今天 |

```python
data = lk.stock_changes_detail_em(stock_code="000001", market="0")
```

---

#### `stock_hot_rank_ths(limit=100)`

获取A股人气股排行榜（同花顺）。

| 参数 | 说明 |
|------|------|
| limit | 返回条数，默认100 |

```python
data = lk.stock_hot_rank_ths()
for item in data[:5]:
    print(f"{item['rank']}. {item['name']} {item['change_pct']}%")
```

| 字段 | 说明 |
|------|------|
| rank | 排名 |
| code | 股票代码 |
| name | 股票名称 |
| price | 现价(元) |
| change_pct | 涨跌幅(%) |
| change_amt | 涨跌额 |
| tag | 标签信息(dict) |

---

#### `stock_timeline_cls(stock_code)`

获取个股分时数据（财联社）。

| 参数 | 说明 |
|------|------|
| stock_code | 股票代码，支持 `"002664"` 或 `"sz002664"` 格式 |

```python
data = lk.stock_timeline_cls("002664")
```

| 字段 | 说明 |
|------|------|
| date | 交易日期 |
| minute | 分钟时间 |
| last_px | 最新价 |
| business_balance | 成交额 |
| business_amount | 成交量 |
| open_px | 开盘价 |
| preclose_px | 昨收价 |
| av_px | 均价 |

---

#### `stock_kline_cls(stock_code, kline_type="daily", limit=50, offset=0)`

获取个股K线数据（财联社）。

| 参数 | 说明 |
|------|------|
| stock_code | 股票代码，支持 `"002664"` 或 `"sz002664"` 格式 |
| kline_type | K线类型，默认 `"daily"` |
| limit | 返回条数，默认50 |
| offset | 偏移量，默认0 |

K线类型：

| 类型值 | 说明 |
|--------|------|
| `"daily"` | 日K（默认） |
| `"weekly"` | 周K |
| `"monthly"` | 月K |
| `"yearly"` | 年K |

```python
# 日K
data = lk.stock_kline_cls("002664")

# 周K，返回100条
data = lk.stock_kline_cls("002664", kline_type="weekly", limit=100)
```

---

#### `stock_strategy_wencai(query, page=1, limit=50)`

i问财自然语言股票策略查询。

| 参数 | 说明 |
|------|------|
| query | 自然语言查询条件 |
| page | 页码，默认1 |
| limit | 每页条数，默认50 |

```python
data = lk.stock_strategy_wencai(query="连板3板以上")
print(data["title"])    # 表头
print(data["result"])   # 数据
```

---

### 资讯 news

#### `news_telegraph_cls(date=None, category=None)`

获取财联社电报快讯，数据超过20条时自动显示进度条。

| 参数 | 说明 |
|------|------|
| date | 日期，格式 `"YYYY-MM-DD"`，默认今天 |
| category | 消息类型，默认 `None` |

消息类型：

| 类型值 | 说明 |
|--------|------|
| `None` | 全部电报（默认） |
| `"important"` | 加红重要消息 |
| `"company"` | 公司公告 |

```python
# 今日全部
data = lk.news_telegraph_cls()

# 今日重要消息
data = lk.news_telegraph_cls(category="important")

# 历史公司公告
data = lk.news_telegraph_cls(date="2026-05-07", category="company")
for item in data:
    print(f"{item['time']} | {item['title']}")
```

| 字段 | 说明 |
|------|------|
| id | 电报ID |
| title | 标题 |
| content | 正文内容 |
| time | 发布时间，格式 `"YYYY-MM-DD HH:MM:SS"` |

---

## 数据源

| 模块 | 数据源 | 接口类型 |
|------|--------|----------|
| `market_index_em` | 东方财富 | HTTP API |
| `market_emotion_cls` | 财联社 | HTTP API |
| `market_wind_cls` | 财联社 | HTTP API（含签名） |
| `sector_em` | 东方财富 | HTTP API |
| `sector_industry_cls` | 财联社 | HTTP API（含签名） |
| `sector_ranking_kph` | 开盘红 | HTTP API |
| `stock_zh_spot_em` | 东方财富 | HTTP API |
| `stock_spot_em` | 东方财富 | HTTP API |
| `stock_zt_pool_em` | 东方财富 | HTTP API |
| `stock_zt_pool_cls` | 财联社 | HTTP API（含签名） |
| `stock_changes_em` | 东方财富 | HTTP API |
| `stock_hot_rank_ths` | 同花顺 | HTTP API |
| `stock_kline_cls` | 财联社 | HTTP API（含签名） |
| `stock_strategy_wencai` | i问财 | HTTP API（需 cookie） |
| `news_telegraph_cls` | 财联社 | HTTP API（含签名） |

## License

MIT
