[存档]任何菜鸟问题,为了不使论坛变得杂乱无章。专业人士,不要路过。没有你就无处可去 - 3. - 页 82

 
wolf05632:

谢谢你,但它对我不起作用。我不需要偏移。上面我写道。假设对于第一支蜡烛buffer[1]=Hight[1],对于第三支buffer[3]=Hight[3],对于第二支我们需要计算:buffer[2]=MathAbs(Higth[1]-Hight[3])/2,得到图片中我想要的结果。
还有,你不喜欢我的变体是什么?:))这要简单得多,也不复杂。或者你需要,在一个缓冲区内保持每个柱状的值?
 

wolf05632:

SZY: 我怎样才能使一个指标工作,即只在某个时间框架(H1)上进行计算(它工作,不可见)?

你必须将计算与当前的时间框架无关,而是与H1捆绑在一起!:))即不要使用数组Open[], Close[], High[], Low[], Time[],而是使用带有相关参数的函数iOpen(), iClose(), iHigh(), iLow(), iTime()...
 
MaxZ:
你为什么不喜欢我的版本?:))简单得多,计算量也少。还是说你想在每个条形图上保持缓冲区的数值?

我试过了,谢谢你,但没有用。我无法让它显示在图表上。我可能误解了什么。我唯一理解的主要内容是:缓冲区中的元素必须按顺序进行(1,2,3...),即没有任何空隙(1,3,5...),而且缓冲区中的每一个!元素都必须有一个分配的值!"。:-)
 

罗曼,谢谢你的答复.....不幸的是,我仍然不明白一件事。在教科书中,https://book.mql4.com/ru/basics/expressions,在"类型方法"下。方案4.1.计 算一个整数类型的结果

变体4.2。 如果我们寻找一个实数类型的结果,也会出现类似的情况",给出了同样的公式,但在一种情况下,变量F的类型被指定为int。

   double A = 2.0;                      // Количество карандашей у Васи
   int    Y = 3;                        // Количество ответов Пети
   int    F = A + Y;                    // Общее количество

而在第二个例子中,该变量是双倍的

   double A = 2.0;                   // Количество карандашей у Васи
   int    Y = 3;                     // Количество ответов Пети
   double F = A + Y;                 // Общее количество

不幸的是,我仍然不理解这种转换的逻辑。如果在第一个变体中,很清楚为什么int被分配给了变量F(即根据隐式类型转换规则),那么在第二个变体中为什么double....?完全让我困惑。

请澄清我在这里的解释中可能遗漏了什么?

预先感谢你。

 
wolf05632:

我试过了,谢谢你,但没有用。它在图表上没有显示任何东西。也许我误解了什么?

你是复制了整个代码还是只复制了start()函数中的内容?这很重要!

wolf05632:

我唯一理解的最重要的事情是:缓冲区中的元素必须一个接一个(1,2,3...),即没有空隙(1,3,5...),而且缓冲区中的每一个元素都必须有一个分配给它的值!这一点很重要。:-)
你搞错了!:))例如,"之 "字形并没有填满缓冲区的所有元素。另外,你不必为图标填充所有的缓冲区元素。
 
Geowind64:

罗曼,谢谢你的答复.....不幸的是,我仍然不明白一件事。 在教科书中,https://book.mql4.com/ru/basics/expressions,在 "类型方法 "下。方案4.1.计 算一个整数类型的结果

变体4.2。 类似的情况发生在寻找一个实数类型的结果时",给出了同样的公式,但在一种情况下,变量F的类型被表示为int

而在第二个例子中,该变量已经是一个双数了

不幸的是,我仍然不理解这种转换的逻辑。如果在第一种变体中,很清楚为什么int被分配给变量F(即根据隐式类型转换规则),那么在第二种变体中,为什么他们要分配double....?是完全迷惑了我。

请解释我在解释中可能遗漏了什么。

提前感谢。



n


interanger类型是一种可重复的类型,可重复的变量类型有更大的范围,所以表达式中的变量不可能 "有可能 "是不同的类型,其结果是变量的接受值范围较窄,在这种情况下是interanger类型。也就是说,如果一个表达式中至少有一个变量是duble类型,那么结果必须也可以在duble的范围内,否则就会出现一个编译时错误--类型不匹配。

详情请见这里

 
Roman.:


整数是一种可重复的类型,而可重复的变量具有更广泛的范围,所以表达式中的变量不可能 "有可能 "是不同的类型,其结果是变量具有较窄的接受值范围,在这种情况下是整数类型。也就是说,如果一个表达式中至少有一个变量是duble类型,那么结果必须也可以在duble的范围内,否则就会出现一个编译时错误--类型不匹配。

更多细节,请看这里


我经常使用隐式类型转换。但我必须使用不必要的括号。
 

伙计们,#INF 是什么意思--它是否超出了双倍数的允许范围? 计算TWR变量所取的THOSE值的正确方法是什么?

 
Geowind64:

如果你仔细阅读教科书的这一部分,你会发现你必须首先看一下赋值"="左边的表达式。

   A + Y

根据该规则。

  • 如果赋值符号右边的表达式的类型与赋值符号左边的变量的类型不一样,那么表达式的值将被转换为赋值符号左边的变量的类型;这被称为目标类型转换。

A是左边的一个双数类型的变量,所以A+Y的值是一个双数类型的数字。

接下来,注意表达式被分配到的变量类型。

在第一种情况下。"首先表达式A+Y的类型将被转换为int类型(根据整数的计算规则),然后这个结果将成为整数变量F的值"。

在第二种情况下。"变量F的目标类型(在赋值操作符号的左边),在这种情况下是双倍类型,与表达式A+Y的双倍类型相同,所以没有发生目标类型转换"。

解释一下?:)))

 
Roman.:

伙计们,#INF 是什么意思--它是否超出了双倍数的允许范围? 如何正确计算TWR变量所取的THOSE值?

一般来说,INFINITY (简称INF )就是无限大!:))是的,事实证明,双倍缺乏力量(内存)来存储如此巨大的数字。

而如何正确计算,我只能猜测......创建自己的类型,有条件地:在额外的变量中存储数字容量,双倍乘以10^n,其中n是数字容量。但在这种情况下,准确性就会丧失,而且我看到你的准确性越来越差了......。

但改变计算的逻辑可能更简单?:)))也可能在某处有错误。