一个绘制支撑和阻力线的指标实例(基础篇)
用指标在图上画出支撑阻力
在 MT5 里,支撑阻力不一定靠手工画线。写一个简单的自定义指标,就能让平台在每次条件满足时自动把水平线挂到图表上,省掉反复拖拽的麻烦。 下面这段 MQL5 代码演示了最基本的结构:在 OnCalculate 里判断前一根 K 线的高低点,用 ObjectCreate 画一条延伸到右边的水平线。实盘里你可以把阈值换成自己的逻辑,比如 N 根内的最低收盘价。 [CODE] #property indicator_chart_window int OnInit() { return(INIT_SUCCEEDED); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(rates_total<2) return(0); double level=low[rates_total-2]; string name="Sup_"+(string)rates_total; ObjectCreate(0,name,OBJ_HLINE,0,time[rates_total-1],level); ObjectSetInteger(0,name,OBJPROP_COLOR,clrBlue); return(rates_total); } [/CODE] 逐行拆解:#property 指定指标画在主图窗口;OnInit 仅返回初始化成功。OnCalculate 先判断 K 线数不足 2 根就退出;取倒数第二根最低价 low[rates_total-2] 作为支撑参考位;用当前总根数拼出唯一对象名避免重名;ObjectCreate 建一条水平线,时间锚点在倒数第一根,价格为前面取的低位;再设成蓝色。外汇与贵金属波动剧烈,这类自动线只是参考,实际破位概率需结合多周期验证。
class="macro">#class="kw">property indicator_chart_window class="type">int OnInit() { class="kw">return(INIT_SUCCEEDED); } class="type">int OnCalculate(class="kw">const class="type">int rates_total, class="kw">const class="type">int prev_calculated, class="kw">const class="type">class="kw">datetime &time[], class="kw">const class="type">class="kw">double &open[], class="kw">const class="type">class="kw">double &high[], class="kw">const class="type">class="kw">double &low[], class="kw">const class="type">class="kw">double &close[], class="kw">const class="type">long &tick_volume[], class="kw">const class="type">long &volume[], class="kw">const class="type">int &spread[]) { if(rates_total<class="num">2) class="kw">return(class="num">0); class="type">class="kw">double level=low[rates_total-class="num">2]; class="type">class="kw">string name="Sup_"+(class="type">class="kw">string)rates_total; ObjectCreate(class="num">0,name,OBJ_HLINE,class="num">0,time[rates_total-class="num">1],level); ObjectSetInteger(class="num">0,name,OBJPROP_COLOR,clrBlue); class="kw">return(rates_total); }
◍ 这套画线工具能做什么
本文要做的,是把技术分析中历史最久的价格水平预测手段搬进 MT5 指标里。核心不是讲理论,而是给你一套能直接加载、能改代码的画线指标。 它内置了画趋势线、支撑与阻力线的逻辑,创建过程比多数自定义指标轻量,重点在参数和条件可改。你拿到代码后,能通过改几行判断条件,让它画任意你想要的线形。 外汇和贵金属市场波动剧烈、杠杆高风险大,文中所有方法仅作信息参考,不是交易建议;用这套指标实盘造成的盈亏,责任在使用者自己。
「支撑阻力线到底在挡什么」
支撑线和阻力线本质是价格在特定时间段内难以越过的边界:阻力线限制上行,支撑线托住下行。它们可以是水平的,也可以带任意斜率,而且角色会随你看图的角度互换,就像镜子的两面——同一根斜线在上升趋势里是支撑,在下跌趋势里可能就是阻力。 水平线常用于标通道。举例,某时段 EURUSD 若始终未跌破 1.1545、也未涨破 1.1834,这两道水平线就框出了震荡区间,分别可作卖单获利位与买单获利位。 斜线则直接对应趋势方向:上升斜线意味着价格处涨势,线本身适合挂买单;下降斜线意味着跌势,线适合作卖单的止盈参考。任何一条线都是障碍,价格碰线后倾向反弹——支撑线向上弹、阻力线向下弹。 若价格实破界线,只能说明该方向趋势的延续出问题了,不代表方向必然反转。外汇与贵金属波动剧烈、杠杆高风险大,突破信号须结合其他证据确认,不可单凭一线定买卖。
用分形点锚定倾斜线起点
阻力线要挡住上涨,起点只能落在峰值上;支撑线要托住下跌,起点只能落在谷值上。直接拿 MT5 自带的比尔·威廉姆分形(Fractals)当锚点,比手工目测更不容易漏掉局部极值。 具体规则只盯当前可见图表区域,不回溯整段历史:阻力线取“上方分形”——它之上再没有别的分形,且价格后续没破过它;支撑线取“下方分形”——它之下也没有别的分形。 构建条件写死为:顶部分形必须高于左右相邻两个分形,底部分形必须低于相邻分形。满足这条,起始点才算合格,线形才能自动连出来。外汇与贵金属波动大、假突破多,分形被刺穿是常事,实盘前建议在 MT5 用不同品种周期跑一遍确认灵敏度。