设为首页收藏本站

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 805|回复: 1

精华中精华文华所没有实现复杂策略工具一 [复制链接]

Rank: 5Rank: 5

发表于 2010-3-5 23:04:13 |显示全部楼层
循环语句
循环语句包括两种表达方式:For和While。

For
For语句是一个循环语句,重复执行某项操作,直到循环结束。

语法如下:

For 循环变量 = 初始值 To 结束值
{
    TradeBlazer公式语句;
}

循环变量为在之前已经定义的一个数值型变量,For循环的执行是从循环变量从初始值到结束值,按照步长为1递增,依次执行TradeBlazer公式语句。结束值必须大于或等于初始值才有意义,初始值和结束值可以使用浮点数,但是在执行过程中会被直接取整。只计算其整数部分。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

第一次执行时,首先将循环变量赋值为初始值,然后判断循环变量是否小于等于结束值,如果满足条件,则执行TradeBlazer公式语句,同时循环变量加1。接着重新判断循环变量是否小于等于结束值,一直到条件为False,退出循环。

例如,以下的用户计算Price最近Length周期的和。

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

如果希望For语句从大到小进行循环,可以使用以下的语法:

For 循环变量 = 初始值 DownTo 结束值
{
    TradeBlazer公式语句;
}

For-DownTo让循环变量从结束值每次递减1直到等于结束值,依次调用TradeBlazer公式语句执行,初始值必须大于或等于结束值才有意义。

For语句是比较常用的一种循环控制语句,它应用于知道循环次数的地方,很多内建用户函数中都使用For语句来完成相应的功能,比如Summation,Highest,Lowest,LinearReg等。

While
While语句在条件为真的时候重复执行某一项操作。即,只要条件表达式的值为真(True)时,就重复执行某个动作。直到行情信息改变以致条件为假(False)时,循环才结束。

语法如下:

While (Condition)
{
    TradeBlazer公式语句;
}

Condition是一个逻辑表达式,当Condition为True的时候,TradeBlazer公式语句将会被循环执行,Condition可以是多个条件表达式的逻辑组合,Condition必须用()括起来。

TradeBlazer公式语句是一些语句的组合,如果TradeBlazer公式语句是单条,您可以省略{},二条或者二条以上的语句必须使用{}。

例如,以下的公式用来计算要产生大于100000成交量需要最近Bar的个数:

Vars
    Numeric        SumVolume(0);
    Numeric        Counter (0);
Begin
    While (SumVolume < 100000)
    {
        SumVolume = SumVolume + Vol[Counter]
        Counter = Counter + 1;
    }
End

首先,我们定义两个变量SumVolume和Counter,并将其默认值设为0。当SumVolume <100000这个表达式为True时,While内的TradeBlazer公式语句一直被调用,将前Counter个Bar的Vol加到SumVolume中,当SumVolume大于等于100000时,退出循环。

在使用While循环的时候,有可能会遇到循环一直执行,永远不能退出的情况,这种情况我们称之为死循环,比如下面的语句;

While (True)
{
    TradeBlazer公式语句;
}

在这种情况下,循环将一直执行,导致程序不能继续工作,在这种情况,我们可以使用Break来跳出循环,详细情况参加下节。

Break
针对上节的例子,要想从死循环中跳出,我们可以在循环之中添加Break语句,如下:

While (True)
{
    TradeBlazer公式语句;
    If (Condition)
        Break;
}

循环在每次执行后,都将判断Condition的值,当Condition为True时,则执行Break语句,跳出整个循环。

Continue
有的时候在循环中,我们可能希望跳过后面的代码,进入下一次循环,在这种情况下,可以使用Continue语句来达到目的,如下:

While (Condition1)
{
    TradeBlazer公式语句1;
    If (Condition2)
            Continue;
    TradeBlazer公式语句2;
}

当Condition1满足时,循环被执行,在执行完TradeBlazer公式语句1后,将判断Condition2的值,当Condition2为True,将跳过TradeBlazer公式语句2,重新判断Condition1的值,进入下一次循环。否则将继续执行TradeBlazer公式语句2。

Rank: 3Rank: 3

发表于 2010-7-13 07:55:26 |显示全部楼层

找到我想要的功能了

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

bottom

静态版|手机版|联系我们|关于我们|交易开拓者 ( 粤ICP备07044698 )  

GMT+8, 2012-5-25 05:28 , Processed in 0.021783 second(s), 6 queries , Memcache On.

Powered by Discuz! X2

© 2011-2012 交易开拓者 Inc.

回顶部