通达信回撤率公式验证要先纠正一个常见误解:回撤率不是一个固定数值,换一个起点、换一个窗口,结果就变。它描述的是区间最高点到之后最低点的跌幅,属于风险口径,不含任何方向判断。下面按口径分层、写法、窗口取值、逐根重算、失效场景与记录方法讲清楚。写法以通达信金融终端个人版为准,不同版本在公式管理器里的入口与措辞可能有差异。

一、三个口径先分开:当前回撤、区间最大回撤、路径最深点

把回撤当成一个数会带来麻烦。同一条价格序列上至少能读出三个量:当前回撤看最新一根相对此前最高点的位置,随价格移动;区间最大回撤看选定窗口内最深的那一次跌幅,是窗口内所有当前回撤里的极值;路径回撤要求跌幅发生在最高点之后,避免把最高点之前的低点算进来。三个量各算各的,混在一起比对就失去意义。

{窗口参数 N,默认取 60,在公式管理器的参数栏填写}
{当前回撤:最新价相对窗口内最高点}
当前回撤:(HHV(H,N)-CLOSE)/HHV(H,N);
{区间回撤:窗口最高点与窗口最低点之差,除以最高点}
区间回撤:(HHV(H,N)-LLV(L,N))/HHV(H,N);
{落差:窗口内最高与最低之间的点差}
落差:HHV(H,N)-LLV(L,N);

分母的取法决定口径。用窗口最高点做分母,得到的是相对回落幅度;用当前价做分母,得到的是相对当前价的偏离。深度相同时两套数值也不相等,记录时写明用的是哪一种。公式里的 HHV 与 LLV 各自独立取窗口极值,并不保证最低点在最高点之后出现,这一步的先后关系要另外处理。

{先后关系:最低点出现的位置要在最高点之后}
高点位:HHV(H,N);
高点距今:BARSLAST(H=高点位);
低点距今:BARSLAST(L=LLV(L,N));
顺序成立:低点距今<高点距今;

二、通达信回撤率公式验证的写法:一个窗口,两个取值

通达信回撤率公式验证落到代码上,核心只有两件事:一个窗口长度 N,以及这个窗口里取到的最高值和最低值。写成 (HHV(H,N)-LLV(L,N))/HHV(H,N),分子是窗口内的价格落差,分母是窗口内的最高点,比值落在零到一之间。窗口把两端的极值绑在一起,任意一端变化都会改结果。

窗口长度决定这个数代表什么。N 取小,回撤率跟着短周期的波动跳;N 取大,回撤率被长周期的极值主导,短时间内看不出变化。参数没有对错,问题是同一批观测里不要中途改 N,改了就要把结果重新算一遍。

三、时间窗口怎么定:N 取多少、从哪一根起算

窗口的起点有两种写法。滚动窗口从当前这根往回数 N 根,每根都能得到自己的回撤率,序列是连续的;固定区间从某一段的起始位置到结束位置只算一个值,得到的是这一段的整体深度。两种写法服务的问题不同:看回撤随时间的演变用滚动窗口,比较两段行情谁更深用固定区间。

{滚动窗口:从当前根往回 N 根}
滚动回撤:(HHV(H,N)-LLV(L,N))/HHV(H,N);
{样本是否够 N 根:不够时窗口取不到值}
样本够:BARSCOUNT(CLOSE)>=N;
{窗口起点距今多少根}
起点距今:N-1;

从哪一根起算有一个容易忽略的点:数据起点处没有 N 根历史,窗口取不到值,公式在那一段表现为空白。先打印 BARSCOUNT(CLOSE),把总周期数和 N 比一比,才知道哪一段的数值有效。

四、逐根重算:样本内与样本外分开

通达信回撤率公式验证的第二步是逐根重算。把窗口沿着时间轴一格一格往后挪,每一格重新取极值、重新算比值,得到的是一整条回撤序列,而不是一个数。逐根重算能暴露两件事:回撤率在同一段行情里怎么走,以及极值出现在哪一根。

样本内与样本外要分开。选参数时看的那段数据是样本内,参数定型之后换一段没用过的数据重算,是样本外。两段的数值对不上属于正常情况,对不上的幅度本身也是信息。两段混在一起调参数,等于用同一批数据既定参数又验收,结果说明不了什么。

{序列:每根都有自己的回撤值,直接画在副图}
回撤序列:(HHV(H,N)-LLV(L,N))/HHV(H,N);
{窗口内最深的当前回撤}
最深回撤:LLV((HHV(H,N)-CLOSE)/HHV(H,N),N);
{极值出现的位置距今多少根}
最深距今:BARSLAST((HHV(H,N)-CLOSE)/HHV(H,N)=最深回撤);

五、失效场景:数据起点、长期停牌、复权切换

有几类情形会让回撤率失去可比性,它们都出在数据侧。第一类是数据起点不足 N 根,窗口没有完整样本,数值在起点附近为空,把这一段拿去统计会把区间深度算小。

第二类是长期停牌。停牌区间没有新的 K 线,复牌后第一根与停牌前一根在时间上不连续,窗口跨过空白段时,最高点与最低点可能落在相隔很久的两根上,算出的跌幅与连续交易区间的跌幅不是一回事。

第三类是复权切换。除权之后历史价格被重算,极值的位置跟着移动,同一段行情在切换前后算出的回撤率不同。口径要固定,改过之后把受影响区间的数值重新算一遍。

这三类情形都不是公式写错,而是数据在窗口里跨了边界。核对顺序是先看样本根数,再看有无停牌,最后看复权设置。

下面这张表按现象列出对应含义与处理方式。

现象 含义 处理
起点一段数值为空 该段历史不足 N 根,窗口取不到极值 打印 BARSCOUNT(CLOSE),只统计有完整窗口的区间
回撤率数值异常大 窗口跨过长期停牌,极值落在不连续的两根上 把停牌前后的区间分开算,不并入同一窗口
同一段出现两种结果 两次复权口径不同,历史价格被重算 固定复权设置,切换过的区间单独统计
极值出现在最高点之前 窗口取极值不保证先后顺序 叠加先后关系条件,或改用路径口径

六、验证方法:把计算窗口写进记录表

通达信回撤率公式验证的落地动作是写记录。每次重算之前,把窗口长度 N、起算位置、复权设置、统计的周期级别四项写在同一行里,再写下这次得到的区间回撤与最深回撤。隔一段时间回看,四项都一致才允许两个数放在一起比。

验证还要过一遍公式管理器。用 Ctrl+F 打开公式管理器,在技术指标公式下新建,把上面几行粘进去,点「测试公式」做语法与函数名检查,通过后点「确定」。自编公式落在 T0002 目录下,备份在 T0002\gs_bak,导出文件用 tn6 后缀,改动之前先导出一次。入口与按钮措辞在不同版本里可能有差异,以官方版本说明为准。

七、自查清单:三处口径一次定好

把上面几件事收成一张清单。口径先定:分母用最高点还是当前价,当前回撤与区间回撤分开算。窗口先定:滚动窗口与固定区间不混用,N 中途不改。数据先核对:样本根数是否够 N,停牌与复权的影响是否已经隔离。三项落定之后,数值才有对照的基础。

记一句话:通达信回撤率公式验证只解决口径一致的问题,把窗口、起点、复权三项写死,同一段数据换人重算能得到同一个数。

本文只作技术研究口径,不涉及也不构成对任何标的的判断。

站内还有 回测验证与风险控制 的其他条目,公式编写教程 里讲公式落地与测试,报错与异常排查 里讲异常处理,可对照查看。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。