if(prev_calculated==0) { //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории for(int i=0;i<rates_total;i++) ExtBuffer[i]=1.01; return(rates_total); }
if(prev_calculated==0) { //--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории for(int i=0;i<rates_total;i++) ExtBuffer[i]=1.01; return(rates_total); }
回答错误问题的惊人能力...
现在向我解释一下,如果发生了什么。
1.重新计算的100个条形图,输入到从0到99的缓冲区(让我们把方向视为时间序列)的值1.03。
2.突然间,历史被加载,prev_calculated变成了0。
从指标中的哪个柱子开始,数值将是1.03?
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
最好 在第一次启动指标 时就说明如何 处理垃圾。
完全不是一个拐杖。我就是这样做的。
{
//--- инициализация элементов индикаторного буфера при первом запуске или при подкачке истории
for(int i=0;i<rates_total;i++)
ExtBuffer[i]=1.01;
return(rates_total);
}
因此,这就是应该解决的问题。我不需要垃圾(不是真的,但它会干扰显示),但我需要保存指标以前的计算结果。当你第一次启动指示器时,缓冲区会变成垃圾,当加载历史记录时,所有插入缓冲区的内容都应该被保存......而且最好不要把它保存到文件或GV中。
补充说。
这样做的目的是为了每分钟实时估计缩水。专家顾问不间断地工作了一个星期,我们将看到的不是每周的显示,而是最后的数值,即使没有指标也能看到。
如果一个简单的首次运行/不再首次运行标志就足够了,用静态的bool b_First_Run取代prev_calculated。而你可以把缓冲区的初始化放在OnInint中
不,那里的目标并不那么原始。
因此,这就是需要解决的问题。我不需要垃圾(我不需要它,但它会干扰显示),但我需要保存指标以前的计算结果。当你第一次启动指示器时,缓冲区会变成垃圾,当加载历史记录时,所有插入缓冲区的内容都应该被保存......而且最好不要把它保存到文件或GV中。
补充说。
这是对每分钟缩减量的实时估计。专家顾问工作了一个星期,没有停止,而不是每周显示,我们将只看到最后的价值,即使没有指标也是可见的。
Alexey Viktorov,按照我的理解,只需要这样--在第一次启动时将缓冲区归零,在各种分页过程中不碰其中的任何东西。
重新检查了如果缓冲区阵列 在OnInit()中被初始化 会发生什么。
即使将指标从图表中删除 并重新设置,不是所有的,而是一些缓冲区仍有旧的值。甚至不完全是以前的样子,但其中一个数值延伸到了几个小节。
哦!这下子就更有意义了。我今晚会给你答复。
很抱歉延迟回复。保存某个时间段的计算值的唯一方法是将它们保存到一个文件中。你需要处理好同步问题--这样当从文件中读取数据时,数据就会被放在它们的柱子上。最合理的解决方案是根据条形图的打开时间 进行同步,但可能存在一些微妙的问题:例如,条形图的打开时间(保存到文件中)是2016.09.05. 25:02,但现在我们在图表上有一个条形图,时间等于2016.09.05. 25:01。
或者说,让开发者注意到指标缓冲区的初始化问题会更好?为什么在MT4中没有这样的问题?也许又是没有完全理解?问题是,即使在EACH中从图表上取下一个指标后强制初始化缓冲区,也不是所有的缓冲区都包含垃圾,我们不能从那里卸载它。
我个人并不介意拐杖,但前提是这些拐杖不能太复杂,而且要有积极作用。但是,写到一个文件,然后再读它,是一个蹩脚的拐杖。