公式編寫規(guī)則1、語言規(guī)范: 在自定義公式里面的各種符號(如,“;” )只能用半角不能用全角。 直接訪問數(shù)據(jù)項的函數(shù) 例如:OPEN[t] 為t周期之前的開盤價 所有行情數(shù)據(jù)項(CLOSE等)都與此相同。 2、標(biāo)識符: 標(biāo)識符在表達(dá)式中只存名稱,值保留在符號表。標(biāo)識符包括函數(shù)名、參數(shù)名和變量名。函數(shù)名用來傳遞函數(shù)返回值;參數(shù)名用于函數(shù)調(diào)用時的參數(shù)傳遞;變量名在計算中存儲中間計算結(jié)果。 3、分隔符: 4、賦值語句: 其一般形式為: a=b; 含義為將b的值付給a。 幾個運算符“=”“:=”“:”“:>”。其含義分別為“賦值”、 “賦值”、“賦值并輸出數(shù)值或字符串”、“賦值并輸出圖形”。 注意:“=”和“:=”兩個運算符的意義、用法完全相同。這樣做主要是為了更好地兼容市場上目前的各種帶有公式編輯功能的分析軟件。 5、條件語句: 其一般形式為: IF(邏輯表達(dá)式) 語句1; ELSE 語句2;上述結(jié)構(gòu)表示: 如果邏輯表達(dá)式的值為非0(TURE)即真, 則執(zhí)行語句1, 執(zhí)行完語句1從語句2后開始繼續(xù)向下執(zhí)行; 如果表達(dá)式的值為0(FALSE)即假, 則跳過語句1而執(zhí)行語句2。 注意: (1)、條件執(zhí)行語句中"ELSE 語句2;"部分是選擇項, 可以缺省, 此時條件語句變成: IF(邏輯表達(dá)式) 語句1; 表示若邏輯表達(dá)式的值為非0則執(zhí)行語句1 , 否則跳過語句1繼續(xù)執(zhí)行。 (2)、如果語句1或語句2有多于一條語句要執(zhí)行時, 必須使用"{"和"}" 把這些語句包括在其中, 此時條件語句形式為: IF(邏輯表達(dá)式) { 語句體1; } ELSE { 語句體2; } 這里語句體指多個語句,每個語句都必須以“;”結(jié)尾。 (3)、條件語句可以嵌套, 這種情況經(jīng)常碰到, 但條件嵌套語句容易出錯, 其原因主要是不知道哪個IF對應(yīng)哪個ELSE。 例如: IF(x>20 OR x<-10) IF(y<=100 AND y>x) A="Good"; ELSE B="Bad"; 對于上述情況, 規(guī)定: ELSE語句與最近的一個IF語句匹配, 上例中的ELSE與IF(y<=100 AND y>x)相匹配。為了使ELSE與IF(x>20 OR x<-10)相匹配, 必須用花括號。如下所示: IF(x>20 OR x<-10) { IF(y<=100 AND y>x) A="Good"; } ELSE B="Bad"; (4)、可用階梯式IF-ELSE-IF結(jié)構(gòu)。 階梯式結(jié)構(gòu)的一般形式為: IF(邏輯表達(dá)式1) 語句1; ELSE IF(邏輯表達(dá)式2) 語句2; ELSE IF(邏輯表達(dá)式3) 語句3; 6、循環(huán)語句: while循環(huán)的一般形式為: while(條件) 語句; while循環(huán)表示當(dāng)條件為真時, 便執(zhí)行語句。直到條件為假才結(jié)束循環(huán)。并繼續(xù)執(zhí)行循環(huán)程序外的后續(xù)語句。 注意: (1)、可以有多層循環(huán)嵌套。 (2)、語句可以是語句體, 此時必須用"{"和"}"括起來。 break語句break語句通常用在循環(huán)語句中。當(dāng)break語句用while循環(huán)語句中時,可使程序終止循環(huán)而執(zhí)行循環(huán)后面的語句, 通常break語句總是與if語句聯(lián)在一起。 即滿足條件時便跳出循環(huán)。 注意: (1)、break語句對if-else的條件語句不起作用。 (2)、在多層循環(huán)中, 一個break語句只向外跳一層。 continue 語句continue語句的作用是跳過循環(huán)本中剩余的語句而強(qiáng)行執(zhí)行下一次循環(huán)。continue語句只用在while循環(huán)體中, 常與if條件語句一起使用, 用來加速循環(huán)。 7、函數(shù)調(diào)用: 調(diào)用函數(shù)的基本方式為:函數(shù)名(參數(shù),參數(shù),…) 其返回值為函數(shù)里面的return語句規(guī)定的返回值。若無return語句,則返回被調(diào)用函數(shù)里,以函數(shù)名命名的變量的值。若無以函數(shù)名命名的變量,則返回最后一個輸出的值。若無輸出的值,則返回最后一個被調(diào)用的語句的值。 例如:調(diào)用KDJ指標(biāo)。KDJ函數(shù)的名稱為kdj,其參數(shù)和內(nèi)容如下: 函數(shù)內(nèi)容為: RSV:=(CLOSE-LLV(LOW,N))/(HHV(HIGH,N)-LLV(LOW,N))*100; K:SMA(RSV,M1,1); D:SMA(K,M2,1); J:3*K-2*D 則當(dāng)您在其它函數(shù)里輸入a=KDJ(8,6,6)的時候,相當(dāng)于計算N1=8,M1=6,M2=6時的J值,并把這個值賦給a。 注意: (1)、當(dāng)傳遞的參數(shù)數(shù)目不等于被調(diào)用函數(shù)設(shè)置的參數(shù)數(shù)目時。 1)、沒有傳遞參數(shù)。則采用原來設(shè)置的默認(rèn)參數(shù)計算。 2)、傳遞參數(shù)少于被調(diào)用函數(shù)設(shè)置的參數(shù)數(shù)目。則將參數(shù)傳過去,依次改變前面同樣數(shù)目參數(shù)的值,后面其它的參數(shù)采用原來設(shè)置的默認(rèn)參數(shù)計算。 3)、傳遞參數(shù)大于被調(diào)用函數(shù)設(shè)置的參數(shù)數(shù)目。則將參數(shù)傳過去,依次改變被調(diào)用函數(shù)的參數(shù)值,多余的參數(shù)不起作用。 (2)、函數(shù)名稱不區(qū)分大小寫。 (3)、新建的函數(shù),其函數(shù)名可能與其它以存在的函數(shù)里面的內(nèi)部變量重名。這樣在調(diào)用那個函數(shù)時,那個內(nèi)部變量將變成對這個新建函數(shù)的函數(shù)調(diào)用,從而產(chǎn)生錯誤。所以,在新建函數(shù)起名時要注意。 返回值:自定義公式里面如果有多數(shù)據(jù)項輸出,則調(diào)用此函數(shù)的時候返回值默認(rèn)為最后一個輸出。如果希望確定某項輸出則可用return,或者將函數(shù)名指定為其中一項輸出。 8、關(guān)于“空”的問題: 所謂“空”即指沒有數(shù)據(jù)。在某些情況下,一些數(shù)據(jù)項可能取不到數(shù)據(jù),這時返回值為“空”。例如,yearrep(&jlr,4),其含義為取該公司3年前年報的凈利潤。如果某家公司上市時間較短,而無三年前的年報數(shù)據(jù),則其值為“空”。 (1)、“空”與任何數(shù)據(jù)作計算時,相應(yīng)計算被取消。 例如:7×NULL(即“空”)得到的結(jié)果為7。 ?。?)、“空”與任何數(shù)據(jù)比較大小時,“空”較小。 例如:-7>NULL(即“空”)得到的結(jié)果為1(即條件滿足)。 這樣的結(jié)果可能與您原來希望得到的數(shù)值不符,如果您想避免這種情況可以用ISNULL函數(shù)來判斷某個數(shù)據(jù)是否為“空”(相關(guān)說明見后面的系統(tǒng)函數(shù)說明部分)。 |
|