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

📅 2026/7/10 3:12:44
A股量化交易系统实战:从选股到回测的完整Python实现
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.TRENDelif atr_ratio 0.03:return Regime.HIGH_VOLelse: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]# 再查SQLitedata self.db.query(code)if data:self.cache[code] datareturn data# 最后从API获取data self.fetch_from_api(code)self.db.save(code, data)self.cache[code] datareturn data为什么要用mootdxmootdx是通达信的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.8if position.pnl trailing_stop:return TRAILING_STOP# 连续亏损检查if self.consecutive_loss self.max_consecutive_loss:return PAUSE_TRADINGreturn 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