文章 "开发先进的 ICT 交易系统:在指标中实现订单区块" - 页 2

 
Niquel Mendoza #:

关于第一个问题,我认为可能是因为指标没有正确加载数据。这种情况通常发生在更换图表或打开新图表时。不过,如果是已经在使用的图表,则值得进一步研究为什么无法获得订单块。在这种情况下,最好在代码中加入调试(打印)信息,以找出问题所在。

关于第二个问题,即只绘制了看涨订单区块,可能是因为 H4 时间框架中的欧元兑美元目前处于 600-700 烛台高点。在这种情况下,有可能所有看跌订单区块都已减弱,所以才没有在图表上绘制。

关于标准变化,我减少了代码中的一些布尔变量。不过,如果有必要,重新引入这些条件也不成问题。

关于颜色,我在评论中发布的最新版本对订单块矩形的颜色采用了透明处理。也许这就是颜色与之前版本不一致的原因。最后,关于动画,我不太明白您指的是什么。您能否详细解释一下动画在这里的含义?

在第 3.0 节 "结论 "中,您展示了 XAUUSD M1 指标的操作视频。 我想知道您是否使用了 "策略测试器指标 "功能来制作视频。 当我运行 "策略测试器 "时,通常是为选中 Visal 模式的 EA 显示指标和交易,但通常不会显示正在运行的 EA 的文本。 我想知道您是否知道原因或解决方案。


此外,我还发现调整大型多维数组的大小需要耗费大量时间。 我不得不在每次调整大小时额外使用 100 个元素,以尽量减少耗费的时间。 这对我来说非常有效,因为我使用基于零的数组来处理时间序列。

 
CapeCoddah #:

在第 3.0 节 "结论 "中,您展示了 XAUUSD M1 指标的操作视频。 我想知道您是否使用了 "策略测试仪 "指标功能来制作视频。 当我运行 "策略测试仪 "时,通常是针对选中 Visal 模式的 EA,它确实会显示指标和交易,但通常不会显示正在运行的 EA 的文本。 我想知道您是否知道原因或解决方案。


此外,我还发现调整大型多维数组的大小需要耗费大量时间。 我不得不在每次调整大小时额外使用 100 个元素,以尽量减少耗费的时间。 这对我来说非常有效,因为我使用基于零的数组来处理时间序列。

你好,CapeCoddah。

我使用外部应用程序录制视频,而不是内置的 Strategy Tester 功能。

关于您提到的在执行智能交易系统过程中出现的文本,我知道这可能是 MQL5 的外部内容,而不是像标签这样的图形对象。如果您能提供截图,我就能更好地进行分析。

致以最崇高的敬意。


 

你好、

感谢您提供的信息,我很感激。

关于将您的评论从西班牙语翻译成英语的问题,由于谷歌翻译不翻译行中 // 之后的文本,因此它不符合我翻译您的评论的需要。 我试过 DeepL,它可以翻译 // 之后的文本。但我也很难理解。翻译代码并不难,但保存译文却不可能。不过,它的翻译工作确实很糟糕。 它在它认为句子结束的地方插入了句号和 "End"。 此外,它还把 && 改成了 &&&,当然还有更多问题。 在纠正了这些错误之后,我放弃了,编译仍然产生了 100 多个错误。

我通过策略测试器 运行了您的第二部分,您的 TP 和 SL 线以及文本都显示出来了。 不过,您对 TP 和 SL 水平的计算似乎需要调整。此外,测试显示了重叠的 SL 和 TP,在非对冲环境中,SL 和 TP 会合并为一个 SL 或 TP。 图表上也没有显示您预测的交易开始的位置。

我决定专注于你的第一个程序,因为它似乎能产生更多的信号。我计划:在趋势结束时加入终止信号的机制;消除 n 个条形图内的重复信号;将以条形图中值为中心的方框高度标准化;确定并修改订单块参数,以便在 H1 及以上周期合理使用;在主图表或打开的指标图表上放置交易量移动平均线;最后将其转换为基于零的数组,以符合我的标准使用,并最终将其纳入我的 EA。我将尝试使用函数来执行和封装逻辑,以便您在需要时将其纳入其中。 不过,我的编程组织风格并不传统,也不符合 MetaQuotes 自动缩进的要求。

我会继续关注你,因为我相信你的交易方法非常好,请继续努力。

干杯


科达角

 

您好、

我刚刚在策略测试器中 测试了我的 EA,EURUSD H4 1/1/2025-2/1/2025,在运行结束时观察到 Block Order 指标有两个问题。

首先,它在 2/3/2025 日选择了一个区块订单,而该日期在测试窗口之外;其次,它将区块文本放在了图表移动区域。


欣赏


科达角

附加的文件:
 

这是您第一个指标的英文翻译版本。 我决定需要用英文理解您的许多代码注释,并重新考虑了谷歌翻译,因为 DeepL 没有给我留下深刻印象。我首先将所有 // 注释改为 #/#,以便谷歌翻译 // 行注释,然后将文本文件转换为 MS Word 文档,输入到翻译中。翻译完成后,我打开新文档并将其保存为文本文件,重新命名后开始对新源代码进行语法处理。 我估计翻译完成了 90% 的工作,但它确实添加了需要手动转换的空格和字符。 经过几天的工作,它编译成功了,没有出现任何错误。令人惊讶的是,它第一次尝试就成功了!我将它与你原来的 1000 条指标进行了比较,结果完全相同。

附加的文件:
 
CapeCoddah # :

这是您第一个指标的英文翻译版本。 我决定需要用英文理解您的许多代码注释,并重新考虑了谷歌翻译,因为 DeepL 没有给我留下深刻印象。我首先将所有 // 注释改为 #/#,以便谷歌翻译 // 行注释,然后将文本文件转换为 MS Word 文档,输入到翻译中。翻译完成后,我打开新文档并将其保存为文本文件,重新命名后开始对新源代码进行语法处理。 我估计翻译完成了 90% 的工作,但它确实添加了需要手动转换的空格和字符。 经过几天的工作,它编译成功并没有出现错误。 令人惊讶的是, 它第一次尝试就成功了!我将它与你原来的 1000 条指标进行了比较,结果完全相同。

你好,CapeCoddah,我认为你创建的代码非常出色。很抱歉没有尽快回复你;我正在参与几个项目,这限制了我为你提供帮助的时间。不过,今天我可以抽出一些时间来开发该指标的改进版本。我在下面分享代码。
附加的文件:
 

不幸的是,您的指标似乎在结构上存在缺陷,对交易毫无用处,因为它是根据计算时未知的未来变量进行计算的,下面的代码用粗体标出了这一点。

for( int i = Universal_search_range ; i > 5 ; i--) {
// 错误检查
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;

// 更新蜡烛图指数
one_candle = i ;// 中央蜡烛图
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
two_candle = one_candle - 1;
three_candle = one_candle - 2;
four_candle = one_candle -3
;

// 计算前几根蜡烛的平均成交量
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);

 
CapeCoddah #:

不幸的是,您的指标似乎在结构上存在缺陷,对交易毫无用处,因为它是根据计算时未知的未来变量进行计算的,正如下面粗体代码中强调的那样。

for( int i = Universal_search_range ; i > 5 ; i--) {
// 错误检查
if( i + 3 > ArraySize(highArray) || i + 3 > ArraySize(atr))
continue ;
if( i < 0) continue;

// 更新蜡烛图指数
one_candle = i ;// 中央蜡烛图
candle_behind_two = i +2;
candle_behind_one = one_candle +1;
two_candle = one_candle - 1;
three_candle = one_candle - 2;
four_candle = one_candle -3
;

// 计算前几根蜡烛的平均成交量
body1 = MathAbs(closeArray[one_candle] - openArray[one_candle]);
body2 = MathAbs(closeArray[two_candle] - openArray[two_candle]);
body3 = MathAbs(closeArray[three_candle] - openArray[three_candle]);

你好,CapeCoddah,我认为情况并非如此,因为例如,在所示的第一个循环中,该指标使用数组串联进行所有计算(尽管这并不常见,通常不使用数组串联),该循环用于检测订单块、所做的是从 "Universal_search_range "蜡烛图(请记住,在系列中蜡烛图 0 是最近的)到蜡烛图 6,因此在任何时候都不会使用未来的蜡烛图,如果是这种情况,那么 two_candle 或其他指数将导致值小于 0,从而超出范围。因此,蜡烛图 four_candle = one_candle - 3 将是最接近 0 的蜡烛图,如果循环结束时 i = 6,那么 four_candle = 3,因此考虑到当前蜡烛图为 0,我可以说我在任何时候都没有使用未来蜡烛图。我知道,这个名字听起来可能会令人困惑,但我这样做是因为这样更容易理解,因为在获取订单区块时,one_vela 就像是中心烛。因此,如果我在寻找强势走势,我会评估其后的蜡烛(在系列中,这将是减法)。