垂直线。 - 页 4 1234567 新评论 Nauris Zukas 2018.10.25 12:37 #31 我还在学习指标的复杂性,有一些问题。我在OnInit()中重置了指标缓冲区,但由于某些原因,缓冲区在指标编译时没有被重置。对于逻辑来说,编译后每个缓冲区 应该有一个完整的单元 。我在哪里犯了错? int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,ColorHistogram_2Buffer1,INDICATOR_DATA); SetIndexBuffer(1,ColorHistogram_2Buffer2,INDICATOR_DATA); SetIndexBuffer(2,ColorHistogram_2Colors,INDICATOR_COLOR_INDEX); //--- установим пустое значение PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0); ArrayInitialize(ColorHistogram_2Buffer1,0); ArrayInitialize(ColorHistogram_2Buffer2,0); ArrayInitialize(ColorHistogram_2Colors,EMPTY_VALUE); Print("-INITALIZATION-"); false; //--- return(INIT_SUCCEEDED); } if(rates_total-8==i)// || rates_total-5==i || rates_total-2==i) { ColorHistogram_2Buffer1[i]=high[i]; ColorHistogram_2Buffer2[i]=low[i]; ColorHistogram_2Colors[i]=0; } . 附加的文件: Test_DRAW_COLOR_HISTOGRAM2.mq5 9 kb Alexey Viktorov 2018.10.25 13:32 #32 Nauris Zukas:我还在学习指标的复杂性,有一些问题。我在OnInit()中重置了指标缓冲区,但由于某些原因,缓冲区在指标编译时没有被重置。对于逻辑来说,编译后每个缓冲区 应该有一个完整的单元 。我在哪里犯了错? 在OnInit中,指标缓冲区 的长度为零。 这就是为什么他们可以对你做任何事情--这一切在他们看来都是死人的工作。 而当代码执行切换到OnCalculate时,大小立即变成等于rate_total。 并且在数组的所有单元中都有 "垃圾"。也可能有旧指标计算的遗留物。 Nauris Zukas 2018.10.25 14:11 #33 Alexey Viktorov:在OnInit中,指标缓冲区 的长度为零。 这就是为什么你可以对它们为所欲为,它们是一个致命的诱因。 而当代码执行传递到OnCalculate时,大小立即变成等于rate_total。 并且阵列中的所有单元格都有 "垃圾"。可能有一些是旧的指标计算遗留下来的。非常感谢你,我都拿到了,而且成功了!是这样做的。 bool ResetOnInit=false; int OnInit() { ResetOnInit=false; return(INIT_SUCCEEDED); } int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(!ResetOnInit) { ArrayInitialize(ColorHistogram_2Buffer1,0); ArrayInitialize(ColorHistogram_2Buffer2,0); ArrayInitialize(ColorHistogram_2Colors,EMPTY_VALUE); ResetOnInit=true; } } Alexey Viktorov 2018.10.25 14:26 #34 Nauris Zukas:非常感谢你,这一切都解决了!我是这样做的。 为什么要给一个变量赋值两次? bool ResetOnInit=false; int OnInit() { ResetOnInit=false; return(INIT_SUCCEEDED); } 还有一个问题:为什么我需要这一切?毕竟,通过循环中的所有条形,无论如何,数组的所有单元格都必须被填充一些东西。除非指标应该只显示当前的位置,但这样的话,数组 必须在每个柱子上被初始化,而不是只在开始的时候。 Nauris Zukas 2018.10.25 15:03 #35 Alexey Viktorov:为什么要给一个变量赋值两次? 我不确定OnInit()是否会模仿图形的所有动作,例如改变taimfreims。改变了taimfreim的复位(刚刚检查过),但也许还有别的原因,所以我把第二条放在OnInit()中以确定。但如果不是,那我就不放在那里了。 Nauris Zukas 2018.10.25 15:03 #36 Alexey Viktorov: 而问题是:我们为什么需要这一切?毕竟,通过循环中的所有条形,无论如何,数组的所有单元格都必须被填满东西。除非指标应该只显示当前的位置,但这样的话,数组应该 在每个柱子上都被初始化,而不是只在开始时。在这个例子中,我只是想了解如何重置缓冲区。但在将来(在我现在正在做的指标中),我既需要保留以前的单元格,也需要添加新的单元格。就在这一点上,我开始了工作。可以说--第一次测试。 Alexey Viktorov 2018.10.25 15:36 #37 Nauris Zukas: 我不确定OnInit()是否模仿了图表的所有动作,例如改变taimfreims。改变了taimfreim的复位(现在检查过了),但也许还有别的原因,所以我把第二条放在OnInit()中以确定。但如果不是,那我就不放在那里了。啊。嗯,是的,当图表周期 改变时,全局水平变量没有被初始化。? "我认为...记不清楚了。 一般来说,你可以不使用那个额外的bool变量。 int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { if(prev_calculated == 0) { ArrayInitialize(ColorHistogram_2Buffer1,0); ArrayInitialize(ColorHistogram_2Buffer2,0); ArrayInitialize(ColorHistogram_2Colors,EMPTY_VALUE); } } Nauris Zukas 2018.10.25 15:42 #38 Alexey Viktorov: 而在一般情况下,你可以不使用这个额外的bool变量。 是的,没错,甚至更好,谢谢你。 Nauris Zukas 2018.10.27 13:35 #39 你能告诉我,为什么如果周期超过30分钟,会返回这样一个奇怪的数字?Print("PERIOD: ",Period()); KP 0 14:33:22.423 Test_DRAW_COLOR_HISTOGRAM2 (EURUSD,M30)PERIOD: 30GG 0 14:33:24.402 Test_DRAW_COLOR_HISTOGRAM2 (EURUSD,H1) PERIOD: 16385 RJ 0 14:33:25.675 Test_DRAW_COLOR_HISTOGRAM2 (EURUSD,H4) PERIOD: 16388 Taras Slobodyanik 2018.10.27 13:50 #40 Nauris Zukas:你能告诉我为什么如果周期超过30分钟,它就会返回这样一个奇怪的数字?在MT5中,周期值不等于分钟数,就像在MT4中。 1234567 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我还在学习指标的复杂性,有一些问题。我在OnInit()中重置了指标缓冲区,但由于某些原因,缓冲区在指标编译时没有被重置。对于逻辑来说,编译后每个缓冲区 应该有一个完整的单元 。我在哪里犯了错?
if(rates_total-8==i)// || rates_total-5==i || rates_total-2==i) { ColorHistogram_2Buffer1[i]=high[i]; ColorHistogram_2Buffer2[i]=low[i]; ColorHistogram_2Colors[i]=0; }
我还在学习指标的复杂性,有一些问题。我在OnInit()中重置了指标缓冲区,但由于某些原因,缓冲区在指标编译时没有被重置。对于逻辑来说,编译后每个缓冲区 应该有一个完整的单元 。我在哪里犯了错?
在OnInit中,指标缓冲区 的长度为零。
这就是为什么他们可以对你做任何事情--这一切在他们看来都是死人的工作。
而当代码执行切换到OnCalculate时,大小立即变成等于rate_total。
并且在数组的所有单元中都有 "垃圾"。也可能有旧指标计算的遗留物。
在OnInit中,指标缓冲区 的长度为零。
这就是为什么你可以对它们为所欲为,它们是一个致命的诱因。
而当代码执行传递到OnCalculate时,大小立即变成等于rate_total。
并且阵列中的所有单元格都有 "垃圾"。可能有一些是旧的指标计算遗留下来的。
非常感谢你,我都拿到了,而且成功了!是这样做的。
非常感谢你,这一切都解决了!我是这样做的。
为什么要给一个变量赋值两次?
还有一个问题:为什么我需要这一切?毕竟,通过循环中的所有条形,无论如何,数组的所有单元格都必须被填充一些东西。除非指标应该只显示当前的位置,但这样的话,数组 必须在每个柱子上被初始化,而不是只在开始的时候。
为什么要给一个变量赋值两次?
而问题是:我们为什么需要这一切?毕竟,通过循环中的所有条形,无论如何,数组的所有单元格都必须被填满东西。除非指标应该只显示当前的位置,但这样的话,数组应该 在每个柱子上都被初始化,而不是只在开始时。
在这个例子中,我只是想了解如何重置缓冲区。但在将来(在我现在正在做的指标中),我既需要保留以前的单元格,也需要添加新的单元格。就在这一点上,我开始了工作。可以说--第一次测试。
我不确定OnInit()是否模仿了图表的所有动作,例如改变taimfreims。改变了taimfreim的复位(现在检查过了),但也许还有别的原因,所以我把第二条放在OnInit()中以确定。但如果不是,那我就不放在那里了。
啊。嗯,是的,当图表周期 改变时,全局水平变量没有被初始化。? "我认为...记不清楚了。
一般来说,你可以不使用那个额外的bool变量。
而在一般情况下,你可以不使用这个额外的bool变量。
是的,没错,甚至更好,谢谢你。
你能告诉我,为什么如果周期超过30分钟,会返回这样一个奇怪的数字?
KP 0 14:33:22.423 Test_DRAW_COLOR_HISTOGRAM2 (EURUSD,M30)PERIOD: 30
GG 0 14:33:24.402 Test_DRAW_COLOR_HISTOGRAM2 (EURUSD,H1) PERIOD: 16385
RJ 0 14:33:25.675 Test_DRAW_COLOR_HISTOGRAM2 (EURUSD,H4) PERIOD: 16388你能告诉我为什么如果周期超过30分钟,它就会返回这样一个奇怪的数字?
在MT5中,周期值不等于分钟数,就像在MT4中。