指标: Fractal_TL

 

Fractal_TL:

一款基于给定时间帧的分形自动绘制趋势线的指标。


作者: Almat Kaldybay

 

您好。

我对您的指标很感兴趣。但我需要 "TL_Support"(支持线)和 "TL_Resistance"(阻力线)不是由最后两个分形建立,而是由最后一个分形和下一个较高/较低的分形建立。

我对代码进行了修改。在线运行正常,但在测试器中却无法运行。它只完成了第一个构造,然后就冻结了。您能告诉我如何让修改后的指标在 MT5 测试器中运行吗?

我将在下面引用代码,所做更改将以黄色标出。

//+------------------------------------------------------------------+
//| 搜索分形值|
//+------------------------------------------------------------------+
// --- 搜索第一个上分形
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 如果是非空值,则终止循环
      if(FractalUp_base[n]!=EMPTY_VALUE)
         break;
     }
   UpFractal_1_base=FractalUp_base[n];// --- 在变量中写入第一个分形的价格值
   UpperFractal_1_base=n;// --- 在变量中写入第一个分形的索引
                         // --- 
// --- 寻找第二个上分形
   for(n=UpperFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 如果是非空值,则终止循环
      if(
         FractalUp_base[n]!=EMPTY_VALUE
         &&
         FractalUp_base[n]>UpFractal_1_base
         )
          break;
     }
   UpFractal_2_base=FractalUp_base[n]; // --- 在变量中写入第二个分形的价格值
   UpperFractal_2_base=n;// --- 在变量中写入第二个分形的索引
                         // ---
// --- 搜索第一个下分形
   for(n=0; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 如果是非空值,则终止循环
      if(FractalDown_base[n]!=EMPTY_VALUE)
         break;
     }
   LowFractal_1_base=FractalDown_base[n];// --- 在变量中写入第一个分形的价格值
   LowerFractal_1_base=n;// --- 在变量中写入第一个分形的索引
                         // --- 
// --- 搜索第二个下分形
   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 如果是非空值,则终止循环
      if(
         FractalDown_base[n]!=EMPTY_VALUE
         && 
         FractalDown_base[n]<LowFractal_1_base
         )
          break;
     }
   LowFractal_2_base=FractalDown_base[n];// --- 在变量中写入第二个分形的价格值
   LowerFractal_2_base=n;// --- 在变量中写入第二个分形的索引
//--- 
 

我没有亲自检查过,但可以尝试在创建对象时为绘制线条本身添加一个更好的条件。例如,对于支撑线:

//--- 创建辅助线
if (LowFractal_1_base<LowFractal_2_base)//如果第一个分形的价格低于第二个分形的价格,则画一条线
{
   ObjectCreate(0,"TL_Support",OBJ_TREND,0,LowFractalTime_2_base[0],LowFractal_2_base,LowFractalTime_1_base[0],LowFractal_1_base);
   ObjectSetInteger(0,"TL_Support",OBJPROP_RAY_RIGHT,true);
   ObjectSetInteger(0,"TL_Support",OBJPROP_COLOR,Support_Color);
   ObjectSetInteger(0,"TL_Support",OBJPROP_STYLE,Support_Style);
   ObjectSetInteger(0,"TL_Support",OBJPROP_WIDTH,Support_Width);
}
 
Almat Kaldybay:

我没有亲自检查过,但可以尝试在创建对象时为绘制线条本身添加一个更好的条件。例如,对于支撑线:

下午好,感谢您的评论。想法是好的,但对于支撑线,条件应该是(根据我试图实现的逻辑)相反的,找到的第二个分形的低点应该低于第一个分形,所有低点高于第一个分形的第二个分形的候选者都应该被忽略。

另外,如果采用这种方法,您将不得不重新设计绘图块,实际上,之后的所有东西也都要重新设计。在我看来,美丽的代码将失去它的优雅。

我之所以给这篇文章写评论,还有一个原因--程序运行得非常好,在实际报价中一切都绘制得非常完美,准时,没有错误,但在测试器中却不是这样。如果有什么不清楚的地方,我就会感到不安和压力,所以我想弄清楚。

编辑过的代码文件附后,如果有更多有能力的同志能指出测试仪出现这种行为的原因,我将不胜感激。

附加的文件:
Fractal_TL.mq5  21 kb
 
Sergey Voytsekhovsky:

下午好,感谢您的评论。这个想法很好,但对于支撑线来说,条件应该是(根据我试图实现的逻辑)相反的,找到的第二个分形的低点应该低于第一个分形,所有低点高于第一个分形的第二个分形的候选者都应该被忽略。

另外,如果采用这种方法,实际上还需要重新设计绘图块,以及之后的所有其他部分。美中不足的是,代码将失去其优雅性。

我之所以给这篇文章写评论,还有一个原因--程序运行得非常好,在实际报价中,一切都绘制得非常完美,准时,没有错误,但在测试器中却不是这样。如果有什么不清楚的地方,我就会感到不安和压力,所以我想把它弄明白。

编辑过的代码文件附后,如果有能力的同志能指出测试仪出现这种行为的原因,我将不胜感激。

显然,FractalDown_base[] 数组之间存在冲突。奇怪的是,上分形 没有出现这种情况。总之,我对您的比较做了一些修改:

   for(n=LowerFractal_1_base+1; n<Bars(Symbol(),base_tf); n++)
     {
      // --- 如果是非空值,则终止循环
      if(FractalDown_base[n]!=EMPTY_VALUE 
      && FractalDown_base[n]<Low_base_tf[LowerFractal_1_base]
      )
      break;
     }

也就是说,我添加了 High 和 Low 的定义,并与它们进行了比较。这样在测试器中一切正常。修改后的文件附后。

附加的文件:
 
Almat Kaldybay:

显然,这与 FractalDown_base[] 数组有冲突。奇怪的是,顶部的分形并没有出现这种情况。总之,我稍微修改了一下你的比较:

也就是说,我添加了 "高 "和 "低 "的定义,并与它们进行了比较。这样在测试器中一切正常。修改后的文件附后。

下午好,感谢您的时间和关注。我已经上传了所附文件。不幸的是,测试仪的工作仍然不正确,指标进行了第一次构建,不再重建阻力线和支撑线,也不显示分形。为了测试,我在注释中输出了 High_base_tf[UpperFractal_1_base] 和 Low_base_tf[LowerFractal_1_base]。计算正确,逻辑一切正常。显然,故障隐藏在绘图的某个地方。

屏幕扫描结果显示,新的分形形成了,但线条没有重建。

***

您还可以在这里看到线段 Low_base_tf[LowerFractal_1_base]及其值,这些值可以与 LowFractal_1_base 的值进行比较(对于低值,高值类似)。一切都计算正确,但没有新的构造。

 
Sergey Voytsekhovsky:


屏幕扫描显示,新的分形已经形成,但线条并未重新排列--附在链接中。

***


不幸的是,链接已被删除。

 
Sergey Voytsekhovsky:

遗憾的是,该链接已被删除。

禁止链接第三方网站。

 
Vladimir Karputov:

禁止链接第三方网站。

如何张贴测试仪屏幕的扫描件?我只能用 PDF 格式发布,而且我知道论坛不接受这种格式。

 
Sergey Voytsekhovsky:

如何发布测试仪的屏幕扫描?我只能用 PDF 格式发布,而且我知道论坛不接受这种格式。

截图就是图片。与 PDF 有什么关系?将截图保存为 png 图片,然后将图片粘贴 到您的帖子中。

 
Vladimir Karputov:

禁止链接第三方网站。

弗拉基米尔,晚上好。从您的出版物和作品来看,您是一位经验丰富的程序员。请您就本主题的实质问题向我提供建议--程序在测试器中无法运行,但在在线图表中却能正常运行。作者没有回复,显然很忙。