6.4 评估交易条件
我们用jf 和else 来评估我们的交易条件。在本书中你已经见过这些操作数,但作为一个新的程序编写人员,快速复习一下是必要的。
if 操作数评估真或假的条件。若条件为真,在if 后的程序代码会立刻被执行;若条件为假,则将跳过if 区域的程序代码不予执行。

若if 操作数只有一行语法,则可以如此表示:

Else 操作数则评估另外一种条件,该条件适用于当if 语法为假的情况。你可以结合else 和证操作数创造一个当只有其为真时才会执行的另外一种条件。例如,下列的程序代码依序评估以下条件:若其中一个为真,则只有该区块的程序代码会被执行;若无一个为真,则全部的源代码都不会被执行。

Else 操作数可以独自放于一系列的if-else 系列码的末端,以待当所有证操作数皆为假时,则其条件成立,并会被执行。如上所说,仅有其中一个条件会被执行:

若你有多个if 操作数却无任何else 操作数,则当其中之一为真时就会被执行,不管其余if 操作数是真或是假。

6.4.1 关系操作数
我们开始比较数值之间大于、小于、等于、不等于,以此类推以评估条件真或假。下列是一系列的关系操作数:
● ==等于。若x ==y ,条件为真。
● >大于。若x > y ,条件为真。
● <小于。若x < y ,条件为真。
● >=大于或等于。若x > =y ,条件为真。
● <=小于或等于。若x < =y ,条件为真。
● !=不等于。若x! =y ,条件为真。
注意:等于操作数( ==)和指定操作数( = )是不一样的!指定操作数是用来指派一个值给一个变数。等于操作数而言,是用来评估一个局假条件的。这是一个常见的语法错误,你必须要小心。
只要任意两个值是同一种数据类型,你就能比较它们。你可以比较一个布尔值和常数值的真或假。你可以把一个字符串、整数或长整数变量和适当的常数或另一个同类型的变量做比较。
6.4.2 布尔操作数
我们用布尔操作数AND(&&) 或OR( 11 ) 以及合并使用来判断条件。AND 操作数评估是否所有条件为真。若是,则整个语法为真。若其中有任一条件为假,则整个陈述句为假。

若BooleanVar1 等于真,且Indicator 1 大于Indicator 2 ,则陈述句评估为真,则大括号中的程序代码会被执行。若其中任一条件为假,则整个陈述句评估为假,则大括号中的程序代码不会被执行。再多的条件都能借由&&操作数结合在一起,且它们全都必须为真。
用OR 操作数作评估,只要任一条件为真即可。若其中至少有一个条件为真:则整个陈述句评估为真;若所有的条件皆为假,则陈述句评估为假。

无论是BooleanVar 1 等于真,或是Indicator 1 大于Indicator 2 ,陈述句被评估为真。若两个条件都为假,则陈述句评估为假。你可以结合AND 和OR 操作数创造更复杂的交易条件。当你这么做时,请使用圆括弧,以建立操作数的比较顺序。

陈述句( Boolean Var 1 = = true && Indicator 1 > Indicator 2 )会被先评估。若两个条件皆为真,则陈述句被评估为真,我们再来看OR 操作数:

这个陈述句自动评估为真,因为已有一条件为真。但若是(BooleanVar 1 ==true && Indicator 1 > Indicator 2) 评估为假呢?

若条件BooleanVar 1 = = false 评估为真,则整个陈述句为真(也就是说,若BooleanVar1 被设定为假,则整个条件评估为真) ;否则,陈述句为假。
运用AND 、OR 和圆括弧来控制操作数的顺序来创造出复杂的布尔操作数是可行的。要先确认你的括弧位置,如有一个圆括弧的位置出现错误,就会造成整个陈述句评估结果的不同,所以漏了一个括弧会导致你耗时除错。
6.4.3 指标的开启相关闭
你可以前一节的AND/OR 为例,将一个指标打开或关掉。你的EA 使用了多重指标,而你又想能够将这些指标打开或关闭,这里将告诉我们该如何做。首先,我们先执行一个外部布尔变量作为一个切换开关。我们以随机指标作为例子:

我们为指标定义两个条件集合:" on" 状态和"off" 状态。on 状态由on/off 变量设定为真,并且订单呈现开启条件所组成。off 状态则简单地由on/off 变量设定为假所组成。

陈述句( UseStochastic = = true && Kline > Dline) 是我们的"on" 状态。若将UseStochastic 外部变量设定为真,且交易条件Kline > Dline 评估为真,则随机订单条件将为真。
UseStochastic == false 是我们的"off" 状态。若UseStochastic 外部变量设定为假,则当UseStochatic == false 评估为真时, (UseStochastic = = true && Kline >Dline) 评估为假。
因为on 和off 状态是由OR 操作数连在一起的,必须两个当中的其中一个为真才能使整个陈述句为真,所以只要将指标打开且订单配制条件为有效或将"指标关掉",则整个陈述句将为真,且任何剩余订单条件将会被评估。
让我们加上第二个交易条件到我们的随机条件中一一移动平均线交叉:

在这个范例中,我们已加上移动平均交叉条件, FastMA > SlowMA。注意到我们加了另一个圆括弧集合在随机条件之外,因为整个圆括弧内的陈述句需被先评估。
首先,我们评估圆括弧最内侧集合的陈述句: (UseStochastic = = true &&Kline > Dline) 。若是UseStochastic 参数被设定为真,且Kline > Dline 评估为真,则第一部分的陈述句为真:

条件UseStochastic == false 评估为假。
然后我们来看OR 操作数,因为其中已有一个条件为真,所以整个随机条件评估为真:

若FastMA > SlowMA 评估为真,则整个交易条件为真,订单被开出。若是假,则陈述句评估为假,订单不会开出。
若是随机交易条件是假会怎样呢?若UseStochastic 设定为真,而Kline > Dline评估为假,则整个交易条件变为假:

无论FastMA > Slow MA 评估结果为何,整个交易条件都为假。
现在来看看若是UseStochastic 被设定为假的情况。陈述句( UseStochatic ==true && Kline > Dline) 评估为假:

因为陈述句UseStochastic == false 为真,所以随机条件评千古为真:

这意味着,若FastMA > SlowMA 也被评估为真,则订单将会被开出。这种情况下,随机条件甚至不用考虑,只要评估指标的on/off 状态即可。