WRB Hidden Gap,WRB隐藏缺口,MetaTrader 免费公式!(指标教程)

news2024/11/22 22:07:03

WRB Hidden Gap MetaTrader 指标用于检测和标记宽范围的柱体(非常长的柱体)或宽范围的烛身(具有非常长实体的阴阳烛)。此指标可以识别WRB中的隐藏跳空,并区分显示已填补和未填补的隐藏跳空,方便用户一眼识别当前市场状态。当价格首次进入未填补的隐藏跳空或出现新的WRB或隐藏跳空时,用户可选择启用提醒功能。此指标适用于MT4和MT5平台。

输入参数说明:

  • Timeframe(默认为 PERIOD_CURRENT): 计算宽幅区间K线(WRB)和隐藏跳空(HG)的时间周期,不能低于当前周期。
  • UseWholeBars(默认为 false): 若设置为true,则指标寻找宽范围的柱体而非烛身。
  • WRB_LookBackBarCount(默认为 3): 在比较WRB时考虑的历史柱体数量。
  • WRB_WingDingsSymbol(默认为 115): 标记WRB的符号,默认为小钻石。
  • HGcolor:设置各类型隐藏跳空的颜色,包括看涨看跌、已突破和未突破的状态。
  • HGstyle(默认为 STYLE_SOLID): 隐藏跳空矩形的线型。
  • StartCalculationFromBar(默认为 100): 回顾期内标记宽范围烛身和隐藏跳空的柱体数量。
  • HollowBoxes(默认为 false): 若为true,则标记的隐藏跳空矩形为未填充的。
  • AlertBreachesFromBelow(默认为 true)、AlertBreachesFromAbove(默认为 true)、AlertHG(默认为 false)、AlertWRB(默认为 false)、AlertHGFill(默认为 false): 各类型提醒的启用设置。
  • EnableNativeAlerts(默认为 false)、EnableEmailAlerts(默认为 false)、EnablePushAlerts(默认为 false): 提醒的发送方式,需要在MetaTrader设置邮件和通知。
  • ObjectPrefix(默认为 "HG_"): 图表对象的前缀,以便与其他指标兼容。


示例:在EUR/USD日线图表上使用默认设置标记的隐藏跳空。宽范围烛身的WRB条形图内绘制红色菱形框,不同颜色的矩形用于绘制隐藏跳空。未填充的缺口以跨至图表右边缘的矩形显示。此指标不生成交易信号,仅提供价格行为信息,辅助交易者利用其他策略生成的进场和离场信号。隐藏跳空也可作为支撑/阻力区域或价格缺口使用。

部分代码展示


//+------------------------------------------------------------------+
//|                                               WRB-Hidden-Gap.mq4 |
//|                                Copyright © 2009-2024, www.QChaos.com |
//|                                          https://www.qchaos.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 量化混沌, www.qchaos.com"
#property link      "https://www.qchaos.com"
#property version   "1.05"
#property strict
#property description "---------------------------------------------"
#property description "EA、指标公式分享"
#property description "EA、指标编写业务承接"
#property description "---------------------------------------------"
#property description "更多资源,关注公众号:量化程序"
#property description "微  信:QChaos001"
#property description "手机号:134-8068-5281"
#property description "---------------------------------------------"

#property description "Identifies Wide Range Bars and Hidden Gaps. Supports MTF."
#property description "WRB and HG definitions are taken from the WRB Analysis Tutorial-1"
#property description "by M.A.Perry from TheStrategyLab.com."

#property indicator_chart_window
#property indicator_buffers 1

#property indicator_color1 clrRed
#property indicator_type1  DRAW_ARROW
#property indicator_label1 "WRB"
#property indicator_width1 3

input ENUM_TIMEFRAMES Timeframe = PERIOD_CURRENT;
input bool UseWholeBars = false;
input int WRB_LookBackBarCount = 3;
input int WRB_WingDingsSymbol = 115;
input color HGcolorNormalBullishUnbreached       = clrDodgerBlue;
input color HGcolorIntersectionBullishUnbreached = clrBlue;
input color HGcolorNormalBearishUnbreached       = clrIndianRed;
input color HGcolorIntersectionBearishUnbreached = clrRed;
input color HGcolorNormalBullishBreached         = clrPowderBlue;
input color HGcolorIntersectionBullishBreached   = clrSlateBlue;
input color HGcolorNormalBearishBreached         = clrLightCoral;
input color HGcolorIntersectionBearishBreached   = clrSalmon;
input ENUM_LINE_STYLE HGstyle = STYLE_SOLID;
input int StartCalculationFromBar = 100;
input bool HollowBoxes = false;
input bool AlertBreachesFromBelow = true;
input bool AlertBreachesFromAbove = true;
input bool AlertHG = false;
input bool AlertWRB = false;
input bool AlertHGFill = false;
input bool EnableNativeAlerts = false;
input bool EnableEmailAlerts = false;
input bool EnablePushAlerts = false;
input string ObjectPrefix = "HG_";

double WRB[];

int totalBarCount = -1;
bool DoAlerts = false;
datetime AlertTimeWRB = 0, AlertTimeHG = 0;
string UnfilledPrefix, FilledPrefix;

int OnInit()
{
    if (PeriodSeconds(Timeframe) < PeriodSeconds())
    {
        Alert("The Timeframe input parameter should be higher or equal to the current timeframe. Switching to current timeframe.");
    }
    
    IndicatorShortName("WRB+HG");

    SetIndexArrow(0, WRB_WingDingsSymbol);
    SetIndexBuffer(0, WRB);
    
    UnfilledPrefix = ObjectPrefix + "UNFILLED_";
    FilledPrefix = ObjectPrefix + "FILLED_";

    if ((EnableNativeAlerts) || (EnableEmailAlerts) || (EnablePushAlerts)) DoAlerts = true;
    
    return INIT_SUCCEEDED;
}

//+------------------------------------------------------------------+
//| Intersect: Checks whether two bars intersect or not.             |
//| Return codes are unused. 0 - no intersection.                    |
//+------------------------------------------------------------------+
int intersect(double H1, double L1, double H2, double L2)
{
    if ((L1 > H2) || (H1 < L2)) return 0;
    if ((H1 >= H2) && (L1 >= L2)) return 1;
    if ((H1 <= H2) && (L1 <= L2)) return 2;
    if ((H1 >= H2) && (L1 <= L2)) return 3;
    if ((H1 <= H2) && (L1 >= L2)) return 4;
    return 0;
}

//+------------------------------------------------------------------+
//| checkHGFilled: Checks if the hidden gap is filled or not.        |
//+------------------------------------------------------------------+
void checkHGFilled(int barNumber)
{
    string Prefix = UnfilledPrefix;

    int L = StringLen(Prefix);
    int obj_total = ObjectsTotal(ChartID(), 0, OBJ_RECTANGLE);
    // Loop over all unfilled boxes.
    for (int i = 0; i < obj_total; i++)
    {
        string ObjName = ObjectName(0, i, 0, OBJ_RECTANGLE);
        if (StringSubstr(ObjName, 0, L) != Prefix) continue;
        
        // Get HG high and low values.
        double box_H = ObjectGet(ObjName, OBJPROP_PRICE1);
        double box_L = ObjectGet(ObjName, OBJPROP_PRICE2);
        color objectColor = (color)ObjectGet(ObjName, OBJPROP_COLOR);
        datetime startTime = (datetime)ObjectGet(ObjName, OBJPROP_TIME1);

        double HGFillPA_H = High[barNumber];
        double HGFillPA_L = Low[barNumber];
        
        if ((HGFillPA_H > box_L) && (HGFillPA_L < box_H)) // Breach, but not necessarily filling.
        {
            // Only color should be updated.
            if (objectColor == HGcolorNormalBullishUnbreached) objectColor = HGcolorNormalBullishBreached;
            else if (objectColor == HGcolorIntersectionBullishUnbreached) objectColor = HGcolorIntersectionBullishBreached;
            else if (objectColor == HGcolorNormalBearishUnbreached) objectColor = HGcolorNormalBearishBreached;
            else if (objectColor == HGcolorIntersectionBearishUnbreached) objectColor = HGcolorIntersectionBearishBreached;
            ObjectSetInteger(ChartID(), ObjName, OBJPROP_COLOR, objectColor);
        }
        int j = 0;
        while ((intersect(High[barNumber + j], Low[barNumber + j], box_H, box_L) != 0) && (barNumber + j < Bars) && (startTime < Time[barNumber + j]))
        {
            if (High[barNumber + j] > HGFillPA_H)  HGFillPA_H = High[barNumber + j];
            if (Low[barNumber + j]  < HGFillPA_L)  HGFillPA_L = Low[barNumber + j];
            if ((HGFillPA_H > box_H) && (HGFillPA_L < box_L))
            {
                ObjectDelete(ObjName);
                string ObjectText = FilledPrefix + TimeToString(startTime, TIME_DATE | TIME_MINUTES); // Recreate as a filled box.
                ObjectCreate(ObjectText, OBJ_RECTANGLE, 0, startTime, box_H, Time[barNumber], box_L);
                ObjectSetInteger(ChartID(), ObjectText, OBJPROP_STYLE, HGstyle);
                // Filled HG is necessarilly a breached one.
                if (objectColor == HGcolorNormalBullishUnbreached) objectColor = HGcolorNormalBullishBreached;
                else if (objectColor == HGcolorIntersectionBullishUnbreached) objectColor = HGcolorIntersectionBullishBreached;
                else if (objectColor == HGcolorNormalBearishUnbreached) objectColor = HGcolorNormalBearishBreached;
                else if (objectColor == HGcolorIntersectionBearishUnbreached) objectColor = HGcolorIntersectionBearishBreached;
                ObjectSetInteger(ChartID(), ObjectText, OBJPROP_COLOR, objectColor);
                ObjectSetInteger(ChartID(), ObjectText, OBJPROP_BACK, !HollowBoxes);
                if ((AlertHGFill) && (IndicatorCounted() > 0)) // Don't alert on old fillings.
                {
                    string Text = "WRB Hidden Gap: " + Symbol() + " - " + StringSubstr(EnumToString((ENUM_TIMEFRAMES)Period()), 7) + " - HG " + TimeToString(startTime, TIME_DATE | TIME_MINUTES) + " Filled.";
                    if (EnableNativeAlerts) Alert(Text);
                    if (EnableEmailAlerts) SendMail("WRB HG Alert", Text);
                    if (EnablePushAlerts) SendNotification(Text);
                }
                break;
            }
            j++;
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2224258.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Zustand介绍与使用 React状态管理工具

文章目录 前言基本使用编写状态加方法在组件中使用异步方法操作 中间件简化状态获取优化性能 持久化保存 前言 在现代前端开发中&#xff0c;状态管理一直是一个关键的挑战。随着应用规模的扩大&#xff0c;组件间的状态共享变得愈加复杂。为了应对这一需求&#xff0c;开发者…

Java-图书管理系统

我的个人主页 欢迎来到我的Java图书管理系统&#xff0c;接下来让我们一同探索如何书写图书管理系统吧&#xff01; 1管理端和用户端 2建立相关的三个包&#xff08;book、operation、user&#xff09; 3建立程序入口Main类 4程序运行 1.首先图书馆管理系统分为管理员端和…

使用Poste搭建内网邮件服务器

使用Poste搭建内网邮件服务器 Poste.io 也是一个流行的邮件服务器方案&#xff0c;它可以通过 Docker 容器轻松部署&#xff0c;非常适合搭建内部邮件服务器。 本文档将向您展示如何开始使用 Poste.io 邮件服务器。在 5 分钟内&#xff0c;您将拥有一个可发送和接收邮件的邮件…

Springboot 使用EasyExcel导出Excel文件

Springboot 使用EasyExcel导出Excel文件 Excel导出系列目录&#xff1a;引入依赖创建导出模板类创建图片转化器 逻辑处理controllerservice 导出效果遗留问题 Excel导出系列目录&#xff1a; 【Springboot 使用EasyExcel导出Excel文件】 【Springboot 使用POI导出Excel文件】 …

基于Python大数据的王者荣耀战队数据分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

es实现自动补全

目录 自动补全 拼音分词器 安装拼音分词器 第一步&#xff1a;下载zip包&#xff0c;并解压缩 第二步&#xff1a;去docker找到es-plugins数据卷挂载的位置&#xff0c;并进入这个目录 第三步&#xff1a;把拼音分词器的安装包拖到这个目录下 第四步&#xff1a;重启es 第…

使用freemarker实现在线展示文档功能开发,包括数据填充

首先&#xff0c;在这个独属于程序员节日的这一天&#xff0c;祝大家节日快乐【求职的能找到心仪的工作&#xff0c;已经工作的工资翻倍】。 ---------------------------------------------------------------回到正文-----------------------------------------------------…

大数据处理随堂测试

HDFS MapReduce HBase Spark

【Linux驱动开发】设备树节点驱动开发入门

【Linux驱动开发】设备树节点驱动开发入门 文章目录 设备树文件设备树文件驱动开发附录&#xff1a;嵌入式Linux驱动开发基本步骤开发环境驱动文件编译驱动安装驱动自动创建设备节点文件 驱动开发驱动设备号地址映射&#xff0c;虚拟内存和硬件内存地址字符驱动旧字符驱动新字…

Redis 集群 总结

前言 相关系列 《Redis & 目录》&#xff08;持续更新&#xff09;《Redis & 集群 & 源码》&#xff08;学习过程/多有漏误/仅作参考/不再更新&#xff09;《Redis & 集群 & 总结》&#xff08;学习总结/最新最准/持续更新&#xff09;《Redis & 集群…

Postman常见问题及解决方(全)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、网络连接问题 如果Postman无法发送请求或接收响应&#xff0c;可以尝试以下操作&#xff1a; 检查网络连接是否正常&#xff0c;包括检查网络设置、代理设置…

接口测试(五)jmeter——get请求

一、get请求——短信验证码&#xff08;示例仅供参考&#xff09; 1. get请求&#xff1a;传参数据直接拼接在地址后面&#xff0c;jmeter不需要设置请求头content-type 注&#xff1a;短信验证码接口&#xff0c;返回结果中不会返回短信验证码&#xff0c;是存在数据库表中&a…

Pyramidal Flow使用指南:快手、北大、北邮,开源可免费商用视频生成模型,快速上手教程

什么是 Pyramidal Flow&#xff1f; Pyramidal Flow 是由快手科技、北京大学和北京邮电大学联合推出的开源视频生成模型&#xff0c;它是完全开源的&#xff0c;发布在 MIT 许可证下&#xff0c;允许商业使用、修改和再分发。该模型能够通过文本描述生成最高10秒、分辨率为128…

EveryoneNobel:为每个人打造诺贝尔奖风格的纪念图片

在这个充满荣誉和成就的时代&#xff0c;EveryoneNobel 项目应运而生&#xff0c;旨在为每个人提供一个生成诺贝尔奖风格纪念图片的机会。通过利用 ComfyUI 进行图像生成&#xff0c;结合 HTML 模板展示文字&#xff0c;不仅提供了一个生成诺贝尔奖图片的流程&#xff0c;而且构…

【Python爬虫实战】Selenium自动化网页操作入门指南

#1024程序员节&#xff5c;征文# &#x1f308;个人主页&#xff1a;易辰君-CSDN博客 &#x1f525; 系列专栏&#xff1a;https://blog.csdn.net/2401_86688088/category_12797772.html ​ 目录 前言 一、准备工作 &#xff08;一&#xff09;安装 Selenium 库 &#xff0…

2024 年我的 MacBook 软件开发设置分享

在过去的一年里&#xff0c;我的 MacBook 软件开发环境经历了一些变化。今天&#xff0c;我想分享我的最新设置、工作流程和工具&#xff0c;帮助你在软件开发中提升效率。 我的工作设备 &#x1f4bb; 我目前使用的是 16 英寸的 MacBook Pro M1 Max。这台机器的性能令人印象…

「C/C++」C++ STL容器库 之 std::multimap 键值对的集合容器

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「C/C」C/C程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

化验单智能识别与数据抽取:AI平台赋能医疗信息化

化验单处理在医院日常运作中常遇信息量大、数据整理不易、效率低的问题。思通数科推出的AI多模态平台&#xff0c;借助光学字符识别&#xff08;OCR&#xff09;、图像处理等技术&#xff0c;提供了一款开源化验单智能识别系统&#xff0c;能迅速识别、提取和分析化验单数据。 …

【云原生网关】Higress 从部署到使用详解

目录 二、网关概述 2.1 什么是云原生网关 2.2 常见的云原生网关 2.2.1 Nginx 2.2.2 ApiSix 2.2.3 Kong 2.2.4 Apache Shenyu 2.2.5 Higress 2.2.6 Envoy​​​​​​​ 三、higress介绍 3.1 什么是higress 3.2 Higress 定位 3.3 Higress 内核选择 四、Higress搭…

10.22.2024刷华为OD C题型(三)--for循环例子

脚踝动了手术&#xff0c;现在宾馆恢复&#xff0c;伤筋动骨一百天还真不是说笑的&#xff0c;继续努力吧。 文章目录 靠谱的车灰度图恢复灰度图恢复 -- for循环使用例子 靠谱的车 https://www.nowcoder.com/discuss/564514429228834816 这个题目思路不难&#xff0c;就是要自…