第18页 · 预计14页
我早年第一次做策略迁移的时候,踩了个实打实的大坑。当时我在A股做窄口突破策略,年化收益稳定在30%左右,最大回撤控制在12%,实盘跑了一年半,胜率和盈亏比都很扎实。我想当然地把这个策略的代码直接搬到美股,参数原封不动,只是把股票池换成了标普500成分股。回测跑出来年化有22%,最大回撤14%,看起来虽然比A股差一点,但也还算能打。我没多想,就拿了总资金的5%小资金上线了。
结果实盘跑了三个月,亏了12%。
我当时纳闷了很久,回测明明没问题,怎么实盘差这么多?后来我拉了逐笔成交数据逐根复盘才发现:美股的假突破比例是A股的两倍还多。A股突破后平均能延续两根日线,惯性很足;美股突破后经常一根线就到头,马上反向回落。原因说穿了很简单:A股散户多,看到突破就跟风追,情绪有延续性;美股都是机构,大家都在等关键位突破,一突破就有机构反向出货,专门收割突破跟踪者。
这件事给了我一个非常深刻的教训:策略的本质,是利用市场的某种“不均衡”赚钱。如果那个市场不存在这种不均衡,或者不均衡的表现形式不一样,策略就会从盈利模式变成亏损模式。
一个策略能在某个市场持续盈利,本质上是三个前提同时成立,缺一个都不行。
第一个前提:市场微观结构匹配。 做高频策略,需要市场有足够的流动性和足够的散户对手盘;做套利策略,需要市场存在持续的定价偏差,且偏差回归的速度慢于套利成本。比如统计套利赚的是相关品种的定价偏差,在A股散户情绪化交易多,定价偏差大,回归也快,所以有效;但在美股定价效率很高,两个相关股票的价差很快就会被机构套利抹平,超额收益就很低。如果微观结构不匹配,策略逻辑再漂亮都没用。
第二个前提:参与者行为匹配。 策略本质上是赚对手盘的钱。反转策略赚的是散户追涨杀跌的钱,如果市场里都是机构,没人追涨杀跌,反转策略自然就失效。动量策略赚的是趋势延续的钱,如果市场里都是做反转的资金,动量就会变成反向指标。我做过一个统计,A股的反转因子在散户占比高的小盘股上效果最好,在机构主导的大盘股上效果要弱一半,就是这个道理。
第三个前提:流动性容量匹配。 策略的资金量不能超过市场的容量,否则冲击成本会吃掉所有利润。同样的小市值反转策略,在A股放五个亿可能就到容量上限了,冲击成本会大幅抬升;但放到美股市场,可能五十亿都还没到上限,因为市场深度不一样。很多人把A股的小资金策略直接套到港股仙股,结果买也买不进,卖也卖不出,就是忽略了容量匹配。
三个前提缺一个,策略迁移都会失败。所以策略迁移从来不是复制粘贴代码,而是基于目标市场的特性,重新做一遍逻辑验证和参数重构。
踩过那次坑之后,我花了大半年时间,把手里的七八套策略逐个往外汇、商品市场迁移,慢慢总结出了一套四步适配法。这些年我迁移任何策略都用这个方法,踩坑的概率低了很多。这四步分别是:核心逻辑验证、参数校准、制度约束叠加、小资金实盘验证。
第一步:核心逻辑验证 这一步最容易被跳过,但其实最重要。你要先回答一个最根本的问题:这个策略的盈利来源,在目标市场里到底存不存在?
比如做统计套利,你要先判断目标市场里,相关品种之间的定价偏差是不是足够覆盖手续费,有没有持续的偏差来源。比如外汇市场的主流货币对,定价效率非常高,三角套利的价差往往只有万分之几,普通交易者的手续费都覆盖不了,那这个策略逻辑上就不成立,直接放弃,不要浪费时间跑回测。
再比如尾盘异动策略,赚的是尾盘拉抬砸盘的次日反转。在A股,散户喜欢尾盘追涨杀跌,所以尾盘异动次日容易反转;但在外汇市场,尾盘是机构调仓高峰,往往是趋势的延续,反转效应很弱。逻辑上就说不通,就不用往下做了。
这一步不要跑复杂的回测,先做定性判断。如果逻辑上就说不通,直接放弃;如果逻辑上成立,再进入下一步。能在这一步筛掉的策略,就不要浪费时间去调参数。
第二步:参数校准 用目标市场的历史数据,重新优化策略的核心参数。注意,是重新优化,不是微调几个点。
核心参数通常分三类:周期参数,比如布林带周期、动量窗口长度;阈值参数,比如突破幅度、波动率阈值;仓位参数,比如单只标的仓位、总仓位上限。
优化的时候不要只盯着收益率看,还要同时看三个指标:胜率是不是稳定、盈亏比是不是合理、换手率是不是可接受。如果优化完收益很高,但换手率翻倍,那就要算一算交易成本能不能覆盖,很可能看起来赚的多,实际都交了手续费。
这里有个绝大多数人都会踩的坑:过度优化。很多人把参数调到历史数据上表现完美,结果实盘一塌糊涂,这就是过拟合。参数优化一定要留有余地,比如最优参数是18日周期,你就看15到20日这个区间的表现是不是都稳定。如果只有18日那天特别好,17和19日都差很多,那这个参数就是过拟合出来的,绝对不能用。
我一般的做法是,取最优参数左右20%的区间,只要区间内表现都稳定,才确认参数有效。
第三步:制度约束叠加 把目标市场的交易制度约束、流动性约束、成本约束,一层层叠加到策略里。很多回测之所以好看,就是因为忽略了这些现实约束,把约束加上之后,收益可能会降一截,但那才是接近实盘的结果。
交易制度约束:比如T+1市场不能做日内回转,策略的持仓周期至少要隔夜;有涨跌停的市场,涨停买不进跌停卖不出,策略里要加入涨跌停过滤逻辑,不能假设涨跌停也能成交。 流动性约束:小市值品种流动性差,要设置单只仓位上限,不能按等权分配;日均成交额太低的标的,直接剔除出股票池。 成本约束:手续费高的市场,策略的换手率不能太高,否则成本吃掉利润。比如港股的交易成本比A股高,策略的换手率就要相应压低。
第四步:小资金实盘验证 最后一步,也是最关键的一步:用总资金的1%-2%,实盘跑至少三个月。
为什么必须做实盘验证?因为回测永远模拟不了所有实盘细节。比如滑点、订单成交概率、极端行情的流动性,这些回测里都是理想化的。实盘跑三个月,对比实盘和回测的收益、胜率、最大回撤,心里就有数了。
我一般用三个指标来判断适配是否成功: 第一,收益达成率:实盘年化收益 / 回测年化收益。正常应该在0.6-0.8之间,也就是实盘能达到回测的60%-80%。如果低于0.5,说明适配有问题。 第二,胜率偏差:实盘胜率与回测胜率的差值。差值应该在5%以内,差太多说明信号质量差。 第三,最大回撤比:实盘最大回撤 / 回测最大回撤。正常在1.2-1.5倍之间。实盘回撤比回测大很正常,但如果超过2倍,说明风控失效。
如果三个指标都在正常范围内,说明适配成功,可以逐步加仓;如果不在,就回去复盘逻辑和参数;如果实盘直接亏损,先停下来,不要硬扛,大概率是底层逻辑不匹配。
永远对市场保持敬畏,小资金试错,成本最低。
波动率是所有策略最核心的变量,没有之一。不同市场的波动率水平不一样,同一个策略的参数必须跟着波动率调整,否则信号质量会差很多。
比如最常用的布林带策略,本质是用波动率的倍数来定义上下轨。在A股,个股日均波动率1.5%左右,用2倍标准差的布林带,宽度大概6%,刚好覆盖大部分日常波动。但在外汇市场,主流货币对日均波动率只有0.5%,还用2倍标准差的话,布林带太窄,价格天天穿轨,信号就乱了。
我做波动率适配,通常分三步走,一套方法可以套用到所有市场所有策略上。
第一步:基准波动率测算 先算目标市场标的的长期平均波动率,用20日滚动波动率的长期均值作为基准波动率。我自己统计的几个主流市场基准值如下,你可以直接参考: A股个股基准波动率:1.5%/日 美股个股基准波动率:1%/日 外汇主流品种基准波动率:0.5%/日 商品主力合约基准波动率:1.8%/日 加密货币基准波动率:3%/日
测算的时候不要用太短的时间,至少用过去三年的数据算均值,避免某一段极端行情拉高或者拉低基准。
第二步:波动率分层 用标的自身的波动率,或者对应市场的VIX指数,把市场分成低、中、高三个波动区间: 低波动区:波动率低于基准的80% 中波动区:波动率在基准的80%-120% 高波动区:波动率高于基准的120%
每个波动区间用不同的策略参数,核心原则是: 低波动区:收窄阈值,提高仓位。因为波动小,突破更可信,反转空间小,可以适当激进一点。 中波动区:用基准参数,正常仓位。 高波动区:放宽阈值,降低仓位。因为波动大,噪音多,假信号多,要保守一点。
举个实际的例子,窄口突破策略在不同波动率区间的核心参数:
波动率区间 窄口宽度阈值 突破确认幅度 单只仓位 低波动 6日振幅<1% 突破0.3% 2% 中波动 8日振幅<2% 突破0.5% 1.5% 高波动 10日振幅<3% 突破0.8% 1%
这样分层之后,策略在不同波动环境下的表现会稳定很多,不会在高波动期因为假信号多而大幅回撤,也不会在低波动期因为参数太保守而赚不到钱。
第三步:动态波动率更新 波动率不是固定不变的,要动态更新。我一般每天收盘后更新一次波动率,用过去20个交易日的数据计算,然后调整第二天的策略参数。不用太频繁,日内波动大多是噪音,每天更新一次足够。
下面给你一个可以直接用的波动率分层计算代码:
import pandas as pd import numpy as np
def calc_volatility_layer(price_series, window=20): """ 计算波动率分层 price_series: 收盘价序列 返回:当前波动率、波动层级(1低/2中/3高) """ # 计算日收益率 ret = price_series.pct_change().dropna() # 滚动波动率 vol_series = ret.rolling(window).std() current_vol = vol_series.iloc[-1] # 基准波动率(过去一年均值) base_vol = vol_series.iloc[-252:].mean()
# 分层判断
if current_vol < base_vol * 0.8:
layer = 1
elif current_vol < base_vol * 1.2:
layer = 2
else:
layer = 3
return current_vol, layer
代码很简单,但实盘里非常实用。你可以把自己策略里的参数,做成对应不同层级的参数表,每天根据波动率层级自动切换参数,不用手动调。
如果你不想自己写波动率适配的代码,也可以访问intoquant.com壹信量化官网,获取现成的多市场波动率自适应策略模块,直接接入实盘系统使用,省得自己从零调试。
流动性是跨市场交易最容易忽略的问题。同样100万资金,在美股大盘股可能连水花都没一个,在港股仙股就能拉涨停,冲击成本差几十倍。
做流动性适配,核心是解决两个问题:单只标的买多少合适?大单怎么拆成小单成交?
单只仓位上限计算 我常用一个简单的经验公式: 单只最大仓位 = 该标的日均成交额 × 冲击系数 / 策略日均换手率
冲击系数一般取0.01,也就是单日买卖量不超过日均成交额的1%,冲击成本基本可控在0.1%以内。如果是小资金,冲击系数可以提到0.02,冲击成本也不会太高。
举个例子: 某只A股日均成交额1亿,策略日均换手率20%,那么单只最大仓位 = 1亿 × 0.01 / 0.2 = 500万。 也就是说,这个策略在这只股票上最多放500万,再往上加,冲击成本就会明显上升。
如果是外汇或者加密货币,流动性好很多,冲击系数可以提到0.05甚至更高,因为市场深度好,大单对价格影响小。
订单拆分算法 如果要交易的量比较大,不能直接一个市价单砸进去,要拆成小单分批成交。常用的拆单策略有三种:
第一种:TWAP,时间加权平均价格。把订单平均分配到交易时段的每个时间段。比如要买10万股,交易时间4小时,就每分钟买416股。这种方法最简单,适合流动性一般的品种。
第二种:VWAP,成交量加权平均价格。按照历史成交量的分布来分配订单量,成交量大的时间段多下,成交量小的时间段少下。这种方法成交更接近市场均价,适合流动性好的品种。
第三种:冰山订单。只显示总委托量的一部分,比如10%,成交一部分再补一部分,隐藏真实的下单量,避免被对手发现。这种适合在流动性差的市场用,防止别人看到大单反向操作。
实盘里我一般用VWAP为主,极端行情用TWAP,流动性差的品种用冰山订单。
不同市场的交易制度差异,对策略的影响是根本性的。很多策略在这个市场能做,换个市场根本做不了,就是因为制度不一样。
T+1与T+0的差异 T+1制度意味着当天买的不能当天卖,所以所有日内策略在A股都没法做。比如高频策略、日内反转策略,在美股和外汇很流行,在A股就只能做隔夜版本,效果大打折扣。
T+0市场可以做日内回转,策略的持仓周期可以很短,换手率高,资金利用率高。但T+0市场也更考验执行速度,慢几毫秒可能就差几个点。
做策略迁移的时候,如果从T+0市场搬到T+1市场,必须把持仓周期拉长到至少隔夜,同时降低换手率预期。
涨跌停制度的影响 有涨跌停的市场,价格到了涨跌停就不能继续交易了。这对策略有两个影响: 第一,突破策略遇到涨停买不进,遇到跌停卖不出。回测里如果假设涨跌停也能成交,收益会严重虚高。 第二,涨跌停会造成价格粘性,涨停之后次日往往有惯性高开,跌停之后次日往往惯性低开,这本身就是一种策略机会。
所以在有涨跌停的市场做策略,必须加入涨跌停处理逻辑: 买入信号发出时,如果当天已经涨停,放弃买入,或者次日开盘再看。 卖出信号发出时,如果当天已经跌停,放弃卖出,或者次日开盘处理。 可以加入“连板过滤”,连续涨停的股票不追高,连续跌停的股票不抄底。
做空机制的差异 做空机制的完善程度,直接决定能不能做市场中性策略。
美股融券最方便,成本低,年化2%-5%,券源足,几乎所有股票都能融。所以美股市场中性策略很成熟,做多高分股票,做空低分股票,剥离大盘风险。
A股融券就很难,券源少,成本高,年化8%-15%,而且很多股票根本融不到。所以A股很难做真正的多空对冲,只能用股指期货对冲大盘风险,或者纯多头。
在做策略迁移的时候,如果原来的策略是市场中性,到了做空难的市场,就要改成多头版本,或者用指数期货替代空头,同时接受风格暴露的风险。
策略适配完之后,怎么验证适配得好不好?不能只看回测,要对比回测和实盘的差距。
我一般用三个指标来评估适配效果:
收益达成率:实盘年化收益 / 回测年化收益。正常应该在0.6-0.8之间,也就是实盘能达到回测的60%-80%。如果低于0.5,说明适配有问题。
胜率偏差:实盘胜率与回测胜率的差值。差值应该在5%以内,比如回测胜率55%,实盘50%-60%都正常。差太多说明信号质量差。
最大回撤比:实盘最大回撤 / 回测最大回撤。正常在1.2-1.5倍之间。实盘回撤比回测大很正常,但如果超过2倍,说明风控失效。
如果三个指标都在正常范围内,说明适配成功,可以逐步把资金加上去。如果不在,就要排查原因。常见的原因有:回测没扣够交易成本、滑点估计不足、流动性假设太理想、前视偏差。
这里特别提醒一句:永远不要相信“回测收益=实盘收益”的神话。回测是理想环境,实盘是真实战场,能做到回测的七成就已经算优秀的适配了。
本章实战笔记
策略迁移不是复制粘贴,是重新研发。不要拿A股的参数直接跑其他市场,90%的概率会低于预期。
先验证逻辑,再调参数。逻辑不通的策略,参数调得再好看都是过拟合,实盘一定会亏。
波动率分层是性价比最高的优化。只需要加十几行代码,就能让策略在不同行情下的稳定性提升30%以上。
小资金实盘验证是必经步骤。永远不要第一次上策略就大资金满仓,1%-2%的资金试三个月,成本最低。
本章核心公式卡 单只最大仓位公式: 单只最大仓位 = 日均成交额 × 冲击系数 / 日均换手率 冲击系数默认取0.01,可根据市场流动性调整。
波动率分层阈值: 低波动:当前波动率 < 基准波动率 × 0.8 中波动:基准波动率 × 0.8 ≤ 当前波动率 < 基准波动率 × 1.2 高波动:当前波动率 ≥ 基准波动率 × 1.2
收益达成率: 收益达成率 = 实盘年化收益 / 回测年化收益 合格区间:0.6-0.8
本章实战清单
策略适配执行清单 - 第一步:定性验证盈利逻辑在目标市场是否成立 - 第二步:用目标市场三年历史数据重新优化核心参数 - 第三步:叠加交易制度、流动性、成本三类约束 - 第四步:1%-2%资金实盘测试至少三个月 - 第五步:对比三个验证指标,达标后逐步加仓
参数校准清单 - 周期参数:布林带周期、动量窗口、窄口统计周期 - 阈值参数:突破幅度、波动率阈值、止损幅度 - 仓位参数:单只仓位上限、总仓位上限、单行业仓位上限 - 检查参数在±20%区间内表现是否稳定,避免过拟合
⚠️ 风险提示:本书内容仅为量化研究与知识分享,不构成任何投资建议。套利交易存在基差、费率、流动性、平台与极端行情等风险,历史表现不代表未来收益。投资有风险,入市需谨慎,请自主决策、量力而行。
💡 键盘 ←/→ 翻章 · T 键切换目录