新一代交易软件的到来。EA的界面应该是怎样的? - 页 12

 
Yury Kulikov:
一切都是那么的乱七八糟 :)
我说的是一个使用你的文件导航器指标创建界面的例子,在Expert Advisor中实现。但不要拘泥于 "文件导航器 "这几个字,这只是一个任务的例子,在Expert Advisors中可以有很多类似的任务:终端窗口的导航器、图表上的对象、终端的指标......。而这只是一小层任务,可以通过你想通过全局变量 在指标中获得的字符串的列表(表)来实现。
我现在有点糊涂了,我错过了你帖子的一些意思。我很抱歉。稍后我将详细描述引擎、工作室、界面和EA的概念。之后,我们可以讨论。:)
 

1.图形引擎的概念。

2.图形核心的概念。

3.为MT平台创建一个视觉工作室的阶段。

4.描述创建EA接口的机制。


1.图形引擎是一个作为指标的程序。这个程序只为管理用户界面而设计。它执行一系列的基本功能。

  • 从一个文件中加载图形界面的 核心。
  • 保存用户界面设置。
  • 实施对界面中所有进程的单一和一致的控制。它实现了界面的 "机械性",包括:打开和关闭窗口、调整窗口大小、移动窗口、合并窗口、缩放、播放脚本、改变对象状态、对象绑定、根据类型和属性控制控件的参数值、创建和删除全局变量。

图形引擎像其他指标一样被添加到图表 中。 它包括以下一组窗口。

  • 任务栏,在其右侧将添加几个图标以调用引擎本身的服务 窗口。
  • 文件导航器,它将被用来从位于特殊文件夹中的带接口的文件列表 中选择启动文件。
  • 可选的设置窗口,在这个阶段不发挥主要作用。

原则上,这就是图形引擎概念的终结。重要的是,没有它,界面就无法工作。



2.图形内核是一个包含界面中所有对象和窗口数据的信息块,它被记录在一个阵列中并保存在一个文件中。

该块是图形界面的数字表示。它是由图形引擎根据用户的指令加载的。图形引擎本身有自己的内部图形内核,确保其自身窗口的运行,并在该内核内为用户界面(数字形式)的整合分配自由空间。集成是在从文件中加载图形核心的过程中进行的。


3.在MT平台上创建一个视觉工作室,据我所知,分为两个阶段。

  • 在第一阶段,将创建一个基于文件的界面构建器版本。在其中,用户将与表格模板一起工作。在表格中,用户将写出接口元素的类型和名称,并设置其参数的属性。创作将是一个非常友好的过程,用户不必担心其元素在窗口中的正确定位(引擎将自动计算一切),只需按要求的顺序排列元素。
  • 在第二阶段,将创建一个可视化环境,实现与文件构造器相同的接口构造方法,只是它的使用将更加简单和方便。它还将增加改变控件外观的能力。一般来说,用户会有更多的图形选项。


4.我想概括地介绍一下创建界面的机制,并稍微揭开其技术的面纱。解释一下通过文件创建接口的便利性将从何而来。

情况就是这样:引擎有一个特殊的功能,可以根据一个文件创建一个完整的图形内核,并将加载的信息量降到最低。这个文件中的启动信息是不言自明的,而且是人类可读的。它很容易编写和编辑。例如,你需要写"_CREATE_NEW_WINDOW "来创建一个窗口,以及"_CHECKBOX "和复选框的名称,(引擎会自动识别元素的名称,作为元素本身的名称和其参数的名称)。

这个函数被称为 "G_CORE_BUILDER()",它通过从两个主要来源获取数据来构建图形核心:用户创建的启动文件和 "CONTENT[]"数组,该数组包含了窗口平台和控件中的所有标准对象组。"CONTENT[]"也包含对象的状态和脚本。一切都在一个阵列中。一般来说,来自 "CONTENT[]"的源材料+用户创建的加载器文件被 "G_CORE_BUILDER() "用来构建引擎工作的图形核心。

 

为了避免混淆,我想补充的是,启动文件可以有两种格式。

1.以一套用户定义的指令的形式,描述窗口、控件 及其参数的属性。在这种情况下,在加载阶段,函数 "G_CORE_BUILDER() "被启动并构建图形核心。

2.以准备好的图形核心的形式,直接加载到引擎。在这个变体中,不需要使用 "G_CORE_BUILDER() "函数。

第一个选项将用于接口构造器,第二个选项用于运行任何应用程序的现成接口。

简化版的引擎将加载现成的图形内核,内核构建系统("G_CORE_BUILDER() "和 "CONTENT[]"数组将被移除)。为了简化其操作。
 
Реter Konow:
画图还不是一个界面,你没有提到的最重要的问题是专家顾问将如何与指标互动,"全局变量"听起来有些含糊。
 
Yury Kulikov:
画图还不是界面,你错过的最重要的问题是--EA将如何与指标互动,通过"全局变量"听起来有些模糊不清。
目前,专家顾问与带全局变量的指标中实现的界面的交互系统只在纸上,我还没有任何创建经验。 我将尝试更详细地描述我的想法,如果你发现其中的矛盾或错误,请评论。

1.让我提醒你大家都知道的是--每个全局变量都在所有加载到图表的程序范围内。要创建一个全局变量,你必须调用特殊函数,并向它传递变量的名称和它的值。

2.全局变量将由引擎在加载接口的阶段创建,它将读取启动文件。全局变量的名称和它们的保存(或预设)值将被写在启动文件本身。

3.在引擎内部有一个特殊的块,负责根据项目类型、值类型和参数属性来控制控件的参数值。当用户在 "旋转编辑 "元素中点选复选框或重新映射一个值时,控件的参数交互块 会对一个特定的值、一个特定的变量执行特定的操作。

4.由于该变量是全局性的,它的值将被专家顾问不断 "观察",它将根据嵌入的算法对每个全局变量的值的变化作出反应。

5.专家顾问不仅 "观察 "全局变量,而且从其功能上完全利用它们的值工作。在这种情况下,重要的是要理解全局变量将有条件地 分为两类:由用户 "控制 "的变量,其值将由用户通过界面中的控件设置;由EA功能 "控制 "的变量,其值将由用户功能设置。

6.反过来,该引擎将与这两种条件性 全局变量类型一起工作。我已经描述了 用户 "控制 "下处理变量值的原则,而在EA功能 "控制 "下处理数值的原则将如下:同一个块有条件地将控件分为两类:控制数值的控件,以及显示数值的控件(以任何方式显示)。每个这样的控件(输入框、进度条等)都被订阅到其变量的值变化事件。一旦任何变量的值发生变化,区块就会引用相应的元素,并对该元素进行操作,该元素在默认情况下是由元素类型提供的。

请注意,该块以定时器的频率循环所有全局变量,从而 "跟随 "功能控制变量的值的行为。

//--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
P.S. 至于如何从用户界面加载EA设置的问题,在我看来,将以如下方式进行。

EA操作的所有全局变量的值(包括那些代表EA设置的变量),在EA的卸载事件中被销毁之前,将被存储在加载文件中。在每次加载接口时,这些相同的全局变量将被再次创建,并采取其原始值。然后专家顾问将被加载并访问其变量。
 
Реter Konow:

如何通过全局变量 传递文本(如文件名)?

专家顾问如何激活/停用一个窗口?

如何在专家顾问运行时创建一个新窗口?

...

 
Yury Kulikov:

1.如何通过全局变量 传递文本(如文件名)?

2.专家如何激活/停用该窗口?

3.如何在专家顾问运行时创建一个新窗口?

...

1.这项任务还没有解决。我可以猜测地建议几个变种。

a) 通过全局变量名本身来传递字符串。由于变量是有索引的,引擎和Expert Advisor总是需要 "知道 "要擦除的glob变量的索引,并再次创建以转移文本,每次都要改变其名称,并通过它传递字符串。乍一看,这个选项看起来很乱,但谁知道呢,也许它可以被改进......

b) 传输一个变量值的字符串,用字母连续传输,其中将传输相应的数字而不是字母本身,并且传输过程将在n个定时器周期内进行。

2.目前,我的概念缺乏在EA方面激活/停用窗口的方法。说实话,我不太明白你的意思。窗口将只由用户和引擎来处理。专家顾问只处理变量和它自己的函数。他还没有接触到界面。(那有什么意义呢?)。

3.新的(复合)窗口,用户可以根据自己的判断对(组件)窗口进行分组,将由引擎而不是专家来创建。例如,通过点击 "新窗口 "主菜单项。重要的是,所有的分组窗口都已经在界面中创建,用于分组用户所需信息的复合窗口的数量可以(有条件地)不限。窗口集和它们的内容将被保存在一个文件中。

 
Реter Konow: 它还没有接触到界面。(那有什么意义呢?)

这一点是最基本的。事件不只是发生在界面上。

挡在你的泰坦尼克号路上的冰山将不止一座。你已经从错误的方面开始了这个项目,全局变量 在这里没有帮助。

 
Yury Kulikov:

这一点是最基本的。事件不只是发生在界面上。

挡在你的泰坦尼克号前面的冰山将不止一座。你在错误的方向上开始了这个项目,全局变量 不会有帮助。

那么,你认为我应该在什么边缘开始项目,什么可以帮助我?
 
Реter Konow:
好的,但你认为我应该从哪里开始做这个项目,什么可以帮助我?

我认为我们应该从专家开始。我给出了三类与专家有关的任务,但事实证明它们在你的界面上是不可行的。

什么可以帮助?也许是更深入的整合,或将项目 限制在 "远程控制"。