文章 "来自专业程序员的提示(第二部分):在智能交易系统、脚本和外部程序之间存储和交换参数" - 页 2

 
这篇文章论述不清。
参数示例
  • 零杆时间
....
在哪里存储这些参数?
为什么要将零点条的时间存储在建议的位置之一?

从表中可以看出:文件的生命周期受文件生命周期的限制。有什么理由不喜欢 "全局变量的生命周期受全局变量生命周期的限制 "呢?)

要将任意数据打包到全局变量中,最好使用 union。

关于二进制文件....
 
最近,文章的水平在思想和方法的复杂性方面有所下降,当然并非所有文章都是如此。
 

...

众所周知,Expert Advisor 的OnInit 处理程序不仅会在启动时触发,还会在更改时间框架时触发。事实上,每次切换时间框架时,变量都会重置并再次初始化,但 Expert Advisor 的参数除外。

...

不正确。这就是指标中发生的情况。当参数发生变化和图表符号/时间框架发生变化时,智能交易系统不会重新初始化。

现在,关于 Expert Advisor/指标/服务等之间的信息传输。

  1. 全局终端变量--啊哈,机器人是用真金白银交易的,它的工作基于数据,每个人都可以访问这些数据:指标、脚本、其他专家、用户的孩子、用户自己的淘气小手....。
  2. 图表上的图形对象也是如此。
  3. 订单注释 - DC 可以更改它们(哎呀)。
  4. 文件(最好是二进制文件)--可能是文章中列出的所有文件中最好的,但开发人员从未回答(或者我错过了)关于文件共享同步的问题。而且这也是个拐杖。

剩下的只有 EventChartCustom(...),它有很多缺点。

因此,请勾选允许导入 dll 的复选框,然后开始做正确的事情,或者,最好不要这样做。

 
Aliaksandr Hryshyn:
1) 文章阐述不清。
参数举例
  • 零杆时间
2) 为什么要将零刻度线时间存储在建议的位置之一?

3) 从表格中可以看出:文件的生命周期受文件生命周期的限制。全局变量的寿命受全局变量寿命的限制":)))有什么问题?

4) 将任意数据打包到全局变量中,最好使用 union。

5) 未提及二进制文件....

1) 我受到了版主的表扬。

2) 为了不重复运行条形分析

3) 文件的生命周期长于全局变量 的生命周期

4) 我展示了其中一种打包方式

5) 我没有使用它们

 
Vladimir Simakov:

...

a) 不正确。这是在指标中发生的情况。当更改参数和图表符号/时间框架时,EA 不会重新初始化。

至于 Expert Advisor/指标/服务等之间的信息传输问题。

  1. 全局终端变量--啊哈,机器人是用真金白银交易的,它的工作基于数据,每个人都可以访问这些数据:指标、脚本、其他专家、用户的孩子、用户自己的淘气小手....。
  2. 图表上的图形对象也是如此。
  3. 订单注释 - DC 可以更改它们(哎呀)。
  4. 文件(最好是二进制文件)--可能是文章中列出的所有文件中最好的,但开发人员从未回答(或者我错过了)关于文件共享同步的问题。哦,这是一根拐杖。

b) 所以,请勾选允许导入 dll 的复选框,然后开始正确操作,或者,最好不要这样做。

a) 我同意不重新初始化智能系统变量。

1-2) 我们讨论的是 EA 与脚本之间的交换。如果您愿意,可以对信息进行加密;-)

3) 在 MT4 中,DC 可以在末尾添加一些内容。MT5 中没有这种功能,至少对我来说没有;-)

4) 我通常使用FILE_SHARE_READ 标志。

int file = FileOpen(path, FILE_SHARE_READ|FILE_UNICODE);

b) 如果是为自己做,那么就像人们常说的 "在您的 hands.... 中标记"。

如果是为了市场,则 DLL 不会通过。

 
Malik Arykov:

(a) 同意不重新初始化 EA 变量

1-2) 我们讨论的是智能交易系统与脚本之间的交换。您可以对信息进行加密;-)

3) 在 MT4 中,在末尾添加一些内容。MT5 中没有这种功能,至少对我来说没有。

4) 我通常使用FILE_SHARE_READ 标志。

b) 如果是为自己做,那么就像他们说的那样 "在您的 hands.... 中标记"。

如果您是为市场而做,则 DLL 不会通过。

1-2) 所以加密或不加密,但你仍然可以更改/删除)))))。

3) 如果没有明确说明不能,那么...就我个人而言,我不确定我是否能做到这一点。

4) 我说的不是这个,我说的是从不同线程共享资源时数据 "竞赛 "的情况。在不同的图形上运行所附的两个脚本。先运行写。这就是我一直以来关于元引号问题的答案。同样,在测试结果的背景下,我终于得到了测试结果(感谢 TC),并向他们提出了一个问题:本地同步原语在哪里?

这也是为什么专业人士在市场上做这样的事情而不向客户发出巨额警告的原因。

附加的文件:
write.mq5  2 kb
read.mq5  2 kb
 
Vladimir Simakov:

....

我文章中的所有示例对我来说都很好(在我的 EA 和脚本中)

 
Malik Arykov:

我文章中的所有示例都能正常运行(在我的 EA 和脚本中)

我的文章并不是说哪些方法不起作用,而是说数据的安全性和完整性没有得到保证。在使用上述所有数据传输方法时,都无法确保机制的可靠性。此外,这与第三方系统可能存在的漏洞(终端、操作系统、硬件漏洞)无关,而是与方法本身有关:全局终端变量 的名称或用户操作发生碰撞、图形对象的删除功能相同、不同线程对文件的读写操作缺乏同步。

是的,这种概率可以降到很低,但不可能降到 0。这正是您应该牢记的)。

 
Vladimir Simakov:

我的帖子并不是说什么不起作用,而是说没有确保数据的安全性和完整性。在使用上述所有数据传输方法时,都无法确保机制的可靠性。此外,这与第三方系统可能存在的错误(终端、操作系统、硬件错误)无关,而是与方法本身有关:全局终端变量 的名称或用户操作碰撞、图形对象的相同+删除功能、不同线程对文件的读写操作缺乏同步。

是的,这种概率可以降到很低,但不可能降到 0。这正是您应该牢记的)。

将参数存储在文件中可以提供 100% 的可靠性。所有的 "碰撞 "都可以通过对象名称(包括全局变量)的前缀来解决。

例如,级别参数存储在 Files\Cayman\Params\128968168864101576\exp_05_Lev607A160E_H4.txt 中。其中 128968168864101576 是图表 ID。除了这个特定级别的分析器,没有人知道这个文件。从文章中提取任意一段代码并尝试 "破解 "它;-)如果你破解了,我会告诉你哪里出错了;-)

 
void OnStart()
  {
   while(!IsStopped())
      for(int i=GlobalVariablesTotal();i>=0;--i)
         GlobalVariableSet(GlobalVariableName(i),MathRand());
  }

好奇的用户在任何 EA/指示器/脚本/服务中运行类似这样的脚本,就可以花数周时间寻找一个不存在的、无法证实的错误,其乐无穷)))))。