ZigZag指标的问题 - 页 3

 
FMIC:


正如之前的帖子所解释的那样,你不能只用高和低的缓冲区来获得ZigZag的点,因为它们也包括重绘的点(我的青色和粉红色的点)。在标准的ZigZag上也是这样的,只是你看不到它们而已。这就是为什么我的指标显示它们,以便你能更好地理解它。

你必须将高点和低点缓冲区与第一个容纳低点和高点的缓冲区进行比较,以便只过滤掉ZigZag点。

NB!你需要将第一个缓冲区(模式0)与其他两个缓冲区进行比较,以决定它是一个高点还是一个低点(例如,如果缓冲区1和缓冲区3的数值相同,那么它就是一个低ZigZag点,如果缓冲区1和缓冲区2的数值相同,那么它就是一个高点)。

如果你愿意,请把你的文件附在帖子里,我将对它进行修正,以便你能看到如何正确使用它(附在帖子里,不要用SRC,以免造成长篇大论)。


你好,FMIC。

谢谢你的解释和帮助。我还不能成功地得到高值和低值。问题是,它重绘(正常),而我无法找到历史最高和最低值。我也在原始的Zigzag指标中使用模式0和模式1或者模式0和模式2,但是所有的结果都有这两个值。我的意思是,没有一条线有zh(模式1)或zl(模式2)的值,但没有zz(模式0)。所以我不能成功地使用这种方法。

此外,我还使用了iCustom()函数 的索引,但没有成功。这看起来很简单,但我花了一天多的时间来解决这个问题,却没有找到解决办法。

请在附件中找到我的代码(版本5)。非常感谢任何帮助。

附加的文件:
 

我又进行了一些测试,也进行了视觉测试。我甚至把iCustom指数放回100点,以避免重绘,但它确实如此。问题是,当调用Zigzag指标时,它正在寻找实际数据;100点之前、10点之前或1000点之前对它都没有任何影响。因此,最好使用指数为1。

我的理解是,我需要执行另一个循环来检查数组,并通过消除数据来纠正高点和低点;例如,如果有两个连续的高点,它将消除最低的那个,而对低点则做相反的处理。我最初的想法是再次回到比如100天的数组中,并检查是否有连续的高点。我还没有对这个算法做出结论。

你有更好的主意吗?包括用完全不同的方法来识别历史数据中的高点和低点?

 
aed71:

我又进行了一些测试,也进行了视觉测试。我甚至把iCustom指数放回100点,以避免重绘,但它确实如此。问题是,当调用Zigzag指标时,它正在寻找实际数据;100点之前、10点之前或1000点之前对它都没有任何影响。因此,最好使用指数为1。

我的理解是,我需要执行另一个循环来检查数组,并通过消除数据来纠正高点和低点;例如,如果有两个连续的高点,它将消除最低的那个,而对低点则做相反的处理。我最初的想法是再次回到比如100天的数组中,并检查是否有连续的高点。我还没有对这个算法做出结论。

你有更好的主意吗?包括用完全不同的方法来识别历史数据中的高点和低点?


你好,aed71。

我刚刚工作回来,是时候睡觉了。我明天早上会更详细地看一下你的代码,并为你提供一个正确的解决方案。

然而,作为一个简短的说明,你不必回看1000或100条,只需考虑 "深度 "和 "回踩"参数 就够了。

另外,由于你只是在收集和分析数据,可以考虑用一个脚本在整个历史数据上即时向前走,而不是用刻度间隔的EA。这样,你就不必担心重绘的问题。

明天我将为您提供一个更完整的解释。

最好的问候,
FMIC

 

你好,FMIC。

从昨天开始,我正在研究如何消除虚假的高点和低点的算法,我已经为此编码了附件中的版本。它在某种程度上消除了虚假信号,但有时会删除原始信号,而它不应该这样做。

代码背后的原则是。

如果有一个高点,它会回溯到最后一个已知的低点,并逐步检查 当前的高点是否高于前一个高点,然后它将删除前一个高点。

对低点部分也同样有效。我对代码做了一些解释。

至少我不再有任何同时出现的高点或低点了:-)

现在我需要找到它删除原始高/低点的错误。

如果你能看一下我的代码,也许你能在短时间内理解这个错误。我太专注了,可能连简单的错误都看不出来......

再次感谢您的帮助。

附加的文件:
 

早上好,"aed71"。

我还没有看你最近的文件,但这是我的脚本(不是指标,也不是EA),用于审查某个时间段,并将ZigZag高点和低点输出到CSV文件。

只需将该脚本附加到图表 上,它就会在几秒钟内运行。然后只需查看 "MQL4\Files "文件夹中生成的CSV文件。我已经包括了一个运行在2013年欧元兑美元日线图上的例子。

由于这是一个脚本,你根本不用担心重绘的问题。

最好的问候。
FMIC

PS!我接下来会查看你的最新文件,然后给你我的意见。

编辑:我已经看了你的最新代码,它到处都是。 只要看看我的代码就知道,测试高点和低点要简单得多。 没有必要在你的代码中搞得那么混乱。这里有一个摘录(完整的代码在ZIP文件中)。

if( dblZigZagPoint > 0 )  // Test if a ZigZag Point is found
{
   intZZCount++;  // Increment ZigZag Counter

   // Test if it is a High, Low or Unknown
   string strZZType = strZZUnknown;
   if( dblZigZagHigh > 0 ) strZZType = strZZHigh;
   else if( dblZigZagLow > 0 ) strZZType = strZZLow;
               
   // Output the ZigZag Point Data to CSV File
   FileWrite( intCSVFileHandle, intZZCount, strZZType, DoubleToString( dblZigZagPoint, intDigits ), Time[ intBarShift ] );
}
附加的文件:
 
FMIC:

早上好,"aed71"。

我还没有看你最近的文件,但这是我的脚本(不是指标,也不是EA),用于审查某个时间段,并将ZigZag高点和低点输出到CSV文件。

只需将该脚本附加到图表 上,它就会在几秒钟内运行。然后只需查看 "MQL4\Files "文件夹中生成的CSV文件。我已经包括了一个运行在2013年欧元兑美元日线图的例子。

因为这是一个脚本,所以您完全不必担心重绘的问题。

最好的问候,
FMIC

PS!我接下来会审阅你的最新文件,然后给你我的意见。

编辑:我已经看了你的最新代码,它到处都是。
只要看看我的代码就知道,测试高点和低点要简单得多。

没有必要在你的代码中搞得那么混乱。


伟大的工作,工作顺利,应该包括在代码中 base....谢谢你。

如果你不介意的话,我有两个问题。

1-) 我下载的数据,在图表中看到的是4位数,但脚本的输出是5位数。这怎么可能呢?我的意思是5位数,末尾没有零。

数目,类型,价格,日期时间

1,H,1.34962,2013.11.04 00:30:00

2,L,1.34861,2013.11.04 02:15:00

3,H,1.35015,2013.11.04 03:00:00

4,L,1.34417,2013.11.04 05:15:00

5,H,1.35127,2013.11.04 11:15:00

6,L,1.34910,2013.11.04 15:45:00

7,H,1.35236,2013.11.04 18:15:00

8,L,1.35045,2013.11.04 19:45:00

9,H,1.35203,2013.11.04 22:45:00

2-) 这个脚本非常有用,但这是我项目 的第一部分,我分析了历史数据。之后,我打算将代码加入我的专家,以某种方式找到最近的历史之间的相关性,并相应地决定进一步优化当前变量。换句话说,我也需要在专家中运行类似的东西。那么,如何才能将其转换为专家版?

再次感谢您的帮助:-)


 
aed71:


伟大的工作,工作顺利,应该包括在代码base.... 中。谢谢你。

如果你不介意的话,我有两个问题。

1-) 我下载的数据,在图表中看到的是4位数,但脚本的输出是5位数。这怎么可能呢?我的意思是,5位数字的末尾没有零。

2-) 脚本非常有用,但这是我项目的第一部分,我分析了历史数据。之后,我打算把代码加入到我的专家中,以某种方式找到最近的历史之间的相关性,并据此决定对当前的变量进行进一步优化。换句话说,我也需要在专家中运行类似的东西。那么,如何才能将其转换为专家版?

再次感谢您的帮助:-)

  1. 如果你有一个5位数的经纪人,那么数据将有5位数。许多指标的问题是,它们没有使用 "IndicatorDigits()"函数,所以最终只显示默认的数字,而不考虑经纪人提供的数字。如果你看看我的ZigZagZug代码,你会发现我明确地设置了这一点,以纠正这个问题,这是MetaQuotes在他们自己的代码中没有做到的。

    // Set Number of Digits (Precision)
       IndicatorDigits( Digits );

  2. 至于在专家中使用该代码,这确实取决于许多事情,如策略和重绘将如何影响它。有些策略不受重绘的影响,有些则对其非常敏感。对于一个 "未知 "的策略,我无法提供太多建议。在这种情况下,你必须对它进行具体说明。但请记住,你不需要回看1000条。如果你学会了ZigZag的工作方式,以及它是如何使用高点和低点突破的,以及它是如何回溯搜索的,有时你只需要回溯(深度+回溯)条的距离--根据策略的不同,它可能略多或甚至更少,但绝不是你使用的1000或100。

 

谢谢你提供关于数字的信息。这让我很头疼,我需要阅读和了解其中的细节...

让我更详细地说明我想实现的目标。我有一个相当赚钱的专家(目前),我在过去10年中已经测试过。然而,该专家在每个条件下的表现都不尽如人意,不是很差,但在某些年份/月份没有希望。它有一些预先优化的变量,影响了它的盈利能力。我愿意在最近的历史和今天之间找到一种关联,以便对这些变量进行自我优化。

所以我需要的是找到历史数据中的高峰和低点,以计算历史数据的周期和振幅。我将尝试手动找到最近的历史数据和专家当前的盈利 变量之间的相关性。如果我能找到,我将在我的专家中加入类似的代码,每天它将检查过去一周的统计数据,并根据相关的常数,自我优化专家的各种变量。

所以这就是策略。我已经研究了许多其他的主题来分析历史数据,包括傅里叶、Hurts Cycles、Goertzel、MESA等,但我的结论是,使用一个在现有数据上运行的方法会更好。

所以我不需要实时的高低点分析,在15M的数据集中,我已经准备好放掉半天的数据(差不多45个点)。最有可能的是,我将查看过去5天的数据,我想4.5天的变化足以找到新的优化值。

关于我的代码,我认为问题在于;当它在检查之前的高点时,它走得太靠后了,应该在本地最低值上停止。我还在努力,因为我需要这个工具的专家部分。

 
aed71:

谢谢你提供关于数字的信息。这让我很头疼,我需要阅读和了解其中的细节...

让我更详细地说明我想实现的目标。我有一个相当赚钱的专家(目前),我在过去10年中已经测试过。然而,该专家在每个条件下的表现都不尽如人意,不是很差,但在某些年份/月份没有希望。它有一些预先优化的变量,影响了它的盈利能力。我愿意在最近的历史和今天之间找到一种关联,以便对这些变量进行自我优化。

所以我需要的是找到历史数据中的高峰和低点,以计算历史数据的周期和振幅。我将尝试手动找到最近的历史数据和专家当前的盈利变量之间的相关性。如果我能找到,我将在我的专家中加入类似的代码,每天它将检查过去一周的统计数据,并根据相关的常数,自我优化专家的各种变量。

所以这就是策略。我已经研究了许多其他的主题来分析历史数据,包括傅里叶、Hurts Cycles、Goertzel、MESA等,但我的结论是,使用一个在现有数据上运行的方法会更好。

所以我不需要实时的高低点分析,在15M的数据集中,我已经准备好放掉半天的数据(差不多45个点)。最有可能的是,我将查看过去5天的数据,我想4.5天的变化足以找到新的优化值。

关于我的代码,我认为问题在于;当它在检查之前的高点时,它走得太靠后了,应该在本地最低值上停止。我还在努力,因为我需要工具的专家部分。


你所描述的并不能真正帮助理解EA的性质,以便给你建议。

如果你愿意,请给我发一个私人信息,告诉我细节,我可以好好看看你的EA,并为它建议必要的代码。

另外,我所能建议的是,你尽量实现它,当你有一个具体的问题需要解决时,请回到论坛,发表一个具体的询问,看看用户是否可以提供帮助。

 

好的,谢谢FMIC。

事实上,我的问题是关于我在论坛上分享的专家。你的脚本工作得很好,非常感谢,但基本上我需要的是专家的形式,它也可以在接近实时的模式下工作。