b編程基礎(chǔ)知識必備_第1頁
b編程基礎(chǔ)知識必備_第2頁
b編程基礎(chǔ)知識必備_第3頁
b編程基礎(chǔ)知識必備_第4頁
b編程基礎(chǔ)知識必備_第5頁
已閱讀5頁,還剩70頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

華泰長城期貨有限公司HuataiGreatWallFuturesCo.,Ltd.QQ:909118951交易開拓者(TB)編程基礎(chǔ)----公式篇b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第1頁!基本框架TB公式概述1數(shù)據(jù)2語句3變量5數(shù)據(jù)回溯6參數(shù)4公式1b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第2頁!什么是TradeBlazer公式

1、TradeBlazer公式是一種專為分析金融數(shù)據(jù)-時間序列而設(shè)計的高級語言,它提供直接、強大的框架將交易思想轉(zhuǎn)化為用戶函數(shù)、技術(shù)分析,交易指令等計算機(jī)能夠識別的代碼。2、TradeBlazer公式是一門語法簡單但是功能強大的語言,利用它能創(chuàng)建自己的交易和技術(shù)分析工具。通過組合普通的交易指令和簡單的語句,TradeBlazer公式能夠很容易并且直接的用簡單語句表達(dá)自己的交易規(guī)則和行為。3、交易開拓者能夠讀取TradeBlazer公式,在歷史價格數(shù)據(jù)基礎(chǔ)上進(jìn)行評估,并能自動執(zhí)行特定的交易動作,將交易思想轉(zhuǎn)化為實際的交易操作。概述b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第3頁!TradeBlazer公式能做什么?通過TradeBlazer公式,能夠創(chuàng)建自己的交易指令、技術(shù)指標(biāo)、K線型態(tài)、特征走勢、用戶函數(shù)。TradeBlazer公式包含的公式類型如下:用戶函數(shù):用戶函數(shù)是能夠通過函數(shù)名稱進(jìn)行引用的指令集,它執(zhí)行一系列操作并返回一個值。您可以在其他任何公式中使用用戶函數(shù)進(jìn)行計算;技術(shù)指標(biāo):技術(shù)指標(biāo)是基于基礎(chǔ)數(shù)據(jù),通過一系列的數(shù)學(xué)運算,在每個Bar返回相應(yīng)的結(jié)果值的一類公式,這些值在圖表模塊中輸出為線條、柱狀圖、點等表現(xiàn)形式;K線型態(tài):K線型態(tài)是類似于技術(shù)指標(biāo)的一類公式,它主要著重于反映一段K線的特定型態(tài),并通過不同的技術(shù)指標(biāo)的方式輸出到圖表;特征走勢:特征走勢是類似于技術(shù)指標(biāo)的一類公式,它主要著重于反映整個價格曲線的趨勢、變化特征,并通過特定的表達(dá)方式輸出到圖表;交易指令:交易指令是包含買、賣、平倉,頭寸,倉位控制的并執(zhí)行交易指令的一類公式,它主要幫助您將您的交易思想轉(zhuǎn)化為計算機(jī)的操作。通過調(diào)用TradeBlazer公式,您可以在交易開拓者中進(jìn)行技術(shù)分析、交易策略優(yōu)化測試、公式報警、自動交易等操作。概述b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第4頁!Bar數(shù)據(jù)

所有的Bar按照不同周期組合,并按照時間從先到后進(jìn)行排列,由此形成為序列數(shù)據(jù),整個序列稱之為Bar數(shù)據(jù)。以下列出所有的Bar數(shù)據(jù)系統(tǒng)函數(shù):

函數(shù)名簡寫描述DateD當(dāng)前Bar的日期。TimeT當(dāng)前Bar的時間。OpenO當(dāng)前Bar的開盤價。HighH當(dāng)前Bar的最高價。LowL當(dāng)前Bar的最低價。CloseC當(dāng)前Bar的收盤價。VolV當(dāng)前Bar的成交量。OpenInt無當(dāng)前Bar的持倉量。CurrentBar無當(dāng)前Bar的索引值,從0開始計數(shù)。BarStatus無當(dāng)前Bar的狀態(tài)值,0表示為個Bar,1表示為中間的普通Bar,2表示最后一個Bar。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第5頁!在公式的編寫中,經(jīng)常會遇到當(dāng)前Bar的數(shù)據(jù)和上一個Bar,上N個Bar數(shù)據(jù)進(jìn)行比較,計算的情況,針對這種情況,TradeBlazer公式提供了一種處理機(jī)制:回溯。即對數(shù)據(jù)的向前引用,比如,獲取上一個Bar的收盤價:Close[1],獲取10天前的成交量:Vol[10]。以下提供一個簡單的例子來說明如何進(jìn)行回溯處理。假定有如下語句:If(Close>Close[1]){Buy(1,Close);}以上公式執(zhí)行一個簡單的操作,當(dāng)前Bar的收盤價大于上一個Bar的收盤價,即執(zhí)行按照當(dāng)前收盤價買入1手的動作。根據(jù)上表的數(shù)據(jù),公式將在CurrentBar為2和3的時候調(diào)用Buy指令。如果您足夠仔細(xì)的話,您會發(fā)現(xiàn):對于上面的一段公式的執(zhí)行,有一個小小的問題,當(dāng)次計算公式時,即CurrentBar=0時,這個時候需要獲取上一個Bar的數(shù)據(jù),但是當(dāng)前Bar已經(jīng)是個Bar,這個時候就存在著問題,如何來獲取此時的Close[1]呢,TradeBlazer公式將默認(rèn)Close[1]為無效值,即系統(tǒng)函數(shù)中的InvalidNumeric,Close>Close[1]的表達(dá)式計算結(jié)果是一個Bool值,其結(jié)果也是一個無效值,對于Bool值,我們將False作為其無效值。因此,個Bar計算時,Buy指令不會被執(zhí)行。對于技術(shù)分析這類公式來說,假定Bar數(shù)據(jù)的總數(shù)共有100,相同的代碼將從CurrentBar=0到CurrentBar=99共執(zhí)行100遍,分別輸出公式中的結(jié)果值。注意:在執(zhí)行TradeBlazer公式時,可能出現(xiàn)數(shù)據(jù)不存在的情況,可通過系統(tǒng)函數(shù)HistoryDataExist進(jìn)行判斷,如果該函數(shù)返回True,即為Bar數(shù)據(jù)有效。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第6頁!

數(shù)據(jù)類型TradeBlazer公式支持有三種基本數(shù)據(jù)類型:數(shù)值型、字符串、布爾型。為了通過用戶函數(shù)返回多個值,我們對三種數(shù)據(jù)類型進(jìn)行了擴(kuò)展,增加了引用數(shù)據(jù)類型。另外,為了對變量,參數(shù)進(jìn)行回溯,我們增加了序列數(shù)據(jù)類型。因此,我們的數(shù)據(jù)類型共有九種,如下表所示:名稱說明Bool布爾型。BoolRef布爾型引用。BoolSeries和周期長度一致的Bool型序列值。Numeric數(shù)值型。NumericRef數(shù)值型引用。NumericSeries和周期長度一致的Numeric型序列值。String字符串。StringRef字符串引用。StringSeries和周期長度一致的String型序列值。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第7頁!命名規(guī)則

公式名稱規(guī)則:不區(qū)分大小寫;不能超過32個英文字符;每一類公式不能出現(xiàn)相同的名稱;公式名稱不能出現(xiàn)字母、數(shù)字、下劃線以外的其他字符;公式名稱不能和系統(tǒng)保留字,系統(tǒng)函數(shù)等重名。變量,參數(shù)規(guī)則:不區(qū)分大小寫;不能超過32個英文字符;每一個公式內(nèi)部能不能重復(fù)命名;名稱不能出現(xiàn)字母、數(shù)字、下劃線以外的其他字符;名稱不能和系統(tǒng)保留字,系統(tǒng)函數(shù)等重名;不能使用已定義的用戶函數(shù)名。語句前奏b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第8頁!操作符說明+加-減*乘/除%求模^求冪()括號操作符說明<小于>大于<=小于等于>=大于等于<>不等于==等于表達(dá)式1表達(dá)式2表達(dá)式1AND表達(dá)式2TrueTrueTrueTrueFalseFalseFalseTrueFalseFalseFalseFalse表達(dá)式1表達(dá)式2表達(dá)式1OR表達(dá)式2TrueTrueTrueTrueFalseTrueFalseTrueTrueFalseFalseFalseAND邏輯操作符的應(yīng)用情況:

OR邏輯操作符的應(yīng)用情況:表達(dá)式1NOT表達(dá)式1TrueFalseFalseTrueNOT邏輯操作符的應(yīng)用情況:

算術(shù)運算符號關(guān)系運算符號b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第9頁!使用注釋注釋可以標(biāo)注解釋語句,公式在編譯執(zhí)行時會忽略注釋語句。注釋分為單行注釋和多行注釋。單行注釋在單行中對需要注釋部分之前通過添加//,使//之后的語句形成注釋。以下是注釋的例子://這是一個注釋語句;多行注釋在需要注釋的部分之前添加/*,之后添加*/,形成注釋。以下是注釋的例子:/*這是一個多行注釋的語句;*/b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第10頁!功能關(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假。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第11頁!語句概念一個語句代表一個完全的指示或描述,語句中包含有保留字、操作符、符號。并且語句總是以";"作為語句結(jié)束的標(biāo)志。以下為語句的一些例子:Thisisonestatement;Thisisanotherstatement;Thisis

onestatement;Thisis

another

statement

;Thisisyetanother;Thisisonestatement;Thisisanother;語句b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第12頁!控制語句TradeBlazer公式支持兩大類的控制語句:條件語句和循環(huán)語句。條件語句條件語句包括以下四類表達(dá)方式:IfIf-ElseIf-Else-IfIf-Else的嵌套循環(huán)語句循環(huán)語句包括兩種表達(dá)方式:For和While。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第13頁!在TradeBlazer公式中,If語句被廣泛使用,如K線型態(tài)和特征走勢,都需要大量的使用If語句,當(dāng)條件滿足的時候,在滿足條件的Bar上面進(jìn)行標(biāo)記。例如,下面的語句就是特征走勢的例子:If(High>High[1]ANDLow<Low[1]){PlotNumeric("OutsideBar",High);}If語句在不是用括號的情況,只執(zhí)行下面的條語句,如下的語句,Alert不會只在條件為True時執(zhí)行,而是每次都執(zhí)行。If(High>High[1]ANDLow<Low[1])PlotNumeric("OutsideBar",High);Alert("OutsideBar");要想Alert只在條件為True時執(zhí)行,您需要按照下面的格式編寫:If(High>High[1]ANDLow<Low[1]){PlotNumeric("OutsideBar",High);Alert("OutsideBar");}b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第14頁!If-Else-If語句If-Else-If是在If-Else的基礎(chǔ)上進(jìn)行擴(kuò)展,支持條件的多重分支。語法如下:If(Condition1){TradeBlazer公式語句1;}ElseIf(Condition2){TradeBlazer公式語句2;}Else{TradeBlazer公式語句3;}Condition1是一個邏輯表達(dá)式,當(dāng)Condition1為True的時候,TradeBlazer公式語句1將會被執(zhí)行,Condition1為False時,將會繼續(xù)判斷Condition2的值,當(dāng)Condition2為True時,TradeBlazer公式語句2將會被執(zhí)行。Condition2為False時,TradeBlazer公式語句3將會被執(zhí)行。Condition1,Condition2可以是多個條件表達(dá)式的邏輯組合,條件表達(dá)式必須用()括起來。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第15頁!If-Else的嵌套If-Else的嵌套是在If-Else的執(zhí)行語句中包含新的條件語句,即一個條件被包含在另一個條件中。語法如下:If(Condition1){If(Condition2){TradeBlazer公式語句1;}Else{TradeBlazer公式語句2;}}Else{If(Condition3){TradeBlazer公式語句3;}Else{TradeBlazer公式語句4;}}b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第16頁!循環(huán)語句ForFor語句是一個循環(huán)語句,重復(fù)執(zhí)行某項操作,直到循環(huán)結(jié)束。語法如下:For循環(huán)變量=初始值To結(jié)束值{TradeBlazer公式語句;}循環(huán)變量為在之前已經(jīng)定義的一個數(shù)值型變量,F(xiàn)or循環(huán)的執(zhí)行是從循環(huán)變量從初始值到結(jié)束值,按照步長為1遞增,依次執(zhí)行TradeBlazer公式語句。結(jié)束值必須大于或等于初始值才有意義,初始值和結(jié)束值可以使用浮點數(shù),但是在執(zhí)行過程中會被直接取整。只計算其整數(shù)部分。TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第17頁!如果希望For語句從大到小進(jìn)行循環(huán),可以使用以下的語法:For循環(huán)變量=初始值DownTo結(jié)束值{TradeBlazer公式語句;}For-DownTo讓循環(huán)變量從結(jié)束值每次遞減1直到等于結(jié)束值,依次調(diào)用TradeBlazer公式語句執(zhí)行,初始值必須大于或等于結(jié)束值才有意義。For語句是比較常用的一種循環(huán)控制語句,它應(yīng)用于知道循環(huán)次數(shù)的地方,很多內(nèi)建用戶函數(shù)中都使用For語句來完成相應(yīng)的功能,比如Summation,Highest,Lowest,LinearReg等。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第18頁!大于100000成交量需要最近Bar的個數(shù):VarsNumeric SumVolume(0);Numeric Counter(0);BeginWhile(SumVolume<100000){SumVolume=SumVolume+Vol[Counter];

Counter=Counter+1;}End首先,我們定義兩個變量SumVolume和Counter,并將其默認(rèn)值設(shè)為0。當(dāng)SumVolume<100000這個表達(dá)式為True時,While內(nèi)的TradeBlazer公式語句一直被調(diào)用,將前Counter個Bar的Vol加到SumVolume中,當(dāng)SumVolume大于等于100000時,退出循環(huán)。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第19頁!Continue語句有的時候在循環(huán)中,我們可能希望跳過后面的代碼,進(jìn)入下一次循環(huán),在這種情況下,可以使用Continue語句來達(dá)到目的,如下:While(Condition1){TradeBlazer公式語句1;If(Condition2) Continue;TradeBlazer公式語句2;}當(dāng)Condition1滿足時,循環(huán)被執(zhí)行,在執(zhí)行完TradeBlazer公式語句1后,將判斷Condition2的值,當(dāng)Condition2為True,將跳過TradeBlazer公式語句2,重新判斷Condition1的值,進(jìn)入下一次循環(huán)。否則將繼續(xù)執(zhí)行TradeBlazer公式語句2。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第20頁!參數(shù)類型在介紹參數(shù)類型之前,我們需要對于TradeBlazer公式的六種類型(交易指令、技術(shù)指標(biāo)、K線型態(tài)、特征走勢、用戶函數(shù)以及用戶字段)作一些說明,用戶函數(shù)是六種公式中比較特殊的一類,它自身不能被超級圖表,行情報價這樣的模塊調(diào)用,只能被其他五類公式或者用戶函數(shù)調(diào)用,因此它的參數(shù)類型也和其他幾種不一樣。用戶函數(shù)的參數(shù)類型可以包含TradeBlazer公式的九種類型,而其他五類公式只能使用三種簡單的基本類型(數(shù)值型、字符串、布爾型)。三種簡單類型參數(shù)通過傳值的方式將參數(shù)值傳入公式,公式內(nèi)部通過使用參數(shù)名稱,將參數(shù)值用來進(jìn)行計算或賦值。引用參數(shù)是在調(diào)用的時候傳入一個變量的地址,在用戶函數(shù)內(nèi)部會修改參數(shù)的值,在函數(shù)執(zhí)行完畢,上層調(diào)用的公式會通過變量獲得修改后的值,引用參數(shù)對于需要通過用戶函數(shù)返回多個值的情況非常有用。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第21頁!參數(shù)的默認(rèn)值在聲明參數(shù)時,通常會賦給參數(shù)一個默認(rèn)值。例如上例中的False,10,0等就是參數(shù)的默認(rèn)值。用戶函數(shù)的默認(rèn)值是在當(dāng)用戶函數(shù)被其他公式調(diào)用,省略參數(shù)時作為參數(shù)的輸入值,其他五種公式的默認(rèn)值是用于圖表,報價等模塊調(diào)用公式時默認(rèn)的輸入值。參數(shù)的默認(rèn)值的類型在定義的時候指定,默認(rèn)值在公式調(diào)用的時候傳入作為參數(shù)進(jìn)行計算。只能夠?qū)ε帕性诤竺娴哪切﹨?shù)提供默認(rèn)參數(shù),例如:ParamsNumeric MyVal1;Numeric MyVal2(0);Numeric MyVal3(0);您不能夠使用以下方式對參數(shù)的默認(rèn)值進(jìn)行設(shè)定:ParamsNumeric MyVal1(0);Numeric MyVal2(0);Numeric MyVal3;b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第22頁!引用參數(shù)TradeBlazer公式的用戶函數(shù)可以通過返回值,返回函數(shù)的計算結(jié)果,返回值只能是三種簡單類型。當(dāng)我們需要通過函數(shù)進(jìn)行計算,返回多個值的時候,單個的返回值就不能滿足需求了。在這種情況下,我們提出了引用參數(shù)的概念,引用參數(shù)是在調(diào)用的時候傳入一個變量的地址,在用戶函數(shù)內(nèi)部會修改參數(shù)的值,在函數(shù)執(zhí)行完畢,上層調(diào)用的公式會通過變量獲得修改后的值。因為引用參數(shù)的使用是沒有個數(shù)限制,因此,我們可以通過引用參數(shù)返回任意多個值。例如,用戶函數(shù)MyFunc如下:ParamsNumericSeriesPrice(0);NumericRefoHigher(0);NumericRefoLower(0);VarsNumericTmp(0);BeginTmp=Average(Price,10);oHigher=IIf(Tmp>High,Tmp,High);oLower=IIf(Tmp<Low,Tmp,Low);ReturnTmp;End

b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第23頁!定義變量是一個存儲值的地址,當(dāng)變量被聲明之后,就可以在腳本中使用變量,可以對其賦值,也可以在其他地方引用變量的值進(jìn)行計算,要對變量進(jìn)行操作,直接使用變量名稱即可。變量的主要用處在于它可以存放計算或比較的結(jié)果,以方便在之后的腳本中直接引用運算的值,而無需重現(xiàn)計算過程。例如,我們定義一個變量Y,我們把一個收盤價(Close)乘上8%的所得的值存儲在Y中,即Y=Close*8%。那么一旦計算出Close*8%的值,便賦給變量Y。而無需在公式中輸入計算過程,只需調(diào)用變量名稱即可引用變量的值。變量有助于程序的優(yōu)化,這是TradeBlazer公式必須重復(fù)調(diào)用一些數(shù)據(jù),這些數(shù)據(jù)可能是某些函數(shù)(如:Bar數(shù)據(jù)),或通過表達(dá)式執(zhí)行計算和比較的值。因此,在表達(dá)式頻繁使用的地方使用變量可提高程序的運行速度和節(jié)約內(nèi)存空間。使用變量也可以避免輸入錯誤,使程序的可讀性提高,示例如下:If(Close>High[1]+Average(Close,10)*0.5){Buy(100,High[1]+Average(Close,10)*0.5);}如果使用變量,則整個代碼變得簡潔:Value1=High[1]+Average(Close,10)*0.5;If(Close>Value1){Buy(100,Value1);}如果一些表達(dá)式的組合經(jīng)常在不同的公式中被調(diào)用,這個時候變量就不能實現(xiàn)功能,變量只能在單個公式的內(nèi)部使用,這個時候我們需要建立用戶函數(shù)來完成這些功能。

變量b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第24頁!變量聲明在使用變量之前,必須對變量進(jìn)行聲明,TradeBlazer公式使用關(guān)鍵字"Vars"來進(jìn)行變量宣告,并指定變量類型。可以選擇賦默認(rèn)值,也可以不賦默認(rèn)值。變量定義的語法如下:Vars變量類型變量名1(初值);變量類型變量名2(初值);變量類型變量名3(初值);下面是一些變量定義的例子:VarsNumericSeriesMyVal1(0);//定義數(shù)值型序列變量MyVal1,默認(rèn)值為0;NumericMyVal2(0);//定義數(shù)值型變量MyVal2,默認(rèn)值為0;BoolMyVal3(False);//定義布爾型變量MyVal3,默認(rèn)值為False;StringMyVal4("Test");//定義字符串變量MyVal4,默認(rèn)值為Test。變量定義的個數(shù)沒有限制,變量名稱的命名規(guī)范詳細(xì)說明參見命名規(guī)則。整個公式中只能出現(xiàn)一個Vars宣告,并且要放到公式的開始部分,在參數(shù)定義之后,正文之前。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第25頁!變量賦值變量聲明完成之后,您可以在腳本正文中給變量指定一個值。語法如下:Name=Expression;"Name"是變量的名稱,表達(dá)式的類型可以是數(shù)值型、布爾型、字符串中的任何一種。不過表達(dá)式的類型一定要和變量的數(shù)據(jù)類型相匹配。如果變量被指定為是數(shù)值型的,那么表達(dá)式一定要是數(shù)值型的表達(dá)式。例如:下面的語句將Close的10周期平均值賦值給變量Value1:Value1=Average(Close,10);在下面這個語句中,聲明了一個名為"KeyReversal"的邏輯型變量,然后又把計算的值賦給它。VarsBoolKeyReversal(False);BeginKeyReversal=Low<Low[1]ANDClose>High[1];...Endb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第26頁!接下來的例子,我們計算最近10個Bar最高價中的最大值(不包括當(dāng)前Bar),對比當(dāng)前High,然后通過If語句,產(chǎn)生報警信息。VarsBoolCon1(False);BeginCon1=High>Highest(High,10)[1];If(Con1){Alert("New10-barhigh");}End其實我們并不一定都要應(yīng)用條件為True的情況,有時候我們需要判斷條件為False的時候執(zhí)行某些代碼,如下的例子:VarsBoolCon1(False);BeginCon1=High<Highest(High,10)[1]ANDLow>Lowest(Low,10)[1];If(Con1==False){Alert("Newhighorlow");}Endb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第27頁!數(shù)據(jù)回溯在TradeBlazer公式中有三種類型的數(shù)據(jù)回溯:變量回溯、參數(shù)回溯和函數(shù)回溯。數(shù)據(jù)回溯b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第28頁!參數(shù)回溯TradeBlazer公式支持的九種基本類型,在用戶函數(shù)的參數(shù)定義中全部支持,在其他的公式中參數(shù)定義只支持三種簡單類型。因此,關(guān)于參數(shù)的回溯問題,只對用戶函數(shù)有效,以下我們舉例說明用戶函數(shù)序列參數(shù)的使用。要使用參數(shù)回溯,需要在參數(shù)的后面,使用中括號"[nOffset]",nOffset是要回溯引用的Bar相對于當(dāng)前Bar的偏移值,該值必須大于等于0,當(dāng)nOffset=0時,即為獲取當(dāng)前Bar的參數(shù)值。例如,我們定義一個用戶函數(shù)MyFunc,腳本如下:ParamsNumericSeriesPrice(0);NumericLength(10);VarsNumericMyAvg;NumericMyDeviation;BeginMyAvg=Summation(Price,Length)/Length;MyDeviation=MyAvg-Price[Length];ReturnMyDeviation;End以上的例子,對輸入的Price我們求其10個周期的平均值,然后求出該平均值和Price的前Length個Bar的值之間的差值,將其返回。對于Price[Length]這樣的參數(shù)回溯引用,其實現(xiàn)原理和上節(jié)所描述的變量回溯引用基本一致。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第29頁!如下面的腳本所示,取Close的10個Bar平均值的4個周期前的回溯值:VarsNumericSeriesAvgValue;NumericTmpValue;BeginAvgValue=Average(Close,10);TmpValue=AvgValue[4];

...Endb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第30頁!用戶函數(shù)用戶函數(shù)是可以通過名稱進(jìn)行調(diào)用的一組語句的集合,用戶函數(shù)返回一個值,這個值可以是Numeric,Bool,String三種類型中的任何一種。您可以在需要的任何地方調(diào)用用戶函數(shù)來完成相應(yīng)的功能。例如,經(jīng)常使用的一個用戶函數(shù)Summation,Summation通過輸入Price序列數(shù)據(jù),以及Length統(tǒng)計周期數(shù),計算Price最近Length周期的和,每次用戶需要進(jìn)行求和計算的時候,都可以調(diào)用Summation代替冗長的求和代碼,輸入?yún)?shù)并獲取返回值。在調(diào)用Summation的時候,需要根據(jù)定義時候的參數(shù)列表和順序,輸入相應(yīng)的輸入?yún)?shù),有默認(rèn)值的參數(shù)可以省略輸入?yún)?shù)。在被調(diào)用的時候格式如下:Value1=Summation(Close,10);b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第31頁!規(guī)則用戶函數(shù)在交易開拓者中使用有如下規(guī)則:支持九種類型的參數(shù)定義,支持指定參數(shù)默認(rèn)值;支持使用引用參數(shù),可通過引用參數(shù)返回多個數(shù)據(jù);支持六種類型的變量定義,支持指定變量的默認(rèn)值;可以訪問Data0-Data49個數(shù)據(jù)源的Bar數(shù)據(jù);可以訪問行情數(shù)據(jù)、屬性數(shù)據(jù);必須通過Return返回數(shù)據(jù),返回數(shù)據(jù)類型為三種基本類型之一;腳本中的返回數(shù)據(jù)類型必須和屬性界面設(shè)置中一致;用戶函數(shù)之間可以相互調(diào)用,用戶函數(shù)自身也可以遞歸調(diào)用;用戶函數(shù)可以根據(jù)設(shè)置調(diào)用部分的系統(tǒng)函數(shù)。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第32頁!對于使用多個輸出的情況,即使用引用參數(shù)的情況,我們以求N周期最大值為例進(jìn)行描述,假定我們需要編寫一個用戶函數(shù),該函數(shù)需要求出序列變量Price在最近Length周期內(nèi)的最大值,并且要求出最大值出現(xiàn)的Bar和當(dāng)前Bar的偏移值。腳本如下:ParamsNumericSeriesPrice(1);NumericLength(10);NumericRefHighestBar(0);VarsNumericMyVal;NumericMyBar;Numerici;BeginMyVal=Price;MyBar=0;Fori=1toLength-1{ If(Price[i]>MyVal){MyVal=Price[i]; MyBar=i; }}HighestBar=MyBar;ReturnMyVal;Endb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第33頁!函數(shù)參數(shù)聲明類型可傳入的變量類型NumericNumeric,NumericRef,NumericSeriesNumericRefNumeric,NumericRef,NumericSeriesNumericSeriesNumericSeriesBoolBool,BoolRef,BoolSeriesBoolRefBool,BoolRef,BoolSeriesBoolSeriesBoolSeriesStringString,StringRef,StringSeriesStringRefString,StringRef,StringSeriesStringSeriesStringSeriesb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第34頁!技術(shù)指標(biāo)的使用規(guī)則技術(shù)指標(biāo)的使用規(guī)則歸納如下:支持三種基本類型的參數(shù)定義,支持指定參數(shù)默認(rèn)值;不支持使用引用參數(shù);支持六種類型的變量定義,支持指定變量的默認(rèn)值;可以訪問Data0-Data49個數(shù)據(jù)源的Bar數(shù)據(jù);可以訪問行情數(shù)據(jù)、屬性數(shù)據(jù);必須通過PlotNumeric、PlotBool、PlotString返回數(shù)據(jù),返回數(shù)據(jù)類型為三種基本類型的組合;可以輸出多組數(shù)據(jù),通過PlotNumeric、PlotBool、PlotString的個參數(shù),即輸出名稱來區(qū)分輸出數(shù)據(jù);可以支持Alert來進(jìn)行報警;技術(shù)指標(biāo)可以調(diào)用所有的用戶函數(shù)進(jìn)行計算;技術(shù)指標(biāo)可以根據(jù)設(shè)置調(diào)用部分的系統(tǒng)函數(shù);技術(shù)指標(biāo)在執(zhí)行時,必須要指定相應(yīng)的數(shù)據(jù)源和周期,需要調(diào)用歷史數(shù)據(jù)的,只有歷史數(shù)據(jù)存在的情況下才能返回正確的值。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第35頁!PlotNumeric用法b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第36頁!使用規(guī)則特征走勢的使用規(guī)則歸納如下:支持三種基本類型的參數(shù)定義,支持指定參數(shù)默認(rèn)值;不支持使用引用參數(shù);支持六種類型的變量定義,支持指定變量的默認(rèn)值;可以訪問Data0-Data49個數(shù)據(jù)源的Bar數(shù)據(jù);可以訪問行情數(shù)據(jù)、屬性數(shù)據(jù);必須通過PlotNumeric、PlotBool、PlotString返回數(shù)據(jù),返回數(shù)據(jù)類型為三種基本類型的組合;只能輸出一組數(shù)據(jù),用名稱進(jìn)行區(qū)分;可以支持Alert來進(jìn)行報警;特征走勢可以調(diào)用所有的用戶函數(shù)進(jìn)行計算;特征走勢可以根據(jù)設(shè)置調(diào)用部分的系統(tǒng)函數(shù);特征走勢在執(zhí)行時,必須要指定相應(yīng)的數(shù)據(jù)源和周期,需要調(diào)用歷史數(shù)據(jù)的,只有歷史數(shù)據(jù)存在的情況下才能返回正確的值。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第37頁!交易指令TradeBlazer公式提供一種簡單的方法表達(dá)您的交易思想,那就是使用交易指令,一個簡單的交易指令如下:If(Condition)Buy(1,Close);以上的語句表達(dá)的意思是:當(dāng)某些條件滿足了,將用當(dāng)前Bar的收盤價買入1手指定商品。就像您平時通過經(jīng)紀(jì)商進(jìn)行交易操作一樣,TradeBlazer公式提供四個系統(tǒng)函數(shù)和現(xiàn)實中的四種交易動作進(jìn)行對應(yīng),如下:函數(shù)名描述Buy平掉所有空頭持倉,開多頭倉位。Sell平掉指定的多頭持倉。SellShort平掉所有多頭持倉,開空頭倉位。BuyToCover平掉指定的空頭持倉。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第38頁!MACD_LE在零軸之上,當(dāng)MACDValue向上穿過AvgMACD值時為產(chǎn)生多頭買入指令示例,交易指令MACD_LE,腳本如下:ParamsNumericFastLength(12);NumericSlowLength(26);NumericMACDLength(9);NumericBuyLots(1);VarsNumericSeriesMACDValue;NumericSeriesAvgMACD;NumericMACDDiff;BoolCondition1;BoolCondition2;BeginMACDValue=XAverage(Close,FastLength)-XAverage(Close,SlowLength);AvgMACD=XAverage(MACDValue,MACDLength);MACDDiff=MACDValue-AvgMACD;Condition1=CrossOver(MACDValue,AvgMACD);Condition2=MACDValue>0;if(Condition1AndCondition2){Buy(BuyLots,Close);}End。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第39頁!數(shù)據(jù)類型Bar數(shù)據(jù),是指商品在不同周期下形成的序列數(shù)據(jù),在單獨的每個Bar上面包含開盤價、收盤價、最高價、最低價、成交量及時間。期貨等品種還有持倉量等數(shù)據(jù)。疊加數(shù)據(jù),交易開拓者的超級圖表支持商品疊加的顯示,當(dāng)疊加的圖表調(diào)用各項公式時,可能有需要使用疊加的商品對應(yīng)的基礎(chǔ)數(shù)據(jù),針對這樣的需求,TradeBlazer公式提供了疊加數(shù)據(jù)的支持。行情數(shù)據(jù),TradeBlazer公式還可以支持實時行情數(shù)據(jù)的調(diào)用,行情數(shù)據(jù)是指當(dāng)前商品最新的報價數(shù)據(jù),該數(shù)據(jù)和Bar無關(guān),行情數(shù)據(jù)的回溯沒有意義。屬性數(shù)據(jù),除了以上的各項數(shù)據(jù)之外,TradeBlazer公式還提供一組重要的屬性數(shù)據(jù),反映了該商品的一些基本信息,比如當(dāng)前數(shù)據(jù)周期,買賣盤個數(shù)、保證金設(shè)置等信息。在所有的Bar上面獲取的市場屬性數(shù)據(jù)都是一樣的,屬性數(shù)據(jù)的回溯沒有意義。數(shù)據(jù)b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第40頁!計算方法TradeBlazer公式在計算時按照Bar數(shù)據(jù)的Bar數(shù)目,從個Bar到最后一個Bar,依次進(jìn)行計算,如果公式中出現(xiàn)了調(diào)用Bar數(shù)據(jù)函數(shù)的,則取出當(dāng)前Bar的相應(yīng)值,進(jìn)行運算。如下圖箭頭所示,公式執(zhí)行從上至下,Bar從左到右執(zhí)行。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第41頁!疊加數(shù)據(jù)交易開拓者的超級圖表支持商品疊加的顯示,當(dāng)疊加的圖表調(diào)用各項公式時,可能有需要使用疊加的商品對應(yīng)的基礎(chǔ)數(shù)據(jù)假定,我們新建一個超級圖表模塊,其主數(shù)據(jù)對應(yīng)的商品為:cu1107,在此基礎(chǔ)上,我們疊加了cu1108和cu1109。此時,根據(jù)疊加操作的先后順序,cu1107為Data0,cu1108為Data1,cu1109為Data2,在TradeBlazer公式中,我們可以通過Data1.Close(),Data2.Vol()類似方法調(diào)用疊加Bar數(shù)據(jù),疊加Bar數(shù)據(jù)的函數(shù)和Bar數(shù)據(jù)一樣,只是需要在調(diào)用的時候加上數(shù)據(jù)源。我們也可以使用Data0.Open()來調(diào)用Bar數(shù)據(jù),默認(rèn)情況下,可以省略對主數(shù)據(jù)源的指定,為了方便,一般直接使用Open()來代替Data0.Open()。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第42頁!數(shù)值型的表達(dá)式可以是一個數(shù)字,當(dāng)然,他們也可以是一個數(shù)值型的保留字,例如:保留字"Close"?;蛘呤峭ㄟ^運算符號組合的一個計算表達(dá)式,該表達(dá)式的結(jié)果是數(shù)值型。下文中的例子都是數(shù)值型的表達(dá)式。154;Vol;(High+Low)/2;布爾型的表達(dá)式能夠返回一個值True/False,或者說它可以對表達(dá)式的值進(jìn)行評估,然后返回其值,要么為True,要么為False。邏輯表達(dá)式永遠(yuǎn)要涉及到比較運算,下面我們有一些邏輯表達(dá)式,它也就是對一個表達(dá)式的值是True還是False進(jìn)行判斷。Close>Open;5<2;字符串的表達(dá)式可以是單個字符串,也可以字符串的組合,或者返回值為字符串的系統(tǒng)函數(shù),如下,就是一個字符串的表達(dá)式:"Thisisateststringexpression";"Hello"+"World";

b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第43頁!運算符

類型保留字算術(shù)運算符+-*/%^關(guān)系運算符>>=<<===<>邏輯運算符AND/&&OR/||NOT/!括號(){}[]其它.,b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第44頁!字符串操作符"+"是唯一的可以應(yīng)用于控制字符串表達(dá)式的數(shù)學(xué)操作符,它可用于連接兩個文本字符串為一個字符串。如下:"這是一個字符串表達(dá)式,"+"返回值為數(shù)值型。";"ThisisexpressionA"+"andthisisexpressionB.";上面字符串表達(dá)式的輸出值,應(yīng)該是"這是一個字符串表達(dá)式,返回值為數(shù)值型。"和"ThisisexpressionAandthisisexpressionB."。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第45頁!

標(biāo)點符號通常,在寫語句的過程中,會用到很多的標(biāo)點符號。可用來定義參數(shù)、定義變量、創(chuàng)建規(guī)則的優(yōu)先權(quán)。例如,TradeBlazer公式用";"來標(biāo)注一個語句結(jié)束。標(biāo)點符號也是一個保留字,因為符號也是語言結(jié)構(gòu)的一部分,在下表中列出了TradeBlazer公式中所用到的標(biāo)點符號,和該標(biāo)點符號所表達(dá)的意思:符號名稱說明;分號語句結(jié)束的標(biāo)志。,逗號當(dāng)函數(shù)帶有多個參數(shù)時,用于分隔多個參數(shù)。()小括號括號之內(nèi)的表達(dá)式有計算的優(yōu)先權(quán)。""雙引號字符串常量。[]中括號回溯數(shù)據(jù),引用以前的數(shù)據(jù),或者數(shù)組中的元素。{}大括號控制語句的起始。.點擴(kuò)展數(shù)據(jù)源的數(shù)據(jù)調(diào)用。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第46頁!數(shù)據(jù)源保留字說明Data0-Data49支持50個數(shù)據(jù)源。數(shù)據(jù)輸出保留字說明FieldBool用戶字段的布爾型返回數(shù)據(jù)。FieldNumeric用戶字段的數(shù)值型返回數(shù)據(jù)。FieldString用戶字段的字符串返回數(shù)據(jù)。PlotBool輸出布爾型值。PlotNumeric輸出數(shù)值型值。PlotString輸出字符串值。PlotBar畫K線型態(tài)。UnPlot取消指定位置的輸出。Commentary在超級圖表當(dāng)前Bar添加一行注釋信息。Alert報警輸出。Buy買入操作。Sell賣出操作。...其他系統(tǒng)函數(shù)。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第47頁!賦值語句賦值語句用于給公式變量指定一個具體的值的語句,賦值語句使用賦值操作符(=)進(jìn)行處理。以下為賦值語句的一些例子:VarsBoolb;BeginB=true;...EndVarsNumericValue1;BeginValue1=(Close+Open)/2;...EndVarsStringstr;Beginstr="ItIsATest!";...Endb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第48頁!If語句If語句是一個條件語句,當(dāng)特定的條件滿足后執(zhí)行一部分操作。If(Condition){TradeBlazer公式語句;}Condition是一個邏輯表達(dá)式,當(dāng)Condition為True的時候,TradeBlazer公式語句將會被執(zhí)行,Condition可以是多個條件表達(dá)式的邏輯組合,Condition必須用()括起來。TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。例如,您可以計算圖表中上升缺口(當(dāng)前Bar的開盤價高于上一個Bar的最高價)出現(xiàn)了多少次,只要在圖表中使用If語句,當(dāng)找到一個滿足條件的Bar時,即條件為真時,變量加1,腳本如下:VarsNumericSeriesCounter(0);BeginIf(Open>High[1]){Counter=Counter[1]+1;...}Endb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第49頁!if-Else語句If-Else語句是對指定條件進(jìn)行判斷,如果條件滿足執(zhí)行If后的語句。否則執(zhí)行Else后面的語句。語法如下:If(Condition){TradeBlazer公式語句1;}Else{TradeBlazer公式語句2;}Condition是一個邏輯表達(dá)式,當(dāng)Condition為True的時候,TradeBlazer公式語句1將會被執(zhí)行;Condition為False時,TradeBlazer公式語句2將會被執(zhí)行。Condition可以是多個條件表達(dá)式的邏輯組合,Condition必須用()括起來。TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。例如,比較當(dāng)前Bar和上一個Bar的收盤價,如果Close>Close[1],Value1=Value1+Vol;否則Value1=Value1-Vol,腳本如下:If(Colse>Close[1])Value1=Value1+Vol;ElseValue1=Value1-Vol;b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第50頁!If-Else-If的語句可以根據(jù)需要一直擴(kuò)展,在最后的Else之后再加If(Condition)和新的執(zhí)行代碼即可。當(dāng)然您也可以省略最后的Else分支,語法如下:If(Condition1){TradeBlazer公式語句1;}ElseIf(Condition2){TradeBlazer公式語句2;}b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第51頁!Condition1是一個邏輯表達(dá)式,當(dāng)Condition1為True的時候,將會繼續(xù)判斷Condition2的值,當(dāng)Condition2為True時,TradeBlazer公式語句1將會被執(zhí)行。Condition2為False時,TradeBlazer公式語句2將會被執(zhí)行。當(dāng)Condition1為False的時候,將會繼續(xù)判斷Condition3的值,當(dāng)Condition3為True時,TradeBlazer公式語句3將會被執(zhí)行。Condition3為False時,TradeBlazer公式語句4將會被執(zhí)行。Condition1,Condition2,Condition3可以是多個條件表達(dá)式的邏輯組合,條件表達(dá)式必須用()括起來。TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第52頁!次執(zhí)行時,首先將循環(huán)變量賦值為初始值,然后判斷循環(huán)變量是否小于等于結(jié)束值,如果滿足條件,則執(zhí)行TradeBlazer公式語句,同時循環(huán)變量加1。接著重新判斷循環(huán)變量是否小于等于結(jié)束值,一直到條件為False,退出循環(huán)。例如,以下的用戶計算Price最近Length周期的和。ParamsNumericSeriesPrice(1);NumericLength(10);VarsNumericSumValue(0);Numerici;Beginfori=0toLength-1{SumValue=SumValue+Price[i];}ReturnSumValue;Endb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第53頁!WhileWhile語句在條件為真的時候重復(fù)執(zhí)行某一項操作。即,只要條件表達(dá)式的值為真(True)時,就重復(fù)執(zhí)行某個動作。直到行情信息改變以致條件為假(False)時,循環(huán)才結(jié)束。語法如下:While(Condition){TradeBlazer公式語句;}Condition是一個邏輯表達(dá)式,當(dāng)Condition為True的時候,TradeBlazer公式語句將會被循環(huán)執(zhí)行,Condition可以是多個條件表達(dá)式的邏輯組合,Condition必須用()括起來。TradeBlazer公式語句是一些語句的組合,如果TradeBlazer公式語句是單條,您可以省略{},二條或者二條以上的語句必須使用{}。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第54頁!Break語句在使用While循環(huán)的時候,有可能會遇到循環(huán)一直執(zhí)行,永遠(yuǎn)不能退出的情況,這種情況我們稱之為死循環(huán),比如下面的語句;While(True){TradeBlazer公式語句;}在這種情況下,循環(huán)將一直執(zhí)行,導(dǎo)致程序不能繼續(xù)工作,在這種情況,我們可以使用Break來跳出循環(huán),詳細(xì)情況參加下節(jié)。針對上節(jié)的例子,要想從死循環(huán)中跳出,我們可以在循環(huán)之中添加Break語句,如下:While(True){TradeBlazer公式語句;If(Condition)Break;}循環(huán)在每次執(zhí)行后,都將判斷Condition的值,當(dāng)Condition為True時,則執(zhí)行Break語句,跳出整個循環(huán)。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第55頁!定義參數(shù)是一個預(yù)先聲明的地址,用來存放輸入?yún)?shù)的值,在聲明之后,您就可以在接下來的公式中使用該參數(shù)的名稱來引用其值。參數(shù)的值在公式的內(nèi)部是不能夠被修改,在整個程序中一直保持不變,不能對參數(shù)進(jìn)行賦值操作(引用參數(shù)是個特例)。參數(shù)的好處在于您可以在調(diào)用執(zhí)行技術(shù)分析,交易指令的時候才指定相應(yīng)的參數(shù),而不需要重新編譯。例如,我們常用的移動平均線指標(biāo),就是通過不同的Length來控制移動平均線的周期,在調(diào)用指標(biāo)時可以隨意修改各個Length的值,使之能夠計算出相對應(yīng)的移動平均線。您可以指定4個參數(shù)為5,10,20,30計算出這4條移動平均線,也可以修改4個參數(shù)為10,22,100,250計算出另外的4條移動平均線。參數(shù)的修改很簡單,在超級圖表調(diào)用指標(biāo)的過程中,您可以打開指標(biāo)的屬性設(shè)置框,切換到參數(shù)頁面,手動修改各項參數(shù)的值,然后應(yīng)用即可,交易開拓者將根據(jù)新的參數(shù)設(shè)置計算出新的結(jié)果,在超級圖表中反映出來。另外,參數(shù)的一個額外的優(yōu)點是,我們可以通過修改交易指令不同的參數(shù),計算交易指令組合的優(yōu)劣,達(dá)到優(yōu)化參數(shù)的目的。參數(shù)b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第56頁!參數(shù)聲明在使用參數(shù)之前,必須對參數(shù)進(jìn)行聲明,TradeBlazer公式使用關(guān)鍵字"Params"來進(jìn)行參數(shù)宣告,并指定參數(shù)類型??梢赃x擇賦默認(rèn)值,也可以不賦默認(rèn)值。如果某個參數(shù)沒有賦予默認(rèn)值,則這個參數(shù)之前的其他參數(shù)的默認(rèn)值都將被忽略。參數(shù)定義的語法如下:Params參數(shù)類型參數(shù)名1(初值);參數(shù)類型參數(shù)名2(初值);參數(shù)類型參數(shù)名3(初值);下面是一些參數(shù)定義的例子:ParamsBoolbTest(False);//定義布爾型參數(shù)bTest,默認(rèn)值為False;NumbericLength(10);//定義數(shù)值型參數(shù)Length,默認(rèn)值為10;NumericSeriesPrice(0);//定義數(shù)值型序列參數(shù)Price,默認(rèn)值為0;NumericRefoutput(0);//定義數(shù)值型引用參數(shù)output,默認(rèn)值為0;StringstrTmp("Hi");//定義字符串參數(shù)strTmp,默認(rèn)值為Hi;參數(shù)名稱的命名規(guī)范詳細(xì)說明參見命名規(guī)則。整個公式中只能出現(xiàn)一個Params宣告,并且要放到公式的開始部分,在變量定義之前。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第57頁!參數(shù)使用在聲明參數(shù)之后,我們可以在腳本正文中通過參數(shù)名稱使用該參數(shù),在使用的過程中要注意保持?jǐn)?shù)據(jù)類型的匹配,示例如下:ParamsNumericSeriesPrice(1);VarsNumericCumValue(0);BeginCumValue=CumValue[1]+Price; ReturnCumValue;End在以上的公式中,首先定義了一個數(shù)值型序列參數(shù)Price,并將其默認(rèn)值設(shè)置為1。接著定義了一個變量CumValue。腳本正文中,將CumValue的上一個Bar值加上Price,并將值賦給CumValue,最后返回CumValue。通過上述的公式可以看到,我們只需要調(diào)用參數(shù)名,就可以使用參數(shù)的值進(jìn)行計算。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第58頁!以上代碼通過兩個數(shù)值型引用參數(shù)返回10個周期的Price平均值和最高價的較大值oHigher,以及10個周期的Price平均值和最低價的較小值oLower,并且通過函數(shù)返回值輸出10個周期的Price平均值。在調(diào)用該用戶函數(shù)的公式中,可以通過調(diào)用該函數(shù)獲得3個計算返回值,示例如下:VarsNumericAvgValue;Numeric HigherValue;NumericLowerValue;BeginAvgValue=MyFunc(Close,HigherValue,LowerValue);...End新版中引用參數(shù)時只能傳入普通變量和引用參數(shù)值b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第59頁!變量類型TradeBlazer公式支持九種數(shù)據(jù)類型,但對于變量定義,引用類型是無效的,剩余六種數(shù)據(jù)類型中分為簡單和序列兩大類,簡單類型變量是單個的值,不能對其進(jìn)行回溯,序列類型變量是和Bar長度一致的數(shù)據(jù)排列,我們可以通過回溯來獲取當(dāng)前Bar以前的任意值。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第60頁!變量的默認(rèn)值在聲明變量時,通常會賦給變量一個默認(rèn)值。例如上例中的0,F(xiàn)alse,"Test"等就是變量的默認(rèn)值。如果某個變量沒有賦予默認(rèn)值,系統(tǒng)將會自動給該變量賦予默認(rèn)值。數(shù)值型變量的默認(rèn)值為0,布爾型變量的默認(rèn)值為False,字符串的默認(rèn)值為空串。變量的默認(rèn)值是在當(dāng)公式在執(zhí)行時,給該變量賦予的初值,使該變量在引用時存在著有效的值。在該公式每個Bar的執(zhí)行過程中,改變量的默認(rèn)值都會被重新賦值。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第61頁!變量使用

變量定義、賦值之后,在表達(dá)式中直接使用變量名就可以引用變量的值。例如在下面的語句中計算了買入價格后,把值賦給數(shù)值型變量EntryPrc,在買入指令中便可直接應(yīng)用變量名,通過變量名便可引用變量的值:VarsNumericEntryPrc(0);BeginEntryPrc=Highest(High,10);If(MarkerPosition<>1){Buy(1,EntryPrc);}Endb編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第62頁!序列變量序列變量是變量中的一種,可以對序列變量進(jìn)行回溯獲取以前Bar的變量數(shù)據(jù)。序列變量的聲明和簡單變量一樣,只是定義的數(shù)據(jù)類型不同,您必須選擇以下的3種類型來定義序列變量:NumericSeries/BoolSeries/StringSeries。例如:VarsNumericSeriesMyNumSVal(0);BoolSeries MyBoolVal(False);StringSeries MyStrVal("");序列變量和簡單變量一樣,可以對其賦予默認(rèn)值。序列變量定義之后,您可以象簡單變量一樣的對其使用,不會有任何的不同。除了支持全部簡單變量的功能之外,序列變量還可以通過"[nOffset]"來回溯以前的變量值。對于序列變量,TradeBlazer公式在內(nèi)部針對其回溯的特性作了很多的特殊處理,也需要為序列變量保存相應(yīng)的歷史數(shù)據(jù),因此,和簡單變量相比,執(zhí)行的速度和占用內(nèi)存空間方面都作了一些犧牲。因此,盡管您可以定義一個序列變量,把它當(dāng)作簡單變量來使用,但是,我們強烈建議您只將需要進(jìn)行回溯的變量定義為序列變量。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第63頁!變量回溯TradeBlazer公式共支持九種數(shù)據(jù)類型,但對于變量定義,引用類型是無效的,剩余六種數(shù)據(jù)類型中分為簡單和序列兩大類,簡單類型變量是單個的值,不能對其進(jìn)行回溯,序列類型變量是和Bar長度一致的數(shù)據(jù)排列,我們可以通過回溯來獲取當(dāng)前Bar以前的任意值。要使用變量回溯,需要在變量的后面,使用中括號"[nOffset]",nOffset是要回溯引用的Bar相對于當(dāng)前Bar的偏移值,該值必須大于等于0,當(dāng)nOffset=0時,即為獲取當(dāng)前Bar的變量值。例如,我們定義如下技術(shù)指標(biāo):VarsNumericSeriesMyVal;BeginMyVal=Average(Close,10);PlotNumeric("MyVal",MyVal[3]);End以上公式定義數(shù)值型序列變量MyVal,MyVal等于收盤價的10個周期的平均值,然后將序列變量MyVal的前3個Bar數(shù)據(jù)輸出。以上公式MyVal的前9個數(shù)據(jù)因為需要計算的Bar數(shù)據(jù)不足,返回?zé)o效值,從第10個Bar開始,MyVal獲取到正確的平均值,但是我們需要輸出的數(shù)據(jù)是MyVal[3],即前3個Bar的數(shù)據(jù),因此,直到第12個Bar,有效的數(shù)據(jù)才會被輸出。以上公式的12是該公式需要的最少引用周期數(shù),如果將輸出信息畫到超級圖表中,前11個Bar是沒有圖形顯示的。當(dāng)nOffset>CurrentBar或者nOffset<0時,對于變量的回溯都將越界,這種情況下,將返回?zé)o效值b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第64頁!函數(shù)回溯函數(shù)回溯分為系統(tǒng)函數(shù)的回溯和用戶函數(shù)的回溯。系統(tǒng)函數(shù)中回溯的使用主要是針對Bar數(shù)據(jù)。比如我們需要獲取上2個Bar的收盤價,腳本為Close[2];又或者我們需要獲取10個Bar前的成交量,腳本為Vol[10]。對于Bar數(shù)據(jù)的回溯是系統(tǒng)函數(shù)中最常用的,雖然也可以對行情數(shù)據(jù)和交易數(shù)據(jù)等進(jìn)行回溯,但是大部分并無實質(zhì)的意義,返回的結(jié)果和不回溯是一樣的,因此,不推薦如此使用。要對函數(shù)回溯引用,我們可以通過在函數(shù)名稱后面添加"[nOffset]"獲取其回溯值,nOffset是要回溯引用的Bar相對于當(dāng)前Bar的偏移值,該值必須大于等于0,當(dāng)nOffset=0時,即為獲取當(dāng)前Bar的參數(shù)值。帶有參數(shù)的函數(shù)回溯,需要將"[nOffset]"放到參數(shù)之后,另外,無參數(shù)和使用默認(rèn)參數(shù)的情況下,函數(shù)調(diào)用的括號可以省略。例如:Close[2]等同于Close()[2]。用戶函數(shù)的回溯和系統(tǒng)函數(shù)原理基本一致,但考慮到系統(tǒng)的執(zhí)行速度和效率等因素,目前,TradeBlazer公式不支持對用戶函數(shù)的回溯,如果您想要獲取用戶函數(shù)的回溯值,建議您將函數(shù)返回值賦值給一個序列變量,通過對序列變量的回溯來達(dá)到相同的目的。b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第65頁!TradeBlazer公式包含的公式類型如下:用戶函數(shù)技術(shù)指標(biāo)K線型態(tài)特征走勢交易指令

公式b編程基礎(chǔ)知識必備共75頁,您現(xiàn)在瀏覽的是第66頁!用戶函數(shù)SummationParams NumericSeriesPrice(1); NumericLength(10);

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論