2026/10/21 7:17:10

期货主图指标公式从零搭建:买卖点过滤与避坑指南

期货主图指标公式从零搭建:买卖点过滤与避坑指南 简介面向期货交易者的文华财经主图指标公式源码文档尤其适合新手与老手希望借助量化信号识别多空趋势、捕捉最佳买卖点的个人投资者与技术分析爱好者。文档包内仅含1个doc文件大小35KB体积小巧但内容完整包含可直接在文华财经软件中建立主图指标的公式源码。公式通过日期过滤、移动平均计算与多空条件判断等逻辑在行情主图上标注“多”“空”信号并绘制庄家轨迹线可帮助使用者快速把握价格转折点与进出场时机。目前已有1516人学习/下载说明该指标配方在同类资源中具备一定参考价值。获取后可对照代码逐行理解指标构造也可直接套用并根据自身交易周期调整参数有效节省从零编写公式的时间。1. 一套期货指标公式好不好不看颜色看它敢不敢把买卖点画在明处很多朋友拿到某个期货指标公式第一时间就是改主图颜色价格在均线上面涂红下面涂绿。颜色一换主图指标公式确实好看但做多做空的信号照样模模糊糊——因为大多数公式只给你一个方向没给你能在实战中执行的最佳买卖点。文华财经指标公式源码我看过不少结构出问题的占一大半有的偷偷用未来数据有的信号来了又走有的参数一改就翻车。这篇笔记不追复杂策略只解决一个实际问题把一个有主图、有多空判断、有买卖点信号的公式从零搭到可以在盘后复盘和盘中观察都站得住。重点放在主图骨架、买卖点过滤、避坑和排查。网上流传的 .doc 文件也好、纯文本也好最后都要落到公式编辑器里所以下面的内容全部围绕可复制、可改、可验证展开。适合想自己动手改公式、又不想被信号闪烁折腾的期货图表使用者。2. 先定主图结构多空基线、趋势线和信号层分开写主图指标公式最忌讳一上来就写买卖点。很多初学者把均线、交叉、图标、止损全塞在一段代码里参数之间互相干扰最后复盘漂亮实盘一塌糊涂。我一般的做法是先把主图拆成三层基线层、趋势层、信号层。基线层决定当前是多头还是空头趋势层负责看快慢关系信号层只在过滤条件满足之后画买卖点。这样哪一层出了问题单独改哪一层不需要推倒重来。2.1 主图画什么基线、快线、慢线和买卖点标记主图上默认有 K 线公式要画的辅助内容尽量控制在四类以内。第一类是基线通常用一条中长期均线比如 MA(CLOSE,20)它决定多空分界。第二类是快线用于捕捉短期方向变化。第三类是慢线用于确认趋势是否延续。第四类是买卖点标记一般画在 K 线下方或上方不遮住实体。参数不是越多越好。我通常只定义三个核心参数基线周期 N、快线周期 M、慢线周期 K。再多加参数比如连续加三个过滤阈值后期调参就是自找麻烦。下面是一个最小参数表可以直接作为起点。变量线型默认值作用BASE黄色粗线20多空分界基线FAST白线5短期方向SLOW红线10趋势确认买卖点图标无只在过滤后出现选默认值有个原则周期越大信号越慢但越稳周期越小信号越早但越容易反复。做日内 5 分钟图基线 20 是常见起点做小时图基线可以放到 40 到 60。你不需要一上来就追求最优参数先把结构跑通再谈调优。2.2 最小可运行源码先把主图骨架贴进公式编辑器下面这段代码是主图公式骨架不包含复杂过滤只验证“能画线、能画图标、能被平台编译”。在文华软件里新建技术指标公式把源码粘贴进编辑区保存后加载到主图。{ 多空主图骨架基线 快慢线 基础买卖点标记 } N:20; { 基线周期 } M:5; { 快线周期 } K:10; { 慢线周期 } BASE:MA(CLOSE,N),COLORYELLOW,LINETHICK2; FAST:MA(CLOSE,M),COLORWHITE; SLOW:MA(CLOSE,K),COLORRED; { 多头区域收盘价在基线上方时快线显示为红色 } UP:IF(CLOSEBASE,FAST,DRAWNULL),COLORRED; { 空头区域收盘价在基线下方时快线显示为青色 } DN:IF(CLOSEBASE,FAST,DRAWNULL),COLORCYAN; { 金叉箭头画在K线下方死叉箭头画在K线上方 } DRAWICON(CROSS(FAST,SLOW),LOW*0.99,1); DRAWICON(CROSS(SLOW,FAST),HIGH*1.01,2);逻辑说明MA(CLOSE,N)是 N 周期收盘价均线CROSS(FAST,SLOW)表示快线上穿慢线返回值为 1 时条件成立否则为 0。DRAWICON的第一个参数是绘制条件第二个参数是绘制位置第三个参数是图标编号。数字 1 通常是向上箭头2 通常是向下箭头具体编号在不同平台可能不一致编译后看一眼就行。参数说明COLORYELLOW、COLORRED这类颜色关键字如果平台不识别可以换成 COLORRGB 形式。DRAWNULL表示空值如果编辑器报错可以改成0并把对应线型设为不画线。这里我故意把买卖点先画成最原始的金叉死叉目的是让你先确认编译和显示没问题再往下做过滤。2.3 多空判断为什么要对称别让做多和做空的定义互相矛盾很多公式做多条件是“价格上穿 20 均线”做空条件却是“价格下穿 5 均线”两套逻辑完全不对称。多空不对称会导致同样的行情里多单信号次数远小于空单或者反过来。做多做空主图指标公式的核心应该是同一套规则的镜像反转而不是各写各的。比如以基线为分界多头状态定义为CLOSE BASE空头状态定义为CLOSE BASE中间用快线对基线的位置来做二次确认。这样多空两个方向都有相同的滞后、相同的过滤条件回测结果才能互相对照。代码层面要做到对称只需要把比较符号反过来同时保持周期和阈值完全一致。后面的信号章节会展开写这里先记住任何不对称的多空定义长期跑下来一定会偏科。3. 把做多做空条件量化成公式买卖点过滤比指标本身重要主图结构跑通之后下一步才是做多做空信号。直接的金叉死叉能画出买卖点但在震荡行情里会被连续打脸。我一般不会把原始交叉直接当作最佳买卖点而是给它加三层过滤趋势方向、量能确认、斜率确认。过滤不是越多越好而是要看每个条件是否真的降低了无效信号数量。3.1 从金叉死叉到带过滤的买卖点均线、放量和斜率三个条件一起用先说一个常见误区很多人以为买卖点就是均线交叉那一瞬间。实际上交叉只是一个候选触发点真正能用于实盘的点需要等到条件全部成立。下面这段源码把双均线交叉、成交量放大、慢线方向保持一致三个条件合并输出最终的买卖点图标。{ 多空买卖点公式双均线 放量 趋势方向确认 } FAST:MA(CLOSE,5); { 快线 } SLOW:MA(CLOSE,20); { 慢线 } VOL20:MA(VOL,20); { 20周期均量 } UP1:CROSS(FAST,SLOW); { 金叉 } UP2:VOLVOL20*1.2; { 成交量大于均量1.2倍 } UP3:SLOWREF(SLOW,1); { 慢线没有走平或向下 } BUY:UP1 AND UP2 AND UP3; DN1:CROSS(SLOW,FAST); { 死叉 } DN2:VOLVOL20*1.2; { 放量条件对称 } DN3:SLOWREF(SLOW,1); { 慢线没有走平或向上 } SELL:DN1 AND DN2 AND DN3; DRAWICON(BUY,LOW*0.98,1); { 买入箭头画在K线下方 } DRAWICON(SELL,HIGH*1.02,2); { 卖出箭头画在K线上方 }逻辑说明REF(SLOW,1)取上一根 K 线的慢线值UP3保证慢线在向上而不是刚刚从下跌转向。VOL20是 20 周期成交量均值VOLVOL20*1.2意味着当前 K 线成交量比平均水平高出至少两成。乘数1.2可以改成1.5或2.0数值越大信号越稀少假信号比例通常越低但也会漏掉真正的启动行情。这个公式有几个参数值得关注快线 5 和慢线 20 是移动平均线的经典组合适用于趋势相对清晰的品种。如果你做的品种日内噪音很大可以把快线提升到 8慢线提升到 30代价是买卖点更晚出现。放量倍数的选择要参考品种常态农产品和商品期货的成交量波动差异很大螺纹钢日内的量能放大倍数往往比某些小品种稳定得多不能一套参数打天下。3.2 用 ATR 给买卖点配一把止损尺不要用固定点数最佳买卖点不是一个孤立的点它必须带着止损和离场参考。很多公式只画买卖点不画止损实际执行时你就会发现固定止损 10 个点行情稍微抖一下就被扫掉止损放太宽亏起来又受不了。ATR 是用来衡量 K 线真实波幅的工具。正常情况下价格一天的波动幅度会围绕 ATR 上下浮动所以止损距离设为 ATR 的一定倍数比固定点数更贴合品种性格。老平台不一定有现成 ATR 函数我更习惯自己写顺带说明参数来源。{ 用ATR计算离场参考距离 } TR1:MAX(MAX(HIGH-LOW,ABS(HIGH-REF(CLOSE,1))),ABS(LOW-REF(CLOSE,1))); ATRN:MA(TR1,14); { 14周期平均真实波幅 } K1:1.5; { 止损乘数 } LONG_STOP:CLOSE-ATRN*K1; { 多单离场参考 } SHORT_STOP:CLOSEATRN*K1; { 空单离场参考 }逻辑说明TR1计算的是当前 K 线波幅取三个差值的最大值最高减最低、最高减昨收、最低减昨收。MA(TR1,14)就是把 14 根 K 线的波幅做平均。K1取 1.5 的意思是只有当价格反向运行超过 1.5 倍平均波幅时才认为趋势可能坏了。实际使用中K1不要取 1 以下否则止损距离接近当根 K 线波幅很容易被正常波动扫出去。取 2 以上又会太宽单笔亏损变大。比较稳妥的顺序是先看品种的 ATR 数值比如某品种日均波幅是 20 个点那么 1.5 倍就是 30 个点再对照你的账户风控来判断单笔能不能接受。不要跳出公式硬扛。3.3 顺势过滤在多头环境里空头信号可以再等一根 K 线做多做空对称并不代表多空信号一定要同时放行。实际趋势行情里顺着大方向的那一侧信号质量通常更高。所以我会在主图信号层再加入一个趋势开关只有当慢线还在基线上方时只输出多头信号慢线在基线下方时只输出空头信号。这相当于把上一章的主图基线变成信号过滤器。TREND_UP:SLOWBASE; { 多头趋势 } BUY_FINAL:BUY AND TREND_UP; { 只做顺势多 } SELL_FINAL:SELL AND NOT TREND_UP; { 顺势空 }需要说明的是这种过滤会大幅减少逆势信号但也会错过趋势转折初期的第一批买卖点。放大周期做趋势的选手可以接受这种代价做日内高频的人可能会觉得信号太少。我的建议是先把不加过滤的信号跑一段时间记录逆势信号的实际胜率如果逆势信号明显不赚钱再打开这个趋势开关。不要还没验证就拍脑袋决定。4. 主图公式避坑清单未来函数、信号闪烁与参数过拟合这一章必须单独写因为大多数期货指标公式源码不是输在策略上而是输在基本功上。下面几条是我认为最典型的踩坑记录每条都按现象、原因、解决三步写方便你对照排查自己的公式。4.1 现象复盘里最漂亮的信号为什么实盘永远抓不到复盘时买卖点画在了最低点附近实盘按信号挂单却从来没成交过。原因多半是公式使用了未来函数即当前 K 线的动作用到了本根 K 线尚未确认的数据。典型错误是HHV(HIGH,10)不经过 REF 直接参与判断。HIGH 在盘中会不断变化当前 K 线还没收盘时HIGH 已经包含今天的最高价这时候用收盘价和它比较相当于偷看了本根 K 线的结果。复盘中看到的是一个确定后的完美点实盘中这个点不断移动。解决方法是把需要确认的数据挪到上一根 K 线也就是都加一个REF前缀。{ 错误示范收盘时用了当前K线尚未固定的最高值 } BAD:CLOSEHHV(HIGH,10); { 正确示范只用已经固定的历史最高值 } GOOD:CLOSEREF(HHV(HIGH,10),1);如果平台提示公式包含未来函数不要觉得是误报。很多藏在ZIG、PEAK、REFX这类函数里的未来语义触发器根本躲不掉。只要碰到这类提示我的处理方式是逐个函数翻公式把可能用到未来值的地方全部改成REF(...,1)。4.2 现象信号盘中出现收盘又消失盘中看到买入信号出现还没等确认下一根 K 线信号又没了。原因是MA(CLOSE,5)这类均线在 K 线没有收盘时会随着最新价跳变交叉条件可以被临时拉出来也可以被临时拉断。尤其在 1 分钟图表上这个问题被放大到离谱。解决方法是不要在本根 K 线画信号改为“信号延后一根 K 线确认”。也就是信号真正触发后下一根 K 线收盘时再画出来。这样你看到的每一个买卖点都是基于已经确定的历史数据不再闪烁。BUY_RAW:CROSS(FAST,SLOW); BUY_SHOW:REF(BUY_RAW,1); { 上一根确认后才显示 } SELL_RAW:CROSS(SLOW,FAST); SELL_SHOW:REF(SELL_RAW,1); DRAWICON(BUY_SHOW,LOW*0.98,1); DRAWICON(SELL_SHOW,HIGH*1.02,2);代价是买卖点会比原始交叉晚一根 K 线。做趋势的人往往能接受因为趋势不会在一两根 K 线内走完做超短线的人需要想清楚晚一根 K 线可能要付出多一两个点的成本。4.3 现象参数越调越完美实盘反而越亏在文华软件里把参数从 15 改到 30总有一组参数能让最近一年的历史回测变成正收益。可实盘一跑模型立刻翻车。这就是参数过拟合。判断方法很简单不要只看最优参数那一个点把参数从 15 到 30 每隔 2 跑一遍看结果是否连续。如果相邻参数收益起伏剧烈比如 N18 大赚、N20 大亏、N22 又大赚说明公式对参数极其敏感实盘大概率会在你没有测试到的环境里失灵。下面是一个典型的过拟合分布参数在 20 附近连续盈利其余区域大幅波动这类公式勉强可以用如果只有一个孤立高波峰最好回炉重做。参数 N第一段净利润第二段净利润判断145200-3100不稳定16-24001100不稳定1838002900一般201420013800相对稳222600-4200不稳定4.4 现象信号点很完美但跳空和停板让成交根本不可能发生主图指标公式默认你在信号价格成交实际上跳空开盘、一字板这些情况信号价格根本轮不到你成交。尤其是涨跌停附近突破信号画出漂亮箭头实际开盘直接封板你只能排队。解决方向不是改公式而是改回测和执行的假设。回测时给买卖点加一两个点的滑点手续费也按真实标准扣掉。如果加了滑点之后某个买卖点的收益从正转负那它大概率不是最佳买卖点只是盘后视觉上的最佳位置。5. 买卖点信号不稳时按这个顺序排查公式问题公式跑得起来不等于能用。很多朋友问我为什么同一个文华财经指标公式源码别人复盘效果好自己加载到图表上就乱七八糟。我给出的回答不是直接改参数而是先排查。排查有一套固定的顺序照做比瞎改快得多。5.1 用逐K线回放和公式检测先排除未来函数与变量冲突打开软件的逐K线回放或复盘回放功能手指按在一根一根 K 线上走观察图标是否在 K 线收盘之后才出现。如果信号出现在当根 K 线收盘价还没确定的位置那么公式里一定有未来因素。此时不要继续调参先把未来函数问题解决。同时运行公式检测留意未初始化变量和变量被重新赋值的警告。有些平台对大小写不敏感ATR和ATRn可能会被识别成同一个变量导致前面的计算被后面的计算覆盖。5.2 把信号条件拆成影子公式逐个开关过滤项如果确认没有未来函数但还是不知道买卖点为什么会变少或变多最简单的办法是复制一份公式把过滤条件逐个打开和关闭。{ 影子公式只看信号条件的影响 } FAST:MA(CLOSE,5); SLOW:MA(CLOSE,20); C1:CROSS(FAST,SLOW); C2:VOLMA(VOL,20)*1.2; C3:SLOWREF(SLOW,1); TEST_1:C1; { 只看金叉 } TEST_2:C1 AND C2; { 金叉放量 } TEST_3:C1 AND C2 AND C3; { 三层全部条件 }把 TEST_1、TEST_2、TEST_3 同时显示在主图上对比信号数量的递减幅度。如果 C3 减少了一半以上的信号说明趋势方向过滤很严厉如果 C2 几乎没减少信号说明放量条件作用不大可以换成别的过滤器。不要凭感觉同时改三个条件。5.3 换周期看信号密度用参数敏感性判断过拟合同样的逻辑在 1 分钟图上每秒都在晃切换到 5 分钟图可能一年就只有三五十次信号。如果切换周期后信号数量明显降低而盈亏表现没有变差说明公式更适合在稍大周期上运行。随后做参数敏感性观察把基线周期 N 从 15 到 35 每隔 5 测试一次记录净利润、回撤和交易次数。不要只看整体盈利重点看交易次数是否稳定。很多过拟合公式在 N16 时交易 62 次N18 时就变成 13 次这种跳跃说明逻辑内部并不稳定。5.4 回测和实盘偏差太大时先查这三件事第一查数据源是否完整。夜盘品种的连续合约如果缺少夜盘数据信号会缺失一大截。第二查 K 线复权方式。不同复权设置会让历史价格产生位移均线交叉点跟着变化买卖点自然对不上。第三查信号执行价。如果回测按收盘价成交实盘按信号出现后的价格追单偏差就会非常大。这三件事完成后再回到公式本身。很多时候公式没错是执行环境不一致。6. 把“最佳买卖点”真正落到执行双K确认和复盘记录法前面讲的信号延后一根可以提炼成一个更实用的技巧双 K 确认法。简单说第一根 K 线出现原始交叉不画买卖点第二根 K 线确认后才在主图上画出箭头。这样信号不再与盘中跳动绑定复盘和实盘看到的是同一种状态。{ 双K确认版买卖点信号延后一根减少图形闪烁 } FAST:MA(CLOSE,5); SLOW:MA(CLOSE,20); RAW_BUY:CROSS(FAST,SLOW); RAW_SELL:CROSS(SLOW,FAST); BUY_OK:REF(RAW_BUY,1); { 上一根已出现金叉当前K才画买入 } SELL_OK:REF(RAW_SELL,1); { 上一根已出现死叉当前K才画卖出 } DRAWICON(BUY_OK,LOW*0.98,1); DRAWICON(SELL_OK,HIGH*1.02,2);这个写法的好处是把“信号出现”和“信号确认”分开。实盘中你不需要在盘中抢那一瞬间而是在下一根 K 线开盘附近执行交易成本可控也不会因为信号消失而反复挂撤单。代价是你会错过第一根 K 线的最低点但这个代价通常比假信号带来的亏损小很多。用双 K 确认法跑一段时间后最好做一张简单的交易记录表每出现一次买卖点就记一行包括方向、信号时间、确认价格、随后 5 根 K 线的最大不利偏移量。方向信号时间信号价确认价ATR5根内最大不利偏移多09:354102410618-12空10:1240914088198如果确认价和信号价经常相差超过 3 跳说明信号延后带来的成本太高你需要检查是不是周期选得太小。如果最大不利偏移经常超过止损距离的 2 倍说明离场逻辑还要再收紧。我自己做公式有一个习惯每一版源码开头都写日期和用途比如“日线趋势 双K确认 ATR参考”。版本多了以后你会清楚地记得哪一个逻辑陪你走过一个完整周期而不是每次复盘都像第一次见面。希望这个习惯和上面的排查方法能帮到你也祝你能把主图指标公式真正改到自己能用。本文还有配套的精品资源点击获取