简介:面向股票技术分析与通达信指标使用者,这份教程性质资源给出了OBV能量潮改造的选股公式源码,并围绕其编写思路与实战含义展开讲解。文档先介绍OBV指标衡量买卖压力与资金流向的基本原理,再逐步拆解公式中的关键节点:通过OBV减去30日均值得到MOBV,利用REF、BARSLAST、FILTER、BACKSET等函数定位OBV与收盘价的历史高点,最终以CROSS(OBV,OBV高)且H<C高作为买入触发条件。对于熟悉通达信公式编辑但希望提升选股逻辑的投资者,这类带详细注释的源码解析能直接帮助理解函数组合与信号过滤方式。资源包仅含1个doc文档,大小28KB,文本精炼,便于快速查阅或复制到通达信软件中测试。目前已有371人学习,适合想结合量能变化优化选股策略、并对OBV指标二次开发的用户作为参考。
1. 这个选股公式到底解决什么问题
先说结论:这不是一个传统意义上的“万能选股神器”,而是把OBV这个经典量能指标,从“副图观察工具”改造成“可直接出票的选股条件”,专门用来捕捉主力资金悄悄进场、股价还没大涨的启动前夜。
OBV(On Balance Volume,能量潮)很多人副图里都挂着,但真正把它当选股条件用的股民并不多。原因很简单:OBV原始算法只输出一条累积能量线,副图里看看背离、看看趋势还行,一旦直接拿来做选股,要么信号太密、天天出票,要么信号太滞后、等OBV创新高股价已经涨上天了。所以我在实际使用中做了一套“改版”:OBV均线多头排列 + 量能温和异动 + 价格回踩不破关键均线,三重条件叠加,把原始OBV的噪声大幅过滤掉,留下来的票基本都是主力资金已经在干活、但股价还没完全启动的品种。
这套公式适合谁?适合两类人。一类是每天复盘时间有限、需要快速缩小选股范围的上班族,收盘后跑一遍选股,第二天重点盯那十几只票就够了。另一类是本来就用量能类指标的进阶股民,想把自己的交易体系和OBV结合,但懒得从零开始研究算法细节。公式本身也不复杂,通达信语法写的,没有DLL、没有外部数据,纯源码复制粘贴就能用。
我自己用这套公式跑了大概三个月的历史回测和模拟盘验证,整体胜率谈不上夸张,但选出来的票确实普遍有“资金提前潜伏”的痕迹——要么是OBV已经提前于股价创新高,要么是股价缩量回调时OBV拒绝深度回落。下面把完整的改造思路、源码、使用方法和踩过的坑一次讲清楚。
2. OBV原始指标的核心逻辑和它的“选股缺陷”
2.1 OBV到底在算什么
OBV的计算逻辑简单到令人发指:当日收盘价比昨日高,就把当日成交量加进累计值;当日收盘价比昨日低,就把当日成交量从累计值里减掉;收盘价平盘,累计值不变。
把每天的“加减成交量”连成一条线,这条线代表的就是资金推动的方向。股价涨、OBV跟着涨,说明上涨有量能配合,健康;股价涨、OBV不涨甚至跌,说明上涨是缩量硬拉,随时可能回落;股价跌、OBV不跌,说明下跌过程中有人在悄悄接货,是底部特征之一。
通达信原始OBV公式长这样:
OBV:=SUM(IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE<REF(CLOSE,1),-VOL,0)),0);一句话翻译:从上市第一天起,每天的量能按涨跌方向累加。这个“0”表示从第一根K线开始累计,一条永不回头的曲线。
2.2 为什么直接用OBV选股不靠谱
OBV核心缺陷有三条,每一条都直接打击选股效果:
缺陷一:累计值没有参照系。OBV是一条“只增不减”的累积线(跌的时候减,但因为量能数值大,长期趋势仍然向上),数值本身没有任何上下限,不同股票的OBV数值完全不可比。你说A股OBV是5000万、B股OBV是2000万,谁强谁弱?根本比不了。
缺陷二:绝对数值受股本和价格影响。高价股、大盘股的成交量天然比低价股、小盘股大,OBV的绝对值自然就大。直接拿OBV横向对比选股,等于用小盘股的尺子量大盘股,没有任何意义。
缺陷三:单条线没有买卖信号。原始OBV只是一条线,没有“上穿、下穿、金叉、死叉”这种信号机制,你看着它涨,但你不知道什么时候该买。
所以做选股公式的第一步,就是把OBV从“绝对值”改造成“相对值”。具体做法是给OBV加均线,然后用OBV和均线的相对关系、均线自身的排列状态,来构造可量化的选股条件。
3. 选股思路改造:三个必须同时满足的条件
3.1 条件一:OBV短中期均线形成多头排列
OBV单条线看不出什么,但我给它加上两条均线之后,情况就完全不一样了。
OBV短期均线(比如5日)代表最近5天资金推动的加速度,OBV中期均线(比如30日)代表一个月左右的资金趋势。当短期均线在中期均线上方,且两条线都朝上运行,说明短期资金流入的速度快于中期平均水平,而且趋势是向上的。
这是整个选股公式的基础骨架,相当于先框定一个大方向:只选资金趋势向上的股票,趋势向下的票一律不碰。
有人会问:为什么不直接用股价的5日和30日均线多头排列?因为股价均线容易被单日大阳线、大阴线扭曲,而且股价包含情绪成分。OBV均线反映的是资金层面的相对强弱,比股价均线更接近“主力在做这件事”的真相。
3.2 条件二:量能温和放大但不异常爆量
光有OBV多头排列还不够——很多慢牛票OBV也是一直多头排列,但股价就是不死不活地慢慢爬。选股需要抓的是“加速临界点”,所以要再加一个量能异动条件。
参考通达信系统自带的“量比”思路,我构造了一个相对量能判断:
VOL5:=MA(VOL,5); VOL10:=MA(VOL,10); 量能条件:=VOL5>REF(VOL5,1) AND VOL5>VOL10*1.05;意思是:5日均量在放大,且最新5日均量比10日均量高出5%以上。“5%”这个值是我反复调出来的——太高了容易选到已经连续暴量的票,追高风险大;太低了选出来的票量能变化不明显,启动动力不足。
同时还要限制一下“爆量”:
量能不过热:=VOL<HHV(VOL,10)*1.8;意思是当天成交量不超过10日最大量的1.8倍。这个条件的逻辑是:如果当天突然爆出巨量,可能是利好刺激、也可能是主力出货。选股要选“温和放量”,而不是“巨量长阳”,那种票冲进去大概率接盘。
3.3 条件三:股价回踩不破关键均线
量价选股最后一定要落到价格上。OBV再强,如果股价已经跌破所有均线、趋势完全走坏,也不能碰。
我的做法是加入一条**21日指数移动平均线(EMA)**作为生命线:
EMA21:=EMA(CLOSE,21); 价格条件:=CLOSE>EMA21 AND (CLOSE-EMA21)/EMA21<0.08;第一层含义:股价站在21日EMA上方,保证中期趋势没有坏;第二层含义:股价距离21日EMA的涨幅不超过8%,确保没有追高。
这个8%是我结合A股波动特征设的。A股短线票一天涨5%很常见,如果距离均线超过8%,说明短期已经涨了一大波,此时入场很容易买在短线高点。反过来,如果贴着均线买,止损空间小,盈亏比最划算。
3.4 三个条件合成一个选股公式
把上面三个逻辑合并,就得到了完整的选股公式。我直接用源码形式给出,方便复制到通达信里用:
{OBV能量潮改选股公式 - 参数可自行优化} N1:=5; N2:=30; OBV:=SUM(IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE<REF(CLOSE,1),-VOL,0)),0); OBVMA1:=MA(OBV,N1); OBVMA2:=MA(OBV,N2); {条件一:OBV均线多头排列} 条件1:=OBVMA1>OBVMA2 AND OBVMA1>REF(OBVMA1,1) AND OBVMA2>REF(OBVMA2,1); {条件二:量能温和异动} VOL5:=MA(VOL,5); VOL10:=MA(VOL,10); 量能条件:=VOL5>REF(VOL5,1) AND VOL5>VOL10*1.05; 量能不过热:=VOL<HHV(VOL,10)*1.8; 条件2:=量能条件 AND 量能不过热; {条件三:价格回踩不破关键均线} EMA21:=EMA(CLOSE,21); 价格条件:=CLOSE>EMA21 AND (CLOSE-EMA21)/EMA21<0.08; 条件3:=价格条件; {最终选股信号} XG:条件1 AND 条件2 AND 条件3;把这段代码复制到通达信公式编辑器的选股公式里,新建一个公式,命名随便取,编译通过后就能用了。
注意:N1和N2这两个参数值是我个人常用的,不代表最优。如果你做的股票风格偏短线,N1可以改成3、N2改成20;如果偏中线,N1改8、N2改成45。参数没有绝对标准,关键是要在你的交易周期里做回测验证。
4. 公式的逐行解读:源码里的每一处在干什么
4.1 OBV计算段优化说明
通达信原始OBV用SUM函数从第一根K线开始累加,这在选股时有个隐患:上市时间越长的股票,OBV绝对值越大,但这不代表它更强。不过因为我后面用的是MA均线交叉逻辑,而不是OBV绝对值的横向比较,所以原始累加方式的“绝对值差异”不会影响选股结果——MA(OBV,5)和MA(OBV,30)都是基于同一只股票自身的历史数据做的相对判断,天然具备自适应性。
这也是为什么我没有像某些公式那样给OBV加“归一化”处理的原因——没必要,反而会把简单问题搞复杂。选股公式的原则是能用简单逻辑解决的,绝不用复杂逻辑,复杂只会带来更多不可控的边界条件。
4.2 OBVMA1>OBVMA2的隐含意义
OBVMA1(5日均线)上穿OBVMA2(30日均线)或维持在其上方,本质上是一个资金趋势的“金叉状态”。
但和普通MACD金叉不同,OBV均线金叉等于告诉你:在过去5天里,资金推动的累计速度已经超越了过去30天的平均水平。这比单纯看股价均线金叉多了一层“量在价先”的前瞻性。很多股票股价均线还是空头排列的时候,OBV均线已经悄悄多头排列了——这正是做选股最有价值的介入时间窗口。
我把这个窗口称为“资金先遣期”,通常持续3到10个交易日,然后股价才会跟上。这套公式的本质,就是在捕捉这个先遣期。
4.3 EMA21为什么用EMA而不用MA
EMA是指数移动平均,对近期价格变化的权重更大,反应比MA快。选股场景下,我们希望价格生命线能尽快反映趋势变化,而不是等MA慢慢钝化。
但反应快也意味着噪音多,所以我在“价格条件”里又加了距离限制(8%以内),两者互相制衡:EMA21提供灵敏度,8%距离提供安全垫,一快一稳配合,效果比单纯用MA60那种慢速均线更均衡。
4.4 公式的扩展能力:你可以怎么魔改
这套公式最大的优点是模块化结构,每个条件都是独立的一段,想改哪个改哪个。
比如你只想要“OBV多头排列+股价站上EMA21”,那就把“量能条件”删掉;如果你想过滤ST股和科创板,可以在最前面加一句:
过滤:=NAMELIKE('ST')=0 AND NAMELIKE('*ST')=0 AND CODELIKE('688')=0;再比如你想把选股周期缩短到15分钟级别或者放大到周线级别,只要通达信支持该周期选股,公式本身不需要任何修改——因为OBV的算法是基于K线周期动态计算的,切换周期自动适配。
这种“搭积木”式的公式设计,是我刻意为之的。很多网上流传的源码几百行,看着很牛,但实际改一个参数都要小心翼翼,生怕破坏了某个暗藏的逻辑。真正的实战派公式,应该是每一段能独立工作、每段删掉都不影响其他段运行的结构。
5. 实际操作流程:从下载到出票需要几步
5.1 把公式装进通达信
第一步,打开通达信,按Ctrl+F打开公式管理器,选择“选股公式”,点击“新建”。
第二步,公式名称填一个你觉得好记的名字,比如“OBV启动”,然后把上面那段源码粘贴进“公式代码”区域。粘贴时注意:通达信默认打开的是“副图公式”页面,一定要先点选“选股公式”类型的标签(通常在公式编辑器左上角的下拉框里),否则编译会报错。
第三步,点击“测试公式”,如果下方提示“测试通过”,点“确定”保存。如果提示错误,百分之九十九是因为全角字符或者括号不匹配,把公式里的逗号、括号全部切换成英文半角再试。
注意:有些版本的通达信公式编辑器会把
:=中间的冒号识别成全角符号,粘贴后肉眼几乎看不出区别,但编译就是报错。建议粘贴后用编辑器的“查找替换”把:全角冒号全部替换成:半角冒号。
5.2 跑一遍选股
按Ctrl+T打开条件选股对话框,在“条件选股公式”下拉框里找到你刚新建的公式,然后设置选股范围:
- 选股范围建议先选“沪深A股”,勾选“剔除ST”“剔除停牌”“剔除上市不足60天”
- 选股周期默认“日线”,不要轻易改
- 点击“选股入板块”,建议新建一个当天日期的板块,比如“OBV启动20240615”,方便后续跟踪
点击“执行选股”后,系统会哗啦啦跑一遍全市场,大约十几秒到一分钟不等,取决于你电脑性能和数据下载量。跑完会自动弹出一个“条件选股结果”窗口,列出的就是当天满足所有条件的票。
5.3 选股结果的二次人工确认
公式选出来的票不能直接买,这是铁律。它只能帮你把5000多只股票缩小到二三十只,后面的活还得自己做。
我的二次确认步骤很机械但很有用:
第一步看板块效应。选出的票里如果有多只属于同一板块,说明这个板块整体有资金关注,优先从板块里挑。
第二步看OBV副图和股价的位置关系。如果OBV已经连续创新高,但股价还在底部区域震荡,这是最理想的“资金潜伏”形态;如果OBV和股价同时都创新高,说明已经进入主升段,风险加大。
第三步看近期是否有解禁、减持等消息面利空。这个不用太深入,简单翻一下F10里的近期公告就行——量价选股解决的是“资金是不是在进”,消息面解决的是“资金进了之后会不会被突发利空打回去”,两个维度都要看。
5.4 关于选股时机的一个建议
这套公式在收盘前10分钟跑效果最好。尾盘跑一遍选股,选出当天满足条件的票,晚上复盘二次确认,第二天开盘观察是否延续强势,再决定要不要介入。
盘中跑也不是不行,但A股盘中经常出现脉冲式放量,容易选出“半天量”的假信号。尾盘的成交量基本定型,OBV均线、量能条件的计算结果也更稳定,错杀率低很多。
6. 常见问题速查表:源码和实盘中的坑
| 问题现象 | 可能原因 | 解决办法 |
|---|---|---|
| 编译提示“未定义的变量” | 公式里某一段被误删,导致后面的引用没有定义 | 把源码完整复制回去,不要手动改行号 |
| 选股结果为空 | 条件过于严格,市场极端缩量或普跌时几乎没有票满足 | 适当放宽量能条件,把VOL5>VOL10*1.05改成VOL5>VOL10*1.02,或者把价格条件里8%放宽到12% |
| 选出的票太多(超过50只) | 条件太宽松,大概率在市场普涨行情 | 收紧价格条件,把0.08改成0.05,或者增加一个“OBVMA1上穿OBVMA2”的当日金叉条件替代单纯的多头排列 |
| OBV数值显示为0或负数 | 个股上市首日或早期数据缺失,导致累计值异常 | 选股时剔除上市不足60天的新股;或者看下软件数据是否完整下载,按Ctrl+D做一次盘后数据下载 |
| 选出的票买入后持续阴跌 | 公式选出来的是“资金在进”,但资金进场不等于立刻拉升,可能还会洗盘 | 这不是公式缺陷,是节奏问题。建议买入前提是第二天放量上涨确认信号,不做“左侧预判式”买入 |
| 复权方式影响选股结果 | 除权除息导致价格跳空、OBV计算失真 | 选股前把复权方式设为“前复权”,通达信界面右下角有复权切换按钮 |
第七条我要单独说一下,因为很多人在这上面栽过跟头:通达信的OBV如果股票经历除权除息,价格跳空会造成“假下跌”,对应的OBV会大幅减少,导致均线信号失真。做选股和回测时,一定要把整个软件的复权设置改为“前复权”,并且保证数据完整性。我一开始没注意这个细节,连续两天选出的票完全对不上复盘结果,排查了半天才发现是复权设置的问题。
另一个容易踩的坑是:不要拿这套公式去选北交所的票。北交所个股的涨跌幅、流动性结构和沪深完全不一样,OBV的算法原理虽然通用,但参数设置和条件阈值是按沪深A股的特征调的,拿到北交所上要么信号过密要么信号过疏,参考意义不大。
7. 副图指标同步改造:边看边验证
选股公式只是第一步,为了实操时能直观确认选出的票“确实是那么回事”,我建议把OBV副图也同步改一下,这样选股结果出来后,打开个股副图一眼就能看到OBV均线状态是否符合预期。
副图公式和选股公式的区别在于:选股公式最后用XG:输出一个布尔信号,而副图公式需要输出OBV线和两条均线。可以直接新建一个副图指标,粘贴下面这段:
OBV:=SUM(IF(CLOSE>REF(CLOSE,1),VOL,IF(CLOSE<REF(CLOSE,1),-VOL,0)),0); M1:=MA(OBV,5); M2:=MA(OBV,30); 能量潮:OBV,COLORWHITE; 短资金:M1,COLORRED; 长资金:M2,COLORYELLOW;加载到副图后,你会看到白色的OBV原始线、红色的5日均线和黄色的30日均线。当红线在黄线上方、且两条线都向右上角延伸时,说明资金趋势健康;如果白线创新高但红黄线还没跟上,说明资金短期爆发、中期趋势还没确立,要再等等。
副图和选股公式一起看的好处是:选股公式帮你把范围缩小,副图帮你确认每一只票的具体位置。前者解决“选什么”,后者解决“什么时候买”,组合起来才是一套完整的主观交易决策链路。
我个人习惯是选出票后,逐一打开看副图,凡是红黄线缠在一起或者白线严重偏离红线的,直接放弃。真正让我下手的形态是:白线贴着红线向上、黄线在下方稳定托底、股价刚刚站上21日EMA——这种结构说明资金和价格刚刚形成共振,后面拉升的概率最高。
8. 关于参数优化和策略边界,我最后想说的
有件事我必须说清楚:这套OBV改版选股公式不是“圣杯”。我见过很多人拿到一个公式,兴奋地跑历史回测,看到胜率70%就冲进去实盘,结果连续亏损三个星期后又来骂公式是垃圾。其实公式本身没错,错在使用方式。
选股公式解决的是**“资金层面什么状态值得关注”,它不解决“明天是涨是跌”,也不解决“买进去什么时候卖”。很多人把选股公式当成预测工具,这从一开始就跑偏了。我实际用下来的体感是,这套OBV改版公式最适合的环境是震荡市和结构性行情**——资金抱团明显,板块轮动快,OBV能提前捕捉到资金切换的痕迹。但在系统性大跌的单边行情里,任何量价选股公式都会失效,因为市场整体在抛售,个股资金流入的持续性根本扛不住大盘情绪。
参数优化方面,我强烈建议不要一上来就改参数。先用默认参数跑两周,手动记录每一次选股结果以及随后3到5天的走势,积累你自己的样本之后,再根据观察结果微调。直接套用别人优化的参数,很可能和你的交易周期、风险偏好完全不匹配,效果反而不如默认值。
最后再分享一个小技巧。选股跑完之后,不要只看当天结果,把前一天的选股结果调出来,看看里面有多少只今天还继续满足条件。连续两到三天都满足条件的票,比当天刚刚触发的票更值得关注——这说明资金不是脉冲一下就走,而是至少持续了三天以上,主力做多的意图更坚决。这个小技巧帮我过滤掉了很多“一日游”的假信号,你也可以试试。
本文还有配套的精品资源,点击获取