開(kāi)拓者TB程序的控制語(yǔ)句
欄目:開(kāi)拓者TB教學(xué) 來(lái)源:TradeBlazer使用指南 最后更新時(shí)間:2026/1/24 2:01:55

TradeBlazer公式支持兩大類(lèi)的控制語(yǔ)句:條件語(yǔ)句和循環(huán)語(yǔ)句。
條件語(yǔ)句
條件語(yǔ)句包括以下四類(lèi)表達(dá)方式:
If
If語(yǔ)句是一個(gè)條件語(yǔ)句,當(dāng)特定的條件滿(mǎn)足后執(zhí)行一部分操作。
語(yǔ)法如下:
If (Condition)
{
TradeBlazer公式語(yǔ)句;
}
Condition是一個(gè)邏輯表達(dá)式,當(dāng)Condition為T(mén)rue的時(shí)候,TradeBlazer公式語(yǔ)句將會(huì)被執(zhí)行,Condition可以是多個(gè)條件表達(dá)式的邏輯組合,Condition必須用()括起來(lái)。
TradeBlazer公式語(yǔ)句是一些語(yǔ)句的組合,如果TradeBlazer公式語(yǔ)句是單條,您可以省略{},二條或者二條以上的語(yǔ)句必須使用{}。
例如,您可以計(jì)算圖表中上升缺口(當(dāng)前Bar的開(kāi)盤(pán)價(jià)高于上一個(gè)Bar的最高價(jià))出現(xiàn)了多少次,只要在圖表中使用If語(yǔ)句,當(dāng)找到一個(gè)滿(mǎn)足條件的Bar時(shí),即條件為真時(shí),變量加1,腳本如下:
Vars
NumericSeries Counter(0);
Begin
If ( Open > High[1])
{
Counter = Counter[1] + 1;
...
}
...
End
在TradeBlazer公式中,If語(yǔ)句被廣泛使用,當(dāng)條件滿(mǎn)足的時(shí)候,在滿(mǎn)足條件的Bar上面進(jìn)行標(biāo)記。例如,下面的語(yǔ)句就是公式應(yīng)用的例子:
If(High > High[1] AND Low < Low[1])
{
PlotNumeric("Outside Bar",High);
}
If語(yǔ)句在不是用括號(hào)的情況,只執(zhí)行下面的第一條語(yǔ)句,如下的語(yǔ)句,Alert不會(huì)只在條件為T(mén)rue時(shí)執(zhí)行,而是每次都執(zhí)行。
If(High > High[1] AND Low < Low[1])
PlotNumeric("Outside Bar",High);
Alert("Outside Bar");
要想Alert只在條件為T(mén)rue時(shí)執(zhí)行,您需要按照下面的格式編寫(xiě):
If(High > High[1] AND Low < Low[1])
{
PlotNumeric("Outside Bar",High);
Alert("Outside Bar");
}
If-Else
If-Else語(yǔ)句是對(duì)指定條件進(jìn)行判斷,如果條件滿(mǎn)足執(zhí)行If后的語(yǔ)句。否則執(zhí)行Else后面的語(yǔ)句。
語(yǔ)法如下:
If (Condition)
{
TradeBlazer公式語(yǔ)句1;
}Else
{
TradeBlazer公式語(yǔ)句2;
}
Condition是一個(gè)邏輯表達(dá)式,當(dāng)Condition為T(mén)rue的時(shí)候,TradeBlazer公式語(yǔ)句1將會(huì)被執(zhí)行;Condition為False時(shí),TradeBlazer公式語(yǔ)句2將會(huì)被執(zhí)行。Condition可以是多個(gè)條件表達(dá)式的邏輯組合,Condition必須用()括起來(lái)。
TradeBlazer公式語(yǔ)句是一些語(yǔ)句的組合,如果TradeBlazer公式語(yǔ)句是單條,您可以省略{},二條或者二條以上的語(yǔ)句必須使用{}。
例如,比較當(dāng)前Bar和上一個(gè)Bar的收盤(pán)價(jià),如果Close > Close[1],Value1 = Value1 +
Vol;否則Value1 = Value1 - Vol,腳本如下:
If (Colse > Close[1])
Value1 = Value1 + Vol;
Else
Value1 = Value1 - Vol;
If-Else-If
If-Else-If是在If-Else的基礎(chǔ)上進(jìn)行擴(kuò)展,支持條件的多重分支。
語(yǔ)法如下:
If (Condition1)
{
TradeBlazer公式語(yǔ)句1;
}Else If(Condition2)
{
TradeBlazer公式語(yǔ)句2;
}Else
{
TradeBlazer公式語(yǔ)句3;
}
Condition1是一個(gè)邏輯表達(dá)式,當(dāng)Condition1為T(mén)rue的時(shí)候,TradeBlazer公式語(yǔ)句1將會(huì)被執(zhí)行,Condition1為False時(shí),將會(huì)繼續(xù)判斷Condition2的值,當(dāng)Condition2為T(mén)rue時(shí),TradeBlazer公式語(yǔ)句2將會(huì)被執(zhí)行。Condition2為False時(shí),TradeBlazer公式語(yǔ)句3將會(huì)被執(zhí)行。Condition1,Condition2可以是多個(gè)條件表達(dá)式的邏輯組合,條件表達(dá)式必須用()括起來(lái)。
TradeBlazer公式語(yǔ)句是一些語(yǔ)句的組合,如果TradeBlazer公式語(yǔ)句是單條,您可以省略{},二條或者二條以上的語(yǔ)句必須使用{}。
If-Else-If的語(yǔ)句可以根據(jù)需要一直擴(kuò)展,在最后的Else之后再加If(Condition)和新的執(zhí)行代碼即可。當(dāng)然您也可以省略最后的Else分支,語(yǔ)法如下:
If (Condition1)
{
TradeBlazer公式語(yǔ)句1;
}Else If(Condition2)
{
TradeBlazer公式語(yǔ)句2;
}
If-Else的嵌套
If-Else的嵌套是在If-Else的執(zhí)行語(yǔ)句中包含新的條件語(yǔ)句,即一個(gè)條件被包含在另一個(gè)條件中。
語(yǔ)法如下:
If (Condition1)
{
If (Condition2)
{
TradeBlazer公式語(yǔ)句1;
}Else
{
TradeBlazer公式語(yǔ)句2;
}
}Else
{
If (Condition3)
{
TradeBlazer公式語(yǔ)句3;
}Else
{
TradeBlazer公式語(yǔ)句4;
}
}
Condition1是一個(gè)邏輯表達(dá)式,當(dāng)Condition1為T(mén)rue的時(shí)候,將會(huì)繼續(xù)判斷Condition2的值,當(dāng)Condition2為T(mén)rue時(shí),TradeBlazer公式語(yǔ)句1將會(huì)被執(zhí)行。Condition2為False時(shí),TradeBlazer公式語(yǔ)句2將會(huì)被執(zhí)行。當(dāng)Condition1為False的時(shí)候,將會(huì)繼續(xù)判斷Condition3的值,當(dāng)Condition3為T(mén)rue時(shí),TradeBlazer公式語(yǔ)句3將會(huì)被執(zhí)行。Condition3為False時(shí),TradeBlazer公式語(yǔ)句4將會(huì)被執(zhí)行。Condition1,Condition2,Condition3可以是多個(gè)條件表達(dá)式的邏輯組合,條件表達(dá)式必須用()括起來(lái)。
TradeBlazer公式語(yǔ)句是一些語(yǔ)句的組合,如果TradeBlazer公式語(yǔ)句是單條,您可以省略{},二條或者二條以上的語(yǔ)句必須使用{}。
例如,在一個(gè)公式應(yīng)用中,條件設(shè)置如下:當(dāng)前行情上漲的時(shí)候,如果收盤(pán)價(jià)高于開(kāi)盤(pán)價(jià)時(shí),則產(chǎn)生一個(gè)以收盤(pán)價(jià)買(mǎi)入1張合約;否則產(chǎn)生一個(gè)以開(kāi)盤(pán)價(jià)買(mǎi)入1張合約。當(dāng)前行情沒(méi)有上漲的時(shí)候,如果收盤(pán)價(jià)高于開(kāi)盤(pán)價(jià),則產(chǎn)生一個(gè)以收盤(pán)價(jià)賣(mài)出1張合約;否則產(chǎn)生一個(gè)以開(kāi)盤(pán)價(jià)賣(mài)出1張合約。腳本如下:
If (Open > High[1])
{
If (Close>Open)
{
Buy(1,Close);
}Else
{
Buy(1,Open);
}
}Else
{
If (Close>Open)
{
Sell(1,Close);
}Else
{
Sell(1,Open);
}
}
循環(huán)語(yǔ)句
循環(huán)語(yǔ)句包括兩種表達(dá)方式:For和While。
For
For語(yǔ)句是一個(gè)循環(huán)語(yǔ)句,重復(fù)執(zhí)行某項(xiàng)操作,直到循環(huán)結(jié)束。
語(yǔ)法如下:
For 循環(huán)變量 = 初始值 To 結(jié)束值
{
TradeBlazer公式語(yǔ)句;
}
循環(huán)變量為在之前已經(jīng)定義的一個(gè)數(shù)值型變量,F(xiàn)or循環(huán)的執(zhí)行是從循環(huán)變量從初始值到結(jié)束值,按照步長(zhǎng)為1遞增,依次執(zhí)行TradeBlazer公式語(yǔ)句。結(jié)束值必須大于或等于初始值才有意義,初始值和結(jié)束值可以使用浮點(diǎn)數(shù),但是在執(zhí)行過(guò)程中會(huì)被直接取整。只計(jì)算其整數(shù)部分。
TradeBlazer公式語(yǔ)句是一些語(yǔ)句的組合,如果TradeBlazer公式語(yǔ)句是單條,您可以省略{},二條或者二條以上的語(yǔ)句必須使用{}。
第一次執(zhí)行時(shí),首先將循環(huán)變量賦值為初始值,然后判斷循環(huán)變量是否小于等于結(jié)束值,如果滿(mǎn)足條件,則執(zhí)行TradeBlazer公式語(yǔ)句,同時(shí)循環(huán)變量加1。接著重新判斷循環(huán)變量是否小于等于結(jié)束值,一直到條件為False,退出循環(huán)。
例如,以下的用戶(hù)計(jì)算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語(yǔ)句從大到小進(jìn)行循環(huán),可以使用以下的語(yǔ)法:
For 循環(huán)變量 = 初始值 DownTo 結(jié)束值
{
TradeBlazer公式語(yǔ)句;
}
For-DownTo讓循環(huán)變量從結(jié)束值每次遞減1直到等于結(jié)束值,依次調(diào)用TradeBlazer公式語(yǔ)句執(zhí)行,初始值必須大于或等于結(jié)束值才有意義。
For語(yǔ)句是比較常用的一種循環(huán)控制語(yǔ)句,它應(yīng)用于知道循環(huán)次數(shù)的地方,很多內(nèi)建用戶(hù)函數(shù)中都使用For語(yǔ)句來(lái)完成相應(yīng)的功能,比如Summation,Highest,Lowest,LinearReg等。
While
While語(yǔ)句在條件為真的時(shí)候重復(fù)執(zhí)行某一項(xiàng)操作。即,只要條件表達(dá)式的值為真(True)時(shí),就重復(fù)執(zhí)行某個(gè)動(dòng)作。直到行情信息改變以致條件為假(False)時(shí),循環(huán)才結(jié)束。
語(yǔ)法如下:
While (Condition)
{
TradeBlazer公式語(yǔ)句;
}
Condition是一個(gè)邏輯表達(dá)式,當(dāng)Condition為T(mén)rue的時(shí)候,TradeBlazer公式語(yǔ)句將會(huì)被循環(huán)執(zhí)行,Condition可以是多個(gè)條件表達(dá)式的邏輯組合,Condition必須用()括起來(lái)。
TradeBlazer公式語(yǔ)句是一些語(yǔ)句的組合,如果TradeBlazer公式語(yǔ)句是單條,您可以省略{},二條或者二條以上的語(yǔ)句必須使用{}。
例如,以下的公式用來(lái)計(jì)算要產(chǎn)生大于100000成交量需要最近Bar的個(gè)數(shù):
Vars
Numeric SumVolume(0);
Numeric Counter (0);
Begin
While (SumVolume < 100000)
{
SumVolume = SumVolume + Vol[Counter]
Counter = Counter + 1;
}
End
首先,我們定義兩個(gè)變量SumVolume和Counter,并將其默認(rèn)值設(shè)為0。當(dāng)SumVolume
<100000這個(gè)表達(dá)式為T(mén)rue時(shí),While內(nèi)的TradeBlazer公式語(yǔ)句一直被調(diào)用,將前Counter個(gè)Bar的Vol加到SumVolume中,當(dāng)SumVolume大于等于100000時(shí),退出循環(huán)。
在使用While循環(huán)的時(shí)候,有可能會(huì)遇到循環(huán)一直執(zhí)行,永遠(yuǎn)不能退出的情況,這種情況我們稱(chēng)之為死循環(huán),比如下面的語(yǔ)句;
While (True)
{
TradeBlazer公式語(yǔ)句;
}
在這種情況下,循環(huán)將一直執(zhí)行,導(dǎo)致程序不能繼續(xù)工作,在這種情況,我們可以使用Break來(lái)跳出循環(huán),詳細(xì)情況參加下節(jié)。
Break
針對(duì)上節(jié)的例子,要想從死循環(huán)中跳出,我們可以在循環(huán)之中添加Break語(yǔ)句,如下:
While (True)
{
TradeBlazer公式語(yǔ)句;
If (Condition)
Break;
}
循環(huán)在每次執(zhí)行后,都將判斷Condition的值,當(dāng)Condition為T(mén)rue時(shí),則執(zhí)行Break語(yǔ)句,跳出整個(gè)循環(huán)。
Continue
有的時(shí)候在循環(huán)中,我們可能希望跳過(guò)后面的代碼,進(jìn)入下一次循環(huán),在這種情況下,可以使用Continue語(yǔ)句來(lái)達(dá)到目的,如下:
While (Condition1)
{
TradeBlazer公式語(yǔ)句1;
If (Condition2)
Continue;
TradeBlazer公式語(yǔ)句2;
}
當(dāng)Condition1滿(mǎn)足時(shí),循環(huán)被執(zhí)行,在執(zhí)行完TradeBlazer公式語(yǔ)句1后,將判斷Condition2的值,當(dāng)Condition2為T(mén)rue,將跳過(guò)TradeBlazer公式語(yǔ)句2,重新判斷Condition1的值,進(jìn)入下一次循環(huán)。否則將繼續(xù)執(zhí)行TradeBlazer公式語(yǔ)句2。
相關(guān)內(nèi)容: 1、新建應(yīng)用公式[視頻教學(xué)]
TB公式報(bào)警功能
TB公式中的保留字
TB程序中的表達(dá)式
TB公式及模型中參數(shù)的使用
TB交易策略參數(shù)優(yōu)化的方法 |
|