量化交易入门:一文搞懂交易产品分类与策略实现
发布时间:2026/9/15 7:31:03 锦皓数字建站

刚开始接触量化交易的人十个里有八个会先把注意力放在“怎么写python量化交易策略代码”上。这没错但等你真把策略写出来、跑完回测准备实盘的时候往往会撞上一堵墙同一个策略放到不同产品上结果天差地别。这些年我带过不少新人也帮人排查过很多诡异的回测问题最后发现大多数困惑都指向同一个根源——对“交易产品”本身的理解不够。量化交易策略从来不是一段脱离市场环境的代码它一定依附于某个具体的产品、制度、数据和流动性。所以这个“量化交易入门到大师”系列我先把“量化交易分类之交易产品”这部分拿出来讲透因为这决定了你后面所有的策略设计、代码实现和风控逻辑到底该往哪个方向走。这篇文章我会把主流可量化的交易产品逐一拆开股票、期货、期权、债券、外汇还有这几年很热门的加密货币讲清楚它们各自的交易机制、数据特征、适合哪类策略、有哪些坑。同时会带上可以直接参考的python示例代码、回测避坑要点以及个人对不同产品实盘体验的真实感受。适合刚入门不久、正在为“选哪个市场练手”发愁的量化爱好者也适合已经写过一些策略但总是遇到瓶颈、想横向扩展产品线的朋友。看完你会明白量化交易入门的第一步不是买书学算法而是先搞懂你准备交易的那个产品到底是个什么脾气。1. 为什么“先分清交易产品”才是量化入门的第一步1.1 量化交易不是一套代码通吃所有市场我先说一个很多人踩过的坑。以前有个朋友拿期货上的双均线策略稍微改了改参数就丢到A股做日频回测逻辑看着没问题结果回测曲线惨不忍睹。原因很简单期货是双向T0交易开仓平仓当天就能来回折腾均线交叉信号产生的当天就能成交但A股是T1当天买进第二天才能卖一个按收盘价产生的买入信号最快也要等次日才能买入第二天价格可能已经完全不一样了。而且A股还有涨跌停限制一旦连续涨停你想买都买不进策略信号在回测里完美成交实盘却直接踏空。同样的策略逻辑在不同产品上表现差异巨大的原因主要来自四个方面一是交易制度比如能否做空、是否T0、有没有涨跌停限制二是数据特征比如数据频率是几秒一笔还是每天一根K线、有没有停牌、有没有除权除息三是流动性深度大单砸进去会不会造成严重滑点四是参与者结构如果一个市场里全是散户和短线资金那么趋势和情绪的惯性会更明显而一个机构主导的高效市场里套利机会转瞬即逝。这些都是产品层面的问题不是代码层面的问题。代码只是把交易思路翻译成计算机可执行的语言如果思路本身和产品特性不匹配代码写得再漂亮也没用。所以我一直建议入门第一个项目不要急着写策略先花一段时间把目标产品的“交易规则说明书”读一遍再把行情数据和历史数据下载下来认真看看不同产品在数据形态上的差异比如K线有没有跳空、成交量有没有明显的密集时段、节假日和交割日的特殊表现。这一步做好了后面每一步都会顺很多。1.2 交易产品的基础分类框架量化交易里常说的“产品”大致可以分为六大类股票、期货、期权、债券、外汇、加密货币。每一类自身又有很多细分比如期货里有商品期货、股指期货、国债期货期权里有股票期权、ETF期权、商品期权债券里有国债、信用债、可转债。不同细分品种虽然大类相同但交易场所、对手方、保证金规则可能完全不同策略设计也得跟着调整。我整理过一个简单的对照表方便新人快速建立框架产品类型交易方向交易规则典型杠杆数据频率主要参与者股票做多为主部分市场可做空多为T1有涨跌停现金交易无杠杆高频至日频散户机构期货双向交易保证金制度T0较高常为5-20倍高频tick/秒级机构专业交易者期权双向交易策略组合丰富保证金/权利金T0非线性杠杆高频专业机构债券做多为主机构间有做空T0为主场外居多有门槛较低可加回购杠杆日频为主银行为主的机构外汇双向交易24小时高杠杆很高常为20-100倍高频银行、对冲基金、散户加密货币合约/现货双向7x24小时交易所规则各异合约杠杆较高高频散户量化团队这张表只是大框架具体到每个市场还要继续细看。比如期货里的股指期货有每日价格波动限制和持仓限额商品期货则各有各的涨跌停板比例加密货币现货和合约的规则也完全不同。真正做量化你需要的是“每个产品层面的制度细节 每个品种层面的数据特征”双重认知。接下来我从股票开始逐个讲这些细节对策略的影响。2. 股票类量化产品最容易上手的主战场2.1 股票量化的核心玩法选股、择时、统计套利股票是绝大多数量化新手的第一站原因很直观数据最透明、资料最多、交易门槛最低、规则相对容易理解。但门槛低不等于容易赚钱股票量化同样有很深的门道。按策略逻辑划分股票量化大致有三条路线。第一条是横截面选股典型代表是多因子模型。核心思想是在同一时刻有哪些股票更容易在将来某个时间段跑赢市场根据估值、成长、质量、动量、情绪等各类因子给股票打分按分数排序构建投资组合。这类策略在国内市场以日频调仓为主因为T1制度下日频以下的高频交易在选股层面施展不开。第二条是时间序列择时也就是预测指数或个股未来的涨跌方向。常见技术指标包括均线、MACD、布林带、动量反转也会引入成交量、市场情绪等辅助指标。择时策略在股票市场最大的挑战是长期来看择时对超额收益的贡献未必稳定频繁交易还会产生更高成本所以很多机构会把选股和择时结合起来而不是单纯依赖某一种。第三条是统计套利最经典的是配对交易。找两只长期相关性很强的股票比如同一行业的两家龙头企业当二者价差偏离历史均值时买入低估的一只、卖出高估的一只或对应做空等待价差回归。A股做空工具有限以前配对交易更多是机构通过股指期货对冲系统性风险来实现现在有融券、更有券源的情况下普通投资者也能尝试。但融券的成本和可得性要认真评估。2.2 股票量化的数据细节与复权陷阱股票量化新手最容易忽略、但后果很严重的一个细节是股票价格的前复权、后复权与不复权问题。绝大多数人下载行情数据直接用收盘价算收益结果一遇到除权除息回测结果就莫名其妙地“失真”或者出现不存在的暴跌。举个例子某股票分红10派10元除息日价格直接从20元跳到19元。如果你用不复权价格算日收益率当天就会出现约5%的“假亏损”。如果策略持仓期间跨越除息日这部分亏损会被错误地计入策略收益导致回测严重失真。更麻烦的是如果除权除息频繁发生不复权价格序列上的均线、动量等指标会产生大量虚假信号。应对方法很简单做历史回测用“后复权”价格它完整保留了真实历史涨跌幅的连续性同时不会像前复权那样随着最新价格变化全局调整。做实盘信号计算时则用“未复权”的价格因为实盘成交价就是当前价格。另一种方案是直接用复权因子把价格序列除以因子保留单位价格相对关系。数据源方面国内常用tushare、akshare、baostock国外用yfinance下载时注意复权选项是否齐全。除了复权股票量化还有几个数据坑停牌股票不能假设可交易否则回测会出现大量“买涨停”的完美成交ST股和退市股会影响因子极值和回测结果要么剔除要么单独处理涨跌停价格附近的成交量异常稀疏想成交就必然排队滑点模型必须考虑这一点另外财务数据有迟滞性年报和一季报披露时间不同如果用未来发布的报表数据做回测就是典型的未来函数。这些细节看似琐碎但在股票量化里都是决定策略“回测能看、实盘崩盘”的分水岭。2.3 代码示例一个最朴素的选股策略我用一个最简单的双因子打分选股策略来说明股票量化代码的基本结构目的是让新人看清“选股策略”这五个字落地成代码长什么样。import pandas as pd import numpy as np # 模拟一个包含代码、名称、市盈率、市净率和前20日涨跌幅的数据表 # 真实场景中这里的raw_data应从行情接口下载并处理好复权价格 raw_data pd.DataFrame({ code: [000001, 000002, 000003, 000004], pe: [8.5, 12.3, 20.1, 15.2], pb: [0.9, 1.5, 2.8, 1.2], ret_20d: [0.05, -0.02, 0.12, 0.03] }) def score_stock(df, pe_weight0.5, pb_weight0.3, mom_weight0.2): df df.copy() # 因子方向pe、pb越低越好所以取倒数后归一化 df[inv_pe] 1 / df[pe] df[inv_pb] 1 / df[pb] def minmax_norm(s): return (s - s.min()) / (s.max() - s.min() 1e-9) df[score_pe] minmax_norm(df[inv_pe]) df[score_pb] minmax_norm(df[inv_pb]) df[score_mom] minmax_norm(df[ret_20d]) df[total_score] ( df[score_pe] * pe_weight df[score_pb] * pb_weight df[score_mom] * mom_weight ) df df.sort_values(total_score, ascendingFalse) return df result score_stock(raw_data) print(result[[code, total_score]])这个例子的关键不是代码有多复杂而是背后的交易逻辑低估值PE、PB低加上近期动量好的股票往往有较高概率在下一周期跑赢市场。注意我对PE和PB做了倒数和归一化这是为了把不同量纲的因子映射到同一个尺度上。真实项目中因子处理和中性化比这个要复杂得多比如行业中性化、市值中性化但基础思路都是一样的。写完信号之后真正影响策略实盘表现的是执行细节。买入价格该用收盘价还是次日开盘价手续费和滑点按多少算调仓频率是每周还是每月组合里持有多么只股票这些虽然不属于“产品分类”问题但和产品规则密不可分。比如A股市场做日频调仓、收盘价成交往往不现实更稳妥的办法是用次日开盘价成交并给所有成交价加上0.1%到0.2%的滑点缓冲。3. 期货与商品CTA趋势追踪的乐园3.1 期货量化与股票量化的核心差异如果说股票量化要解决的核心问题是“选什么”那期货量化首先要解决的则是“多空方向和仓位管理”。期货市场有几个产品制度上的根本差异直接决定了策略设计逻辑的不同。第一是双向交易。期货天然支持做空你不用像股票那样等券源、也不用担心融券成本看空就开空单这就把策略空间扩大了一倍。第二是保证金制度。交易期货不需要支付全额合约价值只需缴纳一定比例的保证金通常5%到15%相当于自带5到20倍杠杆。杠杆是收益放大器更是风险放大器仓位管理稍微失控一波反向行情就能把账户击穿。第三是T0交易。当天开仓可以当天平仓配合tick级高频数据期货成了短线策略和高频策略的主战场之一。第四是合约换月问题。期货合约都有到期日主力合约每个月或每个季度会切换不同合约的价格并不连续必须做复权或价差拼接否则策略连续回测时会突然出现价格跳变导致的虚假信号或虚假回撤。这些产品特性决定了期货量化最经典的策略流派是CTA趋势跟踪。商品市场参与者里有大量产业客户和套保盘他们的目的往往是转移风险为市场提供了源源不断的方向动量来源。趋势跟踪策略正是靠捕捉这些中长线趋势来盈利比如唐奇安通道突破策略、双均线系统、动量截面策略都是很多CTA产品的核心引擎。3.2 期货量化策略常用逻辑与保证金管理期货量化策略大致分三类趋势跟踪、套利交易、事件/基本面量化。趋势跟踪我已经提过了简单说就是“截断亏损让利润奔跑”。套利交易则利用相关品种或合约间的价格偏差分为跨期套利、跨品种套利和期现套利。跨期套利是在同一品种不同到期月份合约之间做多空配对例如买入近月合约、卖出远月合约赚取价差回归或扩大的收益。跨品种套利常见于产业链上下游品种比如螺纹钢与铁矿石、豆粕与大豆逻辑是利润在产业链上的分配会出现均值回归。套利策略相对趋势跟踪来说单笔波动小但结构复杂对保证金占用和资金效率要求很高。保证金管理在期货量化里怎么强调都不过分。很多新手第一次做期货回测时默认用满杠杆结果回测曲线非常漂亮实盘一遇回撤就直接穿仓。我的经验是单个策略的合约价值占用不建议超过账户总资金的2倍杠杆也就是动态保证金占用控制在10%到20%之间同时保留足够的“准备金”应对盘中波动。回测时一定要按“保证金率 手续费 滑点”来模拟实际账户不要简单地用一根K线收盘价成交。尤其是秒级高频数据回测成交假设要更进一步模拟委托队列和对手盘深度否则回测出来的收益会骗人。3.3 期货量化代码示例双均线趋势策略下面给你一个简单但完整的期货双均线趋势策略框架用来展示期货量化的基本写法。import pandas as pd import numpy as np # df: 包含datetime, close, contract_type 的分钟或日线数据 # 这里以日线为例仅为演示核心逻辑 def backtest_futures_trend(df, fast5, slow20, commission_rate0.0001, slippage0.0005): df df.copy() df[fast_ma] df[close].rolling(fast).mean() df[slow_ma] df[close].rolling(slow).mean() df[position] 0 # 快线上穿慢线开多下穿开空 df.loc[df[fast_ma] df[slow_ma], position] 1 df.loc[df[fast_ma] df[slow_ma], position] -1 # 仓位变化即换仓点用前一天的收盘估算成交价 df[prev_close] df[close].shift(1) df[trade_price] df[prev_close] * (1 slippage * np.sign(df[position].diff())) # 简单每日收益计算未考虑精确保证金变化 df[ret] df[close].pct_change() * df[position].shift(1) df[tcost] 0.0 trade_idx df[position].diff().fillna(0) ! 0 df.loc[trade_idx, tcost] ( df.loc[trade_idx, price_est] .fillna(df[close]) .abs() * commission_rate / df[close] ) df[net_ret] df[ret] - df[tcost] df[equity] (1 df[net_ret].fillna(0)).cumprod() return df # 核心思路趋势向上持有多头趋势向下持有空头真实期货回测中建议用专业的开源框架比如backtrader、vnpy、或是自研事件驱动引擎。数据上优先使用复权后的指数连续合约实盘交易时再找对应主力合约下单。双均线策略看起来简单但参数敏感性很高比如5日和20日的参数在一段行情里非常赚钱换一个时间段就可能连续亏损这说明它可能过拟合了历史行情。解决思路不是拼命调参而是做多品种、多周期组合用分散化降低单品种趋势失效的影响。关于资金管理还有个经验公式可以分享单次开仓的风险金额不要超过账户总资金的1%意思是如果止损距离是1%那开仓手数就需要控制在“账户总资金 × 1% / 止损距离 / 合约乘数”以内。这个规则能保证即使策略连续错20次账户也只是回撤20%左右依然有翻身的机会。4. 期权、债券与外汇量化进阶的产品拼图4.1 期权量化波动率交易的天堂期权是我在所有产品里认为最“数学”的一个。它不像股票和期货那样只有一个价格维度期权同时受标的价格、行权价、剩余期限、市场无风险利率和隐含波动率五个变量影响策略设计也因此特别有层次感。期权的核心交易标的是“波动率”。很多人第一次接触期权容易只看方向但期权最精致的地方在于你可以构造一个“赌波动率会涨”而完全不需要预测标的涨跌的组合比如买入跨式策略同时买入平值看涨和看跌标的大涨或大跌都能赚钱唯一怕的是市场安静。做量化我们需要按希腊字母来管理风险Delta代表标的价格变化对期权价格的影响Gamma代表Delta的变化速度Vega代表隐含波动率变化的影响Theta代表时间流逝带来的损耗。一个专业期权量化团队基本上就是围绕这些希腊字母做组合优化。开发期权策略的难点不只是数学模型还有数据。期权合约数量庞大同一个标的有不同行权价、不同到期日的几十个合约历史数据存储和清洗成本很高。而且期权隐含波动率的计算依赖定价模型不同模型算出来的数值有差异策略回测时如果不能保持模型口径一致结果会非常不稳定。新手如果真想尝试期权量化建议从ETF期权开始因为标的是指数数据相对规范流动性也比多数个股期权好。4.2 债券量化低波动、久期与利差债券量化对普通投资者来说相对陌生但它是一个规模巨大的机构市场。债券的量化逻辑和股票、期货都不太一样它更关注利率曲线、信用利差和久期管理属于“宏观驱动型”的量化策略。比如通过构建久期中性组合来交易收益率曲线形态的变化或者在信用债市场里用财务因子和评级变动预测违约风险从而进行信用溢价交易。个人做债券量化最大的门槛是数据难拿。银行间债券市场的交易数据不像股票那样公开透明很多成交数据要付费或者只能拿到汇总数据。此外债券市场以机构投资为主最小交易单位往往是几十万元甚至上百万普通散户资金量根本进不去。所以我的建议是债券量化可以作为了解金融市场的知识版图但入门阶段不太建议投入过多精力。如果你有机构背景或想往固定收益方向发展倒是可以从国债期货和国债ETF开始因为它们和利率曲线的联动性强数据相对好获取。4.3 外汇量化全天候流动性但隔夜风险大外汇市场是全球流动性最强的市场每天的交易量超过6万亿美元因此有人把它称为“永不休息的流动性地狱”。外汇量化策略的常见方向是趋势跟踪和套息交易。趋势跟踪和期货CTA很像只是标的换成了货币对比如欧元兑美元、日元兑美元。套息交易则是卖出低利率货币、买入高利率货币赚取利差但如果汇率出现大幅反向波动利差收益远远覆盖不了汇兑损失所以套息交易本质上是做空波动率。外汇量化有一个必须注意的产品细节点差和隔夜利息。报价中的买卖价差在正常时段也许只有几个点但在经济数据公布瞬间或者重大突发事件时可能会扩大到几十点策略回测如果忽略这些极端点差实盘会很难受。隔夜利息也叫库存费杠杆式外汇持仓过夜会被收取或支付利息这个费用对长周期持仓策略的影响很大回测里不计算隔夜利息收益曲线会偏离现实。还有一点外汇杠杆可以开到几十倍甚至上百倍这是很多新手爆仓的重灾区别被“高流动性”三个字迷惑流动性和低风险是两码事。5. 加密货币与新型资产量化新玩家的试验田5.1 为什么加密货币适合量化初学者练手如果是纯粹从“练手”的角度加密货币市场可能是最适合新兴量化玩家起步的领域之一。原因很现实第一7x24小时不间断交易不像股票期货有开盘收盘时间策略可以在任何时段跑测试速度快很多第二主流交易所都提供完善的API接口行情数据、账户信息、下单撤单一应俱全对程序员来说非常友好第三合约和现货市场都支持多空双向操作不用担心做空工具不足第四数据公开度高很多平台可以免费下载tick级历史数据回测样本极其充足。网上能看到的很多python量化交易策略代码也确实是跑在加密货币数据上的因为数据获取最方便。比如很多初学者会先写一个动量策略根据最近N小时的价格涨幅调整多空方向在永续合约上回测几行代码就能看出策略雏形。这种“快速试错”的学习方式对理解量化的整个流程非常有帮助。5.2 加密量化的风险与合规考量但加密货币量化的风险也不小。第一个风险是市场波动特别剧烈价格几分钟内上下10%是常态插针行情更是频繁发生一些永续合约在极端行情里甚至会出现“回踩打止损后瞬间反转”的极端现象。第二个风险是不同交易所之间的流动性差异很大热门交易所的主流币种深度够小众币种可能一单就把价格打穿好几个点回测里用的成交价在实盘里根本拿不到。第三个风险是资金费率机制永续合约每间隔一段时间需要多空双方结算资金费率如果长期持有一边方向资金费率可能是看涨情绪时的多头付费这部分成本会直接侵蚀策略收益。这里要特别提醒合规问题。从事任何市场交易都必须遵守所在地区的法律法规选择合规持牌的平台确保资金安全。加密货币交易涉及的法律政策在不同地区差异很大个人在参与前一定要做充分了解不要盲目跟风。6. 常见问题与实战避坑6.1 产品选择新手该从哪个产品入手这个问题的标准答案不是唯一的因为每个人的编程水平、风险承受能力和时间精力不一样。但我个人有一个比较稳的推荐路径先从股票开始再过渡到期货之后按兴趣延伸到期权或加密货币。为什么先股票因为股票市场的规则最容易理解数据不涉及合约换月和保证金策略回测和实盘之间的差距相对直观新手可以把主要精力放在“如何提炼交易信号”“如何评估策略效果”这些核心问题上而不需要被交易制度细节干扰。等你有了完整的策略开发和回测经验再去期货市场感受保证金和双向交易的刺激就不会手忙脚乱。等资金量和风险管理能力都成熟了再尝试期权这类非线性产品才能理解波动率交易的价值。加密货币可以作为平行学习的训练场因为数据API友好、7天全天候适合练习事件驱动框架和高频回测技术但要用闲钱仓位要轻。6.2 回测陷阱过拟合、幸存者偏差、未来函数这部分必须单独拿出来讲因为我在实践中见过太多人不是策略不行而是回测方法论有严重硬伤。第一个坑是过拟合。很多新手喜欢在一个历史区间里反复调整参数直到把回测曲线“调”得很漂亮结果一到模拟盘就原形毕露。防止过拟合的常用方法包括减少参数数量、做样本外测试、做参数敏感性分析、以及采用更稳健的规则化设计比如“只要均线在多头排列就持有不设置过于精细的止损点”。量化交易追求的是“大概率正确的愚蠢方法”而不是“高深复杂的精巧模型”。第二个坑是幸存者偏差。如果回测数据里只包含当前还在市场上交易的股票或期货合约那些退市、破产、暴跌的品种就被自动剔除了回测结果会被严重高估。解决方法是使用包含历史全样本的数据源至少也要知道数据源是否剔除了退市样本。第三个坑是未来函数。未来函数指的是在回测的某一天用了这一天之后才产生的数据。比如用季度财报数据回测时直接用财报发布日期而不是财报截止日期就会引入未来信息用当日收盘后的因子排序、却用当日收盘价成交其实已经使用了一天最后的报价这在日频回测中还好但如果用分钟数据就可能产生严重的时序错误。检查未来函数最直接的办法是把策略里用到的每个数据字段的发布时间和更新时间列出来和信号产生时间逐一对比。6.3 平台与工具选型从开源到专业交易终端工具选型也是入门阶段的痛点。个人开发者最常见的组合是Python做数据处理和策略回测pandas加numpy处理数据matplotlib或plotly画净值曲线。回测框架用backtrader、vnpy或vectorbt每个框架各有侧重backtrader文档齐全适合新手vnpy国内社区活跃而且自带实盘接口vectorbt擅长大规模向量化回测。实盘交易则可以直接通过券商或交易所提供的API下单也可以用QMT、ptrade这类量化交易终端它们内置了策略编写和运行环境可以连接券商通道比较适合不想自己维护底层大系统的交易者。从我自己的体验来说前期可以先在开源框架上跑通策略逻辑等到策略稳定了、交易频率也上来了再考虑上专业终端这样能最大化利用资源。工具不在于贵而在于你用顺手了没有。我在很多项目和辅导中遇到的情况是新人总想找到“最厉害”的平台结果来回折腾工具的时间远多于研究策略的时间得不偿失。表格可以帮你快速决策工具类型代表适合人群优缺点开源回测框架backtrader、vnpy、vectorbt有一定编程基础的策略开发者免费、灵活但需要自己搞定数据和实盘对接专业量化终端ptrade、QMT、掘金有实盘交易需求、注重稳定性系统完善、客户端成熟但依赖服务商环境交易所官方API各家券商/交易所高频、自研系统团队延迟低、自由度最高但开发量大最后再送大家一个我一直在用的习惯建一张“产品-制度-策略”对照表每接触一个新市场先把它的交易规则、数据格式、常见策略和自己踩过的坑记下来过一段时间再回来看你会发现自己对量化交易的理解正在慢慢形成体系。量化交易入门到精通不是一条直线而是一张越来越密的网交易产品就是这张网上的第一个节点。希望这篇关于量化交易分类和交易产品的拆解能帮你把这张网的第一根线拉直。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。