開拓者 TB公式入門教程[開拓者公式]
- 咨詢內(nèi)容: 請(qǐng)大家不要在此貼回復(fù),關(guān)于該貼的問題請(qǐng)到這里回復(fù),謝謝!
TradeBlazer公式入門教程(1)
Step 1、在開始寫公式之前,我們先了解以下基本概念
Bar數(shù)據(jù):
公式在進(jìn)行計(jì)算時(shí),都是建立在基本數(shù)據(jù)源(Bar數(shù)據(jù))之上,我們這里所謂的Bar數(shù)據(jù),是指商品在不同周期下形成的序列數(shù)據(jù),在單獨(dú)的每個(gè)Bar上面包含開盤價(jià)、收盤價(jià)、最高價(jià)、最低價(jià)、成交量及時(shí)間。期貨等品種還有持倉量等數(shù)據(jù)。所有的Bar按照不同周期組合,并按照時(shí)間從先到后進(jìn)行排列,由此形成為序列數(shù)據(jù),整個(gè)序列稱之為Bar數(shù)據(jù)。
公式如何執(zhí)行:
TradeBlazer公式在計(jì)算時(shí)按照Bar數(shù)據(jù)的Bar數(shù)目,從第一個(gè)Bar到最后一個(gè)Bar,依次進(jìn)行計(jì)算,如果公式中出現(xiàn)了調(diào)用Bar數(shù)據(jù)函數(shù)的,則取出當(dāng)前Bar的相應(yīng)值,進(jìn)行運(yùn)算。公式執(zhí)行從上至下,Bar從左到右執(zhí)行。
Step 2、接下來,我們從TradeBlazer公式的HelloWorld開始
該貼前期已經(jīng)發(fā)過,因此在此只給出鏈接:
TradeBlazer公式的HelloWorld!
Step 3、建立一個(gè)簡單的指標(biāo):成交量
對(duì)于交易開拓者界面不熟悉的朋友可以參看以下帖子:
如何在交易開拓者中編寫技術(shù)指標(biāo)?
新建指標(biāo)簡稱: MyVol- Begin
- PlotNumeric("Vol",Vol);
- End
- TB技術(shù)人員: TradeBlazer公式入門教程(2)
Step 4:
前面我們所建的技術(shù)指標(biāo)MyVol,可以輸出成交量,但成交量只能設(shè)置為屬性所選的一種顏色。如下圖:
普通成交量.png (8.75 KB, 下載次數(shù): 291) 2007-8-21 15:50:44 上傳下載次數(shù): 291
很多朋友習(xí)慣于看紅綠色表示漲跌的成交量。
下面我們來實(shí)現(xiàn)帶紅綠顏色的成交量指標(biāo),代碼如下:- Begin
- PlotNumeric(“Vol”,Vol,IIf(Close>=Open,Red,Green));
- End
使用的情形如下:
紅綠色成交量.png (9.19 KB, 下載次數(shù): 293) 2007-8-21 15:50:44 上傳下載次數(shù): 293
關(guān)于IIF
函數(shù)原形:
Numeric IIF(Bool Conditon,Numeric TrueValue,Numeric FalseValue)
參數(shù):
Conditon 條件表達(dá)式;
TrueValue 條件為True時(shí)的返回值;
FalseValue 條件為False時(shí)的返回值。
針對(duì)上面的使用IIF進(jìn)行成交量顏色指定的腳本, 我們還有另外一種寫法:
- Begin
- If(Close>=Open)
- PlotNumeric(“Vol”,Vol,Red);
- Else
- PlotNumeric(“Vol”,Vol,Green);
- End
PlotNumeric由輸出的名字來區(qū)分是否為同一條線!
關(guān)于IF語句
If語句是一個(gè)條件語句,當(dāng)特定的條件滿足后執(zhí)行一部分操作。
語法如下:
If (Condition)
{
TradeBlazer公式語句;
}
TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。
[ 本帖最后由 nopain 于 2007-8-21 15:58 編輯 ] - TB客服: TradeBlazer公式入門教程(3)
Step5
關(guān)于條件表達(dá)式
?
邏輯操作符
邏輯運(yùn)算符常常用于比較兩個(gè)True/False的表達(dá)式,共有三個(gè)邏輯操作符:AND(&&),OR(||),NOT(!)。
? 表達(dá)式1 AND 表達(dá)式2
? 表達(dá)式1 OR 表達(dá)式2
? NOT表達(dá)式1
如下圖表所示可以讓大家更清晰地理解邏輯操作符在表達(dá)式中的運(yùn)算結(jié)果
未命名111.JPG (42.58 KB, 下載次數(shù): 290) 2007-8-22 12:16:51 上傳下載次數(shù): 290
[ 本帖最后由 小米 于 2007-8-22 12:19 編輯 ] - 網(wǎng)友回復(fù): TradeBlazer公式入門教程(4)
Step6
前面第一貼已經(jīng)講過了IF語句,接下來要講解條件語句的另外三種表達(dá)方式:
If-Else
If-Else-If
If-Else的嵌套
關(guān)于If-Else語句
If-Else語句是對(duì)指定條件進(jìn)行判斷,如果條件滿足執(zhí)行If后的語句。否則執(zhí)行Else后面的語句。
語法如下:- If (Condition)
- {
- TradeBlazer公式語句1;
- }Else
- {
- TradeBlazer公式語句2;
- }
Condition是一個(gè)邏輯表達(dá)式,當(dāng)Condition為True的時(shí)候,TradeBlazer公式語句1將會(huì)被執(zhí)行;Condition為False時(shí),TradeBlazer公式語句2將會(huì)被執(zhí)行。Condition可以是多個(gè)條件表達(dá)式的邏輯組合,Condition必須用()括起來。
TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。
例如,比較當(dāng)前Bar和上一個(gè)Bar的收盤價(jià),如果Close > Close[1],Value1 = Value1 + Vol;否則Value1 = Value1 - Vol,腳本如下:
- If (Close > Close[1])
- Value1 = Value1 + Vol;
- Else
- Value1 = Value1 - Vol;
關(guān)于If-Else-If的語句
If-Else-If是在If-Else的基礎(chǔ)上進(jìn)行擴(kuò)展,支持條件的多重分支。
語法如下:
- If (Condition1)
- {
- TradeBlazer公式語句1;
- }Else If(Condition2)
- {
- TradeBlazer公式語句2;
- }Else
- {
- TradeBlazer公式語句3;
- }
Condition1是一個(gè)邏輯表達(dá)式,當(dāng)Condition1為True的時(shí)候,TradeBlazer公式語句1將會(huì)被執(zhí)行,Condition1為False時(shí),將會(huì)繼續(xù)判斷Condition2的值,當(dāng)Condition2為True時(shí),TradeBlazer公式語句2將會(huì)被執(zhí)行。Condition2為False時(shí),TradeBlazer公式語句3將會(huì)被執(zhí)行。Condition1,Condition2可以是多個(gè)條件表達(dá)式的邏輯組合,條件表達(dá)式必須用()括起來。
TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。
If-Else-If的語句可以根據(jù)需要一直擴(kuò)展,在最后的Else之后再加If(Condition)和新的執(zhí)行代碼即可。當(dāng)然您也可以省略最后的Else分支,語法如下:
- If (Condition1)
- {
- TradeBlazer公式語句1;
- }Else If(Condition2)
- {
- TradeBlazer公式語句2;
- }
If-Else的嵌套
If-Else的嵌套是在If-Else的執(zhí)行語句中包含新的條件語句,即一個(gè)條件被包含在另一個(gè)條件中。
語法如下:
- If (Condition1)
- {
- If (Condition2)
- {
- TradeBlazer公式語句1;
- }Else
- {
- TradeBlazer公式語句2;
- }
- }Else
- {
- If (Condition3)
- {
- TradeBlazer公式語句3;
- }Else
- {
- TradeBlazer公式語句4;
- }
- }
Condition1是一個(gè)邏輯表達(dá)式,當(dāng)Condition1為True的時(shí)候,將會(huì)繼續(xù)判斷Condition2的值,當(dāng)Condition2為True時(shí),TradeBlazer公式語句1將會(huì)被執(zhí)行。Condition2為False時(shí),TradeBlazer公式語句2將會(huì)被執(zhí)行。當(dāng)Condition1為False的時(shí)候,將會(huì)繼續(xù)判斷Condition3的值,當(dāng)Condition3為True時(shí),TradeBlazer公式語句3將會(huì)被執(zhí)行。Condition3為False時(shí),TradeBlazer公式語句4將會(huì)被執(zhí)行。Condition1,Condition2,Condition3可以是多個(gè)條件表達(dá)式的邏輯組合,條件表達(dá)式必須用()括起來。
TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。
例如,在一個(gè)交易指令中,條件設(shè)置如下:當(dāng)前行情上漲的時(shí)候,如果收盤價(jià)高于開盤價(jià)時(shí),則產(chǎn)生一個(gè)以收盤價(jià)買入1張合約;否則產(chǎn)生一個(gè)以開盤價(jià)買入1張合約。當(dāng)前行情沒有上漲的時(shí)候,如果收盤價(jià)高于開盤價(jià),則產(chǎn)生一個(gè)以收盤價(jià)賣出1張合約;否則產(chǎn)生一個(gè)以開盤價(jià)賣出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);
- }
- }
- 網(wǎng)友回復(fù): TradeBlazer公式入門教程(5)
Step7
現(xiàn)在再回到成交量指標(biāo)
有人喜歡在成交量指標(biāo)上加均線,我們來看如何實(shí)現(xiàn)這樣的功能。- Begin
- PlotNumeric(“Vol”,Vol);
- PlotNumeric(“AvgVol5”,AverageFC(Vol,5));
- End
如下圖中所示便是加了均線的成交量
avgvol.PNG (11.63 KB, 下載次數(shù): 260) 2007-8-23 15:33:38 上傳下載次數(shù): 260
Step8
關(guān)于Average和 AverageFC
Average和AverageFC都是內(nèi)建的用戶函數(shù),目的都是用來求N個(gè)Bar以來的平均值,您可以直接看到實(shí)現(xiàn)的代碼。
如下:
Average
- Params
- NumericSeries Price(1);
- Numeric Length(10);
- Vars
- Numeric AvgValue;
- Begin
- AvgValue = Summation(Price, Length) / Length;
- Return AvgValue;
- End
AverageFC
- Params
- NumericSeries Price(1);
- Numeric Length(10);
- Vars
- Numeric AvgValue;
- Begin
- AvgValue = SummationFC(Price, Length) / Length;
- Return AvgValue;
- End
Average和AverageFC有什么不同呢?AverageFC是指FastCalculate,即快速計(jì)算。當(dāng)這兩個(gè)函數(shù)的第二個(gè)變量,即N個(gè)Bar是常量時(shí),使用AverageFC,提高計(jì)算效率。當(dāng)N是不確定的變量時(shí),則必須使用Average,否則會(huì)出現(xiàn)計(jì)算問題。
單看Average和AverageFC似乎是一樣的,唯一不同的是AvgValue的計(jì)算方式用到的是Summation和SumamtionFC。
Summation和SumamtionFC
現(xiàn)在再來看看Summation與SumamtionFC的不同之處。公式表達(dá)如下:
Summation
- Params
- NumericSeries Price(1);
- Numeric Length(10);
- Vars
- Numeric SumValue(0);
- Numeric i;
- Begin
- If (CurrentBar >= Length-1)
- {
- for i = 0 to Length - 1
- {
- SumValue = SumValue + Price[i];
- }
- }Else
- {
- SumValue = InvalidNumeric;
- }
- Return SumValue;
- End
SummationFC
- Params
- NumericSeries Price(1);
- Numeric Length(10);
- Vars
- NumericSeries SumValue(0);
- Numeric i;
- Begin
- If ( CurrentBar < Length || Price[Length] == InvalidNumeric || SumValue[1] == InvalidNumeric )
- {
- for i = 0 to Length - 1
- {
- SumValue = SumValue + Price[i];
- }
- }Else
- {
- SumValue = SumValue[1] + Price - Price[Length] ;
- }
- Return SumValue;
- End
關(guān)于Average函數(shù)的參數(shù)
Numeric Average(NumericSeries Price, Numeric Length);
Price 需要進(jìn)行平均的序列變量
Length 平均時(shí)回溯的Bar數(shù)量
[ 本帖最后由 小米 于 2007-8-24 10:35 編輯 ]
有思路,想編寫各種指標(biāo)公式,程序化交易模型,選股公式,預(yù)警公式的朋友
可聯(lián)系技術(shù)人員 QQ: 262069696 進(jìn)行 有償 編寫!(不貴!點(diǎn)擊查看價(jià)格!)
相關(guān)文章
-
沒有相關(guān)內(nèi)容