技术指标

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
将Pine脚本转为MQL5的斐波那契布林带指标
MetaTrader5
将Pine脚本转为MQL5的斐波那契布林带指标

大家好!今天要给大家分享一个非常实用的指标——斐波那契布林带(Fibonacci Bollinger Bands)。这个指标是将Pine脚本(由Rashad开发)转换为MQL5语言的结果。它将布林带的强大功能与斐波那契水平结合,帮助交易者更有效地识别动态支撑和阻力区域。 功能特点: 自动计算布林带上的斐波那契水平。 为突破和反转交易提供独特的视角。 与MetaTrader 5完全兼容。 这个指标非常适合那些寻找增强技术分析工具的交易者。快来下载并测试一下吧! 以下是Pine脚本代码: study(shorttitle="FBB", title="Fibonacci Bollinger Bands", overlay=true) length = input(200, minval=1) src = input(hlc3, title="Source") mult = input(3.0, minval=0.001, maxval=50) basis = vwma(src, length) dev = mult * stdev(src, length) upper_1= basis + (0.236*dev) upper_2= basis + (0.382*dev) upper_3= basis + (0.5*dev) upper_4= basis + (0.618*dev) upper_5= basis + (0.764*dev) upper_6= basis + (1*dev) lower_1= basis - (0.236*dev) lower_2= basis - (0.382*dev) lower_3= basis - (0.5*dev) lower_4= basis - (0.618*dev) lower_5= basis - (0.764*dev) lower_6= basis - (1*dev) plot(basis, color=fuchsia, linewidth=2) p1 = plot(upper_1, color=white, linewidth=1, title="0.236") p2 = plot(upper_2, color=white, linewidth=1, title="0.382") p3 = plot(upper_3, color=white, linewidth=1, title="0.5") p4 = plot(upper_4, color=white, linewidth=1, title="0.618") p5 = plot(upper_5, color=white, linewidth=1, title="0.764") p6 = plot(upper_6, color=red, linewidth=2, title="1") p13 = plot(lower_1, color=white, linewidth=1, title="0.236") p14 = plot(lower_2, color=white, linewidth=1, title="0.382") p15 = plot(lower_3, color=white, linewidth=1, title="0.5") p16 = plot(lower_4, color=white, linewidth=1, title="0.618") p17 = plot(lower_5, color=white, linewidth=1, title="0.764") p18 = plot(lower_6, color=green, linewidth=2, title="1") MQL5示例:

2024.12.04
优化MetaTrader 5的经济日历监测与历史回测
MetaTrader5
优化MetaTrader 5的经济日历监测与历史回测

MetaTrader 5的经济日历与历史报价不同步简而言之:MetaTrader 5内置的经济日历与历史报价并不完全同步。每个报价都带有时间戳,这些时间戳是根据每个对应K线形成时服务器所在时区来标记的。一旦K线形成,它们的时间戳将保持不变。但经济日历则提供与服务器当前时区相关的过去、现在和未来事件的信息。由于许多经纪商遵循特定的时区安排,包括夏令时的开启和关闭,因此历史事件的时间戳相对于相关的K线可能会在一年中的大约一半时间内出现1小时的偏差。此外,经纪商有时更改时区的方式比简单的夏令时切换还要激进。历史报价可能因此在经济事件发生时的时间上出现数小时的偏移,而这些事件现在却在更新后的时区中被日历所报告。考虑到新闻来自不同国家,各自的夏令时安排又不同,而你的服务器可能位于其他时区,新闻发布的时间在图表上可能会“跳跃”。这在春季和秋季的几周内尤为明显。这些在在线交易中似乎不那么重要,但如果我们想测试基于新闻的策略呢?是的,虽然可以说MetaTrader的测试器不支持经济日历,但许多交易者喜欢交易新闻,而其他人则应该密切关注新闻,以便在市场因新闻而剧烈波动前提前退场。因此,带有经济日历的回测非常重要。这就是为什么将日历导出到外部存储(文件或数据库),然后再导入到测试器中显得非常合理的原因。书中介绍了这样的日历归档工具:算法交易书籍。在这里,我们遇到了历史报价与历史事件脱节的问题。为简单起见,书中没有解决这个问题。现在,这个问题通过扩展版的CalendarCache.mqh和展示指示器CalendarMonitorCachedTZ.mq5得到了很好的解决。这是书中CalendarMonitorCached.mq5的一个略微修改的版本。该指示器监控新闻事件,并动态更新图表上的表格,显示若干过去和即将发生的事件。所有与时间纠正相关的工作都在幕后完成——在另一个公共库TimeServerDST.mqh中。为了更好地理解时间纠正的工作原理,可以使用脚本CalendarCSVForDates.mq5并并排比较带与不带纠正的CSV文件。以下是该库是如何嵌入到两个程序的源代码中的——脚本和该指示器。#include &lt;TimeServerDST.mqh&gt; // 在日历缓存之前包含,以启用时区修正支持 #include &lt;MQL5Book/CalendarFilterCached.mqh&gt; #include &lt;MQL5Book/CalendarCache.mqh&gt;与原始指示器一样,这里有一个字符串输入CalendarCacheFile,您可以提供用于写入或读取的日历文件名。当指示器附加到在线图表并且CalendarCacheFile为空时,它会直接使用内置日历。当指示器使用CalendarCacheFile中的特定名称执行并且文件不存在时,指示器将日历记录导出到缓存文件(创建该文件)并退出。这是时间戳应该/可以进行纠正的阶段(见FixCachedTimesBySymbolHistory)。当指示器使用CalendarCacheFile中现有缓存文件的名称执行时,它将加载缓存并像使用内置日历一样工作。这对于测试器尤其有用。请记得,测试器需要指定附加文件,在我们的情况下——准备好的在线日历文件,在指令#property tester_file中,或者您应该将日历文件放入公共文件夹C:/Users/&lt;User&gt;/AppData/Roaming/MetaQuotes/Terminal/Common/。当然,缓存也可以在回测和优化期间加载到EA中。输入字符串FixCachedTimesBySymbolHistory的处理方式如下。如果它为空,指示器将不进行时间纠正保存缓存。要在导出时启用时间纠正,您需要指定一个符号,该符号将用于经验性检测服务器的历史时区。它基于H1报价的历史,最好是“XAUUSD”或“EURUSD”。借助这个输入,指示器的新版本仅添加了几行代码:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if(StringLen(FixCachedTimesBySymbolHistory)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cache[].adjustTZonHistory(FixCachedTimesBySymbolHistory, true); 方法adjustTZonHistory是专门为时间戳调整而引入到CalendarCache类中的,其实现使用了TimeServerDST.mqh的内部。该方法应仅在线调用(而不是在测试器中)。通常,该方法应在从内置日历填充的缓存对象上调用,紧接着填充后进行调用。否则,如果缓存是从日历文件加载的,或者如果该方法之前已被调用,则缓存内容可能已经调整。然后,您将修正重复应用,导致错误的时间戳。第二个参数(true)指示该方法将变更边界写入日志。类似如下:时间修正开始于 2021.07.19 00:30:00 2021.07.19 00:30:00: 148786 -10800 diff=-3600 2021.11.08 01:50:00: 135918 -7200 OK 2022.03.14 04:30:00: 161085 -10800 diff=-3600 2022.11.07 04:00:00: 165962 -7200 OK 2023.03.13 01:50:00: 168500 -10800 diff=-3600 2023.11.06 01:50:00: 169270 -7200 OK 2024.03.11 01:50:00: 181258 -10800 diff=-3600 2024.11.04 02:30:00: 208469 -7200 OK每一行都包含一个事件的时间和ID,其中发现了新的不一致,事件的服务器时间偏移,以及为消除服务器时间在日历缓存时的偏差而必须应用的所有后续时间戳的差异。附带的mqh文件(CalendarFilter.mqh,CalendarCache.mqh,QuickSortStructT(Ref).mqh)包含了与书中原始版本相比的bug修复和改进。更新日志2024年11月11日 - CalendarFilter.mqh, CalendarCache.mqh的小bug修复和更新;2024年11月22日 - CalendarCache.mqh的小bug修复和改进。

2024.11.11
MetaTrader 5极端高低价位指标解析
MetaTrader5
MetaTrader 5极端高低价位指标解析

在交易中,准确识别价格的极端高低点是至关重要的。今天,我想跟大家分享一款用于MetaTrader 5的极端高低价位指标,它能够帮助我们更好地分析市场走势。 指标的工作原理 这个指标通过线条来标记价格极端值。我们可以输入一个时间段,以确定该期间内的最高价和最低价。与传统指标不同的是,它不仅仅依赖于OHLC(开盘、最高、最低、收盘)数据,还会考虑每根K线的买卖报价。为了提高效率,我们还可以设置一个回看数值,以限制处理的K线数量。 智能过滤结构性突破 该指标的另一个亮点是它能够智能识别并过滤掉结构性突破区域。当当前高点或低点被突破时,指标会自动隐藏某些线段,这样我们只会在真正的支撑和阻力区域看到线条。这一功能可以通过输入参数进行控制。如果你喜欢,也可以选择在极端价格上显示线条,同时在市场上升或下降趋势时,线条也会相应地倾斜显示。 版本2.0的新特性 优化了算法,现在只计算当前K线的tick数据,使得该指标在更高的时间框架上运行更加流畅。 移除了不必要的缓存,提高了指标的运行效率。 通过使用这个极端高低价位指标,交易者们可以更清晰地识别市场的关键点,为我们的交易决策提供重要依据。希望大家能在实际操作中好好运用这一工具!

2024.11.09
锤头指标:MetaTrader 5 上的关键反转工具
MetaTrader5
锤头指标:MetaTrader 5 上的关键反转工具

大家好,今天我要和大家聊聊锤头指标,这个在MetaTrader 5图表上非常实用的工具。锤头指标主要用于识别关键的蜡烛图形态,尤其是绿色锤头、红色锤头和倒锤头。这些形态能够帮助我们分析价格反转的潜在点。 锤头的特征通常是小蜡烛体和长下影线,这表明在下跌趋势后可能会出现买入压力。而倒锤头则有所不同,它的长上影线可能暗示在上涨趋势后即将反转。 该指标通过计算蜡烛图的影线和蜡烛体的大小和比例来检测这些形态,主要有三个可调参数: MaxRatioShortWick:设置短影线相对于整个蜡烛的最大比例,用于过滤那些顶部影线较小的形态。 MinRatioLongWick:定义长影线的最小比例,确保识别出的形态在蜡烛体比较长的情况下具有显著的影线长度。 MinCandleSize:指定识别为锤头或倒锤头形态所需的蜡烛体最小大小。 一旦识别出形态,指标会在图表上用指定颜色(绿色或红色)显示箭头,箭头位置靠近蜡烛的最高价或最低价,这取决于形态的方向。代码中的功能可以处理这些图形对象的创建和定位,以及在从图表中移除指标时清理这些对象。 锤头指标非常适合那些希望发现潜在反转的交易者,其参数也可以根据不同的时间框架和市场条件进行调整。它是一个多功能的工具,可以为各种交易策略提供早期的视觉提示,帮助我们捕捉潜在的价格变化。

2024.10.31
MetaTrader 5中的星期、周数及其他数据窗口指标解析
MetaTrader5
MetaTrader 5中的星期、周数及其他数据窗口指标解析

在MetaTrader 5中,有一个非常实用的指标叫做星期显示器(WeekDays),它能够在数据窗口中显示当前的星期几、年度周数、年度天数或K线索引,并且可以选择在图表上以标签形式显示这些信息。 如往常一样,数据窗口中的信息会根据鼠标移动动态更新:左侧栏始终会及时更新当前的星期几名称,而右侧栏的内容则由设置决定,具体是由输入参数 WholePart 和 FractionalPart 决定。每个参数都允许用户选择要显示的内容:星期几、年度周数、年度天数、K线索引,或者不显示。 WholePart - 浮点数前面的整数选择器; FractionalPart - 浮点数后面的数值选择器; 这两个选定的属性(整数值)会合并成一个浮点值,存储在指标缓冲区中。由于其值是合成的,因此缓冲区在图表上是不可见的,样式为 DRAW_NONE。 例如,下面的截图中,星期几的名称是周二,而包含年度天数(Day Of Year index)的缓冲区显示值为 44.302,这意味着这是第44周和第302天。 其他输入参数允许用户指定是否在图表上 显示标签,选择 字体名称、字体大小、字体颜色,以及从上下边缘的 内边距,以及如何 对齐 标签(顶部/中间/底部),还有可选的 旋转角度 用于中间对齐。 默认的 clrNONE 字体颜色意味着与当前图表背景相反的颜色。

2024.10.29
PTB指标:提升MetaTrader 5交易策略的利器
MetaTrader5
PTB指标:提升MetaTrader 5交易策略的利器

指标介绍:PTB.mq5 概述: PTB.mq5指标专为MetaTrader 5交易平台设计,能够计算并展示短期和长期的高低价位,以及基于这些极值的斐波那契回撤水平。 功能特点: - 短期高低价:该指标计算用户定义的短期内的最高和最低价格,帮助交易者识别即时的支撑和阻力位。 - 长期高低价:它还计算长期内的最高和最低价格,为交易者提供更广泛的市场趋势洞察。 - 斐波那契水平:该指标绘制重要的斐波那契回撤水平(23.6%、38.2%、50%、61.8%和78.6%),交易者常用来识别市场潜在的反转点。 输入参数: - shortLength:用于计算短期高低价的蜡烛数。 - longLength:用于计算长期高低价的蜡烛数。 可视化表现: - 该指标为不同的绘制线使用了独特的颜色和宽度: &nbsp; - 短期高: 红色(宽度:3) &nbsp; - 短期低: 蓝色(宽度:3) &nbsp; - 长期高: 绿色(宽度:3) &nbsp; - 长期低: 橙色(宽度:3) &nbsp; - 斐波那契水平: &nbsp; &nbsp; - 78.6%: 紫色(宽度:1) &nbsp; &nbsp; - 23.6%: 水蓝色(宽度:1) &nbsp; &nbsp; - 38.2%: 黄色(宽度:1) &nbsp; &nbsp; - 61.8%: 棕色(宽度:1) &nbsp; &nbsp; - 50%: 白色(宽度:3) 计算逻辑: - 该指标遍历价格数据,计算短期和长期的最高和最低值。 - 然后根据长期高低价之间的差异计算斐波那契水平。

2024.09.22
ChartObjectsCopyPaste:MetaTrader 5的实用图形对象复制工具
MetaTrader5
ChartObjectsCopyPaste:MetaTrader 5的实用图形对象复制工具

你是否曾经需要在多个图表之间复制和粘贴一些图形对象?我想你肯定有过这样的需求。然而,MetaTrader并没有提供“复制和粘贴”功能给这些对象。唯一能实现相似效果的就是模板(tpl文件),但模板会保存整个图表的状态,包括指标、设置和许多辅助信息,这些对你所需的复制过程来说可能并没有用处。 因此,我开发了这个指示器 ChartObjectsCopyPaste.mq5。它可以将选定的对象复制到剪贴板,然后可以粘贴到其他图表上,简单明了。 这个指示器基于另外一个发布在 算法交易书籍 中的指示器 - ObjectGroupEdit.mq5。 请点击链接了解更多关于底层类(ObjectMonitor、MapArray等)在幕后工作的细节。 此指示器没有缓冲区。它需要至少附加在两个图表上:一个是你想要复制对象的源图表,另一个是你计划粘贴对象的目标图表。 在图表上运行时,指示器会追踪现有的图形对象,并记录哪些对象被选中。 如同往常,“复制和粘贴”命令是成对使用的: 按下 Ctrl+Q 热键将所有选定对象复制到 Windows 剪贴板作为文本(你可以在任何文本编辑器中保存和查看它,示例见下文)。 在目标图表上按 Ctrl+J 粘贴剪贴板中的所有对象。 为什么是 Ctrl+Q/Ctrl+J?这两个组合键是从非常少的空闲键中自愿选择的,因为MetaTrader会拦截并不传播许多热键到MQL程序中。尤其是标准的 Ctrl+C/Ctrl+V/Ctrl+Ins/Shift+Ins,在这种情况下是无法使用的。 由于源代码是公开的,你可以将热键更改为其他组合。 由于指示器使用系统 DLL 访问 Windows 剪贴板,因此你需要在 属性 对话框的 依赖项 标签中允许 DLL 导入。 由于Codebase不允许DLL导入,相关的剪贴板代码被包裹在条件预处理指令 #ifdef&nbsp;DLL_LINK 中,因此请在编译之前取消注释以下行: #define DLL_LINK 否则,你会看到剪贴板功能存根在你按下热键时显示警报,而不会执行任何实际操作! 输入参数为: MakeAllSelectable - 使所有对象可选的标志(通常对于程序matically创建的对象为假); LogDetails - 输出所有传输对象属性到日志的标志; 该指示器不会检查粘贴的对象是否与实际目标图表(如符号、价格范围、子窗口数量等)匹配 - 这需要你自己来处理。 以下是包含两个对象的剪贴板文本示例: OBJ_VLINE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; H1 Vertical Line 5578&nbsp;&nbsp; 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 enum ENUM_OBJECT_PROPERTY_INTEGER 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_COLOR&nbsp;&nbsp; 55295 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_STYLE&nbsp;&nbsp; 2 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_WIDTH&nbsp;&nbsp; 1 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_BACK&nbsp;&nbsp;&nbsp;&nbsp;0 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_SELECTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TYPE&nbsp;&nbsp;&nbsp;&nbsp;0 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME&nbsp;&nbsp;&nbsp;&nbsp;1726739940 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_SELECTABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_CREATETIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1726847009 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_TIMEFRAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2097151 200&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_LEVELS&nbsp;&nbsp;0 207&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_ZORDER&nbsp;&nbsp;0 208&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_HIDDEN&nbsp;&nbsp;&nbsp;&nbsp;0 1032&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY&nbsp;&nbsp;&nbsp;&nbsp; 1 enum ENUM_OBJECT_PROPERTY_DOUBLE 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE&nbsp;&nbsp; 1.11449 enum ENUM_OBJECT_PROPERTY_STRING 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_NAME&nbsp;&nbsp;&nbsp;&nbsp;H1 Vertical Line 5578 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TEXT&nbsp;&nbsp;&nbsp;&nbsp; 206&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TOOLTIP OBJ_CHANNEL&nbsp;&nbsp;&nbsp;&nbsp; H1 Equidistant Channel 40885&nbsp;&nbsp;&nbsp;&nbsp;5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 1 enum ENUM_OBJECT_PROPERTY_INTEGER 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_COLOR&nbsp;&nbsp; 255 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_STYLE&nbsp;&nbsp; 0 2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_WIDTH&nbsp;&nbsp; 1 3&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_BACK&nbsp;&nbsp;&nbsp;&nbsp;0 4&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_SELECTED&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 7&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TYPE&nbsp;&nbsp;&nbsp;&nbsp;5 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME&nbsp;&nbsp;&nbsp;&nbsp;1726758000 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME.1&nbsp;&nbsp;1726797600 8&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TIME.2&nbsp;&nbsp;1726758000 10&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_SELECTABLE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 11&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_CREATETIME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1726847883 12&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_TIMEFRAMES&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2097151 200&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_LEVELS&nbsp;&nbsp;0 207&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_ZORDER&nbsp;&nbsp;0 208&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_HIDDEN&nbsp;&nbsp;&nbsp;&nbsp;0 1003&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY_LEFT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0 1004&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_RAY_RIGHT&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0 1031&nbsp;&nbsp;&nbsp;&nbsp;OBJPROP_FILL&nbsp;&nbsp;&nbsp;&nbsp;0 enum ENUM_OBJECT_PROPERTY_DOUBLE 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE&nbsp;&nbsp; -28.113879003558715 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE.1&nbsp;&nbsp;-21.708185053380777 9&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_PRICE.2&nbsp;&nbsp;-48.04270462633452 enum ENUM_OBJECT_PROPERTY_STRING 5&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_NAME&nbsp;&nbsp;&nbsp;&nbsp;H1 Equidistant Channel 40885 6&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TEXT&nbsp;&nbsp;&nbsp;&nbsp; 206&nbsp;&nbsp;&nbsp;&nbsp; OBJPROP_TOOLTIP 下面是这些对象粘贴到图表上的效果:

2024.09.21
首页 上一页 4 5 6 7 8 9 10 11 12 13 14 下一页 末页