国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
TB交易開拓者公式平臺的語言編碼原則

TB交易開拓者公式平臺的語言編碼原則

TBQuant版

2021年3月20日 14:38

瀏覽量:360

?收藏

語言元素

交易開拓者公式平臺的語言是TradeBlazer Language,簡稱“TB語言”。 它是一種高級語言,語法簡潔易懂,介于C++與Pascal之間,其語言元素包括保留字、函數(shù)、表達(dá)式和語句。

保留字:TB公式中保留字有自己獨(dú)特的意義或用途,主要是指一些功能關(guān)鍵字、系統(tǒng)函數(shù)以及數(shù)據(jù)類型等,例如:Params,Vars , For……

函數(shù):函數(shù)實(shí)現(xiàn)一定的功能,分為系統(tǒng)函數(shù)和用戶函數(shù),例如:sqr,abs……

表達(dá)式:由變量和操作符組成的運(yùn)算式,例如:x=a+b;

語句:賦值語句,分支語句,控制語句等等,例如:if…else語句

命名規(guī)則

1. 公式名稱規(guī)則

不區(qū)分大小寫;

不能超過64個英文字符;

公式之間不得重名;

公式名稱不能出現(xiàn)字母、數(shù)字、下劃線以外的其他字符,且不能以數(shù)字開頭;

不能使用C++關(guān)鍵字;

公式名稱不能和系統(tǒng)保留字,系統(tǒng)函數(shù)等重名。

2. 變量,參數(shù)規(guī)則

不區(qū)分大小寫;

不能超過64個英文字符;

每一個公式內(nèi)部不能重復(fù)命名;

名稱不能出現(xiàn)字母、數(shù)字、下劃線以外的其他字符,且不能以數(shù)字開頭;

名稱不能和系統(tǒng)保留字,系統(tǒng)函數(shù)等重名;

不能使用C++關(guān)鍵字;

不能使用已定義的用戶函數(shù)名。

公式正文規(guī)則

公式中不區(qū)分字符的大小寫,例如Ab與ab等效;

公式語句以“;”結(jié)束;

公式中代碼正文不允許出現(xiàn)中文字符,使用英文雙引號 “” 引用起來的字符串除外;

公式正文字符因含義不同,以不同的顏色區(qū)分:

黑色 --- 用戶自己聲明的變量名或者參數(shù)名;

紅色 --- 數(shù)字;

藍(lán)色 --- 系統(tǒng)函數(shù);

暗紅色--- 已有的用戶函數(shù);

紫紅色--- 運(yùn)算符號;

果綠色--- 字符串(可以為中文字符);

翠綠色--- 注釋語句(注釋符號后可為中文字符)。

注釋方式

對單行語句進(jìn)行注釋,可以在句首使用“//”將該行文字注釋,也可直接在公式語句之后使用 “// ”對語句的意思或者想要標(biāo)記的內(nèi)容注釋;

對多行語句進(jìn)行注釋,則可使用“/* ...*/”將整段文字進(jìn)行注釋;

也可以使用快捷鍵Ctrl + B進(jìn)行塊注釋;

使用快捷鍵Ctrl+U對選中行取消行注釋,Ctrl+L對選中行添加行注釋;

注釋語句不參與公式主體的計(jì)算,允許出現(xiàn)中文字符。

保留字

TB公式中保留字主要指功能關(guān)鍵字、系統(tǒng)函數(shù)以及數(shù)據(jù)類型等。命名公式簡稱以及參數(shù)、變量時,要避免使用保留字。

下面分類列舉出系統(tǒng)主要的保留字。

運(yùn)算符

類型保留字

算術(shù)運(yùn)算符+ - * / % ^

關(guān)系運(yùn)算符> >= < <= == != <>

邏輯運(yùn)算符AND/&& OR/|| NOT/!

功能關(guān)鍵字

保留字說明

Params用該關(guān)鍵字宣告參數(shù)定義的起始,參數(shù)必須填寫默認(rèn)值。

Vars用該關(guān)鍵字宣告變量定義的起始(可以賦初值), 變量不填寫初值時,系統(tǒng)將自動為其填充初值。

If條件語句。

Else條件語句。

Begin用該關(guān)鍵字宣告程序主體的起始。

End用該關(guān)鍵字宣告程序主體的結(jié)束。

For循環(huán)語句。

To循環(huán)語句。

DownTo循環(huán)語句。

While循環(huán)語句。

Break循環(huán)語句。

Continue循環(huán)語句。

True真。

False假。

Return返回函數(shù)結(jié)果

數(shù)據(jù)源

保留字說明

Data0-Data99**支持多個數(shù)據(jù)源(具體數(shù)目及支持效率與本地電腦配置相關(guān))。

Data數(shù)據(jù)源數(shù)組(格式為:Data[i],i為整數(shù),用法同上)。

函數(shù):數(shù)據(jù)輸出和交易指令

保留字說明

PlotBool輸出布爾型值。

PlotNumeric輸出數(shù)值型值。

PlotString輸出字符串值。

UnPlot取消指定位置的輸出。

PlotDic在當(dāng)前Bar的輸出信息中添加基礎(chǔ)數(shù)據(jù)信息。

Alert報(bào)警輸出。

Buy多頭建倉操作。

Sell多頭平倉操作。

SellShort空頭建倉操作。

BuyToCover空頭平倉操作。

...其他系統(tǒng)函數(shù)。

標(biāo)點(diǎn)符號

TB公式的語句支持使用標(biāo)點(diǎn)符號,例如,";"標(biāo)注一個語句結(jié)束;()創(chuàng)建規(guī)則的優(yōu)先權(quán)等等。標(biāo)點(diǎn)符號也是系統(tǒng)保留字,下表中列出了TB公式中所用到的標(biāo)點(diǎn)符號及其含義:

符號名稱說明

;分號語句結(jié)束的標(biāo)志。

,逗號當(dāng)函數(shù)帶有多個參數(shù)時,用于分隔多個參數(shù)。

()小括號括號之內(nèi)的表達(dá)式有計(jì)算的優(yōu)先權(quán)。

""雙引號字符串常量。

[]中括號回溯數(shù)據(jù),引用以前的數(shù)據(jù),或者數(shù)組中的元素。

{}大括號控制語句的起始。

.點(diǎn)擴(kuò)展數(shù)據(jù)源的數(shù)據(jù)調(diào)用。

操作符

操作符是象征具體操作運(yùn)算行為的符號,根據(jù)其作用的不同,分為三類:

數(shù)學(xué)操作符

操作符說明

+

-

*

/

%求模

()括號

這些數(shù)學(xué)操作符按其特定的優(yōu)先級來進(jìn)行計(jì)算,“* ”(乘法)最先,其次是“/”(除法)和“%”(求模),“+”(加法)和“-”(減法)最后,如果有多個乘法/除法(或者是加法/減法),那么計(jì)算順序是從左至右。

例:High+2* Range/2;

它首先計(jì)算的是Range(此處Range是指High-Low)與2的積,接著計(jì)算與2的商(除法),最后求2*Range/2與最高價(High)的和。

例: (High+Low)/2;

先計(jì)算()中High與Low的和,然后將計(jì)算得到的和值除以2,找到一個Bar的中間位置

關(guān)系操作符

操作符說明

<小于

>大于

<=小于等于

>=大于等于

<>或!=不等于

==等于

應(yīng)用關(guān)系操作符,可以對兩個數(shù)值或字符串表達(dá)式進(jìn)行比較。

如果兩個操作數(shù)都是數(shù)值型,則按其大小比較

如果兩個操作數(shù)都是字符型,則按字符的ASCII碼值從左到右一一比較

漢字字符大于西文字符

關(guān)系操作符的優(yōu)先級相同

例:Close>High[1];

判斷當(dāng)前Bar收盤價是否比前一個Bar最高價高

例:"abcd" < "zyxw";

字符串的比較運(yùn)算中,按照順序依次比較的每個字符的ASCII碼值,直至計(jì)算出結(jié)果即可。 在這個例子中,首先比較“a”和“z”,字母"a"的ASCII值是小于"z",所以該表達(dá)式的值為True。

邏輯操作符

TB語言支持三類邏輯操作符:與AND(&&),或OR(||),非NOT(!)。

AND邏輯操作符運(yùn)算規(guī)則:

表達(dá)式1表達(dá)式2表達(dá)式1 AND 表達(dá)式2

TrueTrueTrue

TrueFalseFalse

FalseTrueFalse

FalseFalseFalse

簡單記憶法則:AND運(yùn)算只有兩個條件都為True時,結(jié)果才為True。

OR邏輯操作符運(yùn)算規(guī)則:

表達(dá)式1表達(dá)式2表達(dá)式1 OR 表達(dá)式2

TrueTrueTrue

TrueFalseTrue

FalseTrueTrue

FalseFalseFalse

簡單記憶法則:OR運(yùn)算只要有一個條件為True,結(jié)果即為True。

NOT邏輯操作符運(yùn)算規(guī)則:

表達(dá)式1NOT表達(dá)式1

TrueFalse

FalseTrue

例:Low < Low[1] AND Close > High[1];

當(dāng)前Bar的最低價小于前一個Bar的最低價,并且當(dāng)前Bar的收盤價高于前一個Bar的最高價時,這個表達(dá)式的計(jì)算結(jié)果才為Ture。

例:High > 10 OR Vol > 5000;

當(dāng)前Bar的最高價大于10,或者成交量大于5000,表達(dá)式的值都為True。

邏輯操作符的優(yōu)先級低于數(shù)學(xué)操作符和關(guān)系操作符。邏輯操作符也遵循括號優(yōu)先的原則,如果沒有括號,那么其運(yùn)算順序是從左至右。因此邏輯表達(dá)式中不同條件的前后順序,可能會產(chǎn)生不同的運(yùn)算邏輯,執(zhí)行的效率也會有所不同。

以Con1 AND Con2為例,系統(tǒng)從左到右進(jìn)行邏輯判斷,當(dāng)Con1為True時,需要繼續(xù)判斷Con2是否為True,只有當(dāng)Con1,Con2都為True時,整個表達(dá)式才為True。但是只要當(dāng)Con1為False時,就不再需要判斷Con2的值,而是直接返回False。

因此,以下兩個表達(dá)式在執(zhí)行效率方面是有差異的:

5 < 4 AND Close > Open;

Close > Open AND 5 < 4;

第一條語句的執(zhí)行速度大部分情況下都比第二條要快。

對于Con1 OR Con2表達(dá)式,情況也比較類似,當(dāng)Con1為False時,需要繼續(xù)判斷Con2是否為False,只有當(dāng)Con1,Con2都為False時,整個表達(dá)式才為False。但是只要當(dāng)Con1為True時,就不再需要判斷Con2的值,而是直接返回True。

以下兩條語句的執(zhí)行效率也是不一樣的:

5 > 4 OR Close > Open;

Close > Open OR 5 > 4;

因此,邏輯表達(dá)式的組合應(yīng)該盡可能的把容易判別整個表達(dá)式邏輯的條件放在前面,以減少整個表達(dá)式的計(jì)算時間。

表達(dá)式

表達(dá)式的組成

TB表達(dá)式由常量、變量、操作符、函數(shù)和圓括號按一定的規(guī)則組成,通過運(yùn)算能得到結(jié)果,運(yùn)算結(jié)果的類型由數(shù)據(jù)和操作符共同決定。

表達(dá)式的書寫規(guī)則

乘號不能省略。

括號必須成對出現(xiàn),均使用圓括號,可以嵌套,但必須配對。

表達(dá)式從左到右在同一基準(zhǔn)上書寫,無高低、大小之分。

例:sqr((3* x+y)-z)/(x*y)^4

不同數(shù)據(jù)類型的轉(zhuǎn)換

操作數(shù)的數(shù)據(jù)類型應(yīng)該符合要求,不同的數(shù)據(jù)應(yīng)該轉(zhuǎn)換成同一類型。

例:Commentary("Close = "+Text(Close));

Commentary函數(shù)只能顯示字符串類型的注釋信息,因此,使用Text()函數(shù)將Close的數(shù)值轉(zhuǎn)換成字符再顯示

優(yōu)先級

同一表達(dá)式中,不同運(yùn)算符的優(yōu)先級是:

算術(shù)運(yùn)算符 > 字符運(yùn)算符 > 關(guān)系運(yùn)算符 > 邏輯運(yùn)算符

【注意】對于存在多種運(yùn)算符的表達(dá)式,可增加圓括號改變優(yōu)先級或使表達(dá)式更清晰。

例:MarketPosition == 1 And BarsSinceEntry >= 1

先進(jìn)行關(guān)系運(yùn)算MarketPosition是否等于1,BarsSinceEntry是否大于等于1;然后再根據(jù)邏輯運(yùn)算符AND計(jì)算兩個表達(dá)式的的結(jié)果(此條件的含義為是否持有多倉且不是開倉bar)

例:Low <= MyEntryPrice - StopLossSet* MinPoint

先計(jì)算StopLossSet* MinPoint,然后計(jì)算MyEntryPrice - StopLossSet* MinPoint,最后比較Low是否小于MyEntryPrice - StopLossSet*MinPoint(此條件的含義為判斷止損條件是否滿足)

賦值語句

一個語句代表一個完全的指示或描述,語句中包含有保留字、操作符、符號。并且語句總是以";"作為語句結(jié)束的標(biāo)志。

賦值語句用于給公式變量指定一個具體的值的語句,賦值語句使用賦值操作符(=)進(jìn)行處理。

以下為賦值語句的一些例子:

Vars

    Bool b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    B = true;

    ...

}

Vars

    Numeric Value1;

Events

OnBar(ArrayRef<Integer> indexs)

{

    Value1 = (Close + Open)/2;

    ...

}

Vars

    String str;

Events

OnBar(ArrayRef<Integer> indexs)

{

    str ="It Is A Test!";

    ...

}

變量在賦值的時候忽略其擴(kuò)展數(shù)據(jù)類型,只考慮其基本數(shù)據(jù)類型,即Series,NumericRef,Numeric之間可以相互賦值。此時序列數(shù)據(jù)類型只是對當(dāng)前Bar的值進(jìn)行操作。

以下的寫法是錯誤的:

Vars

    Series<Numeric> Value2;

Events

OnBar(ArrayRef<Integer> indexs)

{

    Value2[1] = (Close + Open)/2;

}    

控制語句

計(jì)算機(jī)語言一般都有有三個基本的控制語句,順序、選擇和循環(huán)。

順序類型直接以代碼的順序決定。選擇類型和循環(huán)類型則需要有關(guān)鍵字來進(jìn)行操作。

1. 選擇類型

選擇類型的關(guān)鍵字有if和else。

1.1 一個分支

If(邏輯條件)

{

執(zhí)行語句組;

}

注意:如果執(zhí)行語句組只有一條語句時,{}可以省略。

舉例:

Vars

    Numeric a;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    if(a>0 and a<=1)

        b=1;

}

1.2 兩個互斥分支

If(邏輯條件)

{

執(zhí)行語句組A;

}

Else

{

執(zhí)行語句組B;

}

舉例:

Vars

    Numeric a;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    if(a>0 and a<=1)

        b=1;

    Else

        b=2;

}

1.3 多個互斥分支

If(邏輯條件1)

{

執(zhí)行語句組A;

}

Else if(邏輯條件2)

{

執(zhí)行語句組B;

}

Else if(邏輯條件3)

{

執(zhí)行語句組C;

}

...

Else {

}

舉例:

Vars

    Numeric a;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    if(a>0 and a<=1)

        b=1;

    else if(a>1 and a<=2)

        b=2;

    else if(a>2 and a<=3)

        b=3;

    Else

        b=4;

}

1.4 條件語句的嵌套

If(邏輯條件1)

{

If(邏輯條件2)

{

執(zhí)行語句組;

}

}

舉例:

Vars

    Numeric a;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    if(a>0)

        {

        if(a<1)

            b=1;

        }

}

2. 循環(huán)類型

循環(huán)類型的關(guān)鍵字有while和for。配合的還有to downto break continue。

2.1 while類型

While(邏輯條件)

{

執(zhí)行語句組;

}

舉例:

Vars

    Numeric a;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    While(b<3)

    {

        b=b+1;

    }

}

2.2 for 增序類型

for i=min to max

{

執(zhí)行語句組;

}

舉例:

Vars

    Integer i;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    for i=0 to 3

    {

        b=b+1;

    }

}

2.3 for 降序類型

for i=max downto min

{

執(zhí)行語句組;

}

舉例:

Vars

    Integer i;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    for i=3 DownTo 0

    {

        b=b+1;

    }

}

2.4 break

Break是觸發(fā)語句所在的最內(nèi)層循環(huán)的終止。

舉例:

Vars

    Integer i;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    for i=3 DownTo 0

    {

        b=b+1;

        if(b>=2)

            break;

    }

}

注釋:當(dāng)b>=2時,這個循環(huán)就提前終止了。

2.5 continue

Continue是跳過語句所在循環(huán)剩下的執(zhí)行語句,進(jìn)入下一輪的執(zhí)行。

舉例:

Vars

    Integer i;

    Numeric b;

Events

OnBar(ArrayRef<Integer> indexs)

{

    for i=3 DownTo 0

    {

        if(b>=2)

            Continue;

        b=b+1;

    }

}

注釋:當(dāng)b>=2時,b=b+1始終得不到執(zhí)行,所以b最終=2。

2.6 循環(huán)的嵌套

For i=min to max

{

For j=min to max

{

執(zhí)行語句組;

}

}

舉例:

Vars

    Integer i;

    Integer j;

    Array<Array<Numeric>> a;

Events

OnBar(ArrayRef<Integer> indexs)

{

    for i=3 DownTo 0

    {

        for j=0 to 3

        {

            a[i][j]=i+j;            

        }

    }

}

RANGE對代碼段的控制

Range[i:j]

{

    代碼段codes1;

}

如果使用range[i:j]把代碼段codes1括起來,則代表這一段代碼只在數(shù)據(jù)源datai到dataj的數(shù)據(jù)源運(yùn)行。I要小于j,比如range[1:2],則代表代碼段codes1只在數(shù)據(jù)源data1和data2上運(yùn)行。

具體例子如下:

Range[0:1]

    {

        AvgValue1 = AverageFC(Close,FastLength);

        AvgValue2 = AverageFC(Close,SlowLength);

        PlotNumeric("MA1",AvgValue1);

        PlotNumeric("MA2",AvgValue2);        

    }

上面代碼會在Data[0]和Data[1]上都運(yùn)行,分別畫出Data[0]和Data[1]的雙均線。

注意:Range[i:j]內(nèi)的代碼運(yùn)行說明如下:

沒有指定數(shù)據(jù)源的代碼,依次在Data [i]到Data [j]的bar上運(yùn)行。

有指定數(shù)據(jù)源的代碼,則在指定的數(shù)據(jù)源的bar上運(yùn)行。

同一個公式內(nèi),可有多個并列的Range代碼塊,Range內(nèi)不支持Range嵌套。

Range[m:n]中,數(shù)據(jù)源起始位置m及結(jié)束位置n可以指定,也可以為變量和參數(shù)聲明,類型為簡單變量。

如果想要得到數(shù)據(jù)源的編號,則可以這樣使用

Range[i=0:1]

{

    Commentary(“i=”+text(i));

}

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報(bào)。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
ST語言入門基礎(chǔ)
shell程序設(shè)計(jì)
shell入門基礎(chǔ)(3)
Java語言程序設(shè)計(jì)與數(shù)據(jù)結(jié)構(gòu)(基礎(chǔ)篇)第3章 選擇筆記
python中 and 和 or 運(yùn)算的核心思想
Swift教程之基本運(yùn)算符詳解
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服