mt4 mt5区别只有信号2和3会在最终信号输出上做考虑CMD_NEUTRAL 是数值为0的整数, 它的用途是给出一个拒绝的信号,它基础相当于推举流程中的弃权票。给出中性(neutral)输出 的信号放弃了它正在最终输出信号中的影响权柄,而且把决断权交给了其他的信号。假如惟有一个信号,而且信号给出了中性的结 果,那结果即是正在EA中没有进场也没有退场条目,这与众个信号没有一概给出一样宗旨的处境是相同的。

  让咱们操纵 CMD_NEUTRAL 来稍微编削一下这个个人的第一个例子:

  正在第三个例子中, 信号 1 给出了中性的信号,正在这种处境下,惟有信号2和3会正在最终信号输出上做探求,而由于信号2和信号3给出 的宗旨纷歧概,最终的输出结果将是不来往的处境 (CMD_NEUTRAL)。

  对 CSignal 的 Refresh 办法的实践移用是正在这个类的 Check 办法中举行的,正在以下呈现的代码中,假如没有可能革新数据(恐怕会 惹起差池信号),该办法将干休进一步管理。

  正在它自己内部,CSignal 不给出任何买入或者卖出信号,如许,这些办法即是虚办法,况且只会正在 CSignal 被扩展的时间才会有真 正的完毕。

  信号的类型 CMD_LONG 和 CMD_SHORT 是很容易操纵自己来做解说的,因此咱们更着重其它两种信号类型。

  CMD_VOID 是一个数值为 -1 的整数, 代外的是猛烈不倡议的一个信号。对待进场信号,正在输出中给出如许一个信号会废除一切其 他入场信号的输出。这示意这个信号的输出是强制的,通过这个信号提出不来往的条目,会使一切其它信号也给出不来往的信 号,而无论它们的实践输出以及其他信号是否给出的宗旨一样。比方,看下面的三个进场信号:

  当用作退场信号时,输出为 CMD_NEUTRAL 的信号将对最终退场信号没有影响,正在这种时间,它就相当于退场信号不存正在,而对 决断最终信号不做考量。

  这里还必要防备的是赋给 CMD_NEUTRAL 的数值是 0, 而且操纵的是自界说罗列类型来替代。操纵自界说罗列有几个利益,起初, 咱们可能自界说信号是若何解说的,另一个利益是咱们可能避免来往实践中操纵未初始化的变量。比方,ORDER_TYPE_BUY 是数 值为0的整数,假如咱们有一个 EA 来往,直接把整数值传给一个管理来往仰求的办法,而谁人变量没有初始化或者没有从新赋值 (很恐怕是不小心的),那么默认值是0,而它恐怕形成进场创造一个买入订单。另一方面,操纵自界说罗列,如许的不料就长期不 会发作,由于变量操纵0值的结果老是不来往的情状。

  操纵这种办法,咱们可能假设,m_direction 的数值越正,越众的信号就猜度代价会上涨(扩充赶上阈值的机缘). 相似地, m_direction 的数值越负,越众的信号就预测代价将会下跌。阈值的数值长期是正的,因此咱们正在搜检用于卖出的信号时,会操纵 m_direction 的绝对值。

  本文中呈现的信号对象可能被以为是 CExpertSignal 的简化版本,不过,它并不是操纵数学办法鸠合估算信号和它的过滤器的,而 是依据每个信号独立评估的。这里操纵了粗略的办法,不过给了来往者或者斥地者更众的操纵权来扩展每个独立信号可能对最终 信号输出所做的影响。

  EA 有四种信号类型,通过信号对象按照它是何如操纵的(用于进场或是退场) 来解说 (而最终是由EA来做解说). 下面的外格显示了 信号类型,它们的值,以及它们是何如按照它们的方针用法来做解说的:

  MQL5有订单分时的数组,而MQL4没有这个功效,因此也是没蓄志义的。即使如许,MQL4 正在此是一个范围身分,因此代码正在这里 要按照 MQL4 的圭臬以确保跨平台的兼容性, 把完毕个人分裂是越发厉谨的拔取(正在这个例子中即是如许)。

  CSignal 类 正在搜检任何来往信号之前,起初要革新阴谋所需的数据。这是通过 CSignal 类的 Refresh 办法来完工的, 正在那里目标 (以及年光序 列数据) 会革新至最新的数值。以下代码段就显示了 CSignal 的 Refresh 办法:

  OnInit 和 OnDeinit 正在每个信号的初始化阶段,将会管理它将要操纵的目标的创筑和初始化,以及类对象中各样办法恐怕必要的其他类成员(假如有的 话)的初始化。正在终止化的时间,目标的实例将必要被删除。 OnTick

  1. 计划阶段 (阴谋) - 正在这个阶段,要更新阴谋所需的数值(信号搜检)。

  正在这个例子中,信号2和3给出的一样的宗旨(买入), 不过信号1是恳求无效,如许,举座的信号照旧不举行来往的情状。当给出无 效信号时,信号1给出的权重更大,即使信号2和3是一概的。

  完毕应该与 MQL4 和 MQL5 都兼容。 自愿化大大批与来往信号评估合系的流程。 完毕应该粗略。

  CSignal 和它的容器 CSignals 都是用于评估按照方今墟市形态的举座信号的, 来往信号分成两个首要的组: 进场和退场信号。为了 进场,EA将必要实践一次来往,信号和其他进场信号都应当联合贯一概的宗旨 (扫数都是买入或者扫数都是卖出)。另一方面,对 于退场信号,每个信号自己是独立的,而且可能按照它己方的输出来影响最终的结果。退场信号也是累积评估的,假如信号1供应 的信号是封闭一切卖出的条目,而信号2给出的时封闭一切买入的条目,那么最终的结果是封闭一切来往。

  1. 阴谋它己方的宗旨并把它生存到名为 m_direction 的变量中; 2. 对待它的每个过滤器,

  1. 得到它的宗旨, 2. 把宗旨加到 m_direction (假如某过滤器是反转的,即是减法), 3. 假如 m_direction 最终的数值赶上阈值,就给出来往信号。

  不过正在以上提到的办法完毕之前,假如来自年光序列和目标的原始讯息不敷,必要做进一步的阴谋,Calculate 办法就务必被第一 个完毕。和要正在 CSignal 中操纵的目标相似数值的变量也是类的成员,因此这些变量可能正在 LongCondition 和 ShortCondition 办法中拜访。

  正在前一篇著作, 跨平台EA来往: 订单执掌器中, 咱们曾经呈现了 COrderManager 类, 以及它是何如用于自愿化创造和封闭来往流程 的。正在这篇著作中,咱们将操纵大致一样的准绳来自愿化天生信号的流程,这可能通过 CSignal 类,以及它的容器, CSignals 类来 获取。这篇著作周到先容了这些类对象的完毕。

  正在这个例子中,咱们可能看到,信号1会最终使其他两个信号无效,而最终的输出是 CMD_VOID。不过也要防备,信号 2 和 3 给出 的宗旨不相同,如许的话,正在这个例子中无论信号1给出什么数值,对待 EA 来说,结果都是不举行来往的条目。

  当其余信号给出的宗旨一概时,处境就差异了。正在咱们的第四个例子(参睹下方)中, 第一个信号是中性的,而其余信号给出的宗旨 一概,正在这种处境下,信号1就被马虎,而评估信号2和3,最终结果即是给出一个买入信号。

  2. 首要阶段, 或者信号搜检(Signal Checking) - 正在首要阶段,确定信号的实践输出,这个办法的主体最好惟有一行代码,以便 于抬高代码的可读性(看一下信号实践是若何做的)。

  3. 最终或者更新阶段 - 正在极少信号中,有些已有成员只正在真正的信号搜检举行过之后才更新,这里的一个例子是追踪前面的卖 家报价,也许可能用于对比方今卖家报价或者极少其他数值(也许是来自图外对象或者目标的输出)。正在计划阶段更新用来保 存之前卖家报价的变量是没蓄志义的,由于这个值不断等于信号搜检阶段确当前卖家报价,