错误、漏洞、问题 - 页 2751

 
Igor Makanu:

这是一种悖论,可以访问_Symbol ....。但无法访问

const MqlTick _Tick; // Текущий _Symbol-тик.

尽管MQL被定位为一种用于开发交易策略的语言

_Symbol是一个常数,这就是为什么它没有问题(尽管调用Symbol() 更正确)。 Tick是一个变量,你如何想象它被声明为const,但它的值会改变?

 
Alexey Navoykov:

你把它声明为常量,但它的值却发生了变化,这是怎么回事?

唉,我就像你一样......同样是理想主义者,对他来说,用VS C#来写更符合逻辑,更容易理解--在那里,编译器不允许在编译前将常量的逻辑概念与C++的机器检查分开。

毫不犹豫地提出问题

https://www.mql5.com/ru/forum/1111/page2680#comment_15546412


重点是--这都是C++的逻辑;)

 
Alexey Navoykov:

你不需要这个***。_Symbol是一个常数,所以没有问题(尽管调用Symbol() 更正确)。

为用户编写有什么问题?

const string _Symbol = ::Symbol();

而tick是一个变量--你怎么想象它被声明为const,但它的值会改变。

MT4中的买入/卖出。当然,RefreshRates()也在那里。


最近刚刚发现一个符号,上面的数字设置不正确。我要求我的经纪人纠正它。他随手就做了。没有看是否改变了变量_Digits和Digits()的值。但仅仅是符号可以随心所欲地改变其数值这一事实。

 
亲爱的开发者,有没有可能让图表窗口看起来像其他窗口一样,就像在WIN 10中一样?另外,也有可能将图表窗口框架和一般的终端框架 "重绘 "为黑色。
例如,根据不同的颜色方案。
 
Igor Makanu:

唉,我就像你一样......我也是一个理想主义者,我觉得用VS C#来写更符合逻辑,更容易理解--那里的编译器不允许在编译前将常量的逻辑概念与C++的机器检查分开。

毫不犹豫地提出问题

https://www.mql5.com/ru/forum/1111/page2680#comment_15546412

在第一种情况下,你有一个静态变量,而不是一个类成员,所以常量与它没有关系。

 
Alexey Navoykov:

你不需要这个***。 _Symbol是一个常数,所以没有问题(尽管调用Symbol() 更正确)。 Tick是一个变量。 你如何想象它被声明为const,但它的值会改变。

你把来自MQL方面和来自内核方面的不变性混在一起。用const修饰符声明一个结构的本质是MQL代码不能修改它。以此类推,你可以描述一个const类的方法,在这个方法中阻止对象的变化,但并不意味着对象本身不能通过其他条件改变其状态。

 

为什么我不能在可视化模式下看到测试器中的全局 终端变量(当然是仿真的)?

全局性的终端变量在测试器中到底能不能用?

Документация по MQL5: Основы языка / Переменные / Глобальные переменные
Документация по MQL5: Основы языка / Переменные / Глобальные переменные
  • www.mql5.com
Глобальные переменные создаются путем размещения их объявлений вне описания какой-либо функции. Глобальные переменные определяются на том же уровне, что и функции, т. е. не локальны ни в каком блоке. Область видимости глобальных переменных - вся программа, глобальные переменные доступны из всех функций, определенных в программе...
 
Andrey Dik:

为什么我不能在可视化模式下看到测试器中的全局 终端变量(当然是仿真的)?

全局性的终端变量在测试器中到底能不能用?

这一直都是可能的(F3)。他们的工作。

 
Alexey Navoykov:

在第一种情况下,你有一个静态变量的变化,而不是一个类成员,所以常量与它完全没有关系。

这个脚本应该返回sum = 0吗?

还是说这个脚本甚至应该返回一个编译错误

void OnStart()
{
   int sum = 0;
   for(int i = 0; i < 3 ; i++)
   {
      const int j = f(i);
      sum += j * i;
   }
   printf("sum = %i", sum);
}
//+------------------------------------------------------------------+
int f(int v)
{
   return(v);
}
//+------------------------------------------------------------------+
 
Igor Makanu:

这个脚本应该返回 sum = 0 吗?

或者这个脚本甚至应该返回一个编译时错误

在你写荒谬的语句之前,至少要运行一个调试器。
在第二个循环中,i==1,j==1,在第三个循环中,以此类推,都是多了一个。