新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 1171

 
Igor Zakharov:

它是否抽出了历史?

它可能是这样。但我不是100%确定。你如何检查这个,打印机会改变条数吗?

Igor Zakharov:

在这种情况下,你没有重新计算的机会。

谢谢,看起来是的。

Igor Zakharov:

而新出现的指示器缓冲区 项目则充满了垃圾。

看起来不仅是新的,而且是旧的。我有一种感觉,不仅箭头是随机画的,而且指标线也断了,尽管它不应该。请告知在历史互换的情况下如何组织重新计算,或在哪里寻找例子。

 
Alexey Viktorov:

我在单独插入这个插件时犯了一个错误。你应该只在缓冲区发生变化时才放箭头。同时,不要忘记在所有其他情况下,在缓冲区中放入一个空值。

甚至最好一次放一个空值,当趋势发生变化时,用一个箭头填充其中一个缓冲区。

谢谢你的答复。

我检查了原始指标,原来不是我弄错了,而是原先写错了。也就是说,即使没有我的修改,在交换历史时也会崩溃。

 
这是我第一次提出问题而没有得到任何回复。为新来者提供某种有选择的帮助。
 
novichok2018:
这是我第三次提出问题,得到的是沉默的回答。这是对新手的一种有选择的帮助。

吸引你眼球的第一件事是,你创建了一个 名为LowLine的图形 趋势线对象,后来没有删除它或用不同的名字创建类似的对象...

你不能用同一个名字多次运行ObjectCreate()--它只在第一次工作,然后会出现错误。


在确定分形方面也有一个问题,你试图在开盘后的第2个条形上找到分形,通常在条形上进行循环,并调用分形指标,在找到第一个分形时打破循环,并获得分形所在条形的编号。

 
Igor Makanu:

分形的定义也有问题,你试图在第2条开盘时找到一个分形,通常用分形指标的调用在条上做一个循环,当找到第一个分形时打破这个循环,并得到分形所在的条号。

谢谢你!

的确,我不明白如何获得分形出现的条数,因为它出现在两个条数之后。这就是为什么我在第二条上抓住它。Alert显示指定时期的分形数,但如何设置第二个分形的点来绘制趋势线?不清楚如何按照你的建议去做。

被称为分形的指标 在所有可用的历史上绘制分形。我想解决的任务是,通过落在一天中某一时期的分形画出趋势线,同时考虑到前一天的分形,并根据最后的分形自动重建线条。而且缺乏知识。

 
novichok2018:

谢谢你!

真的,我不明白如何获得分形出现的条数,因为它晚出现了两个条数。这就是为什么我在第二条上抓住它。Alert显示指定时期的分形数,但如何设置第二个分形的点来画趋势线?不清楚如何按照你的建议去做。

被称为分形的指标 在所有可用的历史上绘制分形。我想解决的任务是,通过落在一天中某一时期的分形画出趋势线,同时考虑到前一天的分形,并根据最后的分形自动重建线条。而且缺乏知识。

你确定你需要在第二条杠上抓吗?

以下是测试结果。

关于交易、自动交易系统和测试交易策略的论坛

MQL5:例子。

Vladimir Karputov, 2018.03.19 05:54

  • 2.3. iFractals.需要考虑的两个重要因素

在处理分形的时候,有两个因素需要考虑。

因素一

从 "rate_total-5 "到"rate_total-3 "条形上的分形不能重新绘制--它来自指标"Fractals.mq5"的设计(该指标的开放代码位于[data folder]/MQL5/Indicators/Examples/Fractals.mq5)--因为"rate_total-5 "和"rate_total-3"之间的 条形已经成型。

//---
   if(prev_calculated<7)
     {
      limit=2;
      //--- clean up arrays
      ArrayInitialize(ExtUpperBuffer,EMPTY_VALUE);
      ArrayInitialize(ExtLowerBuffer,EMPTY_VALUE);
     }
   else limit=rates_total-5;

   for(i=limit;i<rates_total-3 && !IsStopped();i++)
     {
      //---- Upper Fractal
      if(high[i]>high[i+1] && high[i]>high[i+2] && high[i]>=high[i-1] && high[i]>=high[i-2])
         ExtUpperBuffer[i]=high[i];
      else ExtUpperBuffer[i]=EMPTY_VALUE;

      //---- Lower Fractal
      if(low[i]<low[i+1] && low[i]<low[i+2] && low[i]<=low[i-1] && low[i]<=low[i-2])
         ExtLowerBuffer[i]=low[i];
      else ExtLowerBuffer[i]=EMPTY_VALUE;
     }
//--- OnCalculate done. Return new prev_calculated.
   return(rates_total);
  }

分形

图1.这就是 "分形 "指标的工作原理。从指标 "Fractals.mq5"的位置对文件进行编号

这意味着,当我们在专家顾问中收到来自iFractals指标的数据时,在 "rate_total-5 "和 "rate_total-4 "条(来自 "Fractals.mq5 "指标位置的条数)上会有一个分形,保证不会被重新渲染。


这里是在 "rate_total-5 "条上形成分形的时刻--在右边有一个新条,1月2日03:00(从指标 "Fractals.mq5 "的位置对文件编号)。

分形,5巴

图2.在 "rate_total-5 "条上形成分形的时刻

第二个因素

分形指标 使用EMPTY_VALUE而不是 "0.0 "作为空值。例外是第一次初始化,当指标缓冲区被初始化为零时(这不是由指标 "Fractals.mq5 "完成的,而是由MQL5在创建数组并将其与指标缓冲区连接时完成的)。


 
novichok2018:

从你的建议来看,也不清楚如何做。

这里有一个寻找分形的函数,只是针对专家顾问,它对我很有效

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

 
Vladimir Karputov:

你确定你应该在第二条杠上接住吗?

以下是测试结果。


是的,谢谢你。在第三条上没有重绘。只是这并没有改变问题的本质。

 
Igor Makanu:

这里有一个寻找分形的函数,只是针对一个EA,它对我来说很有效

https://www.mql5.com/ru/forum/160683/page968#comment_13214633

谢谢你,这很有效。

我不明白如何在代码中反映一个新分形的出现。因为barfrup_1总是比barfrup_2小,所以当一个新的分形出现时,对barfrup_1的编号跳跃没有得到任何结果,因为它仍然比barfrup_2小。

还有一件事:我不明白如何提取barfrup_1和barfrup_2的高值。

 
novichok2018:

还有一件事:我不明白如何提取barfrup_1和barfrup_2的高值。

在图表上抛出一个分形指标,用这个函数测试EA

并通过传递给我的函数MODE_UPPER和 MODE_LOWER来重新打印找到的值

novichok2018:

谢谢你,这很有效。

我只是不明白如何在代码中呈现一个新分形的出现。

你需要记住酒吧的时间;当一个新的酒吧出现时,编号会改变,而酒吧的开放时间始终是不变的。

也就是说,当你启动我的代码时,记住检测到分形的那根柱子的时间,然后再启动它--找到那根柱子,将那根柱子的时间与记忆中的时间进行比较--时间不同,就意味着有新的分形。