MQL5中的OOP问题 - 页 29 1...222324252627282930313233343536...96 新评论 Igor Makanu 2019.09.06 00:11 #281 Dmitry Fedoseev: 是的,这里还有一个不断出现的问题,没有一个明确的答案。当你需要继承自己的类时--怎么做比较好,是继承它还是为你的类写一个新的扩展版本。 这一切都取决于你最终想要什么的总体想法,我认为 如果你打算在其他地方使用这个类,你需要让它在没有继承的情况下变得完整。 在我的例子中,CError类可以获得GetLastError(),取消描述并返回错误的值(int)。 我打算到处使用它,无论如何,它只有一个构造函数,在静态变量中定义语言和返回错误文本的案例 但还有一个有用的方法 - bool ServerDisable(); - 它定义了服务器的可用性(多平台MT4/МТ5代码),非常好的功能,它似乎需要在代码的其他地方,但我想,我将使用它的交易操作都一样 - 我把它放在COrder类中 ..... 如果我想把它用于拖尾?.... - 有很多想象的空间,但最终它将被用作COrder中的一个对象--它还能被用在哪里? 我认为,一切看起来都很麻烦,用链接器包含服务函数库更容易,而且编译器不会自己将未使用的部分包含到可执行文件中。 整个类将是相当紧凑的程序性风格,我展示了一个打开订单的函数的例子,它可以在静态常量中存储订单量https://www.mql5.com/ru/forum/85652/page17#comment_12805083。 Alexey Navoykov 2019.09.06 00:13 #282 Dmitry Fedoseev: 保持在限制范围内真的很重要吗?如果保持在限制范围内很重要,你也可以写函数。 我是在你的信息中回答的,你说如果你不使用类,你将不得不为不方便的调用签名而烦恼。 我表明你不必烦恼。 Igor Makanu 2019.09.06 00:15 #283 Alexey Navoykov: 是什么阻止了我将符号的名称发送到构造函数中,使该类灵活多变? 你不考虑组合交易的可能性,这是一个原则问题? 考虑到一切。 但到目前为止,我一直坚持研究--现在我几乎已经准备好研究1000和1种MM的方法以及订单系统的各种技巧了。) 但我仍然认为这最终不会太灵活,我已经在上面写了2次,程序化风格+小类的订单处理功能调整得好,会更好。 我将暂时转向测试我的想法,然后我将看到我在代码中经常编辑的内容和我不去碰的内容。 Dmitry Fedoseev 2019.09.06 00:15 #284 Igor Makanu: ..... 如果我想用它来跟踪呢?.... 有更多的想象空间,但最终它仍将作为COrder中的一个对象使用--它还能用在哪里? 尾巴是独立的,因为它们与主逻辑无关。它们可能存在,也可能根本不存在。 *** 尾巴和其他类似的维护功能应该被作为一个类的后代,它们的实例应该在一个数组中创建。如果一个函数被启用,一个实例被添加到数组中并被执行。如果所有的函数都被禁用,那么数组就是空的,不必要的ifs不会被执行。你可以在EA中插入至少100个尾随条,而且不会影响其执行速度。 Igor Makanu 2019.09.06 00:37 #285 Alexey Navoykov: 这不是做这件事的方法。你至少要同时调用Bid()和Ask()。 你的代码看起来只是一个变量,让人觉得它的值保持不变,而实际上它不是。 唉,一直以来都是这样做的,在MT4中仍然是买入价和卖出价,没有造物主的奇思妙想来破坏这种简单的使用和获得当前价格;) fxsaber: 我有以下方案,我没有遇到任何问题。 我写TC只是为了Tester。没有日志、错误处理程序和其他东西。如果通过OOP来完成的话,代码是非常简洁的,可以理解的,并且易于修改(但不是关键)。我已经把这个例子贴在KB上了。奖金是快速优化。 最主要的是,它应该供测试者使用,并在独立的区块中。交易信号的产生--一个街区。信号交易--另一个街区。 向真实账户的转账总是在几个相同的动作中完成。TS被放置在一个虚拟环境中,没有任何代码变化。几个TS可以放在一个环境中,或者每个TS放在自己的环境中,那么OOP就变得特别方便。然后我们用一台复印机(市场上到处都是复印机,所以人们很擅长复印机的逻辑),它只是把交易/订单从虚拟环境复制到真实环境。 有了这个方案,编写TS就变得快速而简单。转移到真实(这真的很罕见)总是以统一、快速和清晰的方式进行。 我们谈论的是这个代码吗?https://www.mql5.com/ru/code/22770 真的很喜欢这个实现,对于测试人员和优化人员来说真的很好,我可能会把它作为一个基础,代码很短,可读性很强,说实话,读你的代码我很惊讶,你的写作风格要复杂得多,我通常是即插即用,我知道我不能理解这个逻辑。 Alexey Navoykov 2019.09.06 01:14 #286 Igor Makanu: 唉,一直以来都是这样的,在MT4中仍然是买入价和卖出价,没有任何创造者的奇思妙想会破坏这种简单的使用和获得当前价格;) 但它们的值在当前事件处理 中是不变的(当然,除非你强行调用RefreshRates)。 所以它们是变量,而不是函数。 而你的函数看起来像变量 Renat Fatkhullin 2019.09.06 01:14 #287 给FP一个管理和处理数百兆字节或数千兆字节的数据阵列的真正任务,他们所有的童话般的信息模型(数据是不可改变的)都会变成地狱。 这些都是理论家,正好可以突破现实世界的任务,在他们虚构的宇宙中进行广播:)电信故事是笨蛋的数据传递。 事实上,对抗复杂性的唯一机会是将其打包到物体中。 Igor Makanu 2019.09.06 01:48 #288 Alexey Navoykov: 但它们的值在当前的事件处理 中是不可改变的(除非你强行调用RefreshRates)。 因此,它们是变量,而不是函数。 而你的函数看起来像变量 我甚至不知道如何解释你的例子中讨论的问题,我试着人性化地解释一下--对我来说,作为一个拥有第一台奔腾-90个人电脑的人,看到为了获得方便的使用,将增加一个额外的函数调用,这意味着将寄存器的值放在堆栈上,这让我很痛苦...然后...我们走吧。 我知道现在所有的东西都在处理器层面上反复缓存,我怀疑编译器开发人员会使 "从函数调用到函数调用 "的效率更高。 那么你的例子应该是这样的。 #define Ask(dummy) SymbolInfoDouble(_Symbol,SYMBOL_ASK) #define Bid(dummy) SymbolInfoDouble(_Symbol,SYMBOL_BID) void OnStart() { Print("Ask = ",Ask()); Print("Bid = ",Bid()); } 或者像这样。 #define Ask(symbol_) SymbolInfoDouble(symbol_,SYMBOL_ASK) #define Bid(symbol_) SymbolInfoDouble(symbol_,SYMBOL_BID) void OnStart() { Print("Ask = ",Ask(_Symbol)); Print("Bid = ",Bid(_Symbol)); } Vasiliy Sokolov 2019.09.06 10:17 #289 Dmitry Fedoseev: Vasiliy,这篇文章对你非常有用--不要为了OOP而挤掉OOP,折磨自己。 我有一个关于MT的功能框架的想法。那里几乎不会有OOP。只有函数、"单体 "和其他伪FP功能。我把所有的东西都写在引号里,因为在MQL中不可能做出全面的FP。 Fast235 2019.09.06 10:24 #290 Dmitry Fedoseev: 评论是不必要的。 你们并不那么喜欢对方,或者也许是相反的,两个同性恋者在为自己寻找出路)。 顺便说一下,我喜欢你的文章,专家的文章很蹩脚,很弱,但我同样喜欢他。 而且我不是同性恋。 1...222324252627282930313233343536...96 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是的,这里还有一个不断出现的问题,没有一个明确的答案。当你需要继承自己的类时--怎么做比较好,是继承它还是为你的类写一个新的扩展版本。
这一切都取决于你最终想要什么的总体想法,我认为
如果你打算在其他地方使用这个类,你需要让它在没有继承的情况下变得完整。
在我的例子中,CError类可以获得GetLastError(),取消描述并返回错误的值(int)。 我打算到处使用它,无论如何,它只有一个构造函数,在静态变量中定义语言和返回错误文本的案例
但还有一个有用的方法 - bool ServerDisable(); - 它定义了服务器的可用性(多平台MT4/МТ5代码),非常好的功能,它似乎需要在代码的其他地方,但我想,我将使用它的交易操作都一样 - 我把它放在COrder类中
.....
如果我想把它用于拖尾?.... - 有很多想象的空间,但最终它将被用作COrder中的一个对象--它还能被用在哪里?
我认为,一切看起来都很麻烦,用链接器包含服务函数库更容易,而且编译器不会自己将未使用的部分包含到可执行文件中。
整个类将是相当紧凑的程序性风格,我展示了一个打开订单的函数的例子,它可以在静态常量中存储订单量https://www.mql5.com/ru/forum/85652/page17#comment_12805083。
保持在限制范围内真的很重要吗?如果保持在限制范围内很重要,你也可以写函数。
我是在你的信息中回答的,你说如果你不使用类,你将不得不为不方便的调用签名而烦恼。 我表明你不必烦恼。
是什么阻止了我将符号的名称发送到构造函数中,使该类灵活多变? 你不考虑组合交易的可能性,这是一个原则问题?
考虑到一切。
但到目前为止,我一直坚持研究--现在我几乎已经准备好研究1000和1种MM的方法以及订单系统的各种技巧了。)
但我仍然认为这最终不会太灵活,我已经在上面写了2次,程序化风格+小类的订单处理功能调整得好,会更好。
我将暂时转向测试我的想法,然后我将看到我在代码中经常编辑的内容和我不去碰的内容。
.....
如果我想用它来跟踪呢?.... 有更多的想象空间,但最终它仍将作为COrder中的一个对象使用--它还能用在哪里?
尾巴是独立的,因为它们与主逻辑无关。它们可能存在,也可能根本不存在。
***
尾巴和其他类似的维护功能应该被作为一个类的后代,它们的实例应该在一个数组中创建。如果一个函数被启用,一个实例被添加到数组中并被执行。如果所有的函数都被禁用,那么数组就是空的,不必要的ifs不会被执行。你可以在EA中插入至少100个尾随条,而且不会影响其执行速度。
这不是做这件事的方法。你至少要同时调用Bid()和Ask()。 你的代码看起来只是一个变量,让人觉得它的值保持不变,而实际上它不是。
唉,一直以来都是这样做的,在MT4中仍然是买入价和卖出价,没有造物主的奇思妙想来破坏这种简单的使用和获得当前价格;)
我有以下方案,我没有遇到任何问题。
我们谈论的是这个代码吗?https://www.mql5.com/ru/code/22770
真的很喜欢这个实现,对于测试人员和优化人员来说真的很好,我可能会把它作为一个基础,代码很短,可读性很强,说实话,读你的代码我很惊讶,你的写作风格要复杂得多,我通常是即插即用,我知道我不能理解这个逻辑。
唉,一直以来都是这样的,在MT4中仍然是买入价和卖出价,没有任何创造者的奇思妙想会破坏这种简单的使用和获得当前价格;)
但它们的值在当前事件处理 中是不变的(当然,除非你强行调用RefreshRates)。 所以它们是变量,而不是函数。 而你的函数看起来像变量
给FP一个管理和处理数百兆字节或数千兆字节的数据阵列的真正任务,他们所有的童话般的信息模型(数据是不可改变的)都会变成地狱。
这些都是理论家,正好可以突破现实世界的任务,在他们虚构的宇宙中进行广播:)电信故事是笨蛋的数据传递。
事实上,对抗复杂性的唯一机会是将其打包到物体中。但它们的值在当前的事件处理 中是不可改变的(除非你强行调用RefreshRates)。 因此,它们是变量,而不是函数。 而你的函数看起来像变量
我甚至不知道如何解释你的例子中讨论的问题,我试着人性化地解释一下--对我来说,作为一个拥有第一台奔腾-90个人电脑的人,看到为了获得方便的使用,将增加一个额外的函数调用,这意味着将寄存器的值放在堆栈上,这让我很痛苦...然后...我们走吧。
我知道现在所有的东西都在处理器层面上反复缓存,我怀疑编译器开发人员会使 "从函数调用到函数调用 "的效率更高。
那么你的例子应该是这样的。
或者像这样。
Vasiliy,这篇文章对你非常有用--不要为了OOP而挤掉OOP,折磨自己。
我有一个关于MT的功能框架的想法。那里几乎不会有OOP。只有函数、"单体 "和其他伪FP功能。我把所有的东西都写在引号里,因为在MQL中不可能做出全面的FP。
评论是不必要的。
你们并不那么喜欢对方,或者也许是相反的,两个同性恋者在为自己寻找出路)。
顺便说一下,我喜欢你的文章,专家的文章很蹩脚,很弱,但我同样喜欢他。
而且我不是同性恋。