跳转至

前置知识:A 股市场基础知识

本篇导览

项目 说明
适合 未熟悉 A 股代码规则、T+1、涨跌停、税费与主要指数的读者
预计 约 45 分钟
价值 有助于正确理解回测假设与 eqlib 中的成交限制

本文面向没有炒过 A 股、或需要了解中国股市规则的读者。理解这些规则能帮助你写出更符合实际的策略,也能正确解读回测报告中的各项指标。


目录

  1. 什么是 A 股
  2. 股票代码格式与交易所
  3. 交易时间
  4. T+1 交易制度
  5. 涨跌停板制度
  6. ST 股与退市风险
  7. 交易成本:手续费与税
  8. 主要市场指数
  9. 基本面数据:PE / PB / ROE 等
  10. 资金流向
  11. 这些规则在 eqlib 中的体现
  12. 下一步

1. 什么是 A 股

A 股(A-Share) 是在中国大陆的上海证券交易所(SSE)和深圳证券交易所(SZSE)上市、以人民币计价的股票。

类型 说明
A 股 中国大陆上市,人民币计价,本文的焦点
H 股 同一家公司在香港上市的股票,港元计价
B 股 历史遗留,外币计价,交易冷清
美股 ADR 中概股在美国上市的存托凭证

EasyQuant 只支持 A 股,不支持港股、美股、期货、期权、加密货币。


2. 股票代码格式与交易所

2.1 代码规则

A 股代码为 6 位数字,前缀决定上市地和板块:

前缀 交易所 板块 例子
600xxx 601xxx 603xxx 605xxx 上海交易所(SSE) 沪市主板 601390(工商银行)600519(贵州茅台)
000xxx 001xxx 深圳交易所(SZSE) 深市主板 000858(五粮液)
002xxx 003xxx 深圳交易所 中小板(已并入主板) 002415(海康威视)
300xxx 301xxx 深圳交易所 创业板(GEM) 300750(宁德时代)
688xxx 689xxx 上海交易所 科创板(STAR) 688981(中芯国际)
8xxxxx 全国股转系统 北交所

2.2 指数代码格式(带交易所后缀)

在 eqlib 中,指数代码需要加交易所后缀

指数 代码 备注
沪深300 000300.XSHG 最常用的基准
上证综指 000001.XSHG 反映沪市整体
深证成指 399001.XSHE 反映深市整体
中证500 000905.XSHG 中等市值股票
创业板指 399006.XSHE 创业板整体
科创50 000688.XSHG 科创板头部
上证50 000016.XSHG 沪市蓝筹

规则(来自项目内部):
- 000xxx.XSHG = 上海指数(如沪深300)
- 399xxx.XSHE = 深圳指数(如深证成指、创业板指)
- 000xxx.XSHE 或纯 000xxx = 深圳股票(如五粮液 000858

# 设置基准
set_benchmark('000300.XSHG')   # 沪深300

# 获取指数成分股
from eqlib import get_index_stocks
hs300_stocks = get_index_stocks('000300.XSHG')

3. 交易时间

A 股交易分为两个时段(北京时间):

时段 时间 说明
集合竞价 9:15–9:25 提前报价,确定开盘价
早盘 9:30–11:30 连续竞价
午休 11:30–13:00 不交易
午盘 13:00–15:00 连续竞价

eqlib 中的影响
- 日线回测以 9:30 开盘价作为订单成交价(下一个交易日) - 分钟线从 09:3015:00,不含午休 - 节假日(春节、国庆等)无交易日


4. T+1 交易制度

T+1 是 A 股最重要的规则之一:

当天买入的股票,必须等到下一个交易日才能卖出。

对比美股(T+3 直到 2024 年改为 T+1,且有限制短线操作);香港股市是 T+2 结算。

对策略的影响

# 在回测中:eqlib 自动处理 T+1 限制
# 今天买入 → 今天 closeable_amount = 0 → 明天 closeable_amount = 买入股数

def market_open(context):
    position = context.portfolio.positions.get('601390')
    if position:
        # closeable_amount = 可立即卖出的股数(T+1 限制后的数量)
        can_sell = position.closeable_amount
        # 刚买入的不计入 can_sell

策略影响:不能当天"高卖低买"(日内 T+0 操作),必须持有到次日才能卖出,也不允许"抢帽子"(短线高频操作)。


5. 涨跌停板制度

A 股单日价格涨跌幅有限制:

板块 限制
沪深主板(含中小板) ±10%
创业板(GEM) ±20%
科创板(STAR) ±20%
ST / *ST 股票 ±5%
北交所 ±30%

对策略的影响

# 涨停的股票当天无法买入(没有卖出方)
# 跌停的股票当天无法卖出(没有买入方)
# eqlib 回测会忽略流动性限制,实盘中需要注意

# 正确做法:过滤掉当天已涨停的股票
hist = attribute_history(security, 2, '1d', ['close'])
prev_close = hist['close'].iloc[-2]
today_close = hist['close'].iloc[-1]
limit_up = today_close >= prev_close * 1.099  # 接近涨停

if limit_up:
    continue  # 跳过,不买涨停股

6. ST 股与退市风险

ST 的含义

标记 含义
ST 特别处理(Special Treatment):公司连续两年亏损或净资产为负
*ST 退市风险警示:连续三年亏损,面临退市
S*ST 正在被整顿

ST 股有以下特点: - 涨跌停幅度从 ±10% 压缩到 ±5% - 流动性差,容易暴力下跌 - 信息不透明,风险极高

在策略中过滤 ST 股

from eqlib import filter_st_stocks

candidates = ['601390', '600519', '000858', '000001']

# 过滤掉 ST / *ST 股票
safe_stocks = filter_st_stocks(candidates)

7. 交易成本:手续费与税

7.1 标准费率(2024 年)

费用 买入 卖出 说明
佣金(Brokerage Commission) 0.02%–0.03% 0.02%–0.03% 向券商支付,最低 5 元
印花税(Stamp Tax) 0 0.05% 向国家税务总局缴纳(2023 年 8 月从 0.1% 降至 0.05%)
过户费(Transfer Fee,仅沪市) 0.00002% 0.00002% 极小,可忽略

7.2 单次买卖的实际成本

以 10 万元买卖为例(佣金 0.03%,最低 5 元): - 买入:10 万 × 0.03% = 30 元 - 卖出:10 万 × 0.03% + 10 万 × 0.05% = 30 + 50 = 80 元 - 一个来回总成本:110 元(0.11%)

频繁交易会严重侵蚀收益!

7.3 在 eqlib 中设置交易成本

def initialize(context):
    set_order_cost(OrderCost(
        open_tax=0,               # 买入印花税(目前为 0)
        close_tax=0.0005,         # 卖出印花税 0.05%(2024 年现行)
        open_commission=0.0003,   # 买入佣金 0.03%
        close_commission=0.0003,  # 卖出佣金 0.03%
        min_commission=5,         # 最低佣金 5 元
    ))

如果不设置,eqlib 默认不收手续费——这会让回测结果虚高!务必设置合理费率。


8. 主要市场指数

指数 代码(eqlib 格式) 成分股 常用场景
沪深300 000300.XSHG 300 只大型蓝筹股 最常用基准
中证500 000905.XSHG 500 只中等市值股 中盘策略基准
上证综指 000001.XSHG 全部沪市股票 反映整体市场
创业板指 399006.XSHE 创业板头部 100 只 成长股策略基准
科创50 000688.XSHG 科创板前 50 科技策略基准

选哪个做基准?

  • 主板蓝筹策略:沪深300(000300.XSHG
  • 中小盘策略:中证500(000905.XSHG
  • 成长/创新策略:创业板指(399006.XSHE
  • 全市场策略:上证综指(000001.XSHG

9. 基本面数据:PE / PB / ROE 等

量化策略中常用的基本面因子:

指标 全称 含义 越低越…
PE Price-to-Earnings 市盈率 = 股价 / 每股盈利 越低越"便宜"(价值因子)
PB Price-to-Book 市净率 = 股价 / 每股净资产 越低越"便宜"
PS Price-to-Sales 市销率 = 市值 / 年销售额
ROE Return on Equity 净资产收益率 = 净利润 / 净资产 越好(质量因子)
ROA Return on Assets 总资产收益率 越高越好
EPS Earnings Per Share 每股收益 越高越好
毛利率 Gross Margin 毛利润 / 营收 越高越好(竞争护城河)
from eqlib import fetch_factor_data

# 获取候选股票的多维基本面数据
candidates = ['601390', '600519', '000858']
df = fetch_factor_data(candidates, fields=['pe', 'pb', 'roe'])
#        pe      pb    roe
# 601390  5.4    0.62   11.2
# 600519  28.1   10.3   35.6
# 000858  19.7    6.1   24.8

# 按 PE 从低到高排序(价值选股)
df_sorted = df.sort_values('pe', ascending=True)

10. 资金流向

资金流向 反映当天主力资金(大单)是净买入还是净卖出:

指标 含义
主力净流入 大单净买入金额(超过 50 万的单子)
超大单 单笔 > 100 万
大单 单笔 50–100 万
中单 单笔 10–50 万
小单 单笔 < 10 万

连续多日主力净流入 → 机构/主力在吸筹,往往是上涨的前兆。

from eqlib import get_money_flow

money_flow = get_money_flow('601390', days=5)
# 返回 DataFrame,包含 net_main(主力净流入)等字段

11. 这些规则在 eqlib 中的体现

规则 eqlib 的处理方式
T+1 position.closeable_amount 在买入当天为 0
涨跌停 回测不自动过滤(需手动判断);实盘中影响委托成交
印花税 OrderCost(close_tax=0.0005) 设置
ST 过滤 filter_st_stocks(securities)
指数成分股 get_index_stocks('000300.XSHG')
基准对比 set_benchmark('000300.XSHG')
基本面数据 fetch_factor_data()get_fundamentals()

12. 下一步