PLO - 页 2

 
Interesting:

事实上,如果采用正常的方法,在MQL5中实现的OOP(连同终端本身的资源)将使速度大大增加。

你指的是什么操作速度,是程序的速度还是其写入的速度?

 
Integer:

OOP并不能提高性能。它有一些好处--例如,如果有一些带有一些参数的函数被调用(例如,EMA计算),在函数中使用一个静态变量来存储之前的EMA值。由于该函数存储了最后的数值,并将在此基础上进行计算,因此在下一次调用该函数 时,不能用其他参数(符号、时间框架、平滑期)来调用,因此如果需要用不同的参数来调用该函数,有必要用不同的名称来复制它,或使用通过引用传递的全局变量,而不是静态变量。这是唯一一种使用对象更方便的情况--你加载一个对象实例,设置其参数,然后调用不带参数的方法。如果对象包括一些方法,这些方法的执行不依赖于以前的执行,或者一般来说,不依赖于加载对象的任何参数,那么除了消耗资源之外,它不会产生任何问题。

确实如此,确实如此,真的如此。但这一切都取决于经验、想象力和程序员手的弯曲程度(按顺序)......:)

事实上,即使假设OOP(用最糟糕的方法)不增加运行时间,或者增加得不明显(尽管我个人怀疑增加10倍可以被认为是不明显的),它对理解开发者来说仍然比OOP所有可能的缺点更有用。

问题是,如果MQL5包含OOP,它将在某种程度上促进模块化(单元)编程方法的发展,这在MQL4中是看不到的(除了库)。这是由于将结构、类或它们的组放在单独的文件(模块)中,并在必要时使用它们是很方便的。

另外,由于抽象、封装、继承和多态性,使用类将允许对准备好的块(模块)进行调试,而不是考虑它们的内容,以便在自己的工作中使用它们。

同时,OOP的使用应该会提高交易系统中使用外部DLL和其他软件调整的水平和便利性。

与库的使用相结合,这将使开发人员的生活轻松十几倍,也大大加快了相当复杂的EA的开发。

 
Integer:

你指的是什么运行速度,是程序运行的速度还是写入的速度?

两者都是。关于开发速度的细节写在上面(当然,如果你有一些开发和使用类的经验,这一切都很有意义)。
 
Interesting:

确实如此,确实如此,确实如此....

谁告诉你的?这不是真的。其他都是正确的。

 
Integer:

谁告诉你的?这不是真的。其他都是正确的。

我再重复一遍--它增加,它增加,它增加多少。但这一切都取决于经验、想象力和程序员的手的弯曲程度(按这个顺序)......

曾几何时,我在比较我的EA的初始化速度,除了一些小细节,程序代码是相同的(在MQL5中使用了迁移库)。而事实证明,MQL5的初始化平均快2.5倍。

当然,我知道这不是一个指标,但我仍然相信,即使现在使用正确的方法,MQL5的速度也会快10倍。

你可以永远争论下去,但试着实现OnTrade() OnChartEvent,一切都会变得清晰。但除了这些东西,还有很多其他的 "好东西"......

PS

当然,策略测试器和指标也有速度问题。但随着时间的推移,这些缺点将被终端的开发者或交易专家顾问的作者所消除。

此外,MQ不止一次表示,程序代码执行的最大速度还没有出来(据我所知仍然如此)......

 
增加了...增加了...剩下的就是手拿铃铛,身穿袍子,按照咒语的调子唱出来。MQL5比MQL4快,不是因为它支持对象。
 
Integer:
增加了...增加......你最好手拿铃铛,穿上连衣裙,把它唱成咒语。

Integer:
MQL5比MQL4快,不是因为它支持对象。
但是,在大多数情况下,它仍然更快。在我看来,在处理对象 的速度方面,将MQL5MQL4(或任何其他编程语言)进行比较是不合适的。
 

使用GetTickCount()函数,我测试了有和没有OOP 的类似专家顾问。

测试my_oop_ea ( 用OOP )

RJ 0 核心 1 15:12:15 测试时间 =115203

EO 0 Core 1 15:12:15 EURUSD,H1: 6124935 ticks (3052 bars) generated within 115203 ms (tab total bars in history 9199)

RP 0 核心 1 15:12:15 断开连接


My_First_EA测试 (不含OOP)

RH 0 Core 1 15:18:54 测试时间 =90578

CR 0 Core 1 15:18:54 EURUSD,H1: 在90578毫秒内产生6124935点(3052条)(历史总条数9199)。

0 核心 1 15:18:54 断开连接


差异很小,但并不有利于OOP。而在优化的情况下,如果我理解正确的话,这个差异要乘以运行次数。

我已经为自己得出了结论。

我还比较了MT5(带OOP)和MT4的标准MACD样本EA。

Macd样本MT5

FO 0 Core 1 18:03:21 测试时间 =126016

FD 0 Core 1 18:03:21 EURUSD,M1: 6124935 ticks (181129 bars) generated within 126016 ms (tab total bars in history 545615)


Macd样本MT4

18:12:52 2010.06.30 23:59 MACD样本EURUSD,M1: 时间测试=64406

结果是惊人的--采用OOP的MT5和MQL不仅吃资源,也吃时间。

 

在测试不同的MT4和MT5平台时,你不能专门对OOP得出结论。结果的差异有90%是由于不同的系统结构造成的。

这篇文章已经用上述方法完成。 此外,MQL5中的代码优化器暂时被禁用--我们正在对其进行微调。当它被启用时,结果将立即改善许多倍。

昨天发表了一篇比较MQL4和MQL5速度的文章--我推荐你阅读。

移动平均线性能的MQL5分析 已经出版。

自从第一个简单移动平均线指标诞生以来,已经出现了很多不同的指标。他们中的许多人都是基于类似的原则,或在计算中使用某些价格序列处理方式。然而,这类指标的计算速度和其中使用的算法的优化问题往往仍未得到解决。本文介绍了使用移动平均线的所有可能选择,并对每一种选择进行了比较分析。

作者: Sergey

 


一个有另一个参数的函数显然更慢。真的只是因为参数的原因吗?

附加的文件:
test.mq5  2 kb
原因: