交易系统 XtradingTime

Excel 统计交易的公式怎么写:可直接粘贴的十四条,含用滚动最大值算的真回撤

Excel 统计交易的公式怎么写:可直接粘贴的十四条,含用滚动最大值算的真回撤
本文目录(7 节)

统计交易这件事,卡住绝大多数人的不是不会写公式,是表格的列位没定死,写一半发现要插一列,前面的公式全乱。所以这篇先把列位固定下来,再给公式。另外要先说一个网上流传最广的错误:最大回撤不能用最高权益减最低权益。只要最低点出现在最高点之前,这个算法算出来的数字会比真实回撤大一倍以上,文末的验算里有一个具体例子,真值 5%,错误算法给出 10.38%。

一、先把列位定死

新建一个工作表,第 1 行写表头,数据从第 2 行开始。下面所有公式都按数据填到第 201 行(也就是 200 笔)来写,笔数更多就把 201 改成更大的数字。

手工录入区(A 到 H 列):

列表头填什么
A日期平仓日期
B品种代码或名称
C方向多 或 空
D开仓价实际成交价
E平仓价实际成交价
F数量股数、手数或张数
G盈亏金额净额,已经扣掉手续费和税
H计划风险金额开仓时算的(开仓价 − 止损价)× 数量

G 列是整张表的地基,两个细节必须做对。

G 列填净额。 手续费、过户费、印花税全部先扣掉再填。A股印花税自 2023 年 8 月 28 日起按 0.05% 单边收取(卖出时收),此前是 0.1%。填毛利的人算出来的期望值一定是正的,因为交易成本刚好被藏在了小数点后面,而它恰恰是大部分人由盈转亏的那部分。

H 列是「计划的」风险,不是实际亏损。 它在开仓那一刻就确定了,之后不管止损有没有守住都不改。这一列的价值在下一节。

公式区(I 到 O 列),统计区(P 到 Q 列):

Q1 这个单元格填初始资金(比如 100000),P1 写上「初始资金」四个字做标签。Q1 必须先填,不填后面一半公式会报 #DIV/0!。

二、七条辅助列公式,写在第 2 行然后下拉

这一组每条都写在对应列的第 2 行,写完选中单元格,鼠标移到右下角小方块,双击或者往下拖到第 201 行。

I2(R 倍数):

=IFERROR(G2/H2,"")

算出来是这笔赚了或亏了几倍的计划风险。凡是这一列小于 −1 的行,都是止损没守住,是执行问题不是行情问题。 这是整张表里诊断价值最高的一列。

J2(累计权益):

=$Q$1+SUM($G$2:G2)

注意 $G$2:G2 这个写法,起点锚死、终点不锚,下拉之后会变成 $G$2:G3、$G$2:G4,这样才是累计。两个都锚死或者都不锚,结果就全错了。

K2(历史最高权益,滚动最大值):

=MAX($Q$1,$J$2:J2)

这条是全文最关键的一行。 它算的是「截至这一笔为止,权益曾经到过的最高点」,而不是整段历史的最高点。写法和上一条一样,起点锚死、终点跟着往下走。

公式里为什么要带上 $Q$1:如果第一笔就亏钱,权益从 100000 掉到 97000,此时曾经的最高点是 100000(开始交易之前的初始资金),不是 97000。漏掉 $Q$1 的话,第一笔亏损的回撤会被算成 0。

L2(回撤金额):

=K2-J2

M2(回撤比例):

=IFERROR(L2/K2,0)

M 列要设成百分比格式,否则显示成 0.05 而不是 5%。

N2 和 N3(连亏计数器):

第 2 行单独写一条,因为它上面是表头没法引用:

=IF(G2<0,1,0)

第 3 行写下面这条,然后从 N3 往下拉:

=IF(G3<0,N2+1,0)

这一列的含义是「截至这一笔,已经连亏了几笔」,赢一笔就归零。

O2 和 O3(连赢计数器): 同样的写法,把符号反过来。O2 填 =IF(G2>0,1,0),O3 填 =IF(G3>0,O2+1,0) 然后下拉。

关于空行:公式可以放心拖到第 201 行,没有记录的行不会污染统计。原因是空单元格在 SUM 里按 0 算,而 空<0 在 Excel 里判定为 FALSE,所以连亏计数器不会被空行往上加。唯一的副作用是权益列在空行上显示成初始资金,看着别扭但不影响任何统计值。

三、七条统计区公式

P 列写标签,Q 列放公式。

单元格标签(写在 P 列)公式(写在 Q 列)算出来是什么
Q3交易笔数=COUNT(G2:G201)有记录的笔数
Q4盈利笔数=COUNTIF(G2:G201,">0")赚钱的笔数
Q5亏损笔数=COUNTIF(G2:G201,"<0")亏钱的笔数
Q6胜率=IFERROR(Q4/(Q4+Q5),0)设百分比格式
Q7平均盈利=IFERROR(AVERAGEIF(G2:G201,">0"),0)赚的那些笔平均赚多少
Q8平均亏损=IFERROR(ABS(AVERAGEIF(G2:G201,"<0")),0)取正数
Q9盈亏比=IFERROR(Q7/Q8,"")平均盈利是平均亏损的几倍
Q10期望值(元/笔)=IFERROR(AVERAGE(G2:G201),0)每做一笔平均赚多少钱
Q11期望值验算=Q6*Q7-(1-Q6)*Q8应该和 Q10 完全相等
Q12利润因子=IFERROR(SUMIF(G2:G201,">0")/ABS(SUMIF(G2:G201,"<0")),"")总盈利除以总亏损
Q13最大回撤金额=MAX(L2:L201)从峰值往下最多亏了多少钱
Q14最大回撤比例=MAX(M2:M201)设百分比格式
Q15最长连亏=MAX(N2:N201)历史上连亏最多几笔
Q16当前连亏=IFERROR(INDEX(N2:N201,COUNT(G2:G201)),0)眼下已经连亏几笔

Q6 的胜率分母用的是「盈利笔数加亏损笔数」,不是 COUNT(G2:G201)。区别在于打平的那些笔(盈亏正好为 0)被排除掉了。用 COUNT 做分母会把打平的笔算进分母却不算进分子,胜率被系统性地压低。

Q11 存在的意义是验算。期望值有两种算法,一种是直接对 G 列取平均,一种是用「胜率乘平均盈利减去败率乘平均亏损」。在没有打平交易的情况下,这两个数字必须完全相等。 如果 Q10 和 Q11 不一样,说明你有打平的笔,或者某一列的范围写错了。这是一条免费的自检。

Q16 的写法值得解释一下:COUNT(G2:G201) 数出你实际填了几笔,INDEX 取出连亏计数列里对应那一行的值。这样不管你填了 5 笔还是 150 笔,它永远指向最后一笔。

这些数字满 50 笔之前不要看。 20 笔算出来的胜率和盈亏比波动极大,本批统一口径是 50 笔为统计下限,样本量为什么是这个数,回测样本量要多少笔那篇有推导。

Excel交易统计表的完整列位示意图,画出A到H手工录入区、I到O公式辅助列、P到Q统计区三个分区,用不同底色区分,在K列历史最高权益上画箭头标出它引用的是从第2行到当前行的滚动区间而不是整列

四、用五笔假数据验算一遍

光给公式不验算,等于把风险丢给读者。下面用 5 笔数据把每一条都算一遍。

初始资金 Q1 填 100000,每笔的计划风险 H 列都填 3000。

行G 盈亏I 倍数J 累计权益K 历史最高L 回撤金额M 回撤比例N 连亏O 连赢
2−3000−1.009700010000030003.00%10
3−2000−0.679500010000050005.00%20
4+60002.0010100010100000.00%01
5+50001.6710600010600000.00%02
6−4000−1.3310200010600040003.77%10

逐格核对 K 列。K2 取 100000 和 97000 里的大者,得 100000。K3 取 100000、97000、95000 里的大者,还是 100000。K4 加进 101000,最大值变成 101000。K5 加进 106000,最大值变成 106000。K6 加进 102000,最大值仍是 106000。峰值只升不降,这就是「滚动最大值」四个字的含义。

统计区的结果:

项目值手算过程
交易笔数5
盈利 / 亏损笔数2 / 3
胜率40%2 ÷ 5
平均盈利5500(6000 + 5000) ÷ 2
平均亏损3000(3000 + 2000 + 4000) ÷ 3
盈亏比1.835500 ÷ 3000
期望值400 元(−3000 − 2000 + 6000 + 5000 − 4000) ÷ 5
期望值验算400 元0.4 × 5500 − 0.6 × 3000 = 2200 − 1800
利润因子1.2211000 ÷ 9000
最大回撤金额5000 元L 列的最大值,出现在第 3 行
最大回撤比例5.00%M 列的最大值,5000 ÷ 100000
最长连亏2 笔N 列的最大值
当前连亏1 笔N6 的值
期望 R0.13R400 ÷ 3000,也等于 I 列的平均值

两条验算都对上了:期望值的两种算法都是 400,期望 R 用「期望金额除以单笔风险」和「直接对 I 列取平均」也都是 0.1333。

现在看错误算法。 用最高权益减最低权益:106000 − 95000 = 11000,除以 106000 得 10.38%。真值是 5.00%。

差了一倍多,原因很清楚:最低点 95000 出现在第 3 笔,最高点 106000 出现在第 5 笔,最低点在最高点之前。你根本没有从 106000 跌到 95000 过,这段「回撤」是凭空拼出来的。滚动最大值的作用就是保证每个回撤都只和它之前的峰值比。

顺带看一眼 I 列:第 6 行是 −1.33R,说明这笔的止损被击穿了 33%,可能是跳空也可能是没按纪律砍。这一行会在复盘里被单独拎出来,收盘后复盘看哪七个数据里它是第四个数据。

滚动最大值与错误算法的对比图,画一条先跌后涨再回落的权益曲线,用阶梯状虚线画出滚动最大值,标出真实最大回撤5000元发生在曲线前段,另用一条跨越整段的箭头标出错误算法把最高点106000和最低点95000相减得到11000,注明最低点在最高点之前所以这段跌幅从未发生

五、旧版 Excel 和 WPS 的替代写法

本文十四条公式全部只用了 SUM、MAX、COUNT、COUNTIF、SUMIF、AVERAGEIF、ABS、IF、IFERROR、INDEX 这十个函数。这么克制是刻意的,下面这些函数一个都没用:

没用的函数最低版本要求用了会怎样
MAXIFS / MINIFSExcel 2019 或 M365Excel 2016 和较老的 WPS 报 #NAME?
FILTER / SORT / UNIQUE / SEQUENCEExcel 2021 或 M365旧版报 #NAME?,WPS 部分版本不支持
LET / LAMBDA仅 M365除 M365 外全部报 #NAME?
TEXTJOINExcel 2019旧版报 #NAME?

还需要替换的只有两个:

IFERROR 在 Excel 2003 里不存在。 把 =IFERROR(A,0) 改写成 =IF(ISERROR(A),0,A),代价是括号里的表达式要写两遍。

AVERAGEIF 在 Excel 2003 里不存在。 Q7 改成 =SUMIF(G2:G201,">0")/COUNTIF(G2:G201,">0"),Q8 改成 =ABS(SUMIF(G2:G201,"<0")/COUNTIF(G2:G201,"<0"))。

另外给一个「一个公式算最长连亏」的写法,供不想加辅助列的人用:

=MAX(FREQUENCY(IF(G2:G201<0,ROW(G2:G201)),IF(G2:G201>=0,ROW(G2:G201))))

这是数组公式,在 Excel 2019 及更早版本和多数 WPS 版本里,输入完必须按 Ctrl + Shift + Enter 而不是 Enter,否则结果是错的(而且不报错,这是它最危险的地方)。 按对了,编辑栏里公式两端会自动出现大括号。M365 和 Excel 2021 直接按 Enter 即可。用上面那五笔数据验证,这条公式返回 2,和辅助列的结果一致。

除非你有非去掉辅助列不可的理由,否则建议用 N 列的笨办法。辅助列的好处是出错时你能一行一行看出是哪笔算错了,一行式公式错了只能重写。

六、粘贴之后报错,先查这五样

现象原因怎么修
#NAME?从网页复制时英文双引号被转成了中文引号在编辑栏里把 " 手工重打一遍,这是最常见的一种
#DIV/0!Q1 初始资金没填,或者还没有任何亏损笔数先填 Q1;亏损笔数为 0 时套 IFERROR 即可
#VALUE!G 列里混进了文本,比如填成了「+3000元」G 列只填纯数字,亏损用负号不用括号
显示 0.4 不是 40%单元格格式还是常规选中 Q6、Q14、M 列,设成百分比
整列结果都一样$G$2:G2 的锚定写错了检查是不是把终点也锚成了 $G$201

还有一个和版本无关的坑:部分系统区域设置下,函数的参数分隔符是分号而不是逗号。 如果你把 =COUNTIF(G2:G201,">0") 粘进去提示公式有误,试着把逗号换成分号。判断方法是随便点开一个自带函数看它用的是哪个符号。

写在最后

这张表算完之后,真正要看的只有三个数:期望值、最大回撤比例、最长连亏。

期望值告诉你这套方法值不值得继续做,最大回撤告诉你在它开始赚钱之前你要承受多少,最长连亏告诉你需要多强的心理准备。很多人只看胜率,而胜率是这三个数里信息量最低的一个,胜率 70% 照样能亏钱,原因在胜率很高为什么还是亏钱里。

表格搭好之后不要再改列位。你会想加列,忍住,加到 R 列往后去加。 一旦在中间插列,前面所有的绝对引用都会错位,而这种错位不报错,它只是安静地给你一个错的数字。

3秒免费测一下你的”管不住手指数”:journal.xtradingtime.com(记住 3316,就能找到我们)


本文内容仅供教育和参考用途,不构成任何投资建议。公式在 Excel 2016 及以上和 WPS 个人版环境下验证通过,旧版请按第五节替换。交易有风险,入市须谨慎。

微信搜一搜 Tom讲交易

在微信里搜「Tom讲交易」即可关注,每周更新交易教学

推荐课程

合约陪跑实战训练营

不只教方法,更带你实盘执行。从仓位管理到止损止盈,手把手纠正你的交易习惯,建立可复制的盈利系统。

→

相关文章

交易系统

Excel 做资金曲线:四步公式链,以及中途入金会把回撤算小多少

资金曲线的公式链只有四步:逐笔盈亏、累计权益、滚动峰值、回撤,其中最大回撤必须用滚动最大值算,用最高权益减最低权益会把回撤算大好几倍。但只做到这一步还不够:中途入金出金会人为抬高峰值,让后面的回撤被系统性低估。这篇给出四步公式链、画曲线和水下图的设置、单位净值法的六列公式,以及一份六笔数据的完整验算,三种算法算出 15.42%、13.59%、54.82% 三个数。

交易系统

期望值怎么算:三步公式加一次成本修正,算出你每笔平均赚多少

期望值不是一个玄学指标,它是一个三步就能算完的算术题:把每笔盈亏换成 R 倍数、代进公式、再扣掉成本。多数人只做了前两步,于是算出来的数字偏高,止损越紧偏得越多。这篇给出完整算法、六档止损幅度下的成本侵蚀表、从 R 换算成人民币的对照表,以及四个会让期望值算虚的统计错误。A股往返成本按 0.102% 计入。

交易系统

券商交割单导出到能用,中间有五步:字段对照表和三类必须自己补的数据

交割单导出来只是流水,不是交易记录。它按成交笔数记账,一笔分三次成交就是三行;它没有开仓平仓的配对关系,也没有你当初打算止损在哪。这篇给出导出时的三条限制、一张交割单字段对照表、手续费列怎么拆成佣金印花税过户费、用先进先出把流水配成交易的方法,以及导入统计表之前必须剔除的六类非交易行。

交易系统

交易记录用什么工具:三类工具的能力边界,加五个选型维度

Excel、Notion、专用 APP 这三类工具不是替代关系,是能力边界不同。表格类算得动但导不进来,笔记数据库类字段灵活但统计要绕路,专用工具统计现成但数据主权不在你手上。这篇给出三类工具的能力边界对照、五个和你自己有关的选型维度(结构化程度、导入能力、统计能力、可迁出性、记一笔的摩擦成本),以及该换工具的三个信号和不该换的三种情形。

交易系统

胜率 40% 算不算差:配 1:2 盈亏比的期望是 +0.2R,一张矩阵直接查

胜率 40% 听起来像是十次里输六次,于是很多人把它当成系统不行的证据。但期望值只由胜率和盈亏比两个数共同决定,40% 配 1:2 的期望是每笔 +0.2R,是一套明确能赚钱的系统。这篇给出五档盈亏比乘七档胜率的完整期望值矩阵、每档盈亏比对应的保本胜率、以及交易成本会吃掉多少期望的换算表,最后说明这张矩阵在什么条件下不能用。

交易系统

模拟盘转实盘的四个硬指标:样本量、执行率、期望值、最大回撤,每个都能算出来

模拟盘做到什么程度才算可以上实盘,凭感觉答不了。这篇给四个能算出数字的硬指标:样本量至少 100 笔(附统计推导,30 笔时胜率的标准误是 9.1 个百分点,100 笔降到 5.0)、计划执行率不低于 90%、期望值不低于 0.2R 且 t 值大于 2、最大回撤以 R 计不超过 20R。每个指标都给出计算方法、达标线和阈值是怎么定出来的,并说明三种典型的假达标。

觉得有用?关注公众号

扫码或在微信里搜「Tom讲交易」,每周更新交易教学文章

扫码关注 Tom讲交易,或微信搜一搜 Tom讲交易

配套免费工具

交易规则卡片

打开