我的指标在我换到新的时间框架图时就消失了 - 页 3 123 新评论 [删除] 2014.06.17 00:35 #21 嗨,SDC。我知道了。非常感谢。如果有100巴,总费率从0到99开始。 在开始时,pre_cal =0 --> limit=100 bar - 0 =100。for(int=1 to limit=100; I++)在最后,I=100(索引值),没有这样的条形图100。因此,为了使最大的I=99,我把limit-1。我想知道是否有更好的方法。此外,让我困惑的是,在许多其他指标中,我使用同样的方法,没有这样的超出范围 的问题。另外,谢谢你的专家标签。鑫科FX int limit=rates_total-prev_calculated; if(limit<=0) limit=2; //--- for(int i=1;i<limit-1 ;i++) { if((High[i]-Low[i])==0) continue; if( MathAbs(Close[i]-Open[i])/(High[i]-Low[i])<0.50 ) boring[i]=Close[i]; qjol 2014.06.17 00:47 #22 scfx:此外,让我困惑的是,在许多其他指标中,我使用同样的方法,没有这种超出范围的问题。 在B600之前,超出范围 并不是 一个严重的错误。 Ian Venner 2014.06.17 03:06 #23 scfx:. 因此,为了使最大的I=99,我把limit-1。我想知道是否有更好的方法。 你的代码现在将绘制从第1条开始的图表历史,没有错误,但它不会绘制任何新条。有很多方法来编写代码,这取决于你希望它做什么。看看metaeditor中的指标,看看MQ的编码者是怎么做的。当你能读懂他们的代码并理解每一行的原因时,你创建指标 将没有问题。 [删除] 2014.06.27 00:39 #24 我现在明白了,SDC。就我个人而言,当我阅读该文件时很难想象。我还是不确定为什么prev_calculated= Total_rates -1。所以我在这里做了一个数字的例子。我希望它能帮助像我这样的新人。通常情况下,我们看到。Limit= rates_total- prev_calculated; //(no-1)或者for(i=1;i<limit;i++) 或 for(i=1;i<=limit;i++)重要的 是要确保LIMIT>=1。在我的情况下,LIMIT=0,因此,当新的tick进入时,指标没有被REFESHED。为什么呢,让我们看看。(我认为至少在我的情况下,原因是prev_calculated。)假设我在图表上有100个柱子的情况下附加了这个指标。以下是变量值。第一个数值表 变量 Total_rates 100 Bar的索引 0-99 prev_calculated 0 Limit 100 Loop i value 1-99一切都很好。从第1条到图表的开头,数值将首次显示出来。已经计算了多少条?这 是我错误的关键点,我不是100%清楚。当新条形图开始时,图表上现在有101条。指标没有在已经关闭的条上更新,现在是第1条。第二张数值表 变量 Total_rates 101 Bar的索引 0-100 prev_calculated 99 OR 100 (见下文) Limit2 OR 1 循环i值1至1 OR 1至0根据第一张表,指标计算出99条(因为它从1到99循环)。 然而,文件中说:"但如果不是第一次调用start(),将返回等于Bars-1的值"。)因此,它将返回101-1=100。,这一个柱子的不同导致了麻烦。如果系统返回100作为prev_calculated。 你可以看到,如果prev_calculated=99,循环将工作。 然而,看起来prev_calculated=100,因此循环将不工作,因为limit=0或-1取决于。 谁能帮我看看这种情况下prev_calculated= Bars-1背后的逻辑? 所以解决方案很清楚:使for(i=1; ___这里的这个必须大于1 for (<)或大于或等于1 for (<=)__; i++)。在我最后的代码中,它等于0。 int pcal=prev_calculated; if(prev_calculated>0) pcal--; int limit=rates_total-pcal; for(int i=1;i<=limit ;i++) //it is <= //--------------OR ------------------------ int limit=rates_total-prev_calculated-1; if(limit<=0) limit=2; //NOT limit for(int i=1;i<=limit ;i++) //it is <= 我希望这对你有帮助。SCFX Ian Venner 2014.06.27 02:37 #25 prev_calculated == rates_total scfx:我现在明白了,SDC。就我个人而言,当我阅读文件时很难想象。我仍然不确定为什么prev_calculated=Total_rates -1。SCFX 创建一个新的指标,把这段代码放在启动函数 中,把它附在1分钟的图表上,观察刻度线到来时的警报。Alert("rt = ",rates_total," pc = ",prev_calculated); 你会看到rate_total是当前的条数。 prev_calculated是上一个tick的条数。 [删除] 2014.06.27 02:58 #26 SDC:prev_calculated == rates_total 创建一个新的指标,把这段代码放在启动函数中,把它附在1分钟的图表上,观察刻度线到来时的警报。 你会看到rate_total是当前的条数。 prev_calculated是上一个tick的条数。 哇,这很奇怪。在之前发布的链接中,他们说,如果:BUT如果不是第一次调用start(),将返回等于Bars-1的值。为什么会返回Bars(Rate_totals)。 Ian Venner 2014.06.27 13:58 #27 是的,我知道他们这么说,但这并不完全准确。 实际发生的情况是这样的。 rates_total ==当前tick到达时的总条数。 prev_calculated ==前一个tick到达时的总条数。 图表中的条数 指示器状态 速率-总数 prev-calculated 速率_总数-前次计算的 1000 装载时首次运行 1000 0 1000 1000 下一个刻度 1000 1000 0 1000 下一个刻度线 1000 1000 0 1001 新条形图的第一个刻度线 1001 1000 1 1001 下一个刻度线 1001 1001 0 1001 下一个刻度线 1001 1001 0 因此,你有3个主要的prev-calculated与rate_total的状态。 指标加载,条形图中间的ticks,新条形图第一个tick。 prev_calculated == 第一次运行时为0,因为在指标加载后没有前一个tick。 此外,如果改变图表或添加历史记录,prev_calculated会重新设置为零。 OnCalculate的返回值不被使用,但最好使用默认的return(rate_total),以备他们修复。 William Roeder 2014.06.28 11:55 #28 图表中的条形图 指标状态 率-总数 前期计算的 总数-前值-计算的比率 1000 装载时首次运行 1000 0 1000 而1000条并不存在。 我知道新文档是怎么说的。如果你按他们的方法做,你必须测试prev_calculated 是否为零,并将rates_total - prev_calculated 调低一个。这就是回到递减指标_counted的 混乱状态。int OnCalculate(const int rates_total, const int prev_calculated, ...){ #define LOOKBACK 1 // iMA(... iBar+1) int indicator_counted = prev_calculated; if(indicator_counted < LOOKBACK) indicator_counted = LOOKBACK; for(iBar = rates_total - 1 - indicator_counted; i>=0 i--){ Buffer[iBar] = ...; } return(rates_total - 1); // Recalculate bar zero next tick. } 见显示指标的进度 - MQL4论坛 Ian Venner 2014.06.28 12:34 #29 做return( rates_total - 1 )是没有意义的,prev_calculated的值就像return(rate_total)一样,不管你告诉它要返回什么。 William Roeder 2014.06.30 01:48 #30 SDC: 做return( rates_total - 1 )是没有意义的,prev_calculated的值就像return(rate_total)一样,不管你告诉它要返回什么。 你在服务台发布了这个问题 吗? 123 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
嗨,SDC。
我知道了。非常感谢。
如果有100巴,总费率从0到99开始。
在开始时,pre_cal =0 --> limit=100 bar - 0 =100。
for(int=1 to limit=100; I++)
在最后,I=100(索引值),没有这样的条形图100。
因此,为了使最大的I=99,我把limit-1。
我想知道是否有更好的方法。
此外,让我困惑的是,在许多其他指标中,我使用同样的方法,没有这样的超出范围 的问题。
另外,谢谢你的专家标签。
鑫科FX
此外,让我困惑的是,在许多其他指标中,我使用同样的方法,没有这种超出范围的问题。
在B600之前,超出范围 并不是 一个严重的错误。
因此,为了使最大的I=99,我把limit-1。
我想知道是否有更好的方法。
你的代码现在将绘制从第1条开始的图表历史,没有错误,但它不会绘制任何新条。有很多方法来编写代码,这取决于你希望它做什么。看看metaeditor中的指标,看看MQ的编码者是怎么做的。当你能读懂他们的代码并理解每一行的原因时,你创建指标 将没有问题。
我现在明白了,SDC。
就我个人而言,当我阅读该文件时很难想象。我还是不确定为什么prev_calculated= Total_rates -1。
所以我在这里做了一个数字的例子。我希望它能帮助像我这样的新人。
通常情况下,我们看到。
Limit= rates_total- prev_calculated; //(no-1)
或者
for(i=1;i<limit;i++) 或 for(i=1;i<=limit;i++)
重要的 是要确保LIMIT>=1。在我的情况下,LIMIT=0,因此,当新的tick进入时,指标没有被REFESHED。
为什么呢,让我们看看。(我认为至少在我的情况下,原因是prev_calculated。)
假设我在图表上有100个柱子的情况下附加了这个指标。以下是变量值。
第一个数值表
变量
Total_rates 100
Bar的索引 0-99
prev_calculated 0
Limit 100
Loop i value 1-99
一切都很好。从第1条到图表的开头,数值将首次显示出来。已经计算了多少条?这 是我错误的关键点,我不是100%清楚。
当新条形图开始时,图表上现在有101条。指标没有在已经关闭的条上更新,现在是第1条。
第二张数值表
变量
Total_rates 101
Bar的索引 0-100
prev_calculated 99 OR 100 (见下文)
Limit2 OR 1
循环i值1至1 OR 1至0
根据第一张表,指标计算出99条(因为它从1到99循环)。
所以解决方案很清楚:使for(i=1; ___这里的这个必须大于1 for (<)或大于或等于1 for (<=)__; i++)。在我最后的代码中,它等于0。然而,文件中说:"但如果不是第一次调用start(),将返回等于Bars-1的值"。)因此,它将返回101-1=100。
,这一个柱子的不同导致了麻烦。如果系统返回100作为prev_calculated。
你可以看到,如果prev_calculated=99,循环将工作。
然而,看起来prev_calculated=100,因此循环将不工作,因为limit=0或-1取决于。
谁能帮我看看这种情况下prev_calculated= Bars-1背后的逻辑?
我希望这对你有帮助。
SCFX
prev_calculated == rates_total
我现在明白了,SDC。
就我个人而言,当我阅读文件时很难想象。我仍然不确定为什么prev_calculated=Total_rates -1。
SCFX
创建一个新的指标,把这段代码放在启动函数 中,把它附在1分钟的图表上,观察刻度线到来时的警报。
你会看到rate_total是当前的条数。
prev_calculated是上一个tick的条数。
prev_calculated == rates_total
创建一个新的指标,把这段代码放在启动函数中,把它附在1分钟的图表上,观察刻度线到来时的警报。
你会看到rate_total是当前的条数。
prev_calculated是上一个tick的条数。
哇,这很奇怪。
在之前发布的链接中,他们说,如果:BUT如果不是第一次调用start(),将返回等于Bars-1的值。
为什么会返回Bars(Rate_totals)。
是的,我知道他们这么说,但这并不完全准确。
实际发生的情况是这样的。
rates_total ==当前tick到达时的总条数。 prev_calculated ==前一个tick到达时的总条数。
因此,你有3个主要的prev-calculated与rate_total的状态。 指标加载,条形图中间的ticks,新条形图第一个tick。
prev_calculated == 第一次运行时为0,因为在指标加载后没有前一个tick。
此外,如果改变图表或添加历史记录,prev_calculated会重新设置为零。
OnCalculate的返回值不被使用,但最好使用默认的return(rate_total),以备他们修复。
我知道新文档是怎么说的。如果你按他们的方法做,你必须测试prev_calculated 是否为零,并将rates_total - prev_calculated 调低一个。这就是回到递减指标_counted的 混乱状态。
做return( rates_total - 1 )是没有意义的,prev_calculated的值就像return(rate_total)一样,不管你告诉它要返回什么。