错误、漏洞、问题 - 页 1658

 
Alexey Volchanskiy:

不管是什么问题,调用任何函数都要比访问堆栈上的一个变量慢,在这个例子中就是nType。

不管这种明显性如何,问题是关于内联函数。也就是说,OrderType()在编译时没有被order.type这样的东西取代。

就我个人而言,我总是对这样的MQL函数调用进行 缓存,就像你的第二个案例。

正如测量结果显示的那样,这是没有必要的。

 
Sergei Vladimirov:

不管这种明显性如何,问题是关于内联函数。也就是说,在编译时,OrderType()是否没有被order.type这样的东西取代。

正如测量结果所示,这是没有必要的。

数组的内部实现 来看,相同的ArraySize必须是内联的。但我总是这样使用(我没有测量过)。

而不是

for (int i = 0; i < ArraySize(Array); i++)

我使用

const int Amount = ArraySize(Array);

for (int i = 0; i < Amount; i++)
在性能方面,我最近对这个事实感到惊讶

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

我怎样才能持续地通过列举?

fxsaber, 2016.08.22 09:13

在阵列中添加了静态。它的工作速度几乎比开关快三倍!扔掉这样的开关。谢谢你的提示!
因此,似乎最好不要依赖编译器的优化,而总是通过最小的函数调用来 "帮助 "它,并在所有可能的地方使用常量和静态的逻辑。
 
Sergei Vladimirov:

不管这种明显性如何,问题是关于内联函数。也就是说,在编译时,OrderType()是否没有被order.type这样的东西取代。

正如测量结果所示,这是没有必要的。

你自己写的。

Sergei Vladimirov2016.09.01 02:53 RU

我自己检查过了。第二段代码的运行速度快了4倍。这一切都很清楚,这个问题已经不存在了。

 
Sergei Vladimirov:
我自己测试了一下。第二段代码的运行速度是原来的四倍。一切都很清楚,问题已经消除。
不要只在分析/调试模式 下测量。那里根本就没有内联。只有Release-version应该在那里。
 
Inv Андрей Иващенко:

下午好!

各位官员,你们能告诉我从哪里开始抓虫吗?

多币种专家顾问。在第一笔交易之后,测试者就会停止。

出了一个错误,我找不到它的代码。

是的,测试器从启动日期2016.05.01开始工作正常。如果我改变这个日期--测试器停止,并出现错误,日志如下。

请提供帮助!

对自己的答复。

这是测试器的一个错误。现在你需要在OnInit中把任何技术指标 的手柄添加到专家顾问工作的所有符号上。

 
Alexey Volchanskiy:

你自己写的。

Sergei Vladimirov2016.09.01 02:53 RU

我自己检查过了。第二段代码的运行速度快了4倍。这一切都很清楚,这个问题已经不存在了。

在接下来的评论中,我写了数字:单次操作的增益是1纳秒。当按两年的时间和几千次的运行来优化一个策略时,节省一个N可能是有意义的。但在实际交易中...
 
A100:

在构建1398中,"EX5加载失败 "的错误仍然存在(显然与该例子无关)。

在固定版本中,类似情况下的1400个错误现在被重现为 "纯虚拟函数调用"。而没有评论就可以了

//Script1.mq5
typedef void (*fn)();
#import "Script2.ex5"
        void g( fn );
#import
void h() /*export*/ {} //если export без комментария - нормально
void OnStart() { g( h ); }
//Script2.mq5
#property library
typedef void (*fn)();
void g( fn f ) export { f(); }
 

不能适用 :: 以解决模糊不清的问题


#import "Script1.ex5"
        void g();
#import "Script2.ex5"
        void g();
#import
typedef void (*fn)();
void OnStart()
{
        Script1::g(); //нормально
        Script2::g(); //нормально
        fn f = Script1::g; //Error
}
 
Inv Андрей Иващенко:

回答我自己。

这是测试器的一个错误。现在,你需要在OnInit中为所有符号添加任何技术指标 的句柄,专家顾问在其中工作。

而且似乎问题发生在只获得新条形上的第一个刻度时,测试者似乎 "卡住了",落后一个条形,也就是说,EA认为条形不存在,在可视化中它确实不存在,但几秒钟后条形出现了,在M1上测试的情况下,正确的值出现在第二个刻度上(如果我理解正确),我希望开发人员会尽快解决这个令人讨厌的时刻...

另外。

事实证明,为了规避这个时刻,现在你必须人为地跳过新条形图的第一个刻度......。

 
无法通过CTRL+F5在RTS-9.16 BCS-MetaTrader5上对EA进行调试。测试人员写道
Tester  Leverage 1:1 set error