ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

从“道法术器势”看A股量化交易:从认知框架到实战策略

从“道法术器势”看A股量化交易:从认知框架到实战策略 从 “道、法、术、器、势” 看量化交易A 股实战指南聊到量化交易很多人第一反应是“写代码、跑回测、躺着赚钱”。做了几年 A 股量化之后我越来越觉得这个行业真正难的不是代码而是认知框架。代码写不好可以改策略亏了可以迭代但如果一开始对市场的理解就偏了那后面投入的时间、金钱、精力基本都是给市场交学费。我习惯用五个字来梳理自己整个量化交易体系——“道、法、术、器、势”。这五个字原出自古典谋略思想放在量化交易里恰好能对应五个层次道的层面是认知与定位法的层面是策略与体系术的层面是具体的交易手法与实现器的层面是工具链与工程能力势的层面是市场时机与风向把握。这五个层级不是并列的而是层层递进的道不明法就容易歪法不正术就是蛮干术不精器就成了摆设器不强势来了你也接不住。这篇内容我尽量写得实在一点不绕弯子。适合三类人看一是想入门量化但不知道从哪开始的朋友二是已经有简单策略但一直在亏钱、想找问题出在哪的同行三是做传统主观交易、想理解量化到底在干嘛的人。我尽量把每个层面的核心逻辑、实操要点、以及我自己踩过的坑都说清楚。1. “道”之层先搞懂量化交易的本质与边界1.1 量化交易到底是什么不是什么先泼一盆冷水量化交易不是“用程序代替人做交易”这么简单。很多人以为量化就是写个脚本每天自动买卖然后坐等收益。这个理解不能说全错但漏掉了最关键的一层——量化交易的本质是把交易决策从一个“艺术行为”变成一个“工程行为”。我举个生活中类比传统主观交易就像厨师做菜讲究手感、火候、灵感同一道菜不同师傅做出来味道不同而量化交易更像连锁餐厅的中央厨房每一道菜从原料采购到出锅温度都有标准作业流程凭的是可复制、可检验、可优化的体系。量化交易真正解决的问题不是“买什么能涨”而是“我的交易逻辑是否在统计意义上是有效的、可重复的、能够持续执行且被严格监督的”。所以道这个层面核心是建立一种“概率思维”。单笔交易是赚是亏根本不重要重要的是你下注的那个逻辑在大量重复之后期望值是正还是负。我用一个很笨但很有效的公式来时刻提醒自己期望收益 胜率 × 平均盈利 − 败率 × 平均亏损所有策略本质上都在优化这四个变量之一。想清楚这一点你就能识别市场上很多“神棍式”的荐股逻辑——他们跟你说“这个票大概率要涨”但从来不告诉你如果错了会亏多少、亏了怎么办。这就是典型的“道”不明。1.2 A 股市场到底适不适合量化很多人一谈到量化就想到美股想到高频交易、做市商那些动辄毫秒级的东西然后觉得 A 股不适合量化。我的观点恰恰相反A 股可能是个人量化交易者最容易“活下来”的市场之一原因有三个。第一A 股是散户占比极高的市场。根据公开数据A 股散户交易额占比长期在六成以上这意味着市场中存在大量可被统计规律捕捉的非理性行为——比如过度反应、追涨杀跌、节假日效应、业绩公告后的漂移。这些“行为金融学”层面的异象恰恰是量化策略的利润来源。第二涨跌停制度和 T1 制度虽然限制了交易灵活性但也限制了机构的某些高频优势给“低频、中频”策略留下了生存空间。普通个人开发者不需要跟机构拼速度你拼的是逻辑、是纪律、是更细致的因子挖掘。第三A 股的数据生态近年来已经比较成熟行情数据、财务数据、资金流向数据、龙虎榜数据都可以用合理成本拿到。Python 生态里有 tushare、baostock、akshare 这些开源库甚至不需要花大价钱买数据终端就能起步。但是A 股也有它很坑的地方。最明显的是“政策扰动”和“风格切换极快”一个策略可能连续有效大半年然后某天因子突然失效回撤曲线像瀑布一样往下砸。所以在这里做量化道的层面必须接受一个事实没有任何一个策略是永远有效的你的策略库需要持续迭代你的风控体系需要能扛住至少三次“因子失效”。1.3 道层面的三个常见认知误区误区一以为量化是“稳赚不赔”。凡是这么宣传的大概率是在卖课或者卖软件。量化交易本质上还是交易交易就有风险。它改善的是胜率、赔率和资金曲线的质量而不是消灭风险。误区二以为量化需要极高的数学和编程水平。我认识几个做量化做得非常稳的编程水平就是“能写 Python 函数”的程度。真正拉开差距的是数据敏感度、逻辑严谨性和复盘迭代能力——这些比数学功底重要得多。误区三以为策略越复杂越好。实盘中复杂模型的维护成本、过拟合风险、失效后的归因难度都是隐性成本。我自己的经验A 股环境里真正能稳定赚钱的往往是逻辑简洁、参数稳健、但执行纪律极强的策略而不是隐藏层有十几层、装了几百个因子的“炼丹炉”。2. “法”之层策略体系与因子挖掘的方法论2.1 策略体系应先分类再动手做法这个层面我建议大家先建立策略分类学。不要想到什么做什么今天写个均线金叉明天搞个神经网络最后手里一堆互不关联的脚本毫无体系。我自己的分类框架主要有五个维度持仓周期高频、日内、短线1-5日、中线5-20日、低频月度调仓决策依据价量类、基本面类、资金流类、另类数据类收益来源趋势跟踪、均值回归、事件驱动、套利对冲持仓数量集中持仓3-5只、分散组合20只以上对冲方式纯多头、市场中性、指数增强每个策略上线前必须先明确自己在这些维度上的定位。我见过太多人拿着一套 5 日均线上穿 10 日均线的策略说自己做的是“量化投资”这就是典型的方法论混乱——手法没错但没有边界更谈不上体系。一个新入行的朋友我通常会建议他先从“中低频、价量类、均值回归或趋势跟踪、分散持仓、纯多头”这几个标签的组合开始。这个组合有几个好处数据容易获取逻辑容易理解回测结果容易解释实盘中即使出问题也容易定位。等到这个流程跑顺了再逐步去碰更复杂的策略类型。2.2 因子挖掘的完整流程因子是大多数策略的原材料。用一句话概括因子就是一个能够区分未来涨跌概率与幅度大小、且逻辑上说得通的量化指标。市盈率是一种因子5日动量是一种因子北向资金净流入也是一种因子。我梳理一下自己做因子挖掘的固定流程五步第一步提出假设。比如“A 股市场存在短期反转效应即过去5天涨幅较大的股票未来5天大概率跑输”。这个假设要有行为金融学或市场微观结构层面的解释支撑不能纯靠数据挖。纯粹挖出来的因子十有八九是过拟合的产物。第二步数据准备与因子计算。假设提好后用 Python 的 pandas 做因子计算。这一步的核心不是代码而是“数据对齐”和“幸存者偏差”问题。比如回测时使用了 2020 年的成分股列表去计算 2015 年的收益率这就是典型的未来函数结果会虚假偏乐观。第三步单因子检验。常用两个指标ICInformation Coefficient信息系数和分组回测收益。IC 是因子值与下期收益的相关系数一般用 Spearman 秩相关系数因为秩相关对极值不敏感。IC 绝对值均值大于 0.03且 IC_IRIC 均值除以 IC 标准差大于 0.3基本可以认为这个因子有初步价值。第四步因子正交化与合成。单因子有效不等于组合有效很多因子之间高度相关。比如“过去5日换手率”和“过去5日波动率”往往就是一回事。你需要用回归取残差或施密特正交化的方式把新因子中与已有因子重复的信息剥离掉只保留增量信息。第五步因子监控与失效判断。因子上线不代表一劳永逸。我每个月底会计算一次线上各因子的 IC 滚动均值并和近半年的均值做比对。如果连续 3 个月 IC 均值为负或者 IC 波动率急剧放大我就会把该因子降权或暂时下线。2.3 策略容量与收益预期管理做 A 股量化还有一个必须提前想清楚的问题策略容量和收益预期。策略容量是指在不明显影响市场价格和策略收益的前提下这个策略最多能容纳多少资金。一个日频反转策略如果每次只能买 200 万市值的热门股那给你一个亿的资金你根本执行不了——冲击成本会吃掉大部分收益。我个人的经验法则单票单日成交量如果低于 1 亿我的单笔下单金额就不超过当日成交量的 2%。这样做虽然保守但能有效避免“策略回测很漂亮、实盘一跑就血亏”的尴尬局面。很多人完全忽略这一点募了钱直接按回测比例下单结果实盘收益和回测收益天差地别还以为是策略问题其实就是容量没有测算好。收益预期方面我得说点难听的如果有人说他有一个 A 股量化策略年化收益稳定在 50% 以上且回撤小于 5%那他要么是骗子要么是还没经历过真正完整的牛熊周期。合理预期一个好的中低频纯多头策略长期年化做到 15%-25%最大回撤控制在 15% 以内在 A 股已经属于非常优秀的水平。3. “术”之层三个可落地的策略方向与实现细节3.1 方向一基于多因子打分的中低频选股这是我最推荐新手起步的策略类型逻辑透明、代码量适中、实盘执行难度低。核心思路就是选若干认为有效的因子对全市场股票打分每个周期买入得分最高的 N 只股票卖出得分最低的持仓。我简化出一个可运行的版本用 Python 的 pandas 就能实现。假设你已经有了一个 DataFrame每一行是一只股票包含以下几列code、name、momentum_5d5日涨跌幅、turnover_5d5日平均换手率、volume_ratio量比、pe_ttm市盈率、revenue_yoy营收同比增速。import pandas as pd import numpy as np def score_stocks(df): # 1. 数据清洗剔除极端值 df_clean df[ (df[momentum_5d] -0.5) (df[momentum_5d] 0.5) (df[volume_ratio] 0) (df[pe_ttm] 0) ].copy() # 2. 因子方向调整动量因子在A股短周期通常做反转故取负号 df_clean[score_mom] -df_clean[momentum_5d].rank(pctTrue) # 换手率因子低换手在A股更可能跑赢也做反向 df_clean[score_turn] -df_clean[turnover_5d].rank(pctTrue) # 基本面营收增速高的给高分 df_clean[score_growth] df_clean[revenue_yoy].rank(pctTrue) # 3. 综合打分各因子权重可以按需调整 df_clean[total_score] ( 0.4 * df_clean[score_mom] 0.3 * df_clean[score_turn] 0.3 * df_clean[score_growth] ) # 4. 选取得分最高的30只 top30 df_clean.nlargest(30, total_score) return top30[[code, name, total_score]]代码很简单但有几个细节值得展开说一说。第一因子方向不是拍脑袋定的而是要在历史数据上验证的。A 股的短期动量效应和美股很不一样2-5 日的反转效应非常显著而 20 日以上的动量效应则不稳定。所以我上面的代码在 5 日维度上做了反向处理。这个方向如果搞反了策略的收益会直接反转。第二因子合成之前一定要做标准化这里我用的是 rank(pctTrue)也就是把因子值转换成 0 到 1 之间的百分位排名。这样做的目的是消除不同因子之间的量纲差异避免“成交量”这种数值大的因子天然占据主导权重。直接用原始值相加是新手最容易犯的错误。第三权重参数 0.4、0.3、0.3 不是“调出来的最优解”而是我在不同市场环境下试出来比较稳的组合。我建议大家不要过度优化权重因为权重太敏感的策略通常会随着市场风格切换迅速失效。稳健性比账面收益更重要。3.2 方向二基于动量与均线结构的趋势跟踪趋势跟踪是量化里存活时间最长的策略类型之一因为它的收益逻辑来自市场参与者的羊群效应和动量延续。在 A 股趋势跟踪策略通常比均值回归策略拥有更大的盈利空间但缺点是胜率偏低、单笔亏损和回撤偏大对心理承受能力要求很高。一个基础的均线趋势策略逻辑很简单当短期均线上穿长期均线时买入下穿时卖出。但在 A 股实操中直接裸用双均线很容易在震荡市里反复打脸连续交出十几笔小亏损。我的处理方式是在均线结构之外加入一个“过滤条件”——大盘环境过滤。具体实现思路是先计算沪深 300 指数的 20 日均线和 60 日均线只有当指数 20 日均线位于 60 日均线之上时才允许策略开仓。这个过滤条件的逻辑是A 股系统性风险非常强超过八成个股的涨跌方向与大盘同步逆势做多极度容易被系统性下跌吞没。下面是我常用的一个简单趋势打分模块框架。它把趋势分解为中短期结构、量能确认和突破位置三个维度综合后得到一个趋势强弱分def trend_score(stock_df, index_df): # stock_df: 个股日线数据 # index_df: 沪深300日线数据 stock_df[ma20] stock_df[close].rolling(20).mean() stock_df[ma60] stock_df[close].rolling(60).mean() # 维度1个股均线多头排列 1空头排列 -1 stock_df[score_ma] np.where(stock_df[ma20] stock_df[ma60], 1, -1) # 维度2指数环境过滤大盘20日线在60日线上方 1 index_df[ma20] index_df[close].rolling(20).mean() index_df[ma60] index_df[close].rolling(60).mean() env_score 1 if index_df[ma20].iloc[-1] index_df[ma60].iloc[-1] else 0 # 维度3量能确认当日成交量高于5日均量 1 stock_df[vol_ma5] stock_df[volume].rolling(5).mean() vol_score 1 if stock_df[volume].iloc[-1] stock_df[vol_ma5].iloc[-1] else 0 total stock_df[score_ma].iloc[-1] env_score vol_score return total使用这类趋势策略时我最想强调的一点是单笔止损绝对不能再“凭感觉”。趋势策略的单笔亏损必须被量化锁定。我常用的是 ATRAverage True Range平均真实波幅止损法而不是固定百分比止损。逻辑在于ATR 反映了股票当前的波动水平高波动股票、低波动股票用同一个百分比止损本质上是不合理的。ATR 止损公式一般是止损价格 入场价格 − 2 × ATR(14)。这个 2 倍系数不是乱写的在统计上大多数有效趋势行情中正常回撤不会超过 2 倍 ATR超过这个幅度大概率说明趋势逻辑已经被破坏。3.3 方向三机器学习辅助的收益预测与风险过滤新朋友可以先跳过这一节但如果你已经做了半年以上策略开发我推荐认真研究一下机器学习方向。我自己在生产环境中用得比较多的不是“用深度学习预测涨跌”这种宏大的东西而是用树模型做“风险过滤”和“收益分层”。相比线性模型LightGBM 这类梯度提升树模型有几个优势能自动捕捉因子之间的非线性交互对缺失值有较好的容忍度训练速度快并且支持自定义损失函数。在 A 股这种噪声极高的市场里树模型不会像神经网络那样容易过拟合到噪声上前提是你要做好特征工程和交叉验证。我给出一个非常简化的框架目的是展示流程而非直接可用代码import lightgbm as lgb from sklearn.model_selection import TimeSeriesSplit def train_factor_model(feature_df, label, n_splits5): cols [c for c in feature_df.columns if c.startswith(f_)] X feature_df[cols].values y feature_df[label].values # 用时间序列交叉验证避免未来函数 tscv TimeSeriesSplit(n_splitsn_splits) models [] for train_idx, val_idx in tscv.split(X): train_data lgb.Dataset(X[train_idx], y[train_idx]) val_data lgb.Dataset(X[val_idx], y[val_idx]) params { objective: regression, metric: mse, learning_rate: 0.03, num_leaves: 31, min_data_in_leaf: 50, verbose: -1 } model lgb.train( params, train_data, num_boost_round500, valid_sets[val_data], callbacks[lgb.early_stopping(50)] ) models.append(model) return models这个代码的关键不是模型本身而是 TimeSeriesSplit 的使用。做量化的人最忌讳的就是用普通 KFold 做交叉验证——它会随机混洗样本导致时间顺序被打乱使得训练集里出现“未来的数据”回测结果自然虚高。我见过不止一个人在这个细节上栽了跟头模型回测夏普比率 2.5实盘跑起来直接变成 0.5。机器学习策略的核心是特征工程。我常用的特征类别有量价微观结构类EOD 后尾盘成交占比、买一卖一挂单比值、基本面财务类ROE 及其增速、毛利率变化、资金流类大单净流入、北向持股变化率、市场情绪类该股在概念板块中的涨跌幅排名分位。特征数量控制在 20-40 个之间太少则模型容易欠拟合太多则过拟合风险急剧上升。4. “器”之层Python 量化工具链的选型与工程实践4.1 数据源选择免费的够用付费的省心做量化数据是一切策略的地基。数据错了后面所有环节都是白搭。我按“免费-付费”两档聊聊 A 股量化数据的选择。免费开源方案里我常用的有 akshare、tushare pro、baostock 三家。baostock 胜在历史数据规范、无需 token、获取前复权数据方便tushare pro 胜在数据维度全从日线行情到财务数据到资金流都有但部分高频权限需要积分akshare 数据源杂、更新快适合抓一些非标准化的数据比如龙虎榜、互动易问答、概念板块成分股变动等。我的建议是基础行情用 baostock财务和资金流数据用 tushare另类数据用 akshare三个库搭配使用。免费方案的最大的坑是“数据对齐”。不同数据源对复权价格的处理方式不一样有的用前复权有的用后复权如果你在回测时混用了不同来源的价格数据就会计算出错误的收益率。我的习惯是统一从单一数据源拉取行情数据并且每次拉取后执行一次完整性检查——用 pandas 检查是否有 NaN、是否有异常单日涨跌幅超过 20%、以及股票代码格式是否统一。如果你资金宽裕可以考虑付费数据源。市场上几家主流的金融数据终端年费几千到几万不等按自己的实际需求选。付费数据胜在稳定性和维度完整尤其是分钟级数据、盘口数据、龙虎榜资金流这些免费接口经常缺胳膊少腿。起步阶段没必要但策略要做精细化迭代时付费数据的价值就出来了。4.2 回测框架到底选不选现成框架关于回测框架我的意见可能和一些博主不太一样新手阶段不要急着用现成的回测框架。先用 pandas 自己写一个简单的“逐日遍历式回测”把交易逻辑跑明白再来决定要不要用框架。自己手写回测框架的核心代码逻辑其实很简单def simple_backtest(daily_signal, price_df, init_cash100000): cash init_cash position 0 equity_curve [] for date in daily_signal.index: target_position daily_signal.loc[date, target_pct] current_value cash position * price_df.loc[date] target_value current_value * target_position # 调仓 diff_value target_value - position * price_df.loc[date] if diff_value 0: # 买入 trade_cost diff_value * 0.001 cash - trade_cost elif diff_value 0: # 卖出 trade_cost abs(diff_value) * 0.001 cash - trade_cost # 更新持仓 position target_value / price_df.loc[date] cash current_value - target_value equity_curve.append(cash position * price_df.loc[date]) return pd.Series(equity_curve, indexdaily_signal.index)等我手动写完这个简易回测再去看 backtrader、vectorbt 这些开源框架就能真正理解它们的参数和设计思路而不是只会调黑盒。backtrader 功能全、事件驱动、适合中低频vectorbt 基于向量化计算回测速度极快适合大规模参数扫描但学习曲线较陡。我自己现在的生产级回测其实是用 vnpy 的基础上做了大量自研修改但核心逻辑还是自己控制的。我的建议是不管你用什么框架都必须自己能看懂每一行回测逻辑尤其是撮合逻辑、手续费滑点模型、涨跌停处理、停牌处理这四个环节任何一处过于理想化的假设都会让你的回测净值曲线变成“纸上富贵”。4.3 实盘交易接口与程序化执行回测跑通了不代表万事大吉实盘才是真正检验策略的地方。A 股实盘程序化交易个人开发者最常见的路径有两种一是通过券商的 PTrade、QMT 这类量化交易终端二是在支持程序化交易的券商那里申请接口。我个人更推荐 QMT 或者类似对内开放的量化终端方案原因有二一是门槛相对低不需要你自己去同时搞定行情接入、交易通道、风控系统这些基础设施二是就算你的策略代码出现 bug终端本身还有人工手动下单的退路能防止意外的无限亏损。实盘策略开发里有一个非常重要的工程习惯——加熔断开关。我在自己的交易程序里写了一个独立的风控模块独立于策略逻辑运行。它监控三个指标当日累计亏损、持仓最大回撤、策略下单频率。一旦触发阈值程序自动停止开仓并推送消息通知。这个模块用了不到一百行代码但在关键时刻救过我很多次。我分享一个简短的风控检查函数模型class RiskGuard: def __init__(self, max_daily_loss0.03, max_open_positions20): self.max_daily_loss max_daily_loss self.max_open_positions max_open_positions self.daily_pnl 0 self.current_positions [] def check_order(self, order): if self.daily_pnl -self.max_daily_loss: return False, 当日亏损超过阈值禁止开仓 if len(self.current_positions) self.max_open_positions: return False, 持仓数量超限 if order[amount] 0: return False, 下单数量必须为正 return True, OK这种独立风控模块的重要性我再强调一遍策略代码是负责“发现机会”的风控代码是负责“保证活着”的。很多个人量化者的实盘亏损根本不是策略逻辑有问题而是程序 bug、网络断线、参数配置错误这类“低级事故”导致的。如果你没有独立于策略的风控层就等于让策略自己监督自己在无人值守的深夜出现异常时后果不堪设想。5. “势”之层市场状态识别、仓位管理与策略迭代5.1 识别你身处哪种市场阶段“势”这个字在量化里我理解为“市场状态”。同一套策略在趋势市中可能赚得盆满钵满在震荡市中可能连续磨损在单边下跌市中则可能大幅回撤。如果策略不做市场状态区分本质上就是在一个赌场里不做任何环境识别地盲目下注。如何识别市场状态我用的是一个很朴素但实用的方法观察宽基指数比如沪深 300 或中证 500的 20 日均线与 60 日均线的关系再叠加“指数相对 20 日均线的乖离率”一起判断。具体的判断逻辑可以做成一个简单的打分框架区间震荡市20 日均线与 60 日均线反复穿插此时趋势策略权重应该降低均值回归策略权重可以适当提高。上升趋势市20 日均线持续位于 60 日均线上方且乖离率不极端。此时应加大趋势跟踪策略的资金权重让利润奔跑。下跌趋势市20 日均线持续位于 60 日均线下方此时最聪明的做法是降低总仓位、暂时休息或者切换到深度价值类防御策略。高波动切换期指数波动率可用 20 日收益率标准差衡量突然大幅抬升此时所有策略的风险都偏高应该暂停开新仓降低杠杆。我特别想提醒的一点很多人的策略回测曲线很漂亮是因为回测区间里刚好大部分时间是上涨趋势市。但他们没有做分市场状态的回测统计。我强烈建议每次回测时按上述四类市场状态拆分统计数据分别计算收益、回撤、胜率。如果一个策略在震荡市和下跌市中表现极差那你在实盘时就必须做好回避机制而不是硬扛。5.2 仓位管理与资金曲线保护仓位管理是“势”落实到最后执行环节的关键。很多人做量化把圣杯押在策略的预测精度上却忽略了一个铁律即便胜率 60%如果仓位管理不当连续五次亏损照样能让你爆仓。我用的仓位管理方法是改进版的凯利公式。传统凯利公式是f (bp − q) / b其中 b 是赔率p 是胜率q 是败率。但在真实交易中赔率和胜率都很难精确估计直接用全凯利值会过于激进。我的做法是把计算出来的凯利值乘以一个 0.25 到 0.4 的系数作为实际仓位。比如某个策略估算胜率 55%平均盈利是平均亏损的 1.5 倍那么凯利值为(1.5 × 0.55 − 0.45) / 1.5 0.25再乘以 0.3 的系数实际仓位就是 7.5%。这个仓位看起来很保守但恰恰是这种保守能让你在市场风格切换时活下去。活下来才有资格谈复利。5.3 复盘机制让策略跟上市场进化“势”再深一层就是“趋势的变化”。A 股的市场风格每过一两年就会有一次大切换2016-2017 年是大盘价值蓝筹的天下2019-2020 年核心资产、赛道白马一飞冲天2021 年后小盘、微盘股和量化资金又占据主导。如果策略不跟随市场状态变化而迭代任何策略都会有跟不上节奏的一天。我的复盘机制固定在每周五收盘后执行流程很简单但坚持下来价值巨大拉取本周策略全部交易记录逐笔检查是否有超出预案的交易即“计划外交易”。计算本周实际收益与策略理论收益的差值这个差值我称之为“执行损耗”如果长期超过 2%说明程序执行环节有问题需要排查。更新线上因子的最新 IC 表现观察是否有因子进入衰减通道。把本周市场实际发生的风格切换事件与策略持仓风格做对比判断是否需要调整策略权重。这个流程看起来不到一千字但坚持半年以上你对自己的策略会有一种“盘感”——不是玄学而是对各项指标的熟悉程度累积出的直觉。你对策略在某类行情下的表现已经有了大致的预期区间一旦实际表现偏离这个区间你就会警觉到有问题。实用工具清单我目前生产环境的完整技术栈有不少读者会私信问我具体用什么工具、在哪儿跑代码、数据从哪里来。我就直接列一下当前正在使用的完整技术栈给大家一个可直接参考的配置方案开发语言Python 3.10核心依赖 pandas、numpy、scikit-learn、lightgbm数据获取baostock日线行情、tushare pro财务与资金流、akshare龙虎榜与另类数据数据库存储MySQL 8.0用于存储日线行情和因子计算结果注意建立好主键索引和日期分区回测引擎自研框架为主参考 backtrader 的事件驱动逻辑大规模参数扫描时用 vectorbt实盘交易QMT 量化终端配合自研风控模块实现程序化下单代码管理Git 私有仓库策略代码和数据脚本严格分离因子库和回测结果分开存放这套技术栈的特点是完全围绕“个人开发者、低成本、强维护性”搭建。除了数据库服务器和行情数据的必要支出软件层面的成本基本为零。对想在量化方向深挖的同行来说这套栈足够支撑你从入门到实盘的全过程。实践复盘三次典型的策略失效与处理过程做量化的这几年我踩过的坑确实不少挑三个最有代表性的复盘一下都是策略失效的典型场景。第一个坑多头排列策略在 2018 年单边熊市中的持续亏损。当时策略信号非常频繁但市场的特征是指数一路阴跌个股普遍缺乏持续上涨的动力所有“均线多头”信号全变成了假突破。这个问题直到我给策略加上大盘均线过滤才开始缓解也就是我在趋势跟踪小节里提到的那个“环境过滤条件”。第二个坑因子选股策略在 2021 年一季度遭遇的“茅指数”极端行情。当时市场的核心矛盾是基金抱团少数大市值股票的虹吸效应极强我的小市值、低换手因子组合全面跑输回撤一度超过 18%。这次经历让我意识到因子组合必须包含至少一类与市场主流风格负相关的对冲型因子不能在某一类风格上过度暴露。第三个坑高频调仓策略的程序执行损耗过高。有一段时间我每个交易日都调仓策略理论换手率很高但实盘跟回测差异巨大。排查后发现是下单算法太粗糙拆单不灵活导致冲击成本急剧放大。这个问题最终通过优化下单算法、把限价单改为“被动单”算法解决回到收益稳定状态。三次复盘有一个共同答案问题从来不在单笔交易的对错而在于策略体系中的系统性薄弱环节。如果你每次亏损后都只顾着优化信号参数而不去完善过滤条件、仓位管理和执行算法那大概率会一直停留在“赚了又亏、亏了又赚”的循环里。写在最后量化交易不是一种“上岸”的捷径它更像一条需要长期打磨的手艺路。道法术器势这五个字对应的是我从认知到执行、从工具到心态的完整闭环。最近几年我渐渐很少再去追逐更高收益的“圣杯策略”反而把更多精力放在降低策略衰减速度、提高风控执行力、优化交易成本这些“笨功夫”上资金曲线反而更稳定了。如果你正准备踏入 A 股量化的大门我给的最实在的建议是先不要急着写策略、跑代码花一周时间认真回答三个问题——你能承受的最大回撤是多少你能持续投入这个领域的精力有多少你面对连续亏损时的情绪反应模式是什么把这三个问题想透再开始动手。策略迭代再快也快不过你认知迭代的速度工具选型再好也好不过你对风险本能的敬畏。这条路我还在走希望这篇内容能给你一张还算清晰的地图少走一些我走过的弯路。
返回列表