您好。
我对您的指标很感兴趣。但我需要 "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); }
我没有亲自检查过,但可以尝试在创建对象时为绘制线条本身添加一个更好的条件。例如,对于支撑线:
下午好,感谢您的评论。想法是好的,但对于支撑线,条件应该是(根据我试图实现的逻辑)相反的,找到的第二个分形的低点应该低于第一个分形,所有低点高于第一个分形的第二个分形的候选者都应该被忽略。
另外,如果采用这种方法,您将不得不重新设计绘图块,实际上,之后的所有东西也都要重新设计。在我看来,美丽的代码将失去它的优雅。
我之所以给这篇文章写评论,还有一个原因--程序运行得非常好,在实际报价中一切都绘制得非常完美,准时,没有错误,但在测试器中却不是这样。如果有什么不清楚的地方,我就会感到不安和压力,所以我想弄清楚。
编辑过的代码文件附后,如果有更多有能力的同志能指出测试仪出现这种行为的原因,我将不胜感激。
下午好,感谢您的评论。这个想法很好,但对于支撑线来说,条件应该是(根据我试图实现的逻辑)相反的,找到的第二个分形的低点应该低于第一个分形,所有低点高于第一个分形的第二个分形的候选者都应该被忽略。
另外,如果采用这种方法,实际上还需要重新设计绘图块,以及之后的所有其他部分。美中不足的是,代码将失去其优雅性。
我之所以给这篇文章写评论,还有一个原因--程序运行得非常好,在实际报价中,一切都绘制得非常完美,准时,没有错误,但在测试器中却不是这样。如果有什么不清楚的地方,我就会感到不安和压力,所以我想把它弄明白。
编辑过的代码文件附后,如果有能力的同志能指出测试仪出现这种行为的原因,我将不胜感激。
显然,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 的定义,并与它们进行了比较。这样在测试器中一切正常。修改后的文件附后。
显然,这与 FractalDown_base[] 数组有冲突。奇怪的是,顶部的分形并没有出现这种情况。总之,我稍微修改了一下你的比较:
也就是说,我添加了 "高 "和 "低 "的定义,并与它们进行了比较。这样在测试器中一切正常。修改后的文件附后。
下午好,感谢您的时间和关注。我已经上传了所附文件。不幸的是,测试仪的工作仍然不正确,指标进行了第一次构建,不再重建阻力线和支撑线,也不显示分形。为了测试,我在注释中输出了 High_base_tf[UpperFractal_1_base] 和 Low_base_tf[LowerFractal_1_base]。计算正确,逻辑一切正常。显然,故障隐藏在绘图的某个地方。
屏幕扫描结果显示,新的分形形成了,但线条没有重建。
***
您还可以在这里看到线段 Low_base_tf[LowerFractal_1_base]及其值,这些值可以与 LowFractal_1_base 的值进行比较(对于低值,高值类似)。一切都计算正确,但没有新的构造。
屏幕扫描显示,新的分形已经形成,但线条并未重新排列--附在链接中。
***
不幸的是,链接已被删除。
遗憾的是,该链接已被删除。
禁止链接第三方网站。
禁止链接第三方网站。
如何张贴测试仪屏幕的扫描件?我只能用 PDF 格式发布,而且我知道论坛不接受这种格式。
禁止链接第三方网站。
弗拉基米尔,晚上好。从您的出版物和作品来看,您是一位经验丰富的程序员。请您就本主题的实质问题向我提供建议--程序在测试器中无法运行,但在在线图表中却能正常运行。作者没有回复,显然很忙。
Fractal_TL:
一款基于给定时间帧的分形自动绘制趋势线的指标。
作者: Almat Kaldybay