本章对逻辑比较的关键字和程序语言的基本执行流程关键字做了详尽的说明。PL中的程序流程控制语法包括:
if…then…、begin…end、for…、while…、switch…case…、once…。
其中if…then…是最常用的条件判断控制语法,针对逻辑表达式做比较,可以与else和begin…end…结合使用,组合出不同的条件控制流程。因字典中没有switch…case…和once…的定义,下面对两者的使用举例说明。
switch…case是条件判断式,它针对字符串或数值比较。如果对同一个变量或表达式做多重判断,可以使用switch…case会比if…then…有效率。
Switch…case | |
说明 | 以下语法,会先计算switch后的表达式的值。针对计算结果,对case设定的值,从上到下依次比较,如果符合某一个case的值,则执行其冒号(:)后的陈述式;若不符合,则比较下一个case;所有case都不符合,则执行default后的陈述式,default是可选项。 |
语法 | Switch (E1or String1) Begin Case E2
Default: Instruction2; End; |
参数 | E1,E2——数值表达式。 String1 ,String2——字符串表达式。 Instruction——陈述式。 |
范例 | 当前图表的持仓手数小于等于3,并大于等于1时,买入开仓;持仓手数为4,并且close上穿前10根K线close的均价时,平仓全部: Switch(CurrentContracts) Begin Case 1,2,3:// or Case 1 to 3: Buy(“B4”) Next Bar At Market; Case 4: If Close Cross Over Average(C[1],10) Then Sell Next Bar At Market; End; |
默认的程序会在每根Bar结束时执行一次。而有些程序我们希望它只执行一次,那么Once指令则提供了此功能。
Once | |
说明 | 限制其后的陈述式,在整个程序运算中只执行一次。 |
语法 | Once Instruction1; 或 Once <(E)> Instruction2; End; <>内的表达式是可选的。 |
参数 | E——逻辑表达式,True/False类型。 Instruction——陈述式。 |
范例 | 在程序第一次执行时,把当根Bar的开盘价赋给变量Value1: Once Value1=Open; 等同于:If CurrentBar=1 Then Value1=Open; 当第一次满足close>open时,把当时Bar的开盘价赋给变量Value1: Once (Close<Open) Begin Value1=Open; End; |
Above/Over | |
说明 | 与Cross配合使用,指定交叉的方向。Above指定向上的方向(值从小到大)。 画线A向上交叉穿过画线B的定义如下:当前K棒的A值大于B值且满足下面的其中一个条件: 1、前一根K棒中A值小于B值。 2、前一根或前几根K棒的A值等于B值,再之前的K棒A值小于B值。 更多信息参考Cross。 |
语法 | E1 Cross Above E2 或: Plot1 Cross Above Plot2 |
参数 | E1, E2——数值表达式。 |
范例 | 当收盘价上穿1350.00时,发出警报: Plot1(Close); If Alert("Price has crossed above 1350.00"); |
And | |
说明 | 一个逻辑运算符(布尔型),当所有的运算式都为True时,返回True。逻辑运算符用于逻辑(布尔)的判断。 |
语法 | E1 |
参数 | E1,E2——逻辑表达式,值为true/false。 |
范例 | 2=1 True And True And True 返回值为True |
Begin | |
说明 | 和End搭配使用建立一组一至多行陈述式的陈述式组。一个Begin之后一定有一个对应的End。 Begin...End可以跟在Then, Else, For, While条件语句后使用。 Begin后无需加分号(;),整个陈述式组中的每句陈述式都要以分号(;)结束,在建构成完整陈述式之后的End也要加上分号(;)结尾。 |
语法 | Conditions Instruction1; Instruction2; Instruction3; End; |
参数 | Conditions——条件语句; Instruction——陈述式。 |
范例 | 如果满足条件 Uptrend 则开多仓,否则开空仓: If End Else BeginSellShort Next Bar Market; End; |
Below/Under | |
说明 | 与Cross组合使用来指定交叉的方向。Below指定了一个向下(值由大到小)的方向。 画线A向下交叉穿过画线B的定义如下:当前K棒A值小于B值且满足下面的其中一个条件: 1、前一根K棒中A值大于B值。 2、前一根或前几根K棒的A值等于B值,再之前的K棒A值大于B值。 更多信息参考Cross。 |
语法 | E1 或: Plot1 |
参数 | E1, E2——数值表达式。 |
范例 | 当收盘价向下穿过1350.00时,发出警报: Plot1(Close); If Alert("Price has crossed below 1350.00"); |
Break | |
说明 | 退出循环。 |
语法 | Break; |
范例 | For If End; If |
Cross/Crosses | |
说明 | 如果在当前K棒,数值表达式A的画线和数值表达式B的画线按指定方向交叉,则返回True。 Above, Over, Below, Under参量用来指定交叉的方向。Above和Over可替换,用来表示向上的方向(值从小到大),Below和Under可替换,用来表示向下的方向(值从大到小)。 画线A向上交叉穿过画线B的定义如下:当前K棒的A值大于B值且满足下面的其中一个条件: 1、前一根K棒中A值小于B值。 2、前一根或前几根K棒的A值等于B值,再之前的K棒A值小于B值。 画线A向下交叉穿过画线B的定义如下:当前K棒A值小于B值且满足下面的其中一个条件: 1、前一根K棒中A值大于B值。 2、前一根或前几根K棒的A值等于B值,再之前的K棒A值大于B值。 |
语法 | E1 或 Plot1 Cross Direction Plot2 |
参数 | E1, E2——数值表达式; Direction——必要的参量;Above, Over, Below, Under用来指定交叉的方向。 |
范例 | 当收盘价上穿1350.00时,发出警报: Plot1(Close); If Alert("Price has crossed above 1350.00"); |
DownTo | |
说明 | 和For搭配使用构成一个For循环,For循环陈述式反复执行直到循环次数达到设定的终值。 每完成一次循环,DownTo 更多信息参考For。 |
语法 | For Instruction1; Instruction2; End; |
参数 | Counter——数值变量,用来存储循环计数值。 IValue——数值表达式,指定起始计数值。 FValue——数值表达式,指定最终计数值。 Instruction——陈述式。 |
范例 | 将前10根Bar的最高价之和赋值给HighPriceSum: Variable: BarBackNo (0), HighPriceSum(0); For HighPriceSum=HighPriceSum+High[BarBackNo]; End; |
Else | |
说明 | 与If和Then联合使用,形成一个条件语句。当某条件成立时,执行特定的陈述式。当条件不成立时,执行Else指定的陈述式。 条件执行语句包含If和Then,不包含Else。更多信息请见If。 |
语法 | If E |
参数 | E——逻辑表达式,值为true/false; Instruction——陈述式。 |
范例 | 如果满足条件UpTrend 则开多仓,否则开空仓: If UpTrend |
End | |
说明 | 与Begin配合使用建立一组包含一至多行陈述式的陈述式组,一个End之前必须有一个对应的Begin,Begin...End要配合If, Then, For, While使用。 Begin后无需加分号(;),整个陈述式组中的每句陈述式都要以分号(;)结束,在建构成完整陈述式之后的End也要加上分号(;)结尾。 |
语法 | Conditions Instruction1; Instruction2; Instruction3; End; |
参数 | Conditions——条件语句;Instruction——陈述式。 |
范例 | 如果满足条件Uptrend ,则开多仓,否则开空仓: If End Else BeginSellShort Next Bar Market; End; |
False | |
说明 | 一个逻辑值(布尔型)。逻辑值用于逻辑(布尔)表达式和宣告布尔型inputs参数。 |
语法 | False |
范例 | 下面的逻辑判断式返回值为False: False 下面的逻辑判断式返回值为 False: 2=1 声明一个初始值为false的逻辑变量LogicalVar: Variable:LogicalVar(False); 声明一个默认值为false的逻辑input型变量Overnight: Input:Overnight(False); |
For | |
说明 | 与To或downTo 循环语句会指定一个变量,用来存储循环的次数,包含循环的开始值和结束值。可以搭配To或downTo使用,To指定的计数变量每完成一次循环就加一,downTo指定的计数变量每完成一次循环是减一。 循环语句中的陈述式组需要用Begin...End包含。一个Begin必须跟随一个End。 Begin后无需加分号(;),整个陈述式组中的每句陈述式都要以分号(;)结束,在建构成完整陈述式之后的End也要加上分号(;)结尾。 |
语法 | For Instruction1; Instruction2; End; 或 For Instruction1; Instruction2; End; |
参数 | Counter—— 数值变量,用来存储循环计数值。 IValue——数值表达式,指定起始计数值。 FValue——数值表达式,指定最终计数值。 Instruction——陈述式 |
范例 | 求前10根Bar的最高价之和并赋给变量HighPriceSum: Variable: BarBackNo (0), HighPriceSum(0); For HighPriceSum=HighPriceSum+High[BarBackNo]; End; 求前10根Bar的最高价之和并赋给变量HighPriceSum: Variable: BarBackNo (0), HighPriceSum(0); For HighPriceSum=HighPriceSum+High[BarBackNo]; End; |
If | |
说明 | 和Then配合使用,形成一个条件语句,如果某条件成立时,则执行特定的陈述式,和Else联合使用,形成一个条件语句,如果条件不成立,则执行Else指定的陈述式。 条件执行语句必须包含If和Then,Else是可选的。 陈述式组需要用Begin...End包含。一个Begin必须跟随一个End。 Begin后无需加分号(;),整个陈述式组中的每句陈述式都要以分号(;)结束,在建构成完整陈述式之后的End也要加上分号(;)结尾。 |
语法 | If E 或: If E Instruction1; Instruction2; End Instruction3; Instruction4; End; |
参数 | E——布林表达式,判断条件是否成立; Instruction——陈述式。 |
范例 | 如果条件UpTrend为假则卖平: If 如果条件UpTrend为真就开多仓,否则开空仓: If 如果条件UpTrend为真就开多仓,否则开空仓: If Buy Next Bar Market; End Else Begin SellShort Next Bar Market; End ; |
Not | |
说明 | 用于布林表达式:取反 |
范例 | 将Condition1取反后赋值给Condition2: Condition1 = True; Condition2 = Not |
Or | |
说明 | 一个逻辑运算符(布尔型),如果逻辑表达式中有一个为true时,返回True。逻辑运算符用于逻辑(布尔表达式)的判断。 |
语法 | E1 |
参数 | E1, E2——布尔型表达式。 |
范例 | 下面的逻辑运算返回值为False: 2=1 下面的逻辑运算返回值为True: True |
Then | |
说明 | 和If配合使用,形成一个条件语句,如果某条件成立时,则执行特定的陈述式,和Else联合使用,形成一个条件语句,如果条件不成立,则执行Else指定的陈述式。 条件执行语句必须包含If和Then,Else是可选的。 陈述式组需要用Begin...End包含。一个Begin必须跟随一个End。 Begin后无需加分号(;),整个陈述式组中的每句陈述式都要以分号(;)结束,在建构成完整陈述式之后的End也要加上分号(;)结尾。 |
语法 | If E |
参数 | E——条件判断式 Instruction——陈述式 |
范例 | 如果条件UpTrend If UpTrend=False Then Sell Next Bar Market; |
To | |
说明 | 和For搭配使用构成一个For循环,For循环陈述式反复执行直到循环次数达到设定的终值。 每完成一次循环,To 更多信息参考For。 |
语法 | For Instruction1; Instruction2; End; |
参数 | Counter—— 数值变量,用来存储循环计数值。 IValue——数值表达式,指定起始计数值。 FValue——数值表达式,指定最终计数值。 Instruction——陈述式 |
范例 | 求前10根Bar的最高价之和并赋给变量HighPriceSum: Variable: BarBackNo (0), HighPriceSum(0); For HighPriceSum=HighPriceSum+High[BarBackNo]; End; |
True | |
说明 | 逻辑值(布尔型)。用来表示逻辑(布尔)表达式的值和宣告布尔型inputs参数。 |
语法 | True |
范例 | 下面的逻辑表达式的返回值为 True: True Or False 下面的逻辑表达式的返回值为 True: 2=2 声明一个初始值为true的变量LogicalVar: Variable:LogicalVar(True); 声明一个初始值为true的input型变量Overnight: Input:Overnight(True); |
While | |
说明 | 和Begin,End配合使用形成一个While条件循环语句。如果布林表达式判断为真,则不断重复执行一组陈述式,直到条件不再成立。 While循环语句中的陈述式组需要用Begin...End包含。一个Begin必须跟随一个End。 Begin后无需加分号(;),整个陈述式组中的每句陈述式都要以分号(;)结束,在建构成完整陈述式之后的End也要加上分号(;)结尾。 |
语法 | While E Begin Instruction1; Instruction2; Instruction3; End; |
参数 | E——布尔表达式 Instruction——陈述式 |
注意 | 使用While循环时,Begin...End内的陈述式必须包含改变循环条件的布林表达式。若没有,可能会造成无穷循环,使用上宜特别小心。PL为避免出现无穷循环的状况,当While循环执行超过5秒仍未停止时,会出现一个执行时错误,并停止执行脚本。 |
范例 | 求最近十根K棒的最高价之和并赋值给变量HighPriceSum: Variable: BarBackNo (0), HighPriceSum(0); BarBackNo= 0; While HighPriceSum=HighPriceSum+High[BarBackNo]; BarBackNo= BarBackNo +1; End; |
欢迎光临 龙听期货论坛 (http://www.qhlt.cn/) | Powered by Discuz! 7.2 |