2.2 TB基本编程——条件循环语句
控制语句让模型可以在不同的情况下执行不同的操作,这是编程所必须的。其中算法中的条件结构是由条件语句来表达的,它是处理条件分支逻辑结构的算法语句,其一般的构成形式是If-Else-Elseif格式,具体如下。
If (Condition) { TradeBlazer公式语句1; }Else { TradeBlazer公式语句2; }
Else包含了除了If之外的所有可能性。比如if A>B其他的所有可能性就是A<B和A=B。
If语句表示,达到If括号里要求的条件后,执行大括号里的语句。If-Else语句,是表示一个两分支,如果达到If描述的条件,就执行大括号里的语句。除此之外,这里的“此”就是针对If所描述的情况,全部用Else涵盖,并且执行Else里面的语句。具体如下。
If (Condition1) { TradeBlazer公式语句1; }Else If(Condition2) { TradeBlazer公式语句2; }Else { TradeBlazer公式语句3; }
If-Elseif-If语句,则是可以持续性地扩展下去的多分支。可以在最后的Else之后不断添加新的分支。If-Else的嵌套表示多层次的分支,比如程序先分为Condition1和除了Condition1之外的两只,然后,在Condition1内部,又分为多种情况,但是它们总体上都是在Condition1这个条件之内的。这样我们就可以控制略微复杂一些的交易程序发出指令的规则。
这里举了一个例子,以对If-Else嵌套做简单解读。
If (Open > High[1]) //如果当前Bar的开盘价>上一根Bar的收盘价,执行下面的分支 { If (Close>Open) { Buy(1, close); }Else { Buy(1, open); } }Else //当前Bar的开盘价≤上一根Bar的收盘价,执行下面的分支 { If (Close > Open) { Sell(1, close); }Else { Sell (1, open); } }
第一层是当前Bar的开盘价>上一根Bar的收盘价,则执行分支,里面包括了“收盘价>开盘价”和“收盘价≥开盘价”也就是针对上一个If,用Else条件描述的情况。第二层是当前Bar的“开盘价≤上一根Bar的收盘价”,也就是针对第一层的If,用Else条件描述的情况。
IF是一个表达非常简单的语句,可以通过简明的语言,把两种不同的情况,返回条件所要求的值。如以下代码所示,第一个逗号后面的值,是满足条件时返回的值。第二个逗号后面的值,是不满足条件时返回的值。
Numeric IIF(Bool Conditon, Numeric TrueValue, Numeric FalseValue)
IF语句的作用是根据表达式的值,来返回两部分中的一个。
◎ TrueValue条件为Conditon为True(真)时的返回值;
◎ FalseValue条件为Conditon为False(假)时的返回值。
myValue=IIF(Close>Open, Close, Open);
如果当前Bar的Close>Open(收盘价>开盘价,即为阳线),则myValue=Close(收盘价),否则myValue=Open(开盘价)
for语句是一个条件循环语句,按照循环变量以1为步长递增,重复执行语句,直到达到条件,常用于递增某个变量这样的案例。如果需要从大到小执行,则可以把To改为Down to。
for循环变量 = 初始值To结束值,代码如下:
{ TradeBlazer公式语句; }
for循环的执行从循环变量的初始值到结束值,按照步长为1递增,依次执行TradeBlazer公式语句,结束值必须大于或等于初始值才有意义。
这里的例子表达的是,计算Price值所有周期的和。首先定义两个参数Price和Length,然后定义两个变量SumValue就是求和值,i是递增值。
Params NumericSeries Price(1); Numeric Length(10); Vars Numeric SumValue(0); Numeric i; Begin for i = 0 to Length -1 { SumValue = SumValue + Price[i]; } Return SumValue; End
上述案例中,程序从i=0到lenght-1进行历遍,重复执行花括号{}内部的条件。执行的语句是:SumValue在每个周期进行累计叠加。最后达到lenght-1条件的时候,计算结束,返回这个值给SumValue。程序结束。
While循环语句在条件为真的时候,执行大括号里的语句,具体如下。
While (Condition) { TradeBlazer公式语句; }
需要说明的是:交易开拓者允许一个K线图表里插入不同的数据,比如Data0:原图表Bar数据,可以插入螺纹钢指数合约RB000; Data1:第二个数据源,插入焦炭指数合约J9000……。
FileAppend函数也很实用,可以输出数值到电脑硬盘上,比如留下交易日志,或者输出数据做分析。语句格式是:
FileAppend("c:\\Formula.txt", "hello world");
还可以用这种形式输出重要数据,导出成TXT或CSV文件,放入其他的数据分析软件中。
FileAppend("c:\\test.txt", Text(Date)+", "+ Text(Time)+", "+ Text(Data0.Close));