错误、漏洞、问题 - 页 2753

 
Alexey Navoykov:
在C#中,const 指定符只用于在编译阶段计算的常量表达式,而C++有一个类似的东西:constexpr,而MQL则没有

这通常是一个语言的句法结构的问题

在自然语言中,常数是...嗯,这是一种常态!))

在C++中,常量是由编译器在变量的范围(或生命周期)内对常量进行的机器检查

在C#中,常量有一个语法意义,它更接近自然语言的规则


而这正是本次讨论的内容。

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

我认为,这种结构完全符合C++语法,至少MQL4有Bid和Ask,没有人质疑这是否合理。




我们需要尽可能快地访问当前价格 的可能性。 分析器显示,永久访问SymbolInfoDouble()和SymbolInfoTick()会降低优化速度

 
Mihail Matkovskij:

我怎样才能改变编译器?

我发现,从900版本开始,编译器就内置于MetaEditor中:https://www.mql5.com/ru/forum/21374

那么为什么会出现一个窗口,上面有一行通往安装VS的目录?

编译器

Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
Обратите внимание, что компилятор переехал внутрь MetaEditor, начиная с 900 билда
  • 2014.03.01
  • www.mql5.com
Консольный компилятор MQL4/MQL5 остался, обновляется вместе с платформами МетаТрейдер 4/5 и всегда доступен по ссылкам:.
 
Igor Makanu:

在不妖魔化的情况下,我们需要尽可能快地访问当前价格。 分析器显示,不断调用SymbolInfoDouble()和SymbolInfoTick()会降低优化速度

好吧,这里就是之前建议的增加传递NULL而不是当前符号名称的能力。一般来说,我们需要通过句柄访问,而不是符号的文本值。 但我认为开发者不太可能去做这样的复杂工作。 这个问题似乎很牵强。

在上述测量中,成本只占测试者空闲运行(无负载)的6%。 而在工作代码中,它将是一个数量级的减少。 不值得关注这些琐事,在处理程序中多次调用这些函数本身就是一个错误的决定。

 
Alexey Navoykov:

早些时候,有人建议增加传递NULL而不是当前符号名称的 可能性。但在一般情况下,我们需要通过句柄来访问,而不是字符的文本值。 但我认为开发人员不太可能去做这种复杂的事情。 而且在我看来,这不值得。 这个问题相当牵强。

它已经工作了,但没有加速(我检查过)--显然所有的东西都已经被最大限度地加速了,或者相反--对于加速来说,还有很长的路要走(请问开发者下划线)。

 
A100:

因此,为了严格起见,我们应该使用Digits()而不是_Digits。那么从形式上看,并没有发生逻辑上的矛盾--Digits()不受const修饰语的约束。

据我所知,_Digits是为了与MT4兼容而需要的,仅此而已。

关于交易、自动交易系统和策略测试的论坛

虫子,虫子,问题

伊利亚斯, 2020.05.20 15:39

调用Symbol()总是访问全局变量_Symbol,以及Digits(), Point(), Period(), GetLastError(), IsStopped(), UninitializeReason()

 
Mihail Matkovskij:

在调试过程中,当指标自己工作时,在日志中,它突然写下了堆栈溢出。当自己调试时,弹出 "发生关键错误,调试停止 "的信息。这是我的类似主题:https://www.mql5.com/ru/forum/338301。 但在编译过程中,编译器并没有责骂,一切都很顺利。调试时,不可能确定程序在哪一点上崩溃。

也许是编译器的问题?我对我使用的编译器并不感兴趣,但在我的设置中,它看起来是这样的。

我安装了VS,所以我在设置里有这个链接。那么编译器也是合适的...?但是,在我没有VS的时候,有什么编译器,说实话,我没有去研究它。也许我应该试着回到那个编译器,试着用它来编译项目?

当我在寻找解决问题的方法时,随着另一个终端更新的到来,调试工作正常了。我设法找到了错误。一些方法在循环,并自己调用。这就是为什么程序崩溃时出现了 "堆栈溢出 "的信息。但在工作调试器的帮助下,我已经成功地找到了所有有问题的行,并将其修复。我对开发人员通过调试快速修复该错误表示感谢!

 

в естественном языке (в математике) константа это... ну как бы константа! ))

在C++中,常量是由编译器对一个变量的范围(或生命周期)内的常量进行的机器检查。

在C++以及MQL中,常量可以在创建时被定义一次,并且不再被改变。瞄准镜与此毫无关系。

这与数学中的情况没有什么不同。


 
Mihail Matkovskij:

我发现,从900版本开始,编译器就内置于MetaEditor中:https://www.mql5.com/ru/forum/21374

那么为什么这个窗口有一行通向安装VS的目录?


如果你写的是DLL,就会使用VS编译器。

 
fxsaber:

这再次证实了直接使用_Digits,_Point , _Period, _LastError等没有意义(甚至_Symbol也可以用NULL代替)。事实上,它们必须被声明为const volatile

而你,恰恰相反,建议增加

 
A100:

这再次证实了直接使用_Digits,_Point , _Period, _LastError等没有意义。甚至_Symbol也可以用NULL代替。

而你,恰恰相反,提出要补充这个系列。

关键是有可能通过引用来传递。