ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

无未来函数才是关键:股票指标公式可靠性指南

无未来函数才是关键:股票指标公式可靠性指南 黑马来临 相当不错的公式 无未来函数——这个标题我在各大股软论坛里见过太多次了。说实话刚开始研究指标公式那两年我也被这类标题反复吸引下载了一堆神公式回测历史K线时个个都像神仙可一到盘中实盘就原形毕露。后来踩的坑多了才慢慢明白一个道理公式本身叫什么名字、画出来多漂亮都是次要的最关键的就是无未来函数这五个字。这篇文章不打算吹捧任何一个具体公式而是想把无未来函数这件事彻底讲清楚——它到底是什么、为什么这么关键、怎么快速自查最后给一个教学用的无未来函数演示公式希望能帮你少走我当年走过的弯路。1. 先拆标题黑马来临到底在找什么1.1 这类公式的定位所谓的黑马来临公式从命名习惯上看目标很直白捕捉那种长期横盘后突然启动、短期内有强势爆发潜力的个股。这类公式通常出现在通达信、同花顺等行情软件的指标编辑器里形态上往往以主图指标或选股公式的形式存在信号出现的位置就是作者认为的黑马启动点。我见过大量同类型的公式它们的核心逻辑其实高度相似基本跑不出下面几个套路均线系统由粘合转为多头发散代表资金开始形成合力股价突破前期平台高点或箱体上沿代表套牢盘被消化成交量出现倍数级放大代表有增量资金进场某些摆动指标如MACD、KDJ在低位形成金叉或底背离代表动能由弱转强。这些条件本身没有任何问题任何一个做过技术分析的人都能理解。问题几乎全部出在未来函数上。因为很多作者为了让公式在历史K线上看起来信号精准、买点犀利会在代码里悄悄加入引用未来数据的函数。历史图上的信号自然无比完美但到了实盘这些信号要么根本不出现要么出现之后又莫名其妙消失让人一头雾水。1.2 为什么无未来函数比黑马两个字更值钱先打一个比方。你参加一场考试考完之后对着标准答案看自己之前的答卷当然觉得每一道题都该选那个答案。但真正的考试只能在当时闭卷完成不能先看标准答案再填答题卡。未来函数干的就是这件事它让公式在考试结束后显得神机妙算但在考试进行中完全无从下手。放到股票指标里未来函数就是一类在计算当前K线信号时偷偷引用了当前K线之后才走出来的数据的函数。举例来说假设公式在2024年1月5日这天给出买入信号但为了确定这个信号它其实使用了2024年1月6日、1月7日甚至更后面几天的价格数据。这在历史回看时当然不会露馅因为所有K线都已经是过去式可在实盘中1月6日的数据还没发生1月5日的信号自然计算不出来或者计算出来的结果跟复盘时完全不一样。这就引出了黑马来临标题里最关键的那句话无未来函数。一个公式如果宣称无未来函数意味着它每一个信号的判定都只使用信号出现当天以及当天之前已经确定的交易数据。这样才算得上一个可实盘验证的公式而不是一个事后复盘神器。2. 未来函数到底长什么样三类最常见的写法2.1 软件内置的转向类函数ZIG、PEAK、TROUGH、BACKSET如果你打开一个公式的源码第一件事就是查有没有这类函数。它们是通达信、同花顺公式系统里最典型的未来函数几乎每一个都沾着未来的边。以ZIG为例这个函数叫之字转向作用是绘制股价的折线标注出波段高低点。它的计算逻辑本身就需要先看到后面怎么走才能确认前面哪里是拐点。比如ZIG(3,5)含义是5%的转向只有股价从高点回落超过5%系统才能确认刚才那个高点确实是转折高点。换句话说在2024年3月的高点还没被确认之前ZIG画不出那个高点位置当你3月后回看历史图时ZIG却能把高点清清楚楚地标在3月的K线上——这不是预知而是用未来数据回填。PEAK和TROUGH通常与ZIG配合使用分别取ZIG折线的波峰值和波谷值它们同样继承了未来数据的特性。BACKSET则更直白函数名就是回填的意思典型用法是BACKSET(COND, N)当某个条件在当前位置成立时把这个状态往前回填N个周期。比如条件在1月10日成立你让它在1月1日到1月10日之间都画上标记回看时信号仿佛提前出现。这类函数在做主图分析时偶尔有它的视觉价值但一旦用在选股公式里就是实打实的作弊器。我个人的习惯是选股公式中出现任何一个这类函数直接弃用不用再看其他条件写得多好。2.2 容易忽略的边界取用陷阱HHV、LLV、REF的误用很多人以为公式里没有ZIG、BACKSET就安全了其实远没那么简单。通达信的HHV、LLV、REF、BARSLAST、COUNT等函数用错了位置同样会造成信号漂移甚至变相未来。举个最常见的例子。有人写突破选股条件收盘价创60日新高于是写C HHV(C, 60)。这句话表面看没毛病但HHV(C,60)的取值范围是包含当前K线的60根K线。也就是说在做盘中实时计算时HHV里的最高值包含了当前这根还没走完的K线的实时最高价。当前K线盘中冲到高位当前价C也在高位于是条件瞬间成立但尾盘股价回落收盘价掉下来信号又消失了。这算不算未来函数严格说它不是引用未来数据但它会让信号在盘中极度不稳定实盘体验跟未来函数一样糟糕。正确做法是用REF把最高值锁定到上一根K线之前C REF(HHV(C, 60), 1)。这样当前K线只负责和已经走完的60根K线做比较盘中数据波动不会再让信号反复横跳。很多黑马来临类公式的源码表面看着无未来实则在这种细节上埋了雷。2.3 跨周期引用与动态数据最隐蔽的伪无未来还有一类更隐蔽的情况跨周期引用和动态行情函数。所谓跨周期引用比如在30分钟K线周期里写公式却去引用日线级别的数据。如果引用的日线数据是当天尚未收盘的那么这根30分钟K线在引用日线实时最高价、实时收盘价时等于变相看到了后面几根30分钟K线走完后才会更新的日线信息。这在原理上也是一种未来函数而且常规的公式检测功能很难发现。动态行情函数则以DYNAINFO为代表它取的是当前盘口的实时数据比如DYNAINFO(3)是最新价、DYNAINFO(4)是最低价之类。这类函数在盘中计算时确实及时但选股或写指标时如果直接叠加进历史回测逻辑就会出现一个严重问题回测历史时这些动态函数取得的值跟当时盘中的真实值未必匹配会导致信号的上下文错乱。我自己见过不少公式加载到分时图或者盘中预警时表现尚可一旦拿去做历史回测信号位置全变了就是因为混入了动态行情数据。所以判断一个公式是否无未来函数不能只看有没有ZIG要把上面这三类情况全部排查一遍。下面这张表我整理了很久基本上覆盖了最常用、也最容易出问题的函数函数/写法风险类型说明ZIG、PEAK、TROUGH强未来需要后续走势确认转折点历史信号由未来回填BACKSET强未来把当前满足条件的信号回填到前N个周期REFDATE中风险引用指定日期数据若该日期在运行周期之后则成未来HHV/LLV含当前周期信号漂移盘中实时值会参与计算信号可能反复出现又消失BARSLAST(条件)但条件含未来强未来判断上一个条件成立周期时若条件本身含未来结果同样不可靠跨周期引用未收盘大周期伪未来小周期引用了大周期尚未确定的数据DYNAINFO等动态行情函数伪未来盘中实时值无法在历史K线上精确复现3. 如何自检一个公式是否包含未来函数3.1 第一道工序源码扫描拿到任何公式第一步永远是先看源码。直接在编辑界面里用搜索功能逐个查找下列关键词ZIG、PEAK、TROUGH、BACKSET、REFDATE、REFX、DYNAINFO以及自己写的HHV、LLV是否引用当前周期。这些关键词任何一个出现都要停下来仔细分析它出现的上下文。这里有个容易踩的坑同花顺和通达信的公式语法不完全相同。同花顺的某些函数写法在通达信里会被翻译成不同逻辑反之亦然。如果你在网上找到的公式是从别的软件转换过来的哪怕源码里没有一个上面提及的危险函数也可能因为转换过程改变了计算顺序引入隐藏问题。所以跨软件转换后的公式更要仔细查。如果公式源码是加密的、不允许查看的我建议直接放弃。一个连源码都不公开的黑马来临公式你根本无法判断它有没有未来函数实盘出了问题也无从排查。在这个领域透明就是安全。3.2 第二道工序行情回放验证静态扫描只能排除明面上的问题动态验证才是检验真理的唯一标准。具体操作是打开行情软件的训练模式或行情回放功能把时间回拨到某个信号出现之前然后逐根K线往后走观察信号是不是在条件真实满足的那一根K线才出现。如果看到如下两种情形之一基本可以断定有未来函数信号在某一根K线上已经画出来了但走完后面几根K线后前面的信号位置却变了把时间停在一个历史点当时显示没有信号等继续往后走了几根K线前面的位置上却补出了一个信号。这就像看悬疑剧凶手在案发当天根本没露脸大结局后才闪回一个镜头告诉你其实他当时在场。回放验证的本质就是把自己拉回当时只知道当时信息的状态亲眼确认信号是否真实存在于那个时刻。3.3 第三道工序删尾测试法删尾测试法是我个人最常用的土办法不需要什么特殊功能效果却出奇地好。做法很简单把公式加载到副图或主图上然后用鼠标将横向滚动条往回拉或者用键盘移动光标把界面停在某个中间位置让屏幕最右侧的K线停在一根信号已经出现的K线之后。接下来你观察左侧那些历史信号是否还都好好地待在原处。如果信号消失、位置移动或者多出来几个原本没有的信号说明公式确实引用了超出当前可见K线的数据。更严格的版本是复制公式在源码最后加一行判断让公式只在某一天之前输出结果比如XG: 原选股条件 AND DATE 20240101;然后加载到全图上对比前后两种条件下信号的位置变化。这个办法适合写代码比较熟练的人能精准定位到每一个信号的真实触发时间。3.4 盘中观察法用实盘数据验证信号稳定性还有一种最直接但也最耗时间的验证方法就是盘中实时观察。把公式挂到预警系统或者分时主图上专门记录它出现过的信号然后等到当日收盘后、次日开盘前再回看同一批信号。如果盘中出现的信号收盘后依然存在说明它使用的数据至少是盘中实时且确定的如果盘中亮起的信号尾盘消失或者次日被抹掉那这个公式在数据使用上一定有问题要么是用了未走完K线的动态值要么是盘口函数参与得太深。这类公式即便不是严格意义的未来函数也不值得实盘依赖——因为你根本不知道它下一个信号是真是假。4. 一个教学用的无未来函数黑马形态公式拆解4.1 设计思路先定形态再写代码讲了这么多理论最后还是得落到实际。我在这里给一个演示用的黑马形态候选公式注意这是教学示例不是荐股工具目的是展示完全无未来函数的公式应该长什么样。设计思路是常见的黑马启动三要素均线多头排列、放量突破长期平台、价格处于相对低位。这三个条件全部使用已确定的K线数据来判断不掺任何盘中动态信息。以下是通达信风格的示例代码{前期低点取前60日最低价的最低值} LL1:REF(LLV(LOW,60),1); {前期高点取前60日最高价的最高值} HH1:REF(HHV(HIGH,60),1); {收盘价突破前期高点} BD:CHH1; {均线多头5日在10日之上10日在20日之上且都取上一周期值} MA5:MA(C,5); MA10:MA(C,10); MA20:MA(C,20); DUO:REF(MA5,1)REF(MA10,1) AND REF(MA10,1)REF(MA20,1); {温和放量当前成交量超过前期30日均量的1.5倍} VOLMA30:MA(VOL,30); VL:VOLREF(VOLMA30,1)*1.5; {距离前期低点不远说明相对位置较低} LOWP:CREF(HHV(HIGH,120),1)*0.7; XG:BD AND DUO AND VL AND LOWP;4.2 逐行解释为什么这样写就没有未来函数先看第一组条件。REF(LLV(LOW,60),1)的意思是60日内的最低价但把它整体再REF一次取的是上一根K线那时的60日最低价。这样写之后当前K线的盘中数据完全不会进入统计范围。信号判定只用当前收盘价C和过去已经走完的数据做对比逻辑上彻底干净。第二组突破条件CHH1用的是已经确定的上一周期60日高点。如果你写成CHHV(HIGH,60)盘中就会因为当前K线实时最高价的参与而出现前面提到的信号漂移问题。一字之差实盘表现天壤之别。均线多头条件里同样加了REF。为什么因为如果不加REF盘中均线的数值会随当前K线实时波动尤其在开盘后半小时内均线方向可能反复变化信号自然跟着抖。加上REF之后判定基准完全由昨日及以前的收盘价决定盘中信号一旦出现就不会因为当天价格波动而被推翻这是让公式实盘可用的关键技巧。放量条件里我用的是REF(VOLMA30,1)*1.5也就是把30日均量锁定在前一根K线的位置。这样当前这根K线的成交量只需要和过去的常态量作比较不参与对自身的统计。这个细节很多人写公式时会忽略直接写VOLMA(VOL,30)*1.5导致当天放量越猛MA(VOL,30)被拉得越高阈值也在不断提高信号反而变得迟钝。最后一个低位判断CREF(HHV(HIGH,120),1)*0.7意思是当前股价低于半年来最高价的70%用来排除已经大幅上涨的股票。这里同样用REF锁定历史高点逻辑一致。4.3 这个公式的历史回测和局限这个公式完整跑下来所有信号都严格使用信号之前的数据任何一根K线上出现信号都可以在当时那一瞬间被确认不存在事后补画或盘中消失的问题。用行情回放逐根K线验证时信号出现的位置和复盘的完全一致。但我要泼一盆冷水一个无未来函数的公式不意味着它能稳定盈利。这个示例公式用来做教学演示没问题实盘还差得远。它的主要问题是过滤条件偏粗在震荡市里会频繁触发且只考虑价格和成交量没有加入大盘环境、板块效应、基本面等维度。真正可用的选股公式通常要在形态条件基础上叠加多重过滤还要经过长期的历史回测和样本外验证再结合仓位管理和止损纪律才有实际意义。5. 实战中常见的信号异常与排查技巧5.1 信号在盘中出现收盘后却消失了这是初学者最常遇到的诡异现象。盘中看盘时明明弹出了黑马来临信号等到收盘后再看信号不见了或者位置变了。排查优先级依次是先查源码里有没有HHV、LLV直接引用当前周期再查有没有跨周期引用未收盘数据最后查有没有DYNAINFO等动态函数。我见过不少公式排查到最后发现是当前K线最高价参与计算这一个问题导致的。解决方案也很简单把所有可能包含当前K线的周期统计函数统一用REF锁到上一周期。5.2 信号在历史回测里完美实盘里却一塌糊涂这种情况十有八九是未来函数在作祟。最典型的就是ZIG和BACKSET的组合给历史K线绘制信号时它们能精准标出每一波行情的起涨点但实盘中你站在那个时间点指标根本不可能给出那个信号因为它要靠后面的走势才能确认。我建议你做一件事把公式源码里所有危险函数列出来逐一删掉看信号还剩下多少。如果删完后信号数量骤减甚至清零说明这个公式的核心逻辑完全建立在对未来数据的依赖上直接放弃即可。如果一个公式离开未来函数就只剩两三个干巴巴的信号那它并不是真的发现了黑马只是偷看了答案。5.3 软件显示无未来函数但信号依然漂移某些第三方公式检测工具会给出未检测到未来函数的结论但这并不可靠。这类工具通常只扫描ZIG、BACKSET等几个固定函数对跨周期引用、动态行情函数、以及一些自定义写法无能为力。遇到这种情况还是要回归最原始的方法——行情回放法。任何检测工具都替代不了把时间停在过去亲眼看看信号存在不存在这一朴素的验证过程。你甚至可以拿一个完全由未来函数写成的公式放进这类检测工具里结果可能照样标成通过。工具是辅助你的验证思路才是根本。5.4 问题速查表现象可能原因排查方向盘中信号出现后消失当前K线最高/最低价参与计算REF锁定HHV、LLV到上一周期历史回测优秀实盘失效ZIG、BACKSET等未来函数源码扫描并删除相关函数跨周期信号时间点对不上小周期引用了未收盘的大周期数据只引用已收盘的大周期K线同花顺和通达信表现不一致函数语法转换导致计算顺序变化逐项核对函数含义重新编写信号太密频繁发出过滤条件过宽增加均线粘合度、量比、相对强度等过滤条件信号太少错过行情过滤条件过严适当放宽低位判断、放量倍数写在最后的一点体会做了这么多年指标公式我最大的感受是一个公式有没有未来函数决定了它是实盘工具还是复盘玩具。很多人在网上看到黑马来临这类标题就热血沸腾下载下来第一件事就是套到历史牛股上看效果然后大呼神奇。可这个神奇恰恰是最危险的陷阱。你真正应该做的是把每一行源码拆开把每一个数据来源问个明白用行情回放一遍又一遍地验证。这套功夫虽然枯燥但它是所有可靠公式的基础。我也建议你养成一个习惯每写完一个公式都主动做一次删尾测试和回放验证形成肌肉记忆。把无未来函数从一句宣传口号变成你写公式时下意识遵守的底线。这一行没有捷径能避开未来函数这个坑你已经跑赢大多数公式作者了。
返回列表