← 返回教程库

如果当初真的止损了,账户现在会是什么样

最后更新 2026-08-19
📚 量化与 AI 投研 📖 用量化技术诊断你自己 ⏱ 约 21 分钟 R2 · 注意风险
你将学到
  • 能把自己的成交记录整理成可重放的输入,并说得出为什么光有记录还不够、必须补回持仓期间的价格路径
  • 说得出反事实推演的四条可信边界,尤其是「用后来才知道的信息设定纪律」为什么本身就是一种偷看未来
  • 知道最该先测的三条纪律各自该看哪个数字,以及每条最常见的误读是什么

复盘的时候你大概说过这句话:「那一笔要是当时止损了就好了。」止损,就是价格跌到你事先划的那条线,不管当时你怎么想,都认亏出来。

这句话你说过几次了?我猜不止一次。可下一次同样的情形来临,你多半还是没走。

问题不在于你不知道该止损。你知道得清清楚楚。问题在于「我应该守纪律」这句话本身没有重量——它是一句道德评价,不带数字,不带后果,说完心里舒服三分钟,第二天就忘了。人不会为一句评价改变行为,人会为一个足够刺眼的数字改变行为。

有一个办法能给这句话装上重量:把你过去那些交易记录翻出来,假设当时真的执行了某一条纪律,从头到尾重新算一遍账,然后把两条曲线并排放在一起看。这个动作有个名字,叫反事实推演——「反事实」的意思就是「与事实相反的那个假设」,即「如果当初不是那样,而是这样,结果会怎样」。

这是量化技术用在你自己身上最有力的一招。它不预测未来,它只是把你已经付出的代价,明码标价地摆出来。

先说人话:它在做一件什么事

生活层:把一句抱怨,换算成一个数字

你有个朋友天天说「我要是不喝那么多奶茶,早就瘦下来了」。说了一年,体重纹丝不动。

某天他做了件不一样的事:翻出过去半年的外卖订单,把每一杯奶茶的热量加起来,再除以一个大致的换算,得出一个数——大概几斤肉。

从那天起他喝得少了。不是因为道理变了,道理一直是那个道理;是因为「我喝太多奶茶」这句模糊的自我批评,变成了「过去半年,这个习惯让我多背了几斤」这个具体的、有单位的东西。

说教和数字的区别就在这里:说教可以被解释掉,数字不能。

投资层:这对你的决策意味着什么

把这件事搬到账户上,你得到的不是一句「你应该守纪律」,而是一句「过去两年,你不守这条纪律,代价大约是这个量级」。

这个转变有三重价值。

第一,它把纪律从道德问题变成价格问题。 「我不该扛单」是自我谴责,谴责会引发抵触;「扛单这个习惯在我的账户里值多少钱」是一笔账,账只需要算,不需要认错。人对后者的接受度高得多,这不是心理鸡汤,是可以直接观察到的行为差异。

第二,它告诉你该先修哪一个。 你身上大概不止一个毛病:不止损、亏了加仓、赚一点就跑、听消息临时改主意……全都改?改不动。反事实推演能给每个毛病标一个大致的价签,你就知道哪个是主要矛盾。有些人以为自己毁在「拿不住」,一算发现真正吃掉利润的是频繁进出的成本。

第三,它让「守住了」这件事也变得可衡量。 反过来算也成立:如果你已经在守某条纪律,算一算不守会怎样,你会更清楚这条纪律替你挡掉了什么。人只有在看见自己被保护过,才会长期愿意接受被约束。

机制层:为什么你的成交记录可以当输入

回测通常被理解成「拿一套策略跑历史」。但回测机器的真正输入不是「策略」这个抽象概念,而是一串带时间戳的买卖动作——策略只是生成这串动作的其中一种方式。

而你的对账单,本身就是一串带时间戳的买卖动作。

换句话说,你就是那个策略。你过去两年做的每一个决定,合起来构成了一套虽然没写成代码、但真实运行过的规则。既然回测能重放一套代码写的规则,它当然也能重放你。

这一点在开源系统里看得很清楚。Vibe-Trading 的回测模块里有一个叫 TradeRecord 的数据结构,它描述的是「一笔已经完成的来回交易」,字段是这些:品种标识、方向(做多还是做空)、开仓价、平仓价、开仓时间、平仓时间、数量、杠杆倍数、实现盈亏、盈亏百分比、离场原因、持有了多少根 K 线、手续费合计。

你对着这张字段表看一眼自己的对账单——是不是几乎一一对得上?这不是巧合。系统里那个「交易记录」,和你券商给你的那份「交割单」,在数据结构上是同一种东西。 你手里已经握着输入了。

至于这份记录本身还能直接算出哪些体检指标,那是另一篇的事,见 你的交易流水里藏着一份体检报告。这一篇只管一件事:拿它当输入,换一条规则重跑。

具体怎么做:四步

第一步:把记录摊成一张表

不需要任何编程。一张电子表格就够,每一行是一笔完整的来回,列至少要有:开仓日期时间、开仓价、平仓日期时间、平仓价、数量、方向、手续费。

有两个容易出错的地方值得提前说。

分批建仓和分批离场怎么记。 如果你一笔行情是分三次买进、分两次卖出的,那它到底算一笔还是五笔?建议是:按「同一个决策」归成一笔,用加权平均价当作开仓价和平仓价。因为反事实推演检验的是决策,不是委托单。但这个归并方式本身会影响结果,所以你要在旁边记一句你是怎么归的,免得过两个月自己都想不起来。

手续费千万别省略。 反事实推演经常会改变交易的次数——比如加上止损,一笔变两笔(止损出来,可能后来又进去)。次数变了,成本就变了。你如果只算价差不算成本,得出的差额会系统性地偏向「改了更好」。

第二步:补回「持仓中间那一段」——这一步最容易被跳过

这一步是整个方法的技术核心,也是绝大多数人做不下去的地方。

回过头看上面那张 TradeRecord 字段表,你会发现一件事:里面没有持仓期间的最高价和最低价。 它只记了起点和终点。

可反事实推演问的恰恰是中间那一段。「如果当时设了止损,会不会被打掉」——这个问题的答案,完全取决于持仓期间价格最低跌到过哪里。而你的对账单上没有这个数,因为券商没有义务告诉你「你持有的那三周里,它盘中最惨的时候是多少」。

所以第二步必须做的是:按每一笔的开仓时间到平仓时间,回头把那段行情的 K 线数据取出来。 K 线就是把一段时间的价格压成的一根柱子,每根给你开盘、最高、最低、收盘四个数。有了这段 K 线,你才能回答「有没有碰到过某个价位」。

这里有个细节我想让你看见,因为它是这个方法的诚实标尺。freqtrade 这个开源交易框架的交易对象里,确实存了持仓期间的最高价和最低价两个字段。文档对这两个字段的说明是:这笔交易期间达到过的最高价 / 最低价——然后紧跟一句「不是百分之百准确」。

一个专门做这件事的系统,自己记录的持仓期间极值,都要标注一句不完全准确。 原因不复杂:它是靠每隔一段时间轮询一次行情来更新这个数的,两次轮询之间发生的瞬间尖刺,它没看见。而你事后用日线数据去补,粒度更粗,误差只会更大——日线只给你一天的最低价,不告诉你这个最低价是在开盘五分钟出现的还是尾盘出现的。

这句话该被你记住的原因是:你的反事实结果,精度上限被这一步卡死。 你补进去的价格路径越粗,结论就越只能当量级参考,不能当精确答案。承认这一点,比算出一个漂亮的数重要得多。

第三步:换一条规则,重算每一笔

现在开始真正的推演。规则要写得像机器能懂的那种,不留任何余地。

反面教材:「跌多了就止损。」——「多」是多少?没法算。

正面写法:「开仓后,只要盘中最低价触及开仓价往下某个固定比例的位置,就在那个位置认亏离场,本笔结束,不再重进。」具体那个比例填几,是你自己的事,本文不给建议,也不存在一个普适的正确答案;这里只讲怎么算。

拿这条规则去扫每一笔:

  • 如果这一笔在持仓期间从没触及那条线,那么结果不变,照抄原来的盈亏。
  • 如果触及了,就把这一笔的平仓价换成那条线的价格,重算盈亏,并且注意平仓时间也提前了。
  • 手续费按新的交易次数重算。

然后把改写后的这一串盈亏,按时间顺序接成一条资金曲线——就是账户余额随时间变化的那条线。

这一步的关键是:你要得到的是一整条曲线,不是一个总数。 只看总盈亏会漏掉最重要的信息,下一步就讲这个。

顺便说,成熟的系统会把「离场原因」当成一个可以直接用来分组统计的一等字段。freqtrade 的分析命令支持按离场原因分组汇总盈亏,也支持只挑其中某几种离场原因来看,它文档里举的例子中就包含止损这一类。设计者把这个维度做成显式功能,背后的判断是:同一套规则赚的钱,来自哪种离场方式,是一个必须能被单独看到的东西。 你自己做表的时候也该加这么一列——本笔是按纪律走的,还是按原样走的。

第四步:比三个数,不是比一个数

大多数人算到这一步就只看一个东西:总共多赚了还是少赚了。这是最容易得出错误结论的看法。

至少要并排比三个:

一、期末总盈亏。 最直观,但也最容易骗人,理由下一节讲。

二、最大回撤 就是账户从历史最高点往下掉过的最大幅度。这个数对你的实际生活影响,往往比总收益更大——因为决定你能不能坚持下去的,是你最难受的那一刻有多难受,不是最终结果有多好看。深度回撤还有个硬邦邦的数学后果:亏得越深,回本需要涨的比例越不成比例地大——亏掉一半,要涨回一倍才平手。

三、单笔最大亏损。 这个数直接体现纪律有没有起作用。止损这类规则的本职工作就是砍掉左边那条长尾,如果加了纪律之后单笔最大亏损几乎没变,说明你的设定根本没咬合上你的真实问题。

这三个数放在一起,才能读出一条纪律的真实性质。举一组数字说明怎么读——下面这组数是我为了讲清算法编的,不是任何真实账户的结果,也不代表任何规则的实际效果

看哪个数 原样(你实际做的) 加上无条件止损后 怎么读
期末总盈亏 100 92 变差了一点
最大回撤 38% 19% 显著变好
单笔最大亏损 21% 6% 尾巴被砍掉了
交易笔数 40 53 成本变高了

如果只看第一行,结论是「止损让我少赚了,所以止损没用」。这个结论是错的,而且是最常见的那种错。

正确的读法是:这条纪律用一部分收益,换掉了一大半的回撤和三分之二的单笔尾部亏损。它不是一个提高收益的工具,它是一个改变分布形状的工具。至于这笔交换值不值,取决于你能承受什么,不取决于哪个数字更大。这一层的机制推导在 止损:从心理问题变成数学问题 里讲得更细。

它的可信边界:四条,一条都不能省

这一节比上一节重要。一个没有边界声明的反事实结果,会比没做还危险,因为它给了你一个假的确定感。

边界一:你一改行为,后面的机会就整个换了一副样子

这是最根本的一条,也是最容易被忽略的一条。

假设那一笔你真的止损了。于是那笔资金提前一个月回到了你账上。接下来会发生什么?你会拿这笔钱去做别的事。 而那件别的事,不在你任何一份记录里,因为它在真实世界里从未发生。

反过来也一样:你扛了那一单,仓位被占着,所以后来那个机会你没参与。如果你当初止损了,你可能就参与了——可能赚,可能亏得更惨,谁也不知道。

这个性质叫路径依赖:每一个决定都会改变后面所有决定的条件。它带来一个必须接受的结论——反事实曲线越往后,越是虚构的。 前面几笔还比较可信,因为改动小;越往后,你的假想账户和真实账户的处境差得越远,那条曲线的意义就越弱。

所以别把反事实曲线的期末数字当成「我本来能有多少钱」。它准确的含义是:在保持其它一切不变的前提下,只改这一件事,历史那一次会往哪个方向偏、偏多少量级。 方向和量级可以信,具体数字不能信。

一个实用的补救:把统计窗口切短一点,分年、分季度各算一遍,看差额的方向是不是稳定。方向在每一段里都一致,比某一个大数字有说服力得多。

边界二:用你后来才知道的事去定纪律,这本身就是偷看未来

这一条最隐蔽,我要多花点力气讲。

你为什么想测「某个比例的止损」?老实回答:因为你记得那几笔亏得最惨的,大概就是跌到那个位置之后开始崩的。

这个念头本身就已经污染了整个推演。 你是先看完了答案,再回去设计考题。

这就是前视偏差——在做某个时刻的决策时,用上了那个时刻还不可能知道的信息。它的可怕之处在于它只往好处错:一个偷看了未来的设定,在历史上永远表现优秀,因为它本来就是照着历史的答案裁剪出来的。完整机制见 前视偏差

具体到反事实推演,它有两种钻进来的方式:

一种是参数上的。 你试了好几个比例,最后留下那个「结果最好看」的,然后说「你看,纪律有用,能多赚这么多」。这个结论其实是「在这批历史上,这个比例最合身」,跟纪律有没有用是两码事。同一段历史被你反复试探,它迟早会给你一个好看的答案,这个机制单独有一篇:数据窥探

另一种是选择上的,更隐蔽。 你只测了「止损」,因为你早就知道自己吃过扛单的亏。那些你没吃过亏、所以从没想过要测的纪律呢?你的测试清单本身,就是被历史结果筛选过的。

有两个判据能帮你识别自己有没有中招:

  • 判据一:这个数字,是我从这批记录里挑出来的吗? 如果是,那它在这批记录上表现好是必然的,不构成任何证据。
  • 判据二:如果我把这个设定挪动一点点,结论会不会翻过来? 一条稳健的纪律,在一小片相邻的设定上应该都是同一个方向。只在某一个精确的点上成立的结论,是历史的巧合,不是规律。

要真正躲开这条,做法只有一个:先把规则定下来,再去测。 顺序颠倒了,测出来的东西就没有证据价值。至于怎么把一个查出来的毛病写成一条事先定死、事后能执行的规矩,那是 查出毛病之后怎么把它变成一条真能执行的规矩 的活,不在这一篇。

边界三:几十笔记录,撑不起一个结论

你一年做多少笔?多数人是几十笔量级。用几十个样本去比较两条曲线的差额,得出的东西里有多少是真实差异、多少是运气,这是个必须问的问题。

有个反直觉的事实能说明问题的严重性:同一批交易,只是换个先后顺序,总盈亏一分不差,但资金曲线的形状和最大回撤能天差地别。 连着亏五笔再连着赚五笔,和亏赚交替着来,最终数字一样,中间的煎熬完全不是一个级别。所以你算出来的「回撤从 38% 变成 19%」,有多少是纪律的功劳,有多少只是这批交易恰好排成了那个顺序?

对付这件事有专门的检验手段——把交易顺序随机打乱很多次,看你观察到的那个差额在随机分布里排第几。机制见 蒙特卡洛检验

值得注意的是,成熟系统把这类检验当成标准配件而不是可选项。Vibe-Trading 的回测校验模块在文件开头就列明它提供三件独立工具:蒙特卡洛置换检验,回答「这套成绩显著优于随机吗」;对夏普比率做自助法置信区间,回答「这个风险调整后的收益有多稳」;以及分时间窗口的前进检验,回答「不同时间段里表现一致吗」。而其中那个置换检验函数的输入参数,就是一串交易记录——跟你手上那份对账单是同一个形状的东西。

这个设计事实本身就在告诉你:一串交易记录能算出一个数,和这个数值不值得相信,在工程上从来就是分开的两件事。

边界四:反事实里的成交,是理想化的成交

你在表格里写「触及那条线就按那条线的价格出来」——现实里做不到这么干净。

跳空开盘的时候(就是今天开盘价直接低于昨天收盘价一大截,中间那段价格根本没成交过),你的止损线可能被整个跨过去,实际成交价比你设的线差一大截。冷门品种上、极端行情里,这种事更常见。

这里又有一个开源系统的诚实声明可以借用。freqtrade 的回测文档在「回测做了哪些假设」那一节里明写:止损成交发生在恰好那个止损价上,即使这根 K 线的最低价比它还低,只是亏损会多出两倍手续费的量。同一节还写明,在一根 K 线内部判断止损时,程序假设最低价先于最高价发生,用意是优先保护资金。

它没有把这些当成秘密,而是当成说明书的一部分写出来。 这正是你做自己那份反事实推演时该学的态度:你的算法里也有一堆这样的假设,你至少要知道它们在哪、往哪个方向偏。回测里那些默认对你有利的假设是成体系的,完整清单见 回测到底在算什么

这条边界的实际影响是:你算出来的「加上纪律后的成绩」,基本上是这条纪律在现实中效果的乐观版本。 好消息是,如果连乐观版本都显示这条纪律没什么用,那它大概真的没用;坏消息是反过来不成立。

最该先测的三条纪律

如果你只做三次推演,做这三条。它们对应的是散户账户里最贵的三个习惯。

一、无条件止损:碰到线就走,不问理由

怎么设定: 开仓价往不利方向某个固定距离,触及即离场,本笔结束。「无条件」这三个字是重点——不许有「这次情况特殊」的分支。整个推演的意义就在于测试一条不给自己留后门的规则。

主要看: 单笔最大亏损和最大回撤这两个数。总盈亏是次要的。

最常见的误读: 看到总盈亏下降就判定止损无效。前面说过,止损的本职是改变亏损分布的形状,不是提高收益。真正该问的是:换来的回撤改善,值不值这点收益?这个交换的价格,只有你自己能定。

还有一个反向发现值得留意: 如果算出来加了止损之后单笔最大亏损几乎没变,别急着说纪律没用,先查一查——很可能是你那些最惨的亏损根本不是「一路阴跌没走」造成的,而是别的机制造成的,比如下面这条。

二、不加仓摊平:亏了不许再买

怎么设定: 把每一笔里「在浮亏状态下追加的那部分仓位」全部删掉,只保留最初那一笔的数量,其余照原样重算。摊平的意思是,价格跌了再买一些,把持仓的平均成本拉低。

主要看: 单笔最大亏损,以及那几笔最惨交易在总亏损里占的比重。

为什么这条常常是三条里差额最大的: 摊平的数学后果是把小亏变成大亏。它每一次都能小幅提高「回本的概率」,代价是在回不来的那些次上,亏损被放大了好几倍。这一正一反两个数在单笔上分别是多少,补仓成本与风险测算 会一起给出来,做反事实推演之前先手算一笔,你对这条规则的差额会更有感觉。它是一种典型的「大部分时候看起来有效、少数时候要命」的做法——而账户是被那少数几次决定的。

最常见的误读: 「我摊平过很多次,大多数都回来了,所以摊平是有效的。」次数在这里是错的统计口径。要看的是加权后的总盈亏,而不是成功次数占比。你可以在推演里把这两个口径都列出来,往往会看到一个刺眼的对比:成功率很高,总账很难看。

三、持有到既定条件:不许提前跑

怎么设定: 找出那些你在原计划条件尚未满足时就主动了结的盈利单,把它们的平仓时间改回「持有到原定条件满足,或者触及止损」的那个时点,重算。

主要看: 期末总盈亏,以及盈利单的平均盈利幅度。

这一条最难做,必须诚实说明原因: 前面两条改的是「多做一个动作」,这一条改的是「少做一个动作」,它对持仓期后续行情的依赖最重,路径依赖最强。你把那一笔多拿了三个月,这三个月里你的仓位被占着,别的机会全被挤掉了——而这部分损失,推演里根本算不出来。

所以这一条的正确用法是定性不定量。 它能回答「我提前跑这个习惯,方向上是在帮我还是在害我」,回答不了「多赚多少」。

最常见的误读: 看到「多拿三个月能多赚一大截」就断定自己要改成长期持有。这个差额里,被挤掉的其它机会没算、多占资金的成本没算,而且它极度依赖那三个月恰好是涨的——换一段行情,同一个习惯可能是救了你。这条推演给的是方向,不是幅度。还有一个必须配的前提:你当初得真的有过一个既定条件。如果你的离场从来就是临时起意,那么所谓「原定条件」是你今天编的,这就直接踩了边界二。

至于「赚一点就跑、亏了死扛」这一组习惯本身该怎么度量、怎么给它画一张画像,是 赚一点就跑、亏了死扛:给这些习惯量个尺寸 的题目,不在这一篇。这一篇只负责一件事:把某一条纪律接上你的真实记录,跑一遍,看差多少。

算完之后,别做这三件事

别拿它去责备过去的自己。 反事实推演里的你有一样天大的优势:你已经知道每一笔的结局了。当时的你没有。用今天的信息去审判昨天的决策,是一种既不公平也没有产出的活动。

别把差额当成未来的预期收益。 「上这条纪律能让我一年多赚这么多」——这句话不成立,前面四条边界每一条都在否定它。它顶多说明:这个习惯在过去那段时间里,量级大概在这里。

别一次改三个。 你算完发现三条都有差额,于是明天开始三条一起上。结果是过不了两周你一条都执行不下去,而且就算执行下去了,你也分不清是哪条在起作用。一次上一条,跑够足够多的交易再看,这才是把诊断变成改进的唯一走法。

⚠️ 风险提示

本节讲的是把量化技术用于自我诊断的方法,不构成任何投资建议、买卖信号或收益承诺。反事实推演算出的任何差额,都不是「你本来能赚到的钱」,也不预示未来。 它建立在一串必然失真的假设之上:持仓期间价格路径是补出来的、成交被理想化了、后续机会的改变无法计入。任何人拿一条反事实曲线向你论证某套方法能赚钱,都该被高度警惕。文中所有数字均为说明算法而虚构,不代表任何真实账户或任何规则的实际效果。完整风险提示见 免责声明

小结

  • 反事实推演做的事:拿你自己的真实成交记录当输入,假设当初执行了某一条纪律,重算一遍,看两条曲线差多少。它的价值在于把「我应该守纪律」换算成一个带单位的数字
  • 你的对账单和量化系统里的交易记录,在数据结构上是同一种东西——所以「你」本身就是一套跑过实盘的策略,可以被重放。
  • 最容易被跳过的是第二步:记录里只有起点和终点,没有持仓中间的价格路径,而止损打没打掉全看中间那一段。这一步的粒度决定了结论的精度上限——连专门做这件事的框架,自己记的持仓期极值都标注「不完全准确」。
  • 比三个数:期末总盈亏、最大回撤、单笔最大亏损。只看第一个,你会得出「止损让我少赚了所以没用」这个最常见的错误结论——止损改的是亏损分布的形状,不是收益。
  • 四条边界一条都不能省:改了行为后续机会就变了(越往后越虚构)、用后来才知道的信息定纪律等于偷看未来(先定规则再测)、几十笔样本撑不起结论(差额里有多少是运气)、反事实里的成交是理想化的(结果是乐观版本)。
  • 最该先测的三条:无条件止损(看尾部)、不加仓摊平(看总账不看成功率)、持有到既定条件(只能定性,且必须当初真有既定条件)。
  • 算完之后别责备自己、别把差额当未来收益、别一次改三条。

一句话说完这篇:把你说过一百遍的那句「早知道就该走了」,老老实实按当时的价格重算一遍,你会得到一个具体的数字——这个数字不能告诉你以后能赚多少,但它能让那句话第一次真正压在你心上。

本文所引源码与文档均来自上述快照版本,是阅读代码与文档得出的机制说明,不是运行结果;具体行为请以你手上那个版本为准。本站内容为投资教育,不构成任何投资建议,边界见 免责声明

内容有错、看不懂、或想看下一篇?告诉我们 →

本文为投资教育整理,不构成任何投资建议;不荐个股/基金、不预测点位、不承诺收益。关键数据与结论请结合权威来源自行验证,并见风险免责声明