技术指标

BB MACD指标解析:提升你的交易策略
MetaTrader5
BB MACD指标解析:提升你的交易策略

BB MACD指标 是一种基本的MACD(移动平均收敛发散)指标变体,旨在帮助交易者识别趋势变化点并衡量当前趋势的强度。该指标在图表的独立窗口中绘制,由两条线(蓝线和红线)及点(可以是绿色或洋红色)组成。点的颜色变化是一个重要的信号,而两条线之间的间距则表示当前趋势的强度。该指标适用于MT4和MT5平台。 输入参数 FastLen(默认 = 12)— 快速移动平均线的周期,用于计算指标点的值。 SlowLen(默认 = 26)— 慢速移动平均线的周期,用于计算指标点的值。 Length(默认 = 10)— 用于计算指标线的移动平均线和标准差的周期。 barsCount(默认 = 400)— 图表上用于应用这些计算的最大K线数量。 StDv(默认 = 2.5)— 在计算中,相对于移动平均线,标准差指标的权重倍数。 EnableNativeAlerts(默认 = false)— 如果设置为 true,则在BB MACD颜色变化时将使用MetaTrader的原生弹窗警报。 EnableSoundAlerts(默认 = false)— 如果设置为 true,则在BB MACD颜色变化时将发出声音警报。 EnableEmailAlerts(默认 = false)— 如果设置为 true,则在BB MACD颜色变化时将发送MetaTrader的邮件警报。邮件需要在MetaTrader中通过 工具->选项->邮件 进行正确配置。 EnablePushAlerts(默认 = false)— 如果设置为 true,则在BB MACD颜色变化时将向您的设备发送MetaTrader的推送通知。通知需要在MetaTrader中通过 工具->选项->通知 进行正确配置。 SoundFileName(默认 = "alert.wav")— 如果 EnableSoundAlerts 设置为 true,则在警报时播放的声音文件名。 从图表示例中可以看出,当洋红色点变为绿色点时是买入信号,而当绿色点变为洋红色点时是卖出信号。最好在蓝线和红线间距较大的时候进行交易。

2025.01.30
BB MACD 指标:MetaTrader 4 的趋势检测工具
MetaTrader4
BB MACD 指标:MetaTrader 4 的趋势检测工具

BB MACD 指标 是一种基本的 MACD(移动平均收敛发散)指标变体,旨在帮助交易者识别趋势变化的关键点并测量当前趋势的强度。该指标在图表的独立窗口中绘制,由两条线(蓝色和红色)以及点(可以是绿色或品红色)组成。点的颜色变化是一个很好的信号指示,而两条线之间的间距则表明当前趋势的强弱。此指标适用于 MT4 和 MT5 平台。 输入参数 FastLen (默认 = 12) — 快速移动平均线的周期(最低周期),用于计算该指标的点。 SlowLen (默认 = 26) — 慢速移动平均线的周期(最高周期),用于计算该指标的点。 Length (默认 = 10) — 移动平均线和标准差指标的周期,用于计算该指标的线。 barsCount (默认 = 400) — 图表上应用这些计算的最大柱数。 StDv (默认 = 2.5) — 在计算中,标准差指标相对于移动平均的权重倍数。 EnableNativeAlerts (默认 = false) — 如果设置为 true,则在 BB MACD 颜色变化时使用 MetaTrader 的本地弹出警报。 EnableSoundAlerts (默认 = false) — 如果设置为 true,则在 BB MACD 颜色变化时使用声音警报。 EnableEmailAlerts (默认 = false) — 如果设置为 true,则在 BB MACD 颜色变化时发送 MetaTrader 的邮件警报。邮件需在 MetaTrader 中通过 工具->选项->邮件 正确配置。 EnablePushAlerts (默认 = false) — 如果设置为 true,则在 BB MACD 颜色变化时向您的设备发送 MetaTrader 的推送通知。通知需在 MetaTrader 中通过 工具->选项->通知 正确配置。 SoundFileName (默认 = "alert.wav") — 如果 EnableSoundAlerts 设置为 true,则在警报时播放的声音文件名。 如图表示例所示,当品红色点变为绿色点时,是买入信号;而当绿色点变为品红色点时,则是卖出信号。最好在蓝色和红色线条相对较宽时进行交易。

2025.01.30
MT4基础蜡烛图指标解析:识别市场底部信号
MetaTrader4
MT4基础蜡烛图指标解析:识别市场底部信号

基础蜡烛图指标 是一款自动化指标,可以在图表上识别并标记基础蜡烛。基础蜡烛是指蜡烛实体长度小于其高低范围的50%。该指标通过直方图线(在MT4中)或自定义蜡烛(在MT5中)直接在平台的主图表上高亮显示基础蜡烛。你可以通过输入参数调整百分比标准,并且可以开启新基础蜡烛出现时的提醒。输入参数百分比(默认 = 50)— 用于比较蜡烛实体与其高低范围的比例的百分比值。触发蜡烛(默认 = 1)— 用于检查提醒的蜡烛数量。“1”代表最新完全形成的蜡烛。“0”代表当前蜡烛,该蜡烛尚未完全形成。启用本地提醒(默认 = false)— 如果设置为 true,则会在新基础蜡烛出现时使用MetaTrader的本地弹出提醒。启用声音提醒(默认 = false)— 如果设置为 true,则会在新基础蜡烛出现时使用声音提醒。启用邮件提醒(默认 = false)— 如果设置为 true,则会在新基础蜡烛出现时发送MetaTrader的邮件提醒。邮件需在MetaTrader中通过 工具->选项->邮件 进行正确配置。启用推送提醒(默认 = false)— 如果设置为 true,则会在新基础蜡烛出现时向你的设备发送MetaTrader的推送通知。通知需在MetaTrader中通过 工具->选项->通知 进行正确配置。邮件提醒主题(默认 = “)— 邮件提醒主题的附加文本。提醒文本(默认 = “)— 提醒的附加文本。声音文件名(默认 = “alert.wav”)— 如果 启用声音提醒 设置为 true,将在提醒时播放的声音文件名。

2025.01.30
MetaTrader 5中的基础蜡烛指标使用指南
MetaTrader5
MetaTrader 5中的基础蜡烛指标使用指南

基础蜡烛MetaTrader指标是一个自动化的指标,用于在图表上检测和标记基础蜡烛。基础蜡烛是指其实体长度小于高低范围的50%的蜡烛。该指标通过直方图线(在MT4中)或自定义蜡烛(在MT5中)直接在平台的主图表中高亮显示基础蜡烛。你可以通过输入参数来调整百分比标准,也可以在新基础蜡烛出现时开启提醒。 输入参数 百分比(默认值 = 50)— 用于比较蜡烛实体与其高低范围比例的百分比值。 触发蜡烛(默认值 = 1)— 用于检测提醒的蜡烛编号。“1”代表最新完整形成的蜡烛,“0”是当前尚未完成形成的蜡烛。 启用本地提醒(默认值 = false)— 如果为 true,则在新基础蜡烛出现时将使用MetaTrader的本地弹出提醒。 启用声音提醒(默认值 = false)— 如果为 true,则在新基础蜡烛出现时将使用声音提醒。 启用邮件提醒(默认值 = false)— 如果为 true,则在新基础蜡烛出现时将发送MetaTrader的邮件提醒。邮件需在MetaTrader中通过 工具->选项->邮件进行正确配置。 启用推送提醒(默认值 = false)— 如果为 true,则在新基础蜡烛出现时将向你的设备发送MetaTrader的推送通知。通知需在MetaTrader中通过 工具->选项->通知进行正确配置。 提醒邮件主题(默认值 = "")— 提醒邮件主题的附加文本。 提醒文本(默认值 = "")— 提醒的附加文本。 声音文件名(默认值 = "alert.wav")— 如果 启用声音提醒设为 true,将在提醒时播放的声音文件名。

2025.01.30
Aroon 上下指标:提升您的交易策略 | MetaTrader 5
MetaTrader5
Aroon 上下指标:提升您的交易策略 | MetaTrader 5

大家好!今天要跟大家分享一个非常实用的交易指标——Aroon 上下指标。这款指标专为 MetaTrader 5 设计,能够帮助我们识别图表中的局部高点和低点,从而在合适的时机做出买入或卖出的决策。指标功能概述Aroon 上下指标的主要作用是发出买入和卖出的信号。当市场从低点上涨或从高点下跌时,指标会提供相关提示。指标线的交叉也能给我们一个很好的出场信号,帮助我们在获利时及时离场,或者在损失最小的情况下退出。输入参数AroonPeriod (默认 = 14) — 该参数表示指标在图表上查找高点和低点的周期。一般来说,周期越长,输出线越平滑;周期越短,生成的信号则越频繁。MailAlert (默认 = false) — 如果设置为 true,当指标交叉时会根据您的 MetaTrader 邮件选项发送电子邮件提醒。SoundAlert (默认 = false) — 如果设置为 true,当指标交叉时会激活简单的声音和视觉提醒。Aroon 上下指标示例图如何使用 Aroon 指标进行交易如上图所示,使用这个指标进行交易其实非常简单:当蓝线从下方上升并且红线接近中间时,考虑买入;当蓝线从上方下降并且红线接近中间时,考虑卖出;当红线到达区间的另一侧时,可以选择获利了结或在最小损失的情况下退出。希望这篇文章能帮助大家更好地理解 Aroon 上下指标,提升交易策略。如果您有任何问题或想法,欢迎在评论区留言讨论!

2025.01.30
盈亏平衡线指标 - MetaTrader 4 交易必备工具
MetaTrader4
盈亏平衡线指标 - MetaTrader 4 交易必备工具

盈亏平衡线指标是一个适用于MetaTrader的工具,它可以根据所有未平仓的交易计算盈亏平衡点,并在图表上以水平线的形式显示出来。该指标还会计算总交易次数、总手数以及到盈亏平衡线的距离(以点数和盈亏显示)。此指标支持MT4和MT5平台。 你可以通过快捷键 Shift + B 来隐藏或显示盈亏平衡线。此外,指标支持多个输入参数,以便你根据自己的需求调整计算方式和外观。 输入参数 IgnoreLong(默认值 = false)— 如果设置为true,则该指标会忽略多头仓位,仅根据空头仓位计算盈亏平衡线。 IgnoreShort(默认值 = false)— 如果设置为true,则该指标会忽略空头仓位,仅根据多头仓位计算盈亏平衡线。 line_color_buy(默认值 = clrTeal)— 当总仓位为多头时盈亏平衡线的颜色。 line_color_sell(默认值 = clrPink)— 当总仓位为空头时盈亏平衡线的颜色。 line_color_neutral(默认值 = clrSlateGray)— 当总仓位为中性时盈亏平衡线的颜色。 line_style(默认值 = STYLE_SOLID)— 盈亏平衡线的样式。 line_width(默认值 = 1)— 盈亏平衡线的宽度。 font_color(默认值 = clrSlateGray)— 文本颜色。 font_size(默认值 = 12)— 文本大小。 font_face(默认值 = "Courier")— 文本字体。 ObjectPrefix(默认值 = "BEL")— 图表对象名称的前缀,避免与其他图表工具冲突。

2025.01.30
MT5盈亏平衡线指标详解:优化交易策略的必备工具
MetaTrader5
MT5盈亏平衡线指标详解:优化交易策略的必备工具

盈亏平衡线指标是一个专为MetaTrader设计的指标,可以根据所有开仓的持仓情况计算盈亏平衡水平,并在你的图表上以水平线的形式展示。此外,它还会计算总交易次数、总手数以及到盈亏平衡线的距离(以点数和盈亏金额表示)。这个指标同时支持MT4和MT5平台。 你可以通过按下 Shift + B 快捷键来隐藏或显示盈亏平衡线。该指标支持多个输入参数,方便用户根据需要进行配置和调整。 输入参数 IgnoreLong(默认值 = false)— 如果设置为 true,则指标将忽略多头仓位,仅基于空头仓位计算盈亏平衡线。 IgnoreShort(默认值 = false)— 如果设置为 true,则指标将忽略空头仓位,仅基于多头仓位计算盈亏平衡线。 line_color_buy(默认值 = clrTeal)— 当总持仓为多头时,盈亏平衡线的颜色。 line_color_sell(默认值 = clrPink)— 当总持仓为空头时,盈亏平衡线的颜色。 line_color_neutral(默认值 = clrSlateGray)— 当总持仓为中性时,盈亏平衡线的颜色。 line_style(默认值 = STYLE_SOLID)— 盈亏平衡线的样式。 line_width(默认值 = 1)— 盈亏平衡线的宽度。 font_color(默认值 = clrSlateGray)— 字体颜色。 font_size(默认值 = 12)— 字体大小。 font_face(默认值 = "Courier")— 字体类型。 ObjectPrefix(默认值 = "BEL")— 图表对象名称的前缀,以避免与其他图表工具发生冲突。

2025.01.29
深度解析负成交量指数(NVI)指标:提升你的交易策略
MetaTrader5
深度解析负成交量指数(NVI)指标:提升你的交易策略

负成交量指数(NVI)是一个适用于MT4和MT5平台的免费技术指标,专为高级图表分析而设计。该指标基于成交量(在MT5中可以用真实成交量代替),并附加了两个实用功能: 支持多时间框架(MTF)操作。 可以切换显示正成交量指数(PVI)。 NVI指标在主图表下方的独立窗口中显示,其代码中不使用任何标准或自定义指标。这一NVI版本适用于MT4和MT5平台。 什么是负成交量指数(NVI)指标? NVI指标是一个相对传统的技术指标,最早由保罗·L·戴萨特在20世纪上半叶开发,并在1976年由诺曼·G·福斯巴克进行了改进。它由一个在独立指标窗口中波动的线条组成。该线条仅在成交量低于前一个柱子的成交量时上升或下降。 如何使用负成交量指数(NVI)指标? 经典NVI策略 负成交量指数的经典解读是,通过NVI的后续移动确认趋势的强度。理论上,强劲的趋势即使在成交量下降的情况下也会继续。与其移动平均线的交叉可以视为趋势确认。 与其他MA交叉策略一样,该策略也容易产生假信号或滞后信号。 NVI背离策略 另一种选择是观察价格与负成交量指数之间的背离,以寻找趋势反转的信号。在这种情况下,价格图表创造了新的高点,而NVI却显示出新的低点,接下来通常会出现长期下跌趋势: 遗憾的是,这些信号并不总是清晰或准确。与其他 背离指标一样,使用额外的确认信号在进出场时是很有必要的。 更高时间框架的视角 通过我们的负成交量指数版本,可以在较低时间框架图表上显示更高时间框架的NVI值。这是上面的EUR/USD @ D1图表,但这次它附加了来自周时间框架的负成交量指数指标: 考虑到高时间框架柱子的成交量可能与低时间框架柱子的成交量有显著差异,最终的NVI曲线可能会提供不同的市场状况图景。 正成交量指数(PVI) 负成交量指数指标可以切换为计算并显示正成交量指数。这样,交易者可以看到伴随成交量上升的价格变化。最终的曲线与价格图表的差异不大: 因此,PVI被认为比NVI信息量少。 NVI输入参数 指标偏移(默认=0) — 指标曲线的水平偏移,可以是正值(向右偏移)或负值(向左偏移)。 时间框架(默认=当前) — 计算NVI线的时间框架。如果设置为高于当前的时间框架,指标将在当前图表上显示更高时间框架的NVI。如果设置为低于当前的时间框架,则该参数将被忽略。 正成交量指数?(默认=false) — 如果为 true,指标将计算正成交量指数(PVI),而不是负成交量指数(NVI)。 成交量类型(默认=VOLUME_TICK) — 用于计算的成交量类型——tick成交量或真实成交量。此参数仅在MT5中可用。

2025.01.29
负成交量指数 (NVI) 指标 - 让你的交易策略更上一层楼
MetaTrader4
负成交量指数 (NVI) 指标 - 让你的交易策略更上一层楼

负成交量指数 (NVI) 是一款适用于 MT4 和 MT5 平台的免费技术分析指标,它主要基于交易的 tick 成交量(在 MT5 中可以用真实成交量替代),并且具备以下两个实用功能: 支持多时间框架(MTF)操作。 可以切换显示正成交量指数。 NVI 指标在主图表下方的独立窗口中显示,并且其代码中不使用任何标准或自定义指标。这款 NVI 的实现同时适用于 MT4 和 MT5 平台。 什么是负成交量指数 (NVI) 指标? 负成交量指数 (NVI) 是一款历史悠久的技术指标,最早由 Paul L. Dysart 在20世纪上半叶开发,并在1976年由 Norman G. Fosback 进行了改进。该指标由一个在独立指标窗口中波动的线条组成,其线条只在成交量低于前一根柱子的成交量时上升或下降。 如何使用负成交量指数 (NVI) 指标? 经典 NVI 策略 NVI 的经典解读是,后续的 NVI 运动确认趋势的强度。也就是说,强劲的趋势即使在成交量下降时仍将持续。与其移动平均线的交叉可以视为趋势的确认。 和其他 MA 交叉策略一样,这种策略也容易产生错误或滞后的信号。 NVI 背离策略 另一个选择是观察价格与负成交量指数之间的背离,以发现趋势反转。在这种情况下,价格图表在不断创新高,而 NVI 却在形成更低的低点。这通常会导致长期的下跌趋势: 遗憾的是,这类信号并不总是清晰或准确。像其他 背离指标 一样,在进入或退出交易前,使用额外的确认信号是明智的选择。 高时间框架视角 通过我们版本的负成交量指数,可以在低时间框架图表上显示高时间框架 NVI 值。这是上述 EUR/USD @ D1 图表,但这次附加了来自周线时间框架的负成交量指数指标: 考虑到高时间框架柱的成交量与低时间框架柱的成交量可能有显著差异,得到的 NVI 曲线可能会提供市场情况的不同视角。 正成交量指数 (PVI) 负成交量指数指标可以切换为计算和显示正成交量指数。这样一来,交易者可以看到伴随成交量上升的价格变化。得到的曲线与价格图表并没有太大差异: 因此,PVI 被认为信息量不如 NVI。 NVI 输入参数 指标偏移(默认 = 0)— 指标曲线的水平偏移。可以是正值(向右偏移)或负值(向左偏移)。 时间框架(默认 = 当前)— 计算 NVI 线的时间框架。如果将其设置为高于当前的时间框架,指标将在当前图表上显示高时间框架的 NVI。设置为低于当前时间框架时,该参数将被忽略。 正成交量指数?(默认 = false)— 如果设置为 true,指标将计算正成交量指数 (PVI),而不是负成交量指数 (NVI)。 成交量类型(默认 = VOLUME_TICK)— 用于计算的成交量类型— tick 成交量或真实成交量。此参数仅在 MT5 中可用。

2025.01.29
Candle Range 指标:MetaTrader 5 上的蜡烛范围工具
MetaTrader5
Candle Range 指标:MetaTrader 5 上的蜡烛范围工具

Candle Range 指标是一款非常简单且轻量级的工具,可以在鼠标悬停时显示蜡烛的范围(以点数为单位)。除了高低点范围,它还可以选择性地显示蜡烛的实体大小(开盘价与收盘价之间的差距)。这款指标提供了多个显示参数,方便你根据个人需求控制其外观。这款指标适用于 MetaTrader 4 和 MetaTrader 5 平台。 输入参数 显示实体大小 (ShowBodySize)(默认值 = false):如果设置为 true,则会显示蜡烛实体的大小。 包含点差 (HavePipettes)(默认值 = false):如果设置为 true,指标将假设货币对报价包含点差,并相应显示点数范围。 真实范围 (TrueRange)(默认值 = false):如果设置为 true,指标将计算真实范围(包括跳空部分),而不是普通范围。 字体颜色 (font_color)(默认值 = clrLightGray):蜡烛范围指标的字体颜色。 字体大小 (font_size)(默认值 = 10):蜡烛范围指标的字体大小。 字体类型 (font_face)(默认值 = "Verdana"):蜡烛范围指标的字体样式。 位置 (corner)(默认值 = CORNER_LEFT_UPPER):蜡烛范围指标在图表上的位置。 水平距离 (distance_x)(默认值 = 3):从角落到指标的水平距离。 垂直距离 (distance_y)(默认值 = 12):从角落到指标的垂直距离。 背景显示文本 (DrawTextAsBackground)(默认值 = false):如果设置为 true,蜡烛范围值的文本标签将作为背景绘制。这在你希望避免指标遮挡图表时会很有用。 对象前缀 (ObjectPrefix)(默认值 = "CR-"):用于与其他指标兼容的图表对象前缀。

2025.01.22
MetaTrader蜡烛范围指标使用指南
MetaTrader4
MetaTrader蜡烛范围指标使用指南

蜡烛范围指标是一个非常简单且轻量级的指标,能够在鼠标悬停时显示蜡烛的范围(以点数计)。除了高低范围外,它还可以选择性地显示蜡烛的实体大小(开盘价/收盘价)。您可以根据自己的需求调整多个显示参数,来控制指标的外观。该指标适用于MT4和MT5版本的交易平台。 输入参数 ShowBodySize(默认值 = false) — 如果设置为 true,蜡烛的实体大小也会显示。 HavePipettes(默认值 = false) — 如果设置为 true,该指标将假定货币对的报价包含小数点,并相应地显示点数范围。 TrueRange(默认值 = false) — 如果设置为 true,该指标将计算真实范围(包括缺口部分),而不是正常范围。 font_color(默认值 = clrLightGray) — 蜡烛范围指标的字体颜色。 font_size(默认值 = 10) — 蜡烛范围指标的字体大小。 font_face(默认值 = "Verdana") — 蜡烛范围指标的字体样式。 corner(默认值 = CORNER_LEFT_UPPER) — 蜡烛范围指标在图表上的位置。 distance_x(默认值 = 3) — 从角落到指标的水平距离。 distance_y(默认值 = 12) — 从角落到指标的垂直距离。 DrawTextAsBackground(默认值 = false) — 如果设置为 true,蜡烛范围值的文本标签将作为背景绘制。这可以防止指标遮挡图表。 ObjectPrefix(默认值 = "CR-") — 用于与其他指标兼容的图表对象前缀。

2025.01.22
Zigzag Fibo 振荡器:MetaTrader 5 的新风向标
MetaTrader5
Zigzag Fibo 振荡器:MetaTrader 5 的新风向标

大家好,今天要跟大家聊聊一个非常有趣的指标——Zigzag Fibo 振荡器,这个指标基于MetaQuotes算法,带来了不少新功能。 主要特点与进步 下面是一些Zigzag Fibo 振荡器的独特之处: 两种模式:该指标有“振荡器”和“高低”两种模式。在振荡器模式下,它会展示Zigzag波动的视觉效果,尽管它不是一个真实的振荡器,也没有固定的范围。 高低模式:高低模式尊重极高和极低价格(就像普通的Zigzag一样),并且添加了斐波那契回撤水平,这些水平会动态缩放,使其视觉上保持固定。由于价格会随着时间的推移而大幅波动,因此在这种模式下,Zigzag的动态缩放仅适用于最后的极端波动价格和当前的极端波动价格。 实时跟踪:在每种模式中,即使当前波段尚未确认,系统也会绘制当前波段,并跟踪输入中指定的价格类型。你可以选择跟踪开盘价、收盘价、最高价、最低价、加权价或典型价。 这种实时绘制未确认波段的设计旨在帮助我们更好地了解市场动态,同时,当前波段的颜色也经过精心设计。 当向上的波段正在确认时,价格上涨会将其标记为蓝色,而每个看跌背离则为灰色。相反,当向下的波段正在确认时,价格下跌会使其标记为红色,而每个看涨背离则为灰色。 为了更好地展示实时价格行为中的趋势颜色,系统还会检查成交量。如果出现显著的看涨成交量,牛市颜色将覆盖当前波段的颜色,反之亦然,如果出现显著的看跌成交量,熊市颜色也会覆盖当前波段的颜色。 版本1.01已上传,修复了一些已知问题。 --------------------------------------------------------------------------------------------------------------------- 版本1.02已上传,增加了更多可定制性,改进了缩放功能,现在可以切换斐波那契水平,并改善了振荡器模式下未确认波段的价格方向跟踪。

2025.01.21
MetaTrader 5 每小时缓冲区指标使用指南
MetaTrader5
MetaTrader 5 每小时缓冲区指标使用指南

目的 这个指标旨在帮助交易者收集数据,以便进行建模。在经济建模中,时间虚拟变量是常见的做法。下面这个简单的指标可以轻松扩展,提供一个二进制缓冲区数组向量,每个小时都有一个对应的缓冲区。最终的缓冲区数组向量存储了当前小时的值。 如果你正在使用其他指标的数据并将其保存为CSV文件,例如通过CopyBuffer函数,这个指标允许你将当前小时作为额外数据的虚拟列添加。 这是一个简单的代码,适合那些需要收集数据的朋友,比如为了机器学习的目的,你可以拥有现成的虚拟变量(缓冲区0到23),或者当前小时变量(缓冲区24),以便用于建模。 代码解析 首先声明缓冲区数量和绘图数量为25: #property indicator_chart_window #property indicator_buffers 25 #property indicator_plots 25 缓冲区标签 为数据窗口划分缓冲区标签: #property indicator_label1 "Hour 00" #property indicator_label2 "Hour 01" #property indicator_label3 "Hour 02" #property indicator_label4 "Hour 03" #property indicator_label5 "Hour 04" #property indicator_label6 "Hour 05" #property indicator_label7 "Hour 06" #property indicator_label8 "Hour 07" #property indicator_label9 "Hour 08" #property indicator_label10 "Hour 09" #property indicator_label11 "Hour 10" #property indicator_label12 "Hour 11" #property indicator_label13 "Hour 12" #property indicator_label14 "Hour 13" #property indicator_label15 "Hour 14" #property indicator_label16 "Hour 15" #property indicator_label17 "Hour 16" #property indicator_label18 "Hour 17" #property indicator_label19 "Hour 18" #property indicator_label20 "Hour 19" #property indicator_label21 "Hour 20" #property indicator_label22 "Hour 21" #property indicator_label23 "Hour 22" #property indicator_label24 "Hour 23" #property indicator_label25 "Hour" 缓冲区声明 接下来声明缓冲区并创建一个整数变量来计算当前小时: double hourBuffer0[]; double hourBuffer1[]; double hourBuffer2[]; double hourBuffer3[]; double hourBuffer4[]; double hourBuffer5[]; double hourBuffer6[]; double hourBuffer7[]; double hourBuffer8[]; double hourBuffer9[]; double hourBuffer10[]; double hourBuffer11[]; double hourBuffer12[]; double hourBuffer13[]; double hourBuffer14[]; double hourBuffer15[]; double hourBuffer16[]; double hourBuffer17[]; double hourBuffer18[]; double hourBuffer19[]; double hourBuffer20[]; double hourBuffer21[]; double hourBuffer22[]; double hourBuffer23[]; double hourBuffer[]; int bar_hour; 索引和绘图设置 为所有缓冲区设置数据索引,并通过循环关闭绘图(尝试在循环中进行索引时出现错误,无法将例如 hourBuffer[q] 传递给 SetIndexBuffer,所以逐一设置;但循环似乎在 PlotIndexSetInteger 中有效)。 // 将缓冲区分配给索引,隐藏于图表,显示于数据窗口 SetIndexBuffer(0, hourBuffer0, INDICATOR_DATA); SetIndexBuffer(1, hourBuffer1, INDICATOR_DATA); SetIndexBuffer(2, hourBuffer2, INDICATOR_DATA); SetIndexBuffer(3, hourBuffer3, INDICATOR_DATA); SetIndexBuffer(4, hourBuffer4, INDICATOR_DATA); SetIndexBuffer(5, hourBuffer5, INDICATOR_DATA); SetIndexBuffer(6, hourBuffer6, INDICATOR_DATA); SetIndexBuffer(7, hourBuffer7, INDICATOR_DATA); SetIndexBuffer(8, hourBuffer8, INDICATOR_DATA); SetIndexBuffer(9, hourBuffer9, INDICATOR_DATA); SetIndexBuffer(10, hourBuffer10, INDICATOR_DATA); SetIndexBuffer(11, hourBuffer11, INDICATOR_DATA); SetIndexBuffer(12, hourBuffer12, INDICATOR_DATA); SetIndexBuffer(13, hourBuffer13, INDICATOR_DATA); SetIndexBuffer(14, hourBuffer14, INDICATOR_DATA); SetIndexBuffer(15, hourBuffer15, INDICATOR_DATA); SetIndexBuffer(16, hourBuffer16, INDICATOR_DATA); SetIndexBuffer(17, hourBuffer17, INDICATOR_DATA); SetIndexBuffer(18, hourBuffer18, INDICATOR_DATA); SetIndexBuffer(19, hourBuffer19, INDICATOR_DATA); SetIndexBuffer(20, hourBuffer20, INDICATOR_DATA); SetIndexBuffer(21, hourBuffer21, INDICATOR_DATA); SetIndexBuffer(22, hourBuffer22, INDICATOR_DATA); SetIndexBuffer(23, hourBuffer23, INDICATOR_DATA); SetIndexBuffer(24, hourBuffer, INDICATOR_DATA); for(int i = 0; i < 24; i++) { PlotIndexSetInteger(i, PLOT_DRAW_TYPE, DRAW_NONE); PlotIndexSetInteger(i, PLOT_SHOW_DATA, true); } return(INIT_SUCCEEDED); OnCalculate 函数循环与程序 接下来是 OnCalculate 函数: 在这里我们将所有缓冲区重置为零,仅将对应当前小时的缓冲区值设置为1。这里可能会有效率提升,但可以留到后面再考虑。 if(rates_total 0 ? prev_calculated - 1 : 0); for(int i = start; i < rates_total; i++) { // 计算当前条形图的小时 (0..23) bar_hour = (int)((time[i] % 86400) / 3600); // 1) 将当前条形图的所有24个缓冲区设置为0 hourBuffer0[i] = 0.0; hourBuffer1[i] = 0.0; hourBuffer2[i] = 0.0; hourBuffer3[i] = 0.0; hourBuffer4[i] = 0.0; hourBuffer5[i] = 0.0; hourBuffer6[i] = 0.0; hourBuffer7[i] = 0.0; hourBuffer8[i] = 0.0; hourBuffer9[i] = 0.0; hourBuffer10[i] = 0.0; hourBuffer11[i] = 0.0; hourBuffer12[i] = 0.0; hourBuffer13[i] = 0.0; hourBuffer14[i] = 0.0; hourBuffer15[i] = 0.0; hourBuffer16[i] = 0.0; hourBuffer17[i] = 0.0; hourBuffer18[i] = 0.0; hourBuffer19[i] = 0.0; hourBuffer20[i] = 0.0; hourBuffer21[i] = 0.0; hourBuffer22[i] = 0.0; hourBuffer23[i] = 0.0; hourBuffer[i] = EMPTY_VALUE; // 2) 现在只将对应的缓冲区设置为1 switch(bar_hour) { case 0: hourBuffer0[i] = 1.0; hourBuffer[i] = bar_hour; break; case 1: hourBuffer1[i] = 1.0; hourBuffer[i] = bar_hour; break; case 2: hourBuffer2[i] = 1.0; hourBuffer[i] = bar_hour; break; case 3: hourBuffer3[i] = 1.0; hourBuffer[i] = bar_hour; break; case 4: hourBuffer4[i] = 1.0; hourBuffer[i] = bar_hour; break; case 5: hourBuffer5[i] = 1.0; hourBuffer[i] = bar_hour; break; case 6: hourBuffer6[i] = 1.0; hourBuffer[i] = bar_hour; break; case 7: hourBuffer7[i] = 1.0; hourBuffer[i] = bar_hour; break; case 8: hourBuffer8[i] = 1.0; hourBuffer[i] = bar_hour; break; case 9: hourBuffer9[i] = 1.0; hourBuffer[i] = bar_hour; break; case 10: hourBuffer10[i] = 1.0; hourBuffer[i] = bar_hour; break; case 11: hourBuffer11[i] = 1.0; hourBuffer[i] = bar_hour; break; case 12: hourBuffer12[i] = 1.0; hourBuffer[i] = bar_hour; break; case 13: hourBuffer13[i] = 1.0; hourBuffer[i] = bar_hour; break; case 14: hourBuffer14[i] = 1.0; hourBuffer[i] = bar_hour; break; case 15: hourBuffer15[i] = 1.0; hourBuffer[i] = bar_hour; break; case 16: hourBuffer16[i] = 1.0; hourBuffer[i] = bar_hour; break; case 17: hourBuffer17[i] = 1.0; hourBuffer[i] = bar_hour; break; case 18: hourBuffer18[i] = 1.0; hourBuffer[i] = bar_hour; break; case 19: hourBuffer19[i] = 1.0; hourBuffer[i] = bar_hour; break; case 20: hourBuffer20[i] = 1.0; hourBuffer[i] = bar_hour; break; case 21: hourBuffer21[i] = 1.0; hourBuffer[i] = bar_hour; break; case 22: hourBuffer22[i] = 1.0; hourBuffer[i] = bar_hour; break; case 23: hourBuffer23[i] = 1.0; hourBuffer[i] = bar_hour; break; } string localHourText = HourToText(bar_hour); Comment("当前小时是: ", localHourText); } // 返回处理的条形图数量 return(rates_total); 添加注释功能的实现 最后,提供一个用于生成注释的程序: 这实际上是一个调试检查,但我保留了注释部分。 string HourToText(int bh) { string TextHour; switch(bh) { case 0: TextHour = "12 am"; break; case 1: TextHour = "1 am"; break; case 2: TextHour = "2 am"; break; case 3: TextHour = "3 am"; break; case 4: TextHour = "4 am"; break; case 5: TextHour = "5 am"; break; case 6: TextHour = "6 am"; break; case 7: TextHour = "7 am"; break; case 8: TextHour = "8 am"; break; case 9: TextHour = "9 am"; break; case 10: TextHour = "10 am"; break; case 11: TextHour = "11 am"; break; case 12: TextHour = "12 pm"; break; case 13: TextHour = "1 pm"; break; case 14: TextHour = "2 pm"; break; case 15: TextHour = "3 pm"; break; case 16: TextHour = "4 pm"; break; case 17: TextHour = "5 pm"; break; case 18: TextHour = "6 pm"; break; case 19: TextHour = "7 pm"; break; case 20: TextHour = "8 pm"; break; case 21: TextHour = "9 pm"; break; case 22: TextHour = "10 pm"; break; case 23: TextHour = "11 pm"; break; default: TextHour = "未知"; break; } return TextHour; } 请注意,这个注释功能目前只在数据窗口中显示。 祝大家圣诞快乐,2025年新年快乐!

2024.12.25
首页 上一页 8 9 10 11 12 13 14 15 16 17 18 下一页 末页