主图与副图指标源码
卷八 工具与公式:把方法写成代码 · 第 23 节 / 共 29 节
M8 为什么要那样设计是有来历的:翻开《笑傲股市》第 4 版 115 页,书上的图采用的是 50 日均线和 200 日均线,符合持股时间较长的选手;但 A 股散户多数热衷短线,所以提供了 10 日加权均线(也可用 20 日,把对应代码行末尾的 NODRAW 连同逗号删掉即显示均线,反之加上即隐藏)。书页例图下面那根跟着 K 线走的线就是 RS Line(RSLINE),在华尔街趋势交易者图上是必备工具。
书上 115 页例图中的 RSLINE 放在 K 线下面,本 ID 把它放到了 K 线上面,仅此而已。这根线末端有个文字标记「RS评级55」,这个数值是 RSR 值(RS Rating),即经过扩展数据处理以后的相对强度值;欧奈尔只提取当天数值显示在末端。
RSLINE 的关键用处在「熊牛强弱转折区域」,尤其是个股基底发展阶段,而且要跟市场指数图对比着看:当 RSLINE 向上、沪深 300 向下,且 RSLINE 低点不断抬高、指数低点不断下降,说明个股比大盘走得强得多,这是买入的关键理由之一。RSLINE 上的红色小三角标记其一年新高点——只要不断创一年新高,就一直在跑赢市场,但切不可把它当做买点。研究基底时若发现个股在基底阶段明显领先市场指数,很可能遇到猛兽股的启动位置(国投电力、神华、海油无一不是)。
市场指数做成副图指标非常简单,新建公式粘贴一行代码即可。欧奈尔用标普 500,这里建议用沪深 300:
沪深300:"399300$CLOSE";

这个版本将呈现更低的反转支点信号以及更准确的地量信号。在量化横行的时代,高阳追涨非常吃亏,选择尽量低的位置更有意思,马克·米讷维尼最近两年也更多朝低吸方向发展。升级前请先调整 RSR 指标扩展数据参数以及 SSV 基础公式(下面公式已做修订,应不会再影响手机版选股公式)。
VWAP:=SUM(AMO*C,N)/SUM(AMO,N);
{STDD:=SQRT(SUM(POW((C-VWAP),2),N)/(N-1));}
SSV:(C-VWAP)/VWAP*500;
ZRO:0,DOTLINE;
尽管本套公式提供了更优化的形式,但仍无法保证交易只赚不亏。认为用公式可以还原因果的想法极其荒谬,公式只能使表达更具条理,并不能预测未来涨跌。真正的交易是系统工程,需要大量认知和经验累积。
这两个副图指标针对强势股风险约束:低吸伏击线定低吸位、风险警戒线控风险。再次强调,在没有理解原理之前不建议使用任何一种指标;对于只要代码不思考的伸手党尤其请慎重。指标的作用只是提供一种无差别的量化参考依据,不能替代具体的个性化操盘思路和计划,尤其不要呆板机械地运用参数和信号。
X:=BARSCOUNT(CLOSE);
XX:=MIN(20,X);
MM:=MIN(M,X);
NN:=MIN(N,X);
SD:=STD(C,MM);
MASD:=MA(SD,NN);
BOL:=MA(C,XX);
UB:BOL+5*SD;
UBM:BOL+5*MASD;N:=BARSCOUNT(CLOSE);
MM:=MIN(N,N1);
NN:=MIN(N,N2);
BIAS1 :(CLOSE-MA(CLOSE,MM))/MA(CLOSE,MM)*100;
BIAS2 :(CLOSE-MA(CLOSE,NN))/MA(CLOSE,NN)*100;
RPS:RSR个股.RPS,NODRAW;
SAFE:RPS-56,LINETHICK1,COLORLICYAN,LINETHICK2;
IF(RPS>=87,SAFE,DRAWNULL),LINETHICK2,COLORRED;
DRAWNUMBER(ISLASTBAR,SAFE,RPS),COLORFF66FF;

注意:风险警戒线代码中 RPS 赋值是直接调用 RSR 指标的输出,所以必须先建立 RSR 指标(见第 22 节 RSR 设置教程)。
布林通道中轨是一条均线(缺省 20 日),上轨是均线加 2 倍标准差,下轨是均线减 2 倍标准差。它的价值在于引入波动因子,通道收口即波动率降低,蕴含低吸机会。但标准差是绝对值、和股价本身有关,100 元区域和 10 元区域波动计算出的标准差可能差好几倍,无法设计统一衡量尺度。
处理办法是把均值除回去,变成标准差对均值的比例值(SD Ratio):SDR:=STD(CLOSE,M)/MA(C,M)*100。波动加剧数值变大、收敛时趋于 0,大致可得 SDR=2 是一个波动收缩阈值(可自行调整)。改进布林通道时去掉下轨、增加低吸伏击线:
BOLL:MA(CLOSE,M);
SDR:=STD(CLOSE,M)/BOLL*100;
UP:BOLL+SDR;
DX:BOLL+N;
均线参数采用 10 日均线(5~10 天计算值即可满足临界点判断)。需要提醒:波动率收缩只表达临界点到来,并不直接指明波动方向,所以必须应用在上升通道中(由猛兽趋势模板约束)才比较有效。弱势行情中个股支点突破后很快缩量回调、波动率重新降低,这个收缩的回调正是低吸可考虑的位置。
如果把强度指标比喻成美人的身高和身段比例(上涨和回撤幅度),那么润度指标就相当于评价美人的五官轮廓以及身材的凹凸有致(珠圆玉润)。高级走势图形不会轻易击穿 TR 持股线(回撤小),上品猛股不会频繁出现较长上下影线(毛刺少)。润度就是这个审美原则的定量指标。
HH:=HHV(H,10);
HTR:=HH-MIN(MAX(HHV(TR,20),HH*0.07),HH*0.14);
HOLD:=HHV(HTR,17);
RUN1:COUNT(C>HOLD,20)*5;
解读:当润度和强度共振维持高度时,意味着走势良好可以持股;当股价还在创新高、而润度指标开始阶梯下降,走势质量在下降,意味着风险来临。代码复制粘贴到 RSR 或 RSV 指标代码末尾即可(也可单独建副图);用代码前三句覆盖主图持股线部分的前两句、且去掉 HOLD 句中的 = 号,即可修订主图显示。
行情无聊时,把即时行情信息叠加到分时图上。现在叠加了 6 个数据:沪深京总的上涨家数、下跌家数、涨停家数、跌停家数、前 5 档买盘总额、前 5 档卖盘总额,数据跟随分时图实时跳变。利用了通达信内置即时行情函数,并不复杂;指标叠加到市场指数上,不影响个股。
上涨家数:=TOTALHQINFO(1);
下跌家数:=TOTALHQINFO(2);
涨停家数:=TOTALHQINFO(3);
跌停家数:=TOTALHQINFO(4);
买盘总额:=TOTALMMPAMO(3);
卖盘总额:=TOTALMMPAMO(4);
DRAWTEXT(ISLASTBAR,C*1.002,STRCAT('上涨家数: ',CON2STR(上涨家数,0))),COLORYELLOW;
DRAWTEXT(ISLASTBAR,C*1.001,STRCAT('下跌家数: ',CON2STR(下跌家数,0))),COLORYELLOW;
DRAWTEXT(ISLASTBAR,C*1.000,STRCAT('涨停家数: ',CON2STR(涨停家数,0))),COLORYELLOW;
DRAWTEXT(ISLASTBAR,C*0.999,STRCAT('跌停家数: ',CON2STR(跌停家数,0))),COLORYELLOW;
DRAWTEXT(ISLASTBAR,C*0.998,STRCAT('买盘总额(亿): ',CON2STR(买盘总额,0))),COLORYELLOW;
DRAWTEXT(ISLASTBAR,C*0.997,STRCAT('卖盘总额(亿): ',CON2STR(卖盘总额,0))),COLORYELLOW;有网友发现收盘以后数据文本看不见(14:30 后文本挤出边框),改为固定位置显示:
上涨家数:=TOTALHQINFO(1);
下跌家数:=TOTALHQINFO(2);
涨停家数:=TOTALHQINFO(3);
跌停家数:=TOTALHQINFO(4);
买盘总额:=TOTALMMPAMO(3);
卖盘总额:=TOTALMMPAMO(4);
DRAWTEXT_FIX(ISLASTBAR,0.50,0.70,0,STRCAT('上涨:',CON2STR(上涨家数,0))),COLOR8080FF;
DRAWTEXT_FIX(ISLASTBAR,0.50,0.75,0,STRCAT('下跌:',CON2STR(下跌家数,0))),COLOR8080FF;
DRAWTEXT_FIX(ISLASTBAR,0.50,0.80,0,STRCAT('涨停:',CON2STR(涨停家数,0))),COLOR8080FF;
DRAWTEXT_FIX(ISLASTBAR,0.50,0.85,0,STRCAT('跌停:',CON2STR(跌停家数,0))),COLOR8080FF;
DRAWTEXT_FIX(ISLASTBAR,0.50,0.90,0,STRCAT('买盘(亿):',CON2STR(买盘总额,0))),COLOR8080FF;
DRAWTEXT_FIX(ISLASTBAR,0.50,0.95,0,STRCAT('卖盘(亿):',CON2STR(卖盘总额,0))),COLOR8080FF;
堆量模式的起始特征,归纳起来大致三点:极大的量比(极大的交易金额)从底部连续上涨,并突破一年高点。OVS 的 PV3 表征量比极大,超量柱出现即迅速突变,连续 3 天累加后非常醒目;OVS 的 OV3 表征成交金额的绝对数量极大,3~5 日累计后峰值远超以往。起始阶段 PV3 一般比 OV3 大,后期 OV3 反过来比 PV3 大,可区分盘子大小。PV3 率先达到 40 以上、OV3 随后达到 30 以上且 PV3>OV3,是锁定堆量牛股的基本设定(选股器 OV3/PV3 参数设成 4 日,沿用 3 日需减小阈值)。
VWA200:=SUM(C*AMO,200)/SUM(AMO,200);
TREN:=C>VWA200 AND SLOPE(VWA200,3)>0;
RSV1:=(C-LLV(L,N))/(HHV(H,N)-LLV(L,N))*100;
RS:=CLOSE/"880003$CLOSE";
RSV2:=(RS-LLV(RS,N))/(HHV(RS,N)-LLV(RS,N))*100;
RSVA:=(RSV1+RSV2)/2;
PV3:=OVS.PV3;
OV3:=OVS.OV3;
S1:=PV3>40;
S2:=OV3>30;
S3:=PV3>OV3;
S4:=PV3>REF(PV3,1);
S5:=TREN AND RSVA>85;
SS:S1 AND S2 AND S3 AND S4 AND S5;
启动之后高位窄幅横盘、弱转强再次启动,就是 G 点(堆量骑牛点)。主图 K 线上的钱袋子信号即是 G 点,大小盘均可识别。300 亿盘子左右是传统趋势模式与堆量趋势模式的分水岭。先把下面代码建成副图指标,再建条件选股,最后把信号映射到主图。
YC:=REF(C,1);
YL:=REF(L,1);
YH:=REF(H,1);
LW:=MIN(L,YC);
LT:=MAX(C,YH);
LL:=LLV(YL,2);
HH:=HHV(YH,2);
HMAX:=HHV(YH,20);
HHR:=(H/HH-1)*100;
HMR:=(H/HMAX-1)*100;
LLR:=(LW/LL-1)*100;
COR:=(C/O-1)*100;
RSK:=(H/LT-1)*100;
TURN:HHR<3.5 AND HMR>-5.2 AND LLR<4 AND COR>0 AND RSK<4.5;
DR:=ABS(RS_D.DR);
DRSS:DR<15 OR REF(DR,1)<15;
PV2:=OVS.PV2;
PV3:=OVS.PV3;
OV3:=OVS.OV3;
XZPV:ABS(PV2)<6;
QZPV:HHV(OV3,16)>45 AND HHV(PV3,16)>45;
HC:=(H+C)/2;
LC:=(L+C)/2;
HTR:=HHV(HC,10)-HHV(REF(TR,1),12);
HOLD:=HHV(HTR,15);
HOLDS:COUNT(LC<HOLD,9)=0;
BLZ:=(C/H<0.87 AND O>C AND H>HHV(REF(H,1),55));
BLZS:COUNT(BLZ,8)=0;
YMO:=REF(AMO,1);
REDV:LLV(AMO,5)>HHV(YMO,9)*0.5 AND AMO>HHV(AMO,20)*0.5;
OBVS:COUNT(WOBV.OV<WOBV.MAOV,8)=0;
RBV:HHV((C>REF(C,1))*AMO,20)>HHV((C<REF(C,1))*AMO,20);
RSL1:=RSL.RSL1;
RSLA:=MA(RSL1,14);
RSV1:=(C-LLV(L,144))/(HHV(H,144)-LLV(L,144))*100;
RS:=CLOSE/"880003$CLOSE";
RSV2:=(RS-LLV(RS,144))/(HHV(RS,144)-LLV(RS,144))*100;
RSVA:=(RSV1+RSV2)/2;
TREN:RSL1>0 AND SLOPE(RSLA,3)>0 AND RSVA>85;
SS: TURN AND DRSS AND XZPV AND QZPV AND HOLDS AND BLZS AND REDV AND OBVS AND RBV AND TREN,COLORRED;{显示堆量骑牛点}
DLQN_S:=堆量骑牛.SS;
DRAWICON(DLQN_S,L,9);
高位如果瞎折腾会遍体鳞伤,万无一失的圣杯是不存在的。把堆量起始信号显示在主图上也类似:先建名为「起堆」的副图指标,再把输出调用到主图公式。
{显示起堆}
DLQS_S:=起堆.SS;
DRAWICON(DLQS_S,C,41);马克趋势模板是买入背景的底色。原版有 8 条量化定义,改进版只留 200 日均线 + 成交加权价格均线,解决均线滞后丢点问题;RSR 以成交加权均线为基准,结合 RSV 和 RS Line 形成组合互相辅助。
VWA200:=SUM(C*AMO,200)/SUM(AMO,200);
TOP: C>HHV(H,233)*0.65;{当前价格处于最近一年新高的65%以内}
BTTM: C>LLV(L,233)*1.2;{当前股价比最近一年最低价至少高20%}
UPAP: C>VWA200;{股价处在200日均线上方}
SLP: SLOPE(VWA200,2)>0;{200日均线上翘}
RS: RSL.RSL1>0 AND RSR个股.RSR>80;
SS: TOP AND BTTM AND UPAP AND SLP AND RS;
用上面代码可构建选股器,选出股票数量靠 RS 条件各项阈值调节;RS 条件阈值只给定义框架,可自行回测,与 M8 主图设置大同小异。
- 年高代码调整:堆量牛股基本特征是先超量突破年高、然后起堆、再可能现 G 点(卫通例外,先起堆再突破年高)。首破年高的代码调整,重新覆盖 M8 主图指标中原来的旧代码即可:
HYEAR1:=HHV(REF(H,25),200);
HYEAR2:=HHV(REF(HC,1),233);
TPK:=C>YC;
HIT:=C>HYEAR1 AND C>HYEAR2 AND C<HYEAR1*1.2;
VOLS:=AMO>HHV(AMO,200)*0.998;
HITS:=COUNT(HIT AND VOLS,30)<2;
SPNG:TPK AND HIT AND HITS AND VOLS AND GM_TREND,NODRAW;
DRAWICON(SPNG,L,23);- RS Line 修正:光力科技首破年高不能在主图显示,问题在 RS Line 部分代码的第一句,统一改成
RS:=CLOSE/"880003$CLOSE"——统一用 880003 平均股价指数是最科学的选择,全部改成这个写法。平均股价副图公式同样用"880003$CLOSE"。 - 自动画枢轴线:在猛兽趋势模板上写公式,须复制粘贴到自定义主图指标才能画线;用 PEAK/TROUGH 取峰谷、DRAWLINE 画枢轴斜线,自动且保证一致性。枢轴公式仍有不完美之处,欢迎有心人讨论更好思路。
- 持股线与润度修订:在枢轴点附近买入初期,刚性止损幅度为短期最高价的 7%(欧奈尔和马克通用设定);进入剧烈震荡期,刚性回撤容忍为短期最高价的 14%;在 7%~14% 之间由走势周期内最大 TR 值决定回撤下限。爬升初期低波动阶段给 7% 宽容利于持股,高波动期 14% 利于止盈,且初期 7% 的主动宽容还有利于润度指标的早期反映。
- 润度评估(RUN):RUN 比较适合初始爬升段评估,RUN 低迷说明走势质量不高、风险较高;评估标尺是 20 天周期内最大 TR,击穿次数越多越不稳定、潜力越小。
主图与副图指标只是「表达工具」,不能替代交易决策。低吸伏击线、风险警戒线、润度都强调「未理解原理前不建议使用」,更不要把参数机械套用。所有指标都应置于趋势模板的上升通道约束之下,并接受量、价、势、锚四要素的综合评估。