做量化这几年摸过各类平台从本地搭数据库、自己写回测引擎到后来用云端平台跑策略踩过的坑不少。今天想认真聊一聊BigQuant——这个把数据、因子库、回测、模拟交易甚至AI选股都打包在浏览器里的平台。如果你正在纠结“量化交易到底该怎么入门”“策略代码写好了去哪里回测”这篇文章大概能帮你省下不少弯路我会把从策略构思到回测调优、再到实盘前需要注意的细节全部拆开讲。先给这篇内容定个调不是官方的文档翻译也不是从零教学。我更想以一个用BigQuant跑过策略、折腾过数据、被回测坑过、也靠平台捡过漏的人的角度分享“在BigQuant上实现一套量化策略”的真实路径。全文围绕一个最典型、也最能说明问题的策略——双均线趋势策略展开因为它的逻辑简单、代码量少、回测周期快非常适合拿来把平台的完整链路跑通。1. 为什么选择BigQuant做量化策略而不是自己搭一套1.1 平台的核心定位与价值BigQuant本质上是一个“数据研究回测模拟”的云端工作台。它解决的不是“怎么写策略”的问题而是“写策略之前和之后那一堆麻烦事”的问题。自己搭策略框架的人应该都有体会数据获取是最先卡住的一环。要么找免费数据源数据质量参差不齐复权、停牌、退市处理全靠自己要么买商业数据一年几万块回测还没跑起来钱包先瘦一圈。拿到数据之后还得清洗、对齐、拼接再到写回测引擎——成交撮合怎么模拟、滑点怎么加、手续费怎么算每一条都要自己定义定义完还要担心对不对。这一套下来少说两三个星期多则一两个月而且很容易在某个环节出错导致回测结果失真。BigQuant把这一整套流程搬到了浏览器里数据源内置好了沪深股票、指数、期货的日线、分钟线、基本面、资金流数据都有回测引擎也是现成的只需写策略逻辑它还带了一个可视化编程模块支持拖拽式搭建策略适合不想写代码的选手。平台同时支持代码模式这就是我们今天重点讲的玩法。它适合谁三类人最合适第一刚入门量化、想验证自己想法的个人投资者第二已经会写Python但不想反复造数据轮子的研究猿第三需要快速迭代策略原型、或者在多个市场之间切换验证想法的从业者。注意BigQuant不是万能的。它的资产类别主要覆盖国内股票市场对期货、期权的支持虽然也有但深度和国内专门的期货量化平台相比还有差距。如果你的方向是高频或者深度的期货策略可能还得另找工具。1.2 BigQuant与自建系统、其他平台的功能对比我把实际体验整理成一个表格这样比较直观。这里的“自建”指的是用Python Tushare/AkShare Backtrader/回测代码自己组装“其他平台”指的是类似聚宽、米筐这类同类型云端量化平台。对比维度BigQuant自建系统其他同类型云端平台数据获取难度内置数据源直接API读取需要自行找源、清洗、对齐内置数据源但覆盖范围各不同回测引擎内置支持股票/期货自己写或用开源框架需调参数内置各具特色策略编写方式可视化拖拽 代码双模式纯代码以代码为主因子挖掘内置AI辅助选因子、自动因子合成全靠自己写部分平台有类似功能但没那么突出社区与研究文档有丰富的策略教程和社区分享没有全靠自己各有社区氛围不同上手难度低图形化界面有引导高需具备数据工程能力中需要懂平台API是否需要本地环境不需要浏览器即可需要配置Python环境、数据库不需要浏览器即可从我自己的体验来说BigQuant最突出的点是它对“AI辅助量化”的融合程度比同类型平台深。它提供的AI表达式、自动因子挖掘、ML模块相当于给了你一把“半自动挖矿镐”哪怕你对机器学习本身没那么熟也能通过拖拽和配置生成一些有效的因子组合。而且它的“AI策略”模块很有趣它会把数据、因子、训练、回测打包成一个流程你只需要调整输入和参数就能看到模型在历史数据上的表现。这对于想从“规则策略”进阶到“机器学习策略”的人来说是一个很平滑的过渡路径。当然有一个现实问题必须说清楚平台再好策略逻辑还得自己思考。BigQuant降低的是策略工程化的成本不是“赚钱”的成本。年化20%和年化亏损20%之间差的不是平台是策略本身的逻辑和对市场的理解。这个话虽然不好听但确实是长期做量化必须接受的事实。2. 策略设计的完整思路拆解从念头到可回测的代码2.1 一个策略想法是怎么变成代码的很多人学量化最大的误区是一上来就写代码。代码只是最后一步前面还有更重要的步骤——逻辑设计。我建议遵循这样一个流程定义问题 → 提出假设 → 数学化表达 → 代码实现 → 回测验证 → 参数分析 → 走通全流程。拿双均线策略举个例子。你的“念头”可能是股票价格短期均线上穿长期均线说明趋势向上应该买入下穿说明趋势走弱应该卖出。这是一个非常朴素、非常常见的趋势跟踪逻辑。接下来要把它“数学化”短期均线过去N1天收盘价的平均值记作MA(N1)长期均线过去N2天收盘价的平均值记作MA(N2)金叉信号MA(N1) 上穿 MA(N2)产生买入信号死叉信号MA(N1) 下穿 MA(N2)产生卖出信号这里面隐含着三个可调参数N1、N2、以及是否考虑手续费和滑点。参数的取值会直接影响策略表现这也是后面要反复优化的地方。到这里思路已经清晰了再落地成代码就水到渠成。如果跳过前面两步直接想着“写个程序买股票”你会发现自己卡在“到底该买哪只股票”“什么时候买”“买多少”这些基本决策上代码写了一堆也没法回测。还有一个很重要的点策略的可解释性。规则型的策略比如双均线每次交易都有明确的逻辑原因出了问题容易排查。相比之下一个纯黑盒的机器学习模型即使收益曲线好看你也不知道它到底在交易什么。这也是我建议新手先从规则策略入手的原因。把规则策略吃透了理解了回测数据的每一个细节再去碰机器学习才能真正读懂模型的输出。2.2 策略逻辑的数学表达与评价指标体系策略代码写完之后怎么判断它好不好不能只看收益曲线。量化策略的评价需要一套完整的指标体系。下面是我在实际评估策略时必看的指标指标计算方式能说明什么问题累计收益率期末资产 / 期初资产 - 1策略整体赚了多少年化收益率将累计收益按时间年化便于与其他投资方式横向比较最大回撤净值曲线从峰值到谷底的最大跌幅策略最惨的时刻亏损多少直接关系实盘心态夏普比率(策略年化收益 - 无风险利率) / 策略年化波动率每承担一单位风险能获得多少超额收益大于1算合格胜率盈利交易次数 / 总交易次数策略对趋势判断的准确程度盈亏比平均盈利金额 / 平均亏损金额赚钱的时候比亏钱的时候多多少结合胜率看换手率交易金额 / 资产总额交易频率直接影响手续费对策略的侵蚀程度这里想特别强调两个指标之间的关系胜率和盈亏比。很多人只看胜率觉得胜率高的策略一定好。事实是趋势跟踪策略的胜率通常只有30%到45%但盈亏比很高可能达到2到3。也就是说十次交易里六次小亏、四次大赚最终整体是赚钱的。反过来胜率高达80%的策略如果每次赚1%就跑、亏10%就扛整体照样亏钱。理解这个关系你才敢在策略回撤期拿住单、坚持执行。在BigQuant的回测结果页里这些指标基本上都直接展示了。你不需要自己计算但一定要理解它们的含义否则就只是看个热闹。2.3 交易成本与市场摩擦的预估这一步看起来不起眼但对策略评价的影响非常大。交易成本包括佣金、印花税、滑点。国内A股的佣金通常在万分之二到万分之三之间印花税卖出时收取千分之一滑点则根据股票的流动性和你的下单规模而变化。举个例子一个每日调仓的短线策略如果年换手率是100倍这个数字并不夸张光交易成本就会吃掉很大一部分收益。以万分之三双边计算加上印花税和滑点一次完整买卖的摩擦成本可能高达0.5%以上。年换手100倍意味着什么意味着光摩擦成本就可能吃掉5%。如果你的策略年化收益是15%交易成本就吃掉三分之一。所以在回测设置里一定要把手续费、印花税、滑点都配置准确。BigQuant的回测设置里有相关的选项可以设置固定的费率也可以按比例设置。我见过很多新手在回测里把手续费设置为0跑出来的收益曲线非常漂亮一调参就“失效”得莫名其妙——其实不是策略失效了而是真实的交易摩擦本来就那么大之前你根本没计入。经验教训我建议每次回测都包含最低标准的交易成本佣金万2.5、印花税千1、滑点万分之2宁可高估也不要低估。一个在包含交易成本后依然稳定盈利的策略才值得你进一步花时间去打磨。回测参数里把交易成本故意调大比如佣金翻一倍、滑点加大一倍如果策略依然能盈利说明它对成本的敏感度低实盘会更加从容。3. 核心实操在BigQuant上实现双均线策略的完整流程3.1 环境准备与数据选择BigQuant的使用流程很简单注册账号、登录工作台、新建一个“策略”项目。这里不需要安装任何本地环境也不需要配置Python浏览器里直接打开即可。进入策略编辑页面后你会看到左侧的数据源列表和中间的策略编辑区。数据源涵盖股票行情、财务数据、板块、指数、期货等。对新手来说这里可能会有点眼花缭乱我建议先明确自己的需求再下手。比如我要做的是A股双均线策略那我关心的是股票池哪些股票全部A股还是某个指数成分股选股票池要从逻辑出发。双均线策略适合在流动性好、趋势性强的标的上跑所以我一般首选沪深300成分股或中证500成分股避免包含大量停牌、退市、流动性极差的股票。数据频率日线还是分钟线双均线策略天然适合日线频率使用分钟线反而会引入更多噪音。时间范围回测区间越长越能覆盖不同市场环境。我一般会覆盖至少5年以上尽量让数据里包含上涨、下跌、震荡三种行情。字段核心是收盘价close、成交额amount、成交量volume如果后面要加止损还需要最高价high和最低价low。在BigQuant中数据可以按代码方式读取也可以使用可视化数据处理模块。因为这篇要讲代码实现我直接演示代码方式。3.2 策略代码实现与逐段解释BigQuant的策略框架目前支持两种代码风格一种是平台自带的DataFrame流水线风格一种是类似其他平台的initialize/handle_bar回调风格。这里我以更通用的pandas DataFrame方式给你展示核心逻辑因为它的代码可读性最好也方便理解每一行在做什么。# -*- coding: utf-8 -*- import pandas as pd import numpy as np # 1. 数据读取 # 假设已经通过BigQuant数据API拿到某只股票的日线数据 # 这里直接构造一个示例DataFrame字段含义与BigQuant导出的数据保持一致 df pd.DataFrame({ date: pd.date_range(2019-01-01, 2023-12-31, freqB), instrument: 600519.SHA, close: ... # 实际数据需要从数据源读取 }) df df.sort_values(date).reset_index(dropTrue) # 2. 计算均线 SHORT 5 # 短期均线窗口 LONG 20 # 长期均线窗口 df[ma_short] df[close].rolling(windowSHORT).mean() df[ma_long] df[close].rolling(windowLONG).mean() # 3. 生成交易信号 df[signal] 0 # 短期均线上穿长期均线金叉前一周期短均线≤长均线当前短均线长均线 df.loc[(df[ma_short] df[ma_long]) (df[ma_short].shift(1) df[ma_long].shift(1)), signal] 1 # 短期均线下穿长期均线死叉前一周期短均线≥长均线当前短均线长均线 df.loc[(df[ma_short] df[ma_long]) (df[ma_short].shift(1) df[ma_long].shift(1)), signal] -1 # 4. 计算持仓状态 # signal表示“信号发生”position表示“当前是否持仓”持仓状态在信号发生之后保持不变 df[position] df[signal].replace(0, np.nan).ffill().fillna(0) # 这里ffill()表示把信号往后填充金叉后一直持仓直到死叉信号出现才改变方向 # 建模仓位转换到下一交易日防止用当天信号当天成交的未来函数 df[target_position] df[position].shift(1).fillna(0) # 5. 计算策略收益 df[ret] df[close].pct_change() # 策略收益率 目标持仓 * 当日涨跌幅 df[strategy_ret] df[target_position] * df[ret] df[cum_ret] (1 df[strategy_ret]).cumprod()代码里有一个关键的细节df[position].shift(1)。这一步的含义是第T天的信号产生的持仓变化最早只能在第T1天执行。为什么因为在真实交易中你只能在收盘后知道今天均线是否金叉死叉然后以明天的开盘价或者收盘价附近成交不可能用今天的信息在今天成交除非你是日内高频并在盘中实时判断但即便那样也有信号延迟。如果不加shift(1)回测结果会包含一种叫“未来函数”的偏差收益会被人为抬高特别是短线策略影响非常严重。还有一个重要细节滑点和手续费。上面的简化代码没有直接模拟成交价格受到滑点和手续费的影响因此实际回测时需要在BigQuant的撮合设置中配置交易成本或者用更复杂的成交价模型。为了严谨量化里的每一次买卖我们都会在成交价基础上扣除一个比例代表买卖价差和滑点。如果你使用的是BigQuant自带的策略回测功能平台会在撮合模块里根据股票的流动性自动计算滑点同时你可以在参数面板设置固定的手续费比例。我的建议是手续费按万3设置印花税0.1%滑点设置一个合理值例如0.02%。3.3 回测结果分析与参数调优策略代码写完之后在BigQuant上点击“运行回测”平台会自动拉取数据、执行策略、输出净值曲线和评价指标。这个过程通常几秒钟到十几秒钟就能完成因为平台已经做好了数据缓存和分布式回测的计算优化。以双均线策略为例第一版跑出来的结果大概率并不惊艳。常见的现象是年化收益不高、最大回撤偏大、震荡市中连续亏损。这不奇怪纯趋势策略在震荡市会反复被打脸这是它固有的弱点。那怎么调参数调优是最直接的手段。把N1和N2改成不同的组合跑一遍回测这就是参数网格搜索。results [] for short in [5, 10, 15]: for long in [20, 30, 60]: # 在数据集上计算对应参数下的策略收益 # 记录年化收益、最大回撤、夏普比率到结果列表 pass # 选择综合评分最高的参数组合作为最终策略参数但这里有一个新手非常容易踩的坑过拟合。如果你在同一个数据集上反复调整参数直到找到一个历史收益最高的组合得到的很可能是一个“刚好”适合这段历史的参数而不是一个能适应未来的参数。判断参数是否过拟合我常用的方法有几个把数据分成两段比如前60%做训练集、后40%做验证集。只用前段数据选参数再看参数在后段数据上的表现。如果后段表现明显跑输前段说明参数大概率过拟合了。观察参数“山形”的平滑度。如果一个参数组合的收益很高但旁边的参数组合收益骤降像一根尖刺这往往是过拟合的信号。如果一段范围内参数表现都比较稳定像一个高原说明策略对参数不敏感更稳健。尝试在完全不同的时间段比如移到2013到2017年跑同样逻辑看是否依然有效。我个人的习惯是确定一组参数后刻意把它在原最优值附近故意调偏10%到15%看策略表现是否依然可以接受。如果表现出现断崖式下跌我就会怀疑策略本身缺乏稳健性而不是参数不够“好”。BigQuant的优势在于它的数据分析模块天然支持这种分阶段回测和参数批量计算。你可以把参数区间、步长都写进配置中心平台会自动生成多组回测结果并给出汇总表格省去了手动改代码的麻烦。3.4 用BigQuant的可视化能力理解市场环境回测完成之后BigQuant把成交点、净值曲线、回撤曲线、持仓变化都展示在界面上。画出一张全市场指数走势的对比图或者把策略净值与沪深300基准画在一起可以对策略的“超额收益”理解得更直观——因为判断策略正确与否不能只看能否盈利关键要看是否跑赢基准。举个例子如果策略净值曲线在牛市里严重跑输沪深300在熊市里仅小幅回撤这说明它的优势在防御而非进攻。如果策略在牛市跟不上、在熊市也照样亏那就是彻底的伪策略直接放弃就好。另外一个细节是交易记录里的“成交价格”与“信号价格”的对比。如果发现大量成交价明显偏离信号发出时的市场价格说明滑点建模有问题或者标的流动性不足。这是很多人在回测阶段容易忽略、实盘阶段才暴露的问题。通过BigQuant回测报告里的明细记录你可以前置发现。4. 常见问题与排错技巧实录4.1 数据对齐、停牌复牌与未来函数的问题问题现象回测出来的收益曲线非常漂亮但实盘收益远低于回测收益甚至亏损。排查思路首先要怀疑的就是未来函数。我见过最典型的情况是在策略中使用了当天的收盘价来产生信号同时也以当天的收盘价作为成交价等于凭空多了一天收益率。解决办法坚持“信号产生”和“成交执行”分离的原则用T日收盘数据计算信号在T1日开盘或T1日收盘执行。代码层面统一使用shift(1)将持仓目标后移一天。BigQuant自带的策略回测框架里有“未来函数验证”选项可以开启它来辅助检查。停牌问题A股停牌是常态。如果你选中的股票在信号日停牌当天不可能成交。在代码里我会额外过滤掉停牌股票——用成交量或涨跌幅为0来判断这其实不严谨停牌的股票可能维持前日价格涨跌幅也刚好为0因此在生产环境里我会用平台提供的交易状态字段来排除。数据对齐问题当你在一个股票池里同时跑多只股票时不同股票的数据长度、停牌日期可能不一致。如果直接使用pandas的DataFrame连接容易发生错位。解决办法是使用多重索引或宽表格式时务必以交易日历为基准做左连接而不是把不同股票的序列简单拼接。4.2 参数优化中的过拟合与过度交易陷阱问题现象训练集上收益极高验证集上表现垃圾或者换一个时间切片策略就面目全非。排查思路参数选择过于追求在单一历史区间上的最优值是过拟合的罪魁祸首。解决办法策略开发遵循这样的纪律——先用直觉选一组基准参数验证其表现是否合理再在有限的参数网格里做小范围优化同时采用前文讲的分段验证法。另外也要监控策略的“交易次数”一个参数如果不正常地增加了交易次数比如双均线里参数太短导致频繁金叉死叉手续费损耗就会成倍增加。这类参数历史收益高很可能是假象因为回测时对成交价假设太理想真实市场里你的订单不可能都按理想价格成交。过度交易量化策略换手率过高会带来很高的冲击成本特别是小市值股票和流动性一般的标的。大资金操作时这个问题会被进一步放大。因此我会把平台回测报告里的“换手率”和“交易费用”一栏单独摘出来看。如果交易费用占累计收益的比例超过30%你就要认真考虑是不是信号太频繁了。适当加大均线周期、加入过滤条件比如价格在MA长均线之上才做多是降低交易频率的有效办法。4.3 策略上实盘前的最后检查清单回测看起来很好了下一步是什么不是直接上真金白银而是走一遍实盘前的检查清单。首先确认回测设置的真实度。手续费、印花税、滑点是否都配置了回测区间是否足够长、覆盖多轮牛熊股票池是否排除了ST和停牌股票这些都是基本检查项。其次做一次“前视偏差”审计。把你的策略代码读一遍观察任何可能用到“未来信息”的地方。比如是否用了未来数据进行归一化是否在T日信号里使用T日的成交额来过滤流动性。除了明显的shift问题之外还需注意因子的计算窗口是否包含“当天收盘后才会发布的财务数据”。再次把策略在另一个时间区间跑一遍。比如把回测时间从2019-2023年改成2014-2018年看策略逻辑是否依然成立。如果仅适合特定年代要特别小心。最后用小资金进行模拟交易。BigQuant有模拟交易功能可以对接实时行情模拟撮合。我会把策略跑在模拟盘至少两周到一个月观察信号产生频率、持仓变化、成交价格滑点表现并和回测假设做对照。如果模拟盘的成交率和回测差异很大说明你的策略隐含了太多理想化假设。我见过太多人跳过模拟、直接上大资金结果第一周就被市场的“教育”打得措手不及。回测是过去的影子模拟盘是今天的天气预报两者都准备好实盘才不至于像裸奔。4.4 常见报错速查表在使用BigQuant过程中你可能会碰到的报错和对应处理方式如下表所示报错或异常现象常见原因处理建议数据读取为空代码选择的股票代码格式不对如漏掉了交易所后缀确认股票代码格式A股股票使用类似600519.SHA的格式运行时提示“找不到列”数据源返回的字段名与你代码里写的字段名不一致打印数据的前几行查看真实列名BigQuant的字段名可能有平台自定义前缀回测结果等于0收益信号没有触发或持仓状态全为0检查均线计算是否正确打印ma_short和ma_long的最后几行看是否有NaN回测收益异常高未来函数、成交价过于理想检查shift是否遗漏、交易手续费是否设置、是否用当天收盘价成交换手率很高参数过短、信号频繁翻转增大信号过滤条件或提高长期均线的窗口长度平台回测速度慢股票池过大、时间区间过长先用小股票池如20只验证逻辑稳定后再扩大到全市场这张表里的每一条基本都在我自己跑策略时踩过。当你真正跑起来你会发现新手阶段90%的“策略失败”其实不是策略本身的问题而是这些工程上的坑。5. 从双均线到进阶策略如何持续迭代5.1 为双均线策略添加过滤条件与仓位管理双均线策略是骨架不是成品。要让它变得更可用常见的增强思路是叠加过滤条件。比如趋势过滤只在长期均线向上MA20 MA60的时候才允许做多。如果长期均线向下即便短线上穿长期均线也放弃买入因为大概率是反弹而非趋势反转。波动率过滤当标的近期波动率过大时降低仓位或直接不参与因为高波动行情中均线信号极易被反复打脸。成交量确认金叉发生的同时如果放量说明资金参与度高、趋势有效性更大可以提升仓位权重。仓位管理也是从“判断方向”到“决定下注多少”的关键步骤。最简单的做法是固定比例仓位比如每次交易投入总资金的20%进阶一点可以按照ATR平均真实波幅来动态调整仓位ATR越大单次投入越小以此控制个股波动对总资产的影响。这些增强虽然看起来简单但每一层都是在用真实的逻辑约束风险。比单纯追求更高的历史收益有意义得多。5.2 把规则策略升级为机器学习策略的思路当双均线这类规则策略在你的资金体量和风险偏好下稳定运行之后下一步可以尝试引入机器学习。BigQuant的AI策略模块提供了一整套流程数据准备 → 特征工程 → 模型训练 → 回测。你可以把双均线的移动平均、乖离率、动量等因子当作特征把未来N日的收益方向当作标签训练一个分类器比如LightGBM或逻辑回归来预测涨跌概率再根据概率构建仓位。这里有一个很实用的技巧特征工程从“已有策略的因子”出发。你不是凭空找几百个因子而是先把双均线策略中已经证明有预测能力的指标均线差、均线斜率、价格相对均线的位置列为基本特征再逐步加入其他因子。这样做的好处是模型和已有逻辑之间保持了一定程度的连续性结果也更容易解释。我自己踩过的最大教训是机器学习策略的收益曲线可能很好看但样本外表现往往令人失望。不要把训练集最优当成目标要始终保留最新的数据做样本外测试并且严格限制模型的复杂度。简单模型的稳定盈利永远好过复杂模型的辉煌后崩塌。5.3 用BigQuant持续跟踪策略状态策略开发完不是一劳永逸的。市场风格会切换策略的有效性会衰减。BigQuant支持策略的定时运行和结果推送可以设置每天开盘前自动运行信号计算把当天的交易信号推送到你的手机。这样即使没有盯盘也能按纪律执行交易。我会每周花十分钟检查策略近期的表现标记净值曲线是否出现与历史迥异的异常回撤。如果发现连续多周回撤不急着改参数先分析市场环境——是整体熊市导致的回撤还是策略本身失效导致的回撤。如果是后者才考虑迭代逻辑如果是前者坚持执行即可。写在最后量化策略这条路平台只是工具真正驱动长期结果的是你对市场的理解和策略执行的自律。BigQuant把数据、回测、模拟交易都收敛到了浏览器里让一个普通投资者也能用上过去机构级别的量化基础设施这个价值说实话挺大的。我个人从本地各种折腾到最终把大部分策略迭代工作放在BigQuant上最大的体会是不是为了偷懒而是把精力从“造轮子”挪回到“想策略”上。省下来的时间应该拿来研究市场结构、品种特性和策略细节这才是量化最核心的竞争力。如果你正打算尝试在BigQuant上实现自己的第一套量化策略建议不要贪多求快。就先用今天这个双均线案例把整个流程走通把回测指标的每一个含义都折腾明白然后把代码里那段shift的本质在脑海里刻下来。等这一步做扎实了后面不管是想加因子、加机器学习还是切换到期货多品种交易都会顺畅很多。最后再分享一个很小的技巧回测报告出来之后把策略净值曲线调成对数坐标看一次。对数坐标下的曲线形态能更真实地反映收益的复利增长情况而不是被高收益年份的涨幅掩盖了长期的停滞或亏损。这个细节很少有教程提但看多了曲线之后你会发现它真的很有用。