本章介绍 QMT 内置 Python 中证券基本信息、财务数据和衍生品数据的获取方法。

## 证券基本信息

### 获取股票信息

```python
# 获取股票基本信息
info = ContextInfo.get_stock_info('000001.SZ')
# info 包含：名称、上市日期、所属行业等
```

### 获取证券类型

```python
# 判断证券类型
sec_type = ContextInfo.get_security_type('000001.SZ')
# 返回值：stock(股票), fund(基金), bond(债券), index(指数) 等
```

### 获取上市状态

```python
# 检查是否已上市
is_listed = ContextInfo.is_stock_listed('000001.SZ')
```

## 财务数据

### 获取财务指标

```python
# 获取财务数据
financial = ContextInfo.get_financial_data(
    ['000001.SZ'],
    ['PE', 'PB', 'ROE', '净利润'],
    '20231231',  # 报告期
    '20231231',
)
```

### 常用财务指标

| 指标 | 说明 | 数据类型 |
|------|------|----------|
| `PE` | 市盈率 | float |
| `PB` | 市净率 | float |
| `ROE` | 净资产收益率 | float |
| `EPS` | 每股收益 | float |
| `净利润` | 净利润 | float |
| `营业收入` | 营业收入 | float |
| `总资产` | 总资产 | float |
| `负债合计` | 总负债 | float |

### 获取利润表

```python
# 获取利润表数据
income = ContextInfo.get_income_data(
    '000001.SZ',
    '20231231',
)
```

### 获取资产负债表

```python
# 获取资产负债表数据
balance = ContextInfo.get_balance_sheet_data(
    '000001.SZ',
    '20231231',
)
```

## 指数数据

### 获取指数成分股

```python
# 获取沪深300成分股
stocks = ContextInfo.get_stock_list_in_sector('沪深300')
print(f'沪深300成分股数量: {len(stocks)}')

# 获取中证500成分股
stocks = ContextInfo.get_stock_list_in_sector('中证500')
```

### 获取指数权重

```python
# 获取指数成分权重
weights = ContextInfo.get_index_weights('000300.SH', '20241201')
# weights: {stock_code: weight, ...}
```

### 常用指数代码

| 指数名称 | 代码 |
|----------|------|
| 上证指数 | 000001.SH |
| 深证成指 | 399001.SZ |
| 沪深300 | 000300.SH |
| 中证500 | 000905.SH |
| 创业板指 | 399006.SZ |

## 板块数据

### 获取板块列表

```python
# 获取所有板块
sectors = ContextInfo.get_sector_list()
for sector in sectors:
    print(sector)
```

### 获取板块成分股

```python
# 获取指定板块的成分股
stocks = ContextInfo.get_stock_list_in_sector('银行')
stocks = ContextInfo.get_stock_list_in_sector('半导体')
```

### 获取板块分类

| 分类 | 说明 |
|------|------|
| 申万行业 | 申万一级行业分类 |
| 证监会行业 | 证监会行业分类 |
| 概念板块 | 热门概念板块 |

## 行权与分红

### 获取除权除息信息

```python
# 获取除权除息数据
dividend = ContextInfo.get_dividend_data('000001.SZ', '20200101', '20241201')
```

### 获取复权数据

```python
# 前复权
close_fq = ContextInfo.get_history_data('close', 20, '', True, 1)
# 后复权
close_bq = ContextInfo.get_history_data('close', 20, '', True, 2)
```

!!! note "提示"
    回测时建议使用前复权数据，避免除权除息造成的价格跳变。

## 衍生品数据

### 期货数据

```python
# 获取期货合约信息
info = ContextInfo.get_instrument_detail('IF2412.CCFX')
# 包含：合约乘数、保证金率、交割日等
```

### 期权数据

```python
# 获取期权合约信息
info = ContextInfo.get_instrument_detail('10004868.SH')
# 包含：行权价、到期日、标的等
```

### 期货连续合约

| 合约代码 | 说明 |
|----------|------|
| `IF.CCFX` | 沪深300主力连续 |
| `IC.CCFX` | 中证500主力连续 |
| `IH.CCFX` | 上证50主力连续 |

## 数据下载管理

### 批量下载

```python
def init(ContextInfo):
    # 批量下载多个品种的数据
    stocks = ['000001.SZ', '600000.SH', '510050.SH']
    for stock in stocks:
        ContextInfo.do_download_history_data(
            stock, '1d', '20200101', '20241201'
        )
```

### 数据更新检查

!!! tip "技巧"
    定期检查数据更新，确保使用最新数据：
    ```python
    # 检查最后一条数据的日期
    closes = ContextInfo.get_history_data('close', 1)
    if closes:
        last_date = ContextInfo.get_bar_timetag(ContextInfo.barpos)
        print(f'数据最后日期: {last_date}')
    ```
