新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 73

 
Alexey Viktorov:
Artem,你错了。在全局层面上声明的数组在程序的所有部分都是可见的,没有必要从某个地方传递它。你只是在程序中的一个地方填写,在另一个地方分类,在第三个地方阅读,这并不重要。

同一函数可以成功地对不同数组中的数据进行排序和/或搜索。对吗?如果是这样,最好通过引用来传递数组--为了将来。而在调用该函数 时,看看它能与什么数组一起工作也无妨。

我只是在做这些考虑。我哪里错了?

 
Artyom Trishkin:

同一函数可以成功地对不同数组中的数据进行排序和/或搜索。对吗?如果是这样,最好通过引用来传递数组--为了将来。而在调用该函数 时,你也应该能够看到它所要处理的数组。

我只说对了这一点。错在哪里?

明白了。你的建议是给乐高程序员的。你自己不做这种变态的事。

这就留下了一个问题,那就是数组必须全局声明。

我很高兴我们能理解对方。

 
Alexey Viktorov:

明白了。你的建议是给乐高程序员的。你自己不做这种变态的事。

那么还有一件事,关于数组必须全局声明的问题是错误的。

很高兴我们互相理解。

在这种情况下,我的观点是这样的。

  1. 我们需要尽可能地实现每个勾的循环次数少。
  2. 我们希望有一个包含市场订单和头寸数据的恒定数组和一个包含删除/关闭订单和头寸数据的数组。
  3. 如果我们把数组放在本地的一个函数中,反复调用它就需要再次填充它。我建议在一个新的刻度线上只填充一次--所以数组是全局的,否则在退出函数时我们会失去它。
  4. 为了在其中(在数组中)找到一些东西,我们需要一个填充的数组和将返回找到的数据的函数。在函数中,我们可以声明辅助数组以进行必要的计算。

出于这个原因,最好有全局数组--用于平仓和开仓的订单和头寸。在一个新的tick上,我们一次性传递必要数量的订单/位置,用它们填充两个数组。然后我们在同一时间从他们那里获得所有必要的数据。请注意,不仅要计算最后的平仓/开仓订单/仓位及其所有数据,而且在部分平仓的情况下,还要搜索所有仓位的所有父、子刻度。因此,在任何时候我都可以看到哪个票据来自一个或另一个位置,如果它已经被部分关闭了不止一次--所有这些都已经在一个在计时器中运行的类中工作了。我有许多其他需要的数据,总周期数不多。数组所需的历史深度是为测试者设置的。

以此类推......。

 
Artyom Trishkin:

在这种情况下,我的观点是这样的。

  1. 我们需要尽可能多地获得每一个刻度的周期。
  2. 我们需要有一个包含市场订单和头寸数据的恒定数组和一个包含删除/关闭订单和头寸数据的数组。
  3. 如果我们把数组放在本地的一个函数中,反复调用它就需要再次填充它。我建议在一个新的刻度线上只填充一次--所以数组是全局的,否则在退出函数时我们会失去它
  4. 为了在其中(在数组中)找到一些东西,我们需要一个填充的数组和将返回找到的数据的函数。在函数中,我们可以声明辅助数组以进行必要的计算。

出于这个原因,最好有全局数组--用于平仓和开仓的订单和头寸。在一个新的tick上,我们将必要数量的订单/位置 传递一次,用它们填充两个数组。然后我们在同一时间从他们那里获得所有必要的数据。请注意,不仅要计算最后的平仓/开仓订单/仓位及其所有数据,而且在部分平仓的情况下,还要搜索所有仓位的所有父、子刻度。因此,在任何时候我都可以看到这个或那个位置是什么票,如果它已经被部分关闭了不止一次--所有这些都已经在一个在定时器中运行的类中工作了。我有许多其他需要的数据,总周期数不多。对于测试者来说,所需的历史深度是为数组设置的。

以此类推......。

所以我们不大理解对方。

如果数组是全局的,如果它在这个函数中已经是可见的,为什么还要通过引用把它传给一个函数?

 
Alexey Viktorov:

所以我们并不真正了解对方。

如果数组是全局的,如果它在这个函数中已经是可见的,为什么还要通过引用把它传到一个函数中?

函数重载--有这样一个概念;)

如果你需要在一个函数中对不同的数组做同样的操作,那么...

然而--我们讨论的是不同的特殊情况......

 
Artyom Trishkin:

函数重载--有这样一个概念;)

如果你需要在一个函数中对不同的数组做同样的操作,那么...

然而--我们讨论的是不同的特殊情况......

好吧,感谢上帝,我理解你的想法。但它们与给乐高程序员的建议非常相似。
 
Alexey Viktorov:
好吧,感谢上帝,我得到了你的想法。但它们非常像对乐高程序员的建议。

如果有大量100%工作的库存函数,并且每次都要重新写一遍,那就非常奇怪了。这不是关于用骰子建造房屋的建议。建议积累你自己的函数库和类。一个函数处理多个数组,取决于哪个数组是通过引用传递给它的,这有什么错?那么函数模板有什么问题呢?

如果你有对数组进行排序 的代码,为什么要为每个数组类型写一个单独的函数?你可以简单地对任何类型进行超载和排序。你认为ArraySort()是如何工作的?你在那里传递不同类型的数组,在输出时你会收到被传递的排序的数组--或者说元配额也是乐果编码器还是什么?

 
Artyom Trishkin:

如果有大量100%有效的函数库存,并且每次都要重新编写,那就非常奇怪了。这不是对用立方体建造房屋的建议。建议积累你自己的函数库和类。一个函数处理多个数组有什么问题,这取决于哪个数组是通过引用传递给它的?那么函数模板有什么问题呢?

如果有对数组进行排序 的代码,为什么我们要为每种类型的数组写一个单独的函数?你可以只做一个重载,并对任何类型进行排序。你认为ArraySort()是如何工作的?你在那里传递不同类型的数组,而输出是一个排序的数组,你传递的是--或元引号也是乐果编码器,还是什么?

最主要的是不要走到这一步。

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Простой советник. Проверка размера бара. Покупка/продажа
Простой советник. Проверка размера бара. Покупка/продажа
  • www.mql5.com
Что должен делать советник: на каждом тике проверять размер бара как только размер бара станет равным или превысит заданный размер то: если свеча б...
 
Alexey Viktorov:

最主要的是不要走到这一步。

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

在那里是没有用的。它有一个检查来检查,然后检查是否正确。它仍然是歪的。事实并非如此--这就是需要教授的地方。
 

有一个变量

int Level = 0。

在程序运行的同时,它也在不断变化。帮我写一个条件:如果Level没有变化,什么都不做,如果Level有变化(变化多或少都没关系),做一些动作{操作者}。