标准功能/方法的其他实现方式 - 页 2

 
Renat Fatkhullin:

到2016年,大多数C++编译器已经到达了相同的优化水平。

MSVC每次更新都会让人怀疑它的改进,而Intel C++作为一个编译器已经合并了--它仍然没有从它在大型项目上的 "内部错误 "中恢复过来。

我们在1400版编译器中的另一项改进是,它在编译复杂项目时速度更快。

如果不是这个对话,我们可能不会知道它。希望能有更多关于你们所做的伟大工作的信息。
 
fxsaber:

关于主题。你必须创建标准函数的替代品,因为它们有时会给你错误的输出。下面是一个SymbolInfoTick的替代例子

你可以在测试器中的每个事件NewTick 上调用SymbolInfoTick,并将Volume-field相加以了解股票的成交量。但是,不,你不能这样做。我必须做出更合理的MySymbolInfoDouble。

欢迎来到编程,在这里你就是创造者

我们给你最完整的工具,在那里你可以做任何你想做的事情。

 
Renat Fatkhullin:

你可以优化你周围的一切。

这是一个无止境的过程。但99%的时候,这在经济上是不可行的。

我们在这里谈论的不是优化,而是将旧的功能带到新的现实中。当然,你完全可以不写NormalizeDouble。而人们会做出自己的变体。但你创建它是为了节省时间。现在还不够。而修复旧自行车以满足相同的库存工具也是不错的。
 
fxsaber:
这不是优化,而是将旧的功能带入新的现实。很明显,你完全可以不写NormalizeDouble。而人们会做出自己的变体。但你创建它是为了节省时间。现在还不够。而修复旧自行车以满足相同的库存工具也是不错的。
谢谢,我们会检查一下,看看是否可以改变库的内容。
 

顺便说一下,不久前@iliyas 建议在编译时插入大量的系统函数作为MQL5的源代码,这样他们就可以参与内联和最大限度的优化。

我起初并不欣赏这个想法,但现在我发现这将是非常出色的。同样的MSVC也是这样做的。

 
Renat Fatkhullin:
谢谢,我们会检查一下,看看是否可以改变库的内容。

你误解了。不是库,而是NormalizeDouble。要增加一个过载。

double NormalizeDouble( double Value, double TickSize );

当TickSize = 25, VolumeStep = 0.5时,对价格和手数进行规范化处理。

例如,规范化后的结果是这样的

NormalizeDouble(Price, 0.00001) // Нормализация до пятого знака
NormalizeDouble(Price, 10.0) // Нормализация цены для RTS-9.16
NormalizeDouble(Price, 25.0) // Нормализация цены для MIX-9.16
 
Renat Fatkhullin:

顺便说一下,不久前@iliyas 建议在编译时插入大量的系统函数作为MQL5的源代码,这样他们就可以参与内联,最大限度地优化。

我当时并不欣赏这个想法,但现在我看到,这将是很好的。同样的MSVC也是这样做的。

事实证明,#import ex5是优化的邪恶。

请注意预处理程序的特点

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

我如何按顺序列举?

Alexey Navoykov, 2016.09.01 23:20

我已经实现了上面的方法,在MQL5中使用固定参数数并不难,因为宏的数量被限制为8个。 所以我只有3个值的枚举。

至于理论上的外观,创建一个内部函数来解析枚举可能会更快。 开发人员已经承诺会创建一些东西。


事实证明,可以创造出非常狡猾和用户友好的结构。

 
fxsaber:

你误解了。不是库,而是NormalizeDouble。要增加一个过载。

当TickSize = 25, VolumeStep = 0.5时,对价格和手数进行规范化处理。

例如,规范化后的结果是这样的

你不能以这种方式超载。相同的函数签名。

但这个想法是明确的,即考虑到蜱粒化的正常化功能。

 
Renat Fatkhullin:

你不能以这种方式超负荷工作。相同的函数签名。

那里似乎没有什么问题。在一个变体中,第二个参数是int(曾经),在另一个变体中是double(将出现)。

但是,这个想法很清楚--考虑到蜱粒化的规范化功能。

正是如此!
 

fxsaber

你的代码中存在一个错误