A股量化交易系统实战:从选股到回测的完整Python实现
2026/7/10 3:12:35 网站建设 项目流程

A股量化交易系统实战:从选股到回测的完整Python实现

2万行代码的实战复盘,纯本地离线运行

题记

数据不说谎,但会误导人。量化系统的价值,是让数据说人话。

本文介绍一个完整的A股量化交易系统,涵盖选股、策略、回测、风控四大模块。系统采用纯Python实现,代码量约22,000行,支持本地离线运行。

22,130
行 Python 代码

系统架构

系统分为5大模块,每个模块都可以独立运行,也可以串联起来:

🔍

选股引擎(9种模式)

从5500+只A股中,按不同策略筛选出值得买的股票。包括:平衡型、龙头榜、资金流入、价值投资、回调买入、异动放量、行业龙头、低估值成长、政策趋势。

📈

策略池(10个策略 + 综合投票)

均线交叉、MACD、RSI、KDJ、布林带、动量突破、量价配合、ADX趋势过滤、资金流策略。最关键的是综合投票策略——根据市场状态动态调整权重。

🏭

运行引擎

负责调度策略执行、实时行情覆盖、信号自动清理。交易时间内每分钟自动运行。

📊

回测系统

支持Sharpe、Sortino、Calmar等指标,还能生成资金曲线、回撤图、交易标记。移动止损、回撤控制全部内置。

🛡️

风控系统

仓位管理、止损止盈、回撤控制。连续亏损后自动暂停交易,防止情绪化操作。

核心技术:市场自适应加权投票

这是系统最核心的功能,也是市面上大部分量化工具没有的。

简单说就是:系统会自动判断当前市场是趋势市、震荡市还是高波动市,然后动态调整每个策略的权重。

这个功能的实现,用到了ADX(平均趋向指标)和ATR(平均真实波幅)两个指标:

# 市场状态检测
class MarketRegimeDetector:
def detect(self, df):
adx = self.calc_adx(df)
atr = self.calc_atr(df)

if adx > 25:
return Regime.TREND
elif atr_ratio > 0.03:
return Regime.HIGH_VOL
else:
return Regime.RANGE

当ADX指标显示市场处于强趋势时,均线交叉、MACD这些趋势策略的权重会被调高;当市场进入震荡期,RSI、KDJ这些震荡策略的权重会被调高。

选股规则:多因子打分

选股不是拍脑袋,是打分。每只股票会根据多个因子计算得分,然后排序取Top N。

以"价值投资"模式为例,打分规则是这样的:

# 价值投资模式打分规则
SCORING_RULES_VALUE = {
'pe_deep_low': {
'condition': lambda pe: 3 <= pe <= 12,
'score': 4
},
'pe_low': {
'condition': lambda pe: 12 < pe <= 20,
'score': 2
},
'pb_deep_low': {
'condition': lambda pb: 0.3 <= pb <= 1,
'score': 4
},
'large_cap': {
'condition': lambda cap: cap > 500亿,
'score': 2
},
'no_surge': {
'condition': lambda chg: -5 <= chg <= 3,
'score': 2
}
}

这些规则都在screener/rules.py里,可以随时修改。想加什么因子,直接加就行。

数据采集:三级缓存防限流

数据是量化的命脉。系统使用新浪财经的免费API,覆盖全A 5500+只股票。

但免费API有个问题:容易被限流。

所以设计了三级缓存:

# 三级缓存架构
class DataCollector:
def __init__(self):
self.cache = {} # 1. 内存缓存
self.db = SQLite() # 2. SQLite缓存
self.csv = CSV() # 3. CSV备份

def get_data(self, code):
# 先查内存
if code in self.cache:
return self.cache[code]

# 再查SQLite
data = self.db.query(code)
if data:
self.cache[code] = data
return data

# 最后从API获取
data = self.fetch_from_api(code)
self.db.save(code, data)
self.cache[code] = data
return data

为什么要用mootdx?

mootdx是通达信的Python接口,走的是TCP协议,不会被封IP。系统用它来获取历史K线数据,配合新浪的实时行情,形成完整的数据闭环。

回测系统:用历史验证策略

写完策略,一定要回测。不然你根本不知道这个策略靠不靠谱。

回测系统支持这些指标:

# 回测指标计算
class BacktestEngine:
def calculate_metrics(self, trades):
# Sharpe比率
sharpe = self.calc_sharpe(trades)

# 最大回撤
max_drawdown = self.calc_max_drawdown(trades)

# 胜率
win_rate = self.calc_win_rate(trades)

# 盈亏比
profit_loss_ratio = self.calc_profit_loss_ratio(trades)

return {
'sharpe': sharpe,
'max_drawdown': max_drawdown,
'win_rate': win_rate,
'profit_loss_ratio': profit_loss_ratio
}

回测完还会生成资金曲线图、回撤图、交易标记,一目了然。

风控系统:防止情绪化操作

散户最大的问题是什么?追涨杀跌,情绪化操作。

所以系统里加了风控模块:

# 风控系统
class RiskManager:
def __init__(self):
self.stop_loss = 0.05 # 5%止损
self.take_profit = 0.10 # 10%止盈
self.max_consecutive_loss = 3 # 最大连续亏损

def check(self, position):
# 止损检查
if position.pnl < -self.stop_loss:
return 'STOP_LOSS'

# 止盈检查
if position.pnl > self.take_profit:
return 'TAKE_PROFIT'

# 移动止损
if position.max_pnl > 0.05:
trailing_stop = position.max_pnl * 0.8
if position.pnl < trailing_stop:
return 'TRAILING_STOP'

# 连续亏损检查
if self.consecutive_loss >= self.max_consecutive_loss:
return 'PAUSE_TRADING'

return 'OK'

本地离线:你的数据,你做主

市面上大部分量化工具都是Web平台,你的策略和数据都存在别人的服务器上。

这个系统是纯本地离线的:

不依赖任何SaaS

没有后台服务器,没有登录认证,不绑定任何商业数据源。

数据自采自存

从免费公开接口拉数据,存本地SQLite,永不担心接口被封。

代码即文档

所有策略逻辑、选股规则、风控参数都以Python代码形式存在,完全透明可审计。

便携式部署

目录拷贝即可迁移,不需要Docker、MySQL、Redis等外部依赖。

快速开始

安装依赖:

pip install -r requirements.txt

运行选股:

# 基础选股(平衡型)
python -m quant screener

# 龙头榜选股
python -m quant screener --mode leader

# 价值投资选股
python -m quant screener --mode value

运行回测:

# 回测茅台,使用均线交叉策略
python -m quant backtest --strategy ma_cross --code 600519

写在最后

这个系统我写了2个月,从零开始,踩了无数坑。

但回头看,这个过程让我真正理解了:量化不是玄学,是数学。

股市里没有"稳赚"的策略,但有"大概率赚"的策略。量化系统的价值,就是帮你找到这些策略,然后严格执行。

当然,系统只是工具,最终还是要靠人来判断。但至少,它能帮你避免那些最愚蠢的错误:追涨杀跌、频繁交易、情绪化操作。

📊 数据分析 + 💼 职场真相 + 💰 投资洞察

关注「船长Talk」,用数据看清世界

END

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询