分析家V5.0公式系統(tǒng) 幫助文件 版權(quán)所有©2003深圳市匯天奇電腦有限公司 本手冊(cè)是分析家《公式設(shè)計(jì)指南》的補(bǔ)充手冊(cè),是對(duì)分析家V5.0公式系統(tǒng)新增功能的說明,其基本操作請(qǐng)參閱《公式設(shè)計(jì)指南》。 深圳市匯天奇電腦有限公司對(duì)分析家軟件及本手冊(cè)的內(nèi)容不做任何形式的保證。用戶在使用本軟件及手冊(cè)的過程中造成的必然或偶然之過失,深圳市匯天奇電腦有限公司概不負(fù)責(zé)。 未經(jīng)深圳市匯天奇電腦有限公司事先書面許可,本手冊(cè)的任何部分不得以任何形式進(jìn)行增刪、改編、節(jié)選、翻譯、翻印或仿制。 本手冊(cè)的全部?jī)?nèi)容深圳市匯天奇電腦有限公司可能隨時(shí)加以更改,此類更改將不另行通知。 ©2003本手冊(cè)的著作權(quán)屬于深圳市匯天奇電腦有限公司 分析家V5.0公式系統(tǒng) 1 使用與提高 1 分析家V5.0公式系統(tǒng) 6 一. 分析家新公式系統(tǒng)簡(jiǎn)介 6 二. 隱含在公式中的循環(huán) 7 1. 計(jì)算的順序 7 2. 迭代計(jì)算 8 3. 初始數(shù)值及變量聲明 9 4. 參數(shù)說明 10 三. 分支 10 1. 為什么要分支 10 2. 以前我們是怎樣實(shí)現(xiàn)分支的 10 3. 分支的描述方法 11 4. 分支舉例 13 四. 循環(huán) 13 1. 為什么要循環(huán) 13 2. WHILE循環(huán) 15 3. FOR循環(huán) 16 4. 循環(huán)的終止 17 5. 循環(huán)的嵌套 17 6. 循環(huán)舉例 18 五. 新交易系統(tǒng) 19 1. 新交易系統(tǒng)的設(shè)計(jì)目標(biāo) 19 2. 新交易系統(tǒng)的買入和賣出 19 3. 新交易系統(tǒng)設(shè)置 22 4. 新交易系統(tǒng)狀態(tài)函數(shù) 23 5. 新交易系統(tǒng)的K線指示 24 6. 新交易系統(tǒng)的測(cè)試 25 7. 新交易系統(tǒng)指標(biāo) 25 8. 新交易系統(tǒng)舉例 26 六. 字符串 26 1. 字符串的定義 26 2. 字符串的計(jì)算 27 七. 數(shù)組 27 八. 專業(yè)財(cái)務(wù)數(shù)據(jù) 29 九. 其它 29 1. 數(shù)據(jù)二 29 2. 自定義數(shù)據(jù) 30 3. 交易系統(tǒng)介入點(diǎn)設(shè)定 31 十. 調(diào)試 33 1. 為什么需要調(diào)試 33 2. 調(diào)試前的準(zhǔn)備工作 33 3. 運(yùn)行 34 4. 單步運(yùn)行 34 5. 執(zhí)行到指定目標(biāo) 34 6. 設(shè)置斷點(diǎn) 35 7. 查看變量?jī)?nèi)容 35 8. 運(yùn)行到指定時(shí)間 35 十一. 綜合舉例 35 1. 均線系統(tǒng) 35 2. 指數(shù)平滑移動(dòng)平均線 36 3. 寶塔線(鬼變臉) 36 十二. 新增函數(shù)列表 38 1. 相關(guān)性函數(shù) 38 2. 除權(quán)除息 40 3. 行情函數(shù) 40 4. 時(shí)間函數(shù) 41 5. 引用函數(shù) 41 6. 常數(shù)函數(shù) 42 7. 繪圖函數(shù) 43 8. 字符串函數(shù) 45 9. 指標(biāo)函數(shù) 48 10. 數(shù)據(jù)函數(shù) 48 11. 專業(yè)財(cái)務(wù)數(shù)據(jù) 48 12. 專業(yè)財(cái)務(wù)數(shù)據(jù)代碼內(nèi)容對(duì)照表 50 13. 交易系統(tǒng)函數(shù) 59 14. 輸出修飾符 64 15. 其它函數(shù) 66 分析家V5.0公式系統(tǒng) 分析家V5.0公式系統(tǒng)在兼容舊版本公式系統(tǒng)的基礎(chǔ)上,引入了一些全新的概念,為書寫、描述更為復(fù)雜的公式提供了強(qiáng)有力的工具。對(duì)于有一定公式編寫基礎(chǔ)的用戶,可以學(xué)習(xí)以下內(nèi)容,掌握分析家新公式系統(tǒng)的強(qiáng)大功能。 一. 分析家新公式系統(tǒng)簡(jiǎn)介 你是否在編寫公式的過程中有以下困惑: 1) 書寫很長(zhǎng)的而且大量重復(fù)的公式 2) 為怎樣描述一個(gè)特殊的概念而傷透腦筋 3) 希望增加公式系統(tǒng)的函數(shù)數(shù)量 4) 希望了解計(jì)算過程中,中間結(jié)果的數(shù)值 5) 希望自己編寫函數(shù) 如果有,那么你就需要使用分析家V5.0公式系統(tǒng)了,新的公式系統(tǒng)全面兼容以前的公式系統(tǒng),同時(shí)還給你帶來許多革命性的特性。新公式系統(tǒng)的增加的主要內(nèi)容有: 1) 新增迭代、分支、循環(huán)等標(biāo)準(zhǔn)程序語(yǔ)言語(yǔ)法 2) 強(qiáng)大的字符串和數(shù)組運(yùn)算 3) 內(nèi)建調(diào)試器,方便公式查錯(cuò) 分析家新公式系統(tǒng)為用戶提供了兩個(gè)公式編輯器:一個(gè)是專業(yè)公式編輯器,通過公式管理器可以進(jìn)入,它提供了公式編輯、編譯、調(diào)試等多種功能,是一個(gè)功能強(qiáng)大的編輯器;另一個(gè)是標(biāo)準(zhǔn)編輯器,它與過去版本界面類似,通過除了公式管理器以外的位置均進(jìn)入到這個(gè)標(biāo)準(zhǔn)編輯器,它短小精干,易于使用。 這些新增的內(nèi)容有一定的難度,適合具有計(jì)算機(jī)編程知識(shí)的用戶閱讀。通過下面章節(jié)的學(xué)習(xí),你將會(huì)逐步了解到這些新特性將給你帶來的方便。 二. 隱含在公式中的循環(huán) 1. 計(jì)算的順序 在公式系統(tǒng)中,每一個(gè)公式是按照語(yǔ)句順序執(zhí)行的,例如: V0:=MA(CLOSE,5); V1:=MA(CLOSE,10); 將首先執(zhí)行5日均線的計(jì)算,然后再計(jì)算10日均線,但是我們忽略了一個(gè)問題,那就是其中還隱含了一個(gè)時(shí)間順序的問題,也就是說先計(jì)算昨天的數(shù)值再計(jì)算今天的數(shù)值。這樣,我們就有了兩個(gè)順序——語(yǔ)句順序和時(shí)間順序,我們到底以哪一個(gè)順序?yàn)閮?yōu)先呢?答案是以時(shí)間順序?yàn)閮?yōu)先,也就是說計(jì)算第一天的V0,第一天的V1,然后是第二天的V0,第二天的V1…。對(duì)于上面這個(gè)例子,由于前后語(yǔ)句之間不存在相互影響,所以到底哪個(gè)順序優(yōu)先并不影響結(jié)果,因此很多人都忽略了這個(gè)問題,認(rèn)為應(yīng)該首先計(jì)算完所有的V0,然后再計(jì)算V1。但是在看下面例子: V0:=IF(V1>CLOSE,CLOSE,V1); V1:=MA(CLOSE,10); 前面的語(yǔ)句引用了后面的數(shù)據(jù),這樣V1昨天的計(jì)算結(jié)果就會(huì)影響到V0的計(jì)算,此時(shí)就必須以時(shí)間順序?yàn)閮?yōu)先。 有了這個(gè)時(shí)間順序優(yōu)先,我們就可以解決過去前后數(shù)據(jù)互相引用、變量重新賦值、迭代計(jì)算等問題了。 因此我們應(yīng)當(dāng)按照這樣的方式思考:我們用公式描述一天的情況,而不是描述一條曲線,整個(gè)公式又隱含著一個(gè)時(shí)間循環(huán),當(dāng)算完一天的數(shù)據(jù)后,又重新回到公式起點(diǎn),計(jì)算第二天的數(shù)據(jù),如此循環(huán)直到計(jì)算完所有的數(shù)據(jù)。需要注意的是,這個(gè)隱含循環(huán)中可能存在前面語(yǔ)句引用后面數(shù)據(jù)的問題,如上例中第一個(gè)語(yǔ)句中引用了V1變量,而V1變量需要到第二句才有賦值,所以此時(shí)它的數(shù)值是在上一輪循環(huán)中第二條語(yǔ)句所賦值的,也就是昨天的10日均線數(shù)值。這是不是有點(diǎn)太復(fù)雜了,但是我們將看到這種循環(huán)為我們帶來的好處。 2. 迭代計(jì)算 我們?cè)诜治鲋薪?jīng)常會(huì)用到迭代的概念,比如說指數(shù)平滑移動(dòng)平均線EMA,今日均線等于昨日均線*(N-1)加上今日收盤價(jià)*2,然后再除以N+1。這樣的問題還包括SMA、DMA等等。所謂迭代就是用上一周期的數(shù)值來計(jì)算本周期的數(shù)值。 過去由于公式系統(tǒng)不能直接支持迭代,所以只能用函數(shù)來實(shí)現(xiàn)這些迭代功能,用新公式系統(tǒng)后,迭代變得可以自己實(shí)現(xiàn)了,而且非常簡(jiǎn)單。以EMA為例: V1 := (V1*(N-1) + CLOSE*2) / (N+1); 就這么簡(jiǎn)單,直接按照其原理書寫就可以了。我們來分析一下為什么可以這樣寫。賦值符號(hào) := 左邊的V1表示本周期的數(shù)值,而右邊的V1由于還沒有賦值,還保持著上一周期的數(shù)值,因此這個(gè)V1就還維持著上次計(jì)算的結(jié)果,也就是上周期的數(shù)值,此時(shí)它等同于REF(V1,1)。同樣的,SMA可以表述為: V1 := (V1*(N-1) + CLOSE) / N; 需要注意的是,在本語(yǔ)句之后,由于V1已經(jīng)被賦值,所以它的數(shù)值也就變成本周期的數(shù)值了。類似的例子還包括:若上周期V1值大于收盤價(jià),則V1等于最高價(jià),否則等于最低價(jià): V1:= IF(V1>CLOSE, HIGH, LOW); 前面的例子: V1 := (V1*(N-1)+CLOSE)/N; 我們可能會(huì)問,計(jì)算第一天的時(shí)候,V1的數(shù)值是多少。如無特殊說明,變量的初始數(shù)值等于0。顯然在這個(gè)問題中這個(gè)設(shè)定是不正確的,因?yàn)閂1等于0的話,計(jì)算結(jié)果就等于CLOSE/N,顯然他不等于第一天的均值,因此我們需要這樣說明: V1 :=IF(BARPOS=0,CLOSE, (V1*(N-1)+CLOSE)/N); 當(dāng)計(jì)算第一天的時(shí)候,V1等于收盤價(jià),隨后等于指數(shù)平滑移動(dòng)平均。 迭代這個(gè)概念理解起來有一定的難度,但如果能夠很好地應(yīng)用它能為我們解決很多問題。 3. 初始數(shù)值及變量聲明 任何變量在使用之前必須先賦值,那么迭代就有可能出現(xiàn)一個(gè)問題:變量還沒有賦值怎么使用。我們需要用變量聲明來解決這個(gè)問題:直接說明變量的初始數(shù)值和變量的類型,其語(yǔ)法如下: VARIABLE: P=1; 表示聲明一個(gè)變量P,設(shè)定其初始數(shù)值為1,也就是說在計(jì)算的第一天,它的數(shù)值為1。這樣就可以在迭代中使用變量P了。變量聲明必須寫在任何語(yǔ)句之前,但如果有INPUT參數(shù)說明,則應(yīng)當(dāng)放在它的后面。 一個(gè)完整的指數(shù)平滑移動(dòng)平均線公式可以寫成: VARIABLE: V1=0; V1 :=IF(BARPOS=0,CLOSE, (V1*(N-1)+CLOSE*2)/(N+1)); 再舉個(gè)例子,我們需要知道當(dāng)前正在計(jì)算第幾根K線?第一天為1,第二天為2,我們可以寫成: VARIABLE: P=0; P := P+1; 使用迭代,方便地描述了這個(gè)要求,今天的數(shù)值等于昨天的數(shù)值+1。這個(gè)例子也很好地說明了迭代的簡(jiǎn)潔和功能強(qiáng)大。 在這里需要特別指出的是,變量聲明設(shè)定的初始值表示計(jì)算的第一天的數(shù)值,今后每次計(jì)算新的一天并不對(duì)該變量設(shè)定初始值,例如: VARIABLE: V1=0; V2:=0; V1:=V1+1; V2:=V2+1; 這當(dāng)中V1、V2的計(jì)算結(jié)果將截然不同,V1設(shè)定了初始數(shù)值0,每次隱含循環(huán)加1,他的計(jì)算結(jié)果為1、2、3、4…,是一個(gè)遞增的序列;而V2則由于每次循環(huán)均被重新設(shè)定為數(shù)值0,因此V2:=V2+1這條語(yǔ)句將V2設(shè)置為1。因此,如果我們需要每天設(shè)定初始數(shù)值,則需要一條賦值語(yǔ)句來設(shè)定;如果我們不需要每天設(shè)初始值而是第一天需要,則使用VARIABLE語(yǔ)句聲明變量并且賦予初始數(shù)值。 4. 參數(shù)說明 新公式系統(tǒng)引入?yún)?shù)說明語(yǔ)句: INPUT: [參數(shù)名]([默認(rèn)值],[最小值],[最大值],[測(cè)試步長(zhǎng)]); 其中默認(rèn)值是必需的,其他值若沒有指定,則使用其默認(rèn)值0,100和1。參數(shù)說明語(yǔ)句必須放在公式的最前面。 參數(shù)說明等同于在公式編輯器中直接在參數(shù)輸入框中輸入?yún)?shù)。系統(tǒng)將參數(shù)輸入框中和INPUT語(yǔ)句說明的參數(shù)累加起來,其總數(shù)不能不超過16個(gè)。使用參數(shù)說明語(yǔ)句,可以使公式程序放在一段文字中,可以方便一部分喜歡這種方式的用戶。你可以使用兩種方法中的任意一種,他們不存在區(qū)別。 我們可以在INPUT語(yǔ)句中說明多個(gè)參數(shù),它們之間用逗號(hào)分隔。例如: INPUT: P1(10,0,20), P2(20,0,100); 5. 總結(jié) 新公式系統(tǒng)的核心在于:我們只需要描述每一天的行為,如果當(dāng)天沒有改變一個(gè)變量,則該變量維持昨天的數(shù)值不變。 三. 分支 1. 為什么要分支 所謂分支,就是如果滿足某個(gè)條件就執(zhí)行某些指令,否則就指令另外一些指令。有了分支,計(jì)算機(jī)就有了智能,知道根據(jù)具體情況作出不同的動(dòng)作,這是計(jì)算機(jī)最重要的功能之一。 2. 以前我們是怎樣實(shí)現(xiàn)分支的 過去,我們也在函數(shù)中隱含地使用了一些分支概念,在函數(shù)中直接將分支包含進(jìn)去。例如繪圖函數(shù)DRAWTEXT(Cond,Price,Text),表示如果Cond條件滿足就輸出文字。再例如,IF(Cond,V1,V2)表示如果Cond條件成立就返回V1,否則就返回V2。 但是這種包含在函數(shù)中間的條件也有許多缺陷,那就是它只能控制一條語(yǔ)句,而且只在有限的幾個(gè)函數(shù)中包含條件,這極大地限制了分支的應(yīng)用。例如,我們就無法描述如果條件成立,V1就等于CLOSE,否則V2就等于CLOSE。 3. 分支的描述方法 我們使用IF [條件] THEN [語(yǔ)句] 來描述如果條件成立就執(zhí)行語(yǔ)句這樣一個(gè)邏輯,例如 IF CLOSE>OPEN THEN P := P+1; 它表示如果收盤價(jià)大于開盤價(jià),P的數(shù)值就增加1,否則P值維持不變,也就是說統(tǒng)計(jì)歷史陽(yáng)線的數(shù)量。 需要注意,IF語(yǔ)句和IF函數(shù)使用同樣的關(guān)鍵字,區(qū)分它們的辦法是在IF語(yǔ)句之后必然存在THEN語(yǔ)句,而IF函數(shù)則沒有。因此我們不能在IF語(yǔ)句條件部分包含IF函數(shù),例如: IF IF(CLOSE>OPEN, OPEN, CLOSE)>10 THEN P := P+1; 該語(yǔ)句將混淆兩個(gè)IF的作用,可以使用以下方法來解決: C1 := IF(CLOSE>OPEN, OPEN, CLOSE)>10; IF C1 THEN P := P+1; 如果我們想要在條件滿足的情況下多做幾件事情怎么辦?在此我們引入BEGIN…END這樣一個(gè)語(yǔ)句來形成組合語(yǔ)句,也就是說將它們中間所包含的語(yǔ)句看作一個(gè)整體,一起執(zhí)行。組合語(yǔ)句被認(rèn)為是一個(gè)整體,在接下來的分支、循環(huán)等操作中均需要用到。例如: IF CLOSE>OPEN THEN BEGIN P := P+1; Q := MA(CLOSE,10); END 它表示如果條件成立,將執(zhí)行對(duì)P和Q的賦值語(yǔ)句,否則這兩條語(yǔ)句均不執(zhí)行。 BEGIN…END語(yǔ)句可以嵌套,END與之前面最接近的還沒有配對(duì)的BEGIN進(jìn)行配對(duì)。例如: IF CLOSE>OPEN THEN BEGIN (1) P := P+1; IF CLOSE>10 THEN BEGIN (2) P := P+1; Q := MA(CLOSE,10); END (3) END (4) 其中,2-3是配對(duì)的,1-4是配對(duì)的。 分支語(yǔ)句還有以下形式:IF…THEN…ELSE,它表示如果條件滿足就執(zhí)行某件事,否則就執(zhí)行另外一件事。例如: IF CLOSE>OPEN THEN P := P+1; ELSE Q := Q+1; 這段公式表示,如果今天收陽(yáng)線,則將P的數(shù)值增加1,否則將Q的數(shù)值增加1,需要注意的是,ELSE必須與IF配對(duì),而且中間只能有一條語(yǔ)句或用BEGIN…END包圍起來的組合語(yǔ)句。IF…THEN…ELSE可以嵌套,ELSE與之前最接近的未配對(duì)的IF語(yǔ)句進(jìn)行配對(duì),例如: IF CLOSE>OPEN THEN (1) P := P+1; ELSE IF CLOSE< OPEN THEN (2) Q := Q+1; ELSE (3) R := R+1; 其中第(2)行的ELSE與第(1)行的IF配對(duì),因?yàn)樗懊嬷挥幸粋€(gè)IF;第(3)行的ELSE與第(2)行的IF配對(duì)而不與第(1)行的IF配對(duì),因?yàn)榈?2)行的IF未配對(duì),而且距離第(3)行最近。在使用多層分支嵌套時(shí),要時(shí)刻注意這個(gè)配對(duì)原則。 4. 分支舉例 例1:計(jì)算上市以來上漲天數(shù)和下跌天數(shù)的比率: VARIABLE: UP=0, DN=0; IF CLOSE>REF(CLOSE,1) THEN UP := UP+1; ELSE IF CLOSE< REF(CLOSE,1) THEN DN := DN+1; RATIO: IF(DN=0,0,UP/DN); 最后一條語(yǔ)句,判斷DN是否為0,用來保護(hù)結(jié)果不被0除。 例2:計(jì)算歷史上陽(yáng)線的平均漲幅和陰線的平均跌幅 VARIABLE:UPR=0,UP=0,DNR=0,DN=0; R := CLOSE/REF(CLOSE,1)-1; IF CLOSE>OPEN THEN BEGIN UPR := UPR + R; UP := UP+1; END ELSE IF CLOSE< OPEN THEN BEGIN DNR := DNR + R; DN := DN+1; END 平均漲幅: IF(UP=0,0,100*UPR/UP); 平均跌幅: IF(DN=0,0,100*DNR/DN); 四. 循環(huán) 1. 為什么要循環(huán) 循環(huán)是計(jì)算機(jī)程序中一個(gè)最重要的概念,它使計(jì)算機(jī)能夠按照用戶的意志重復(fù)執(zhí)行某個(gè)任務(wù),我們前面所提到的公式系統(tǒng)中存在的隱含循環(huán)也是一種沿時(shí)間變化的循環(huán)。其實(shí)我們的函數(shù)中也大量包含了循環(huán)的概念,比如SUM、MA等等。我們來看看循環(huán)的概念。 如果我們計(jì)算從1加到100,寫成公式: 1+2+3+4+5…+100; 這個(gè)公式很長(zhǎng),而且寫起來容易出錯(cuò),如果我們是計(jì)算從1加到10000怎么辦?這就需要用到循環(huán),我們讓計(jì)算機(jī)循環(huán)計(jì)算,總共循環(huán)10000次,其中第N次循環(huán)加N即可解決這個(gè)問題: FOR I=1 TO 10000 DO SU := SU+I; 等一會(huì)兒我們?cè)賮斫忉屗?。我們看到,有了循環(huán)以后,許多繁雜的事情都可以輕松解決了。由于以前沒有循環(huán),我們必須在函數(shù)內(nèi)部來實(shí)現(xiàn)一些循環(huán),現(xiàn)在有了它,我們可以省去好多函數(shù)。例如,SUM表示計(jì)算N天數(shù)值的總和,寫成公式 C + REF(C,1) + REF(C,2)+ … + REF(C,N-1); 由于書寫困難而且不靈活,我們引入SUM函數(shù)來計(jì)算。但是如果我們使用循環(huán): SU := 0; FOR I=0 TO N-1 DO SU := SU+REF(C,I); FOR循環(huán)表示,循環(huán)執(zhí)行SU := SU+REF(C,I)這條語(yǔ)句,第一次循環(huán)變量I等于0,每次循環(huán)I遞增1,直到大于N-1時(shí)循環(huán)結(jié)束。也就是說,REF(C,I)在每次循環(huán)中表示今天、昨天、前天…N-1天前的收盤價(jià),將它們累加到SU變量中,完成了累加的功能。 我們需要注意的是,此時(shí)的循環(huán)與公式中的隱含循環(huán)是不一樣的,隱含循環(huán)不需要書寫而且是不可避免的,而循環(huán)需要用循環(huán)語(yǔ)句寫出來。循環(huán)語(yǔ)句所描述的循環(huán),是針對(duì)某一根K線執(zhí)行的,整個(gè)循環(huán)過程中其計(jì)算位置是不變的。因此,在整個(gè)隱含循環(huán)中,每進(jìn)行一次隱含循環(huán),就要執(zhí)行一輪循環(huán)語(yǔ)句。因此,大量使用循環(huán)語(yǔ)句,尤其是嵌套循環(huán)語(yǔ)句將大大降低運(yùn)算速度。我們可以來看看,如果某股票有3000根K線,我們?cè)诠街邪粋€(gè)100次的循環(huán),則循環(huán)將執(zhí)行3000*100=30萬次,如果還存在循環(huán)嵌套,也就是循環(huán)套循環(huán),如果內(nèi)外均是100次的循環(huán),則循環(huán)次數(shù)為3000*100*100=3000萬次,其執(zhí)行速度將非常緩慢。分析家系統(tǒng)限制總的循環(huán)次數(shù)要小于1億次,否則不能得到計(jì)算結(jié)果。 循環(huán)分為WHILE和FOR循環(huán)兩種。 2. WHILE循環(huán) WHILE循環(huán)語(yǔ)法:WHILE [條件] DO [語(yǔ)句] 它表示,如果條件成立則循環(huán)執(zhí)行語(yǔ)句,直到條件不成立為止。例如我們計(jì)算最近多少天完成100%換手: HR := VOL; ND := 0; WHILE HR< CAPITAL DO BEGIN ND := ND+1; HR := HR + REF(VOL,ND); END ND就是結(jié)果。HR表示最近成交量累加,設(shè)初始值為當(dāng)日成交量,然后循環(huán)直到它大于流通盤為止。循環(huán)體中,ND每次循環(huán)加1,HR每次循環(huán)加上ND天前的成交量,也就是說最近ND天的成交量累加。 在循環(huán)中必須注意的是,循環(huán)條件在循環(huán)過程中一定要發(fā)生變化,并且會(huì)變成條件不成立,否則會(huì)形成死循環(huán),也就是說循環(huán)條件永遠(yuǎn)成立,計(jì)算機(jī)不斷地進(jìn)行循環(huán)計(jì)算。 在上例中,HR每次遞增,當(dāng)它增大到流通盤以上時(shí),條件變成不成立,從而終止循環(huán)。另外一個(gè)我們沒有注意到的問題是,如果今天是上市第一天,而且換手率沒有達(dá)到100,則這個(gè)循環(huán)會(huì)出現(xiàn)問題,因?yàn)椴徽揘D怎樣增大,REF(VOL,ND)總是返回沒有數(shù)值,也就是說HR的不到遞增,也就永遠(yuǎn)無法破壞循環(huán)條件而終止循環(huán),它也是一個(gè)死循環(huán)。因此我們需要改成: HR := VOL; ND := 1; WHILE HR< CAPITAL AND ND< BARPOS DO BEGIN HR := HR + REF(VOL,ND); ND := ND+1; END 增加一個(gè)ND< BARPOS用以阻止超過上市日的向前引用。 從這些例子中我們看到,自己使用循環(huán)來實(shí)現(xiàn)算法,其功能是強(qiáng)大的,但是需要十分小心,避免死循環(huán)的發(fā)生。因此,我們能夠使用函數(shù)來實(shí)現(xiàn)的功能,還是盡量使用函數(shù)來實(shí)現(xiàn),避免不必要的復(fù)雜性。 3. FOR循環(huán) 我們大多數(shù)的循環(huán)是指定循環(huán)次數(shù)的循環(huán),而且我們證券計(jì)算也大量使用向前引用若干天的數(shù)據(jù),因此 FOR循環(huán)將更加實(shí)用。 FOR [變量]=[初值] TO [終值] DO [語(yǔ)句] 它表示使用變量來控制執(zhí)行循環(huán)語(yǔ)句,首先給變量賦初值,然后判斷變量是否小于或等于終值,若滿足條件則執(zhí)行語(yǔ)句,然后將變量加1,循環(huán)判斷變量是否小于等于終值并循環(huán)執(zhí)行,直到條件不滿足為止。例如 FOR I=1 TO N DO… 表示循環(huán)N次,循環(huán)變量從1到N,類似的 FOR I=0 TO N-1 DO… 也表示循環(huán)N次,但是循環(huán)變量從0到N-1。 循環(huán)變量還可以從大循環(huán)到小,可以使用 FOR [變量]=[初值] DOWNTO [終值] DO [語(yǔ)句] 此時(shí)變量將從大到小變化,直到小于終值為止。 我們?cè)谑褂弥行枰⒁膺f增還是遞減變化,否則將形成死循環(huán)。 使用FOR循環(huán)的一個(gè)最大的好處在于其循環(huán)次數(shù)可以控制,不像WHILE循環(huán)可能存在潛在的死循環(huán)。還以WHILE循環(huán)中的換手100%為例: HR := 0; FOR I=0 TO BARPOS-1 DO BEGIN IF HR< CAPITAL THEN BEGIN HR := HR+REF(VOL,I); IF HR>=CAPITAL ND := I+1; END END 我們用FOR循環(huán)來控制總的循環(huán)次數(shù)不超過數(shù)據(jù)總數(shù),從而避免了死循環(huán)的發(fā)生。在循環(huán)中,如果換手未超過流通盤,則繼續(xù)累加,當(dāng)換手剛達(dá)到流通盤時(shí),將循環(huán)次數(shù)賦給結(jié)果ND。 4. 循環(huán)的終止 我們看到,循環(huán)過程中必須要有一個(gè)終止循環(huán)的方法,WHILE語(yǔ)句中使用條件不滿足來終止循環(huán),F(xiàn)OR循環(huán)中使用變量遞增遞減來終止循環(huán),是否還有其它的需要呢? 我們看上面的例子,該循環(huán)有一個(gè)問題,就是無論是否計(jì)算出結(jié)果,循環(huán)都將繼續(xù)下去,直到計(jì)算到上市第一天,這將大大降低效率。我們通過主動(dòng)終止循環(huán)來解決這個(gè)問題: HR := 0; FOR I=0 TO BARPOS-1 DO BEGIN HR := HR+REF(VOL,I); IF HR>=CAPITAL BEGIN ND := I+1; BREAK; END END 執(zhí)行BREAK語(yǔ)句將終止循環(huán),無論循環(huán)中值條件是否達(dá)到。在本例中,當(dāng)計(jì)算到結(jié)果,就停止循環(huán)。一般說來,BREAK語(yǔ)句總是與IF語(yǔ)句配合使用。使用BREAK語(yǔ)句可以使公式看起來更加簡(jiǎn)單。 BREAK可以用來終止WHILE循環(huán)和FOR循環(huán)。 5. 循環(huán)的嵌套 我們可以在循環(huán)中再套入循環(huán),這就叫做循環(huán)嵌套。例如我們想要找到最近100天中收盤價(jià)相同的天數(shù): ND := 0; FOR I=0 TO 99 DO BEGIN FOR J=I+1 TO 99 DO BEGIN IF REF(CLOSE,I)=REF(CLOSE,J) THEN ND := ND+1; END END 我們分成內(nèi)外兩個(gè)循環(huán),外層循環(huán)使用I作為循環(huán)變量,它從0到99循環(huán),得到之前每一天的收盤價(jià)REF(CLOSE,I),而內(nèi)層循環(huán)使用J作為循環(huán)變量,它I+1到99循環(huán),表示從第I+1天前開始查找等于第I天數(shù)值的K線,若找到(條件REF(CLOSE,I)=REF(CLOSE,J)滿足),則將ND加1。 使用循環(huán)嵌套,我們可以做許多過去無法做的事情了。但是使用嵌套一定要注意,不要是循環(huán)次數(shù)太大,否則運(yùn)行速度會(huì)很慢。 6. 循環(huán)舉例 例1.計(jì)算N日均線 SU := 0; FOR I=0 TO N-1 DO SU := SU+REF(CLOSE,I); SU / MIN(N,BARPOS); 該例子中有兩個(gè)技巧,其一,沒有可以去避免向前循環(huán)超過上市日的問題,因?yàn)榘l(fā)生這樣情況時(shí)SU的數(shù)值不會(huì)增加,也就是說SU等于上市到現(xiàn)在的總和;其二,如果當(dāng)前位置小于N,則SU的數(shù)值表示上市到現(xiàn)在的總和而不是N日總和,所以平均價(jià)格應(yīng)該為SU/BARPOS,因此我們使用了SU / MIN(N,BARPOS); 例2.計(jì)算前十大股東占總股本的比例 SU:=0; FOR I=1 TO 10 DO SU := SU + PROFFIN(5002+(I-1)*6,0); 比例: SU/PROFFIN(1001,0)*100; 在本循環(huán)中使用了一個(gè)技巧,我們發(fā)現(xiàn)第一、第二、第三…股東持股量的代碼是5002,5008,5014…,它們之間間隔6,所以我們可以使用5002+(I-1)*6來表示這些代碼 五. 新交易系統(tǒng) 1. 新交易系統(tǒng)的設(shè)計(jì)目標(biāo) 在分析家過去的版本中,已經(jīng)引入了交易系統(tǒng)這個(gè)概念,那時(shí)的交易系統(tǒng)實(shí)際上更象一個(gè)有買入和賣出條件的選股系統(tǒng),主要解決了在什么情況下買入,在什么情況下賣出的問題。然而在實(shí)際交易的過程當(dāng)中,我們必須要考慮倉(cāng)位、資金、交易系統(tǒng)對(duì)當(dāng)前股票的適應(yīng)情況等等問題,從而決定我們應(yīng)當(dāng)在什么樣的條件下,買入或賣出多少股票,在連續(xù)出現(xiàn)信號(hào)的情況下又該如何處理。 新交易系統(tǒng)就是為了解決這些問題提出來的,它為我們提供了一整套交易需要的交易執(zhí)行、交易狀態(tài)函數(shù),從而使我們能夠根據(jù)當(dāng)前行情狀況、資金狀況、持倉(cāng)狀況、盈利虧損狀況等不同的情況,來決定我們應(yīng)當(dāng)如何操作,操作的價(jià)格和量都可以直接控制。 可以說,新交易系統(tǒng)的提出,縮小了計(jì)算機(jī)交易和人為交易之間的差異,為用戶實(shí)現(xiàn)系統(tǒng)交易方法提供了有力的保證。 2. 新交易系統(tǒng)的買入和賣出 新交易系統(tǒng)引入了四個(gè)買賣函數(shù),它們分別是 BUY(V,Type,P):買入 SELL(V,Type,P):賣出 BUYSHORT(V,Type,P):空頭買入 SELLSHORT(V,Type,P):空頭賣出 使用這四個(gè)函數(shù)是區(qū)別于新舊交易系統(tǒng)的關(guān)鍵,若需要使用舊交易系統(tǒng)則不能出現(xiàn)這四個(gè)函數(shù)。 函數(shù)中第一個(gè)參數(shù)V表示買入量,它可以是一個(gè)具體的量或者是最大買入(賣出)量的某一比例。例如,BUY(1000)表示買入1000股,而BUY(30%)則表示用當(dāng)前資金量的30%買入,SELL(100%)則表示將當(dāng)前持倉(cāng)量賣出。這個(gè)參數(shù)可以省略,若省略則表示100%。買入和賣出量如果超過資金量或持倉(cāng)量,則按照最大可買入(賣出)量執(zhí)行,買入量會(huì)自動(dòng)取整到每手股數(shù)的整數(shù)倍,具體到A股就是100股及其整數(shù)倍,若少于100股則不買入。 函數(shù)中第二個(gè)參數(shù)表示交易單據(jù)類型,它可以是以下幾種: 1. THISCLOSE,收市價(jià)單,表示按照本周期收盤價(jià)交易; 2. MARKET,市價(jià)單,表示按照次周期開盤價(jià)交易; 3. LIMIT,限價(jià)單,表示次周期按照好于指定價(jià)格進(jìn)行交易; 4. STOP,停損單,表示次周期按照差于指定價(jià)格進(jìn)行交易; 若本參數(shù)省略,則表示THISCLOSE。 對(duì)于第3、4兩種交易類型,還需要指定一個(gè)價(jià)格,那就是第三個(gè)參數(shù)P,它表示限定的價(jià)格是多少,可以使用任意合法的公式語(yǔ)句來設(shè)定。對(duì)于1、2兩種交易類型,不能有第三個(gè)參數(shù)。例如BUY(100,LIMIT,CLOSE+0.1)表示在當(dāng)前收盤價(jià)+0.1元的位置設(shè)定限價(jià)單,若次周期股價(jià)等于或低于這個(gè)價(jià)格,則買入100股。 對(duì)于收市價(jià)單和市價(jià)單,它們所指定的價(jià)格是股價(jià)必然能夠達(dá)到的,因此這兩種單據(jù)是一定能夠成交的,若考慮市場(chǎng)容量的問題,也只會(huì)影響到能夠成交多少,但價(jià)格是可以保證的。有關(guān)市場(chǎng)容量的問題請(qǐng)參閱下一節(jié)中關(guān)于“市場(chǎng)容量”的描述。 然而對(duì)于限價(jià)單和停損單,則不一定能夠成交,因?yàn)槲覀冊(cè)O(shè)定了一個(gè)價(jià)格,若股價(jià)不能達(dá)到該限定價(jià)格,則這個(gè)單據(jù)將不能成交,我們稱之為未成交交易。在系統(tǒng)指示中,這種交易將被顯示成灰色,表示下了單但是沒有成交。 我們?cè)賮硌芯恳幌孪迌r(jià)單和停損單的區(qū)別,我們說限價(jià)單就是要求成交價(jià)格好于指定價(jià)格,而好于這個(gè)概念對(duì)于買入和賣出,多頭和空頭是不一樣的。對(duì)于買入來說,好于就是以更低的價(jià)格買入,而對(duì)于賣出來說就是以更高的價(jià)格賣出;對(duì)于空頭買入賣出來說又正好相反,空頭買入希望以更高的價(jià)格買入,以更低的價(jià)格賣出。在這里我們不用死記硬背,只要確定一點(diǎn),那就是限價(jià)單表示成交的價(jià)格只能是期望價(jià)格更好,而停損單則指比期望價(jià)格更差。 有人要問,更差的價(jià)格要來干什么?我們舉個(gè)例子來看看,假如我們預(yù)計(jì)明天是一個(gè)轉(zhuǎn)折點(diǎn),若股價(jià)上漲則其漲幅可以達(dá)到8%以上,但如果不漲則可能下跌,此時(shí)我們應(yīng)當(dāng)設(shè)定一個(gè)停損單,設(shè)定價(jià)格在CLOSE*1.01,表示上漲1%后我再買入,這樣就可以保證只有在上漲的情況下才進(jìn)行交易。 既然有了這些限制,所以限價(jià)單和停損單就有可能不能成交,例如我們?cè)O(shè)定收盤價(jià)限價(jià)單,但次日股價(jià)跳空上漲,其最低價(jià)都高于我們?cè)O(shè)定限價(jià),當(dāng)然也就不能成交。 需要注意的是,使用限價(jià)單和停損單,有可能成交價(jià)格不是我們?cè)O(shè)定的價(jià)格,當(dāng)開盤價(jià)滿足我們的限定條件,則按照開盤價(jià)成交。例如設(shè)定10元的限價(jià)單,次日開盤價(jià)為9.5元,它已經(jīng)滿足條件,當(dāng)然就按照它成交。 這四個(gè)函數(shù)并不存在一般函數(shù)中的條件項(xiàng),只要出現(xiàn)這個(gè)函數(shù)就立即執(zhí)行買入或賣出,因此它們一般都會(huì)與IF語(yǔ)句相結(jié)合。總是以這種形式出現(xiàn): IF cond THEN BUY; 表示當(dāng)天價(jià)格滿足的時(shí)候就買入。 若當(dāng)天出現(xiàn)多個(gè)買入語(yǔ)句,則每個(gè)買入語(yǔ)句均會(huì)被執(zhí)行,因此用戶需要注意區(qū)分不同情況。例如: IF CLOSE>OPEN THEN BUY(1000); IF CLOSE>OPEN*1.02 THEN BUY(2000); 此時(shí),若第二個(gè)條件滿足則第一個(gè)也肯定同時(shí)滿足,系統(tǒng)將下了兩個(gè)買入單,共買入3000股。若這不是您所希望的,那么可能需要這樣寫: IF CLOSE>OPEN*1.02 THEN BUY(2000); ELSE IF CLOSE>OPEN THEN BUY(1000); 另外,循環(huán)中不能有交易函數(shù)。 3. 新交易系統(tǒng)設(shè)置 資金問題:新交易系統(tǒng)引入了資金概念,也就是說可以設(shè)定初始投入資金量,該資金量將影響到每一次交易能否正常進(jìn)行。每次買入,資金量減少,賣出則資金量又增加,若買入資金量不足,則在資金量允許的范圍內(nèi)調(diào)整買入量,甚至取消買入。這樣就與我們實(shí)際操作更加接近。資金投入設(shè)定請(qǐng)按“設(shè)定”按鈕進(jìn)行設(shè)置。 市場(chǎng)容量問題:設(shè)想交易系統(tǒng)發(fā)出信號(hào),買入100000股某股票,但該股票當(dāng)日成交量?jī)H有80000股,則這個(gè)買入單是不能夠成交的。一般認(rèn)為,只要你的交易量達(dá)到當(dāng)日成交量的10%以上,就會(huì)影響到該股票的走勢(shì),因此我們一般設(shè)定當(dāng)日交易量要小于成交量的10%。交易量限制設(shè)定請(qǐng)按“設(shè)定”按鈕進(jìn)行設(shè)置。 交易系統(tǒng)設(shè)置 止損問題:過去,交易系統(tǒng)止損按照收盤價(jià)進(jìn)行,這與實(shí)際情況有一定的差異,試想,若設(shè)定10%止損價(jià)位應(yīng)當(dāng)是當(dāng)股價(jià)達(dá)到10%損失的時(shí)候就進(jìn)行止損,而不是等到收盤再進(jìn)行。因此,新交易系統(tǒng)的止損原則是,若開盤價(jià)達(dá)到止損條件,則按照開盤價(jià)止損,否則按照最接近止損設(shè)定的價(jià)格進(jìn)行。 連續(xù)買入和連續(xù)賣出問題:過去,交易系統(tǒng)發(fā)出買入信號(hào),我們就全額買入,之后再發(fā)出信號(hào)就不再買入;發(fā)出賣出信號(hào)則全部賣出,不存在連續(xù)買入和賣出的問題。在測(cè)試平臺(tái)中,引入了連續(xù)買入的概念,但其設(shè)置相對(duì)固定,不能模擬出更加精細(xì)的設(shè)置。新交易系統(tǒng)改變了這種狀態(tài),你可以不斷地買入或賣出,只要資金或持倉(cāng)條件滿足。當(dāng)然,這也就引出了一個(gè)成本計(jì)算的問題,如果經(jīng)過多次交易后,我們的持倉(cāng)成本是多少,這一單的利潤(rùn)是多少? 成本問題:我們計(jì)算成本的方法是,每次買入就將新買入的股票與持有的股票進(jìn)行加權(quán)平均,也就是(買入價(jià)*買入量+持倉(cāng)量*持倉(cāng)成本)/(買入量+持倉(cāng)量);賣出時(shí),無論盈利與否,當(dāng)前持倉(cāng)股票的成本不變。我們所有的盈利計(jì)算、止損價(jià)格計(jì)算均基于這個(gè)原則。 4. 新交易系統(tǒng)狀態(tài)函數(shù) 這些狀態(tài)函數(shù)描述了交易系統(tǒng)當(dāng)前的狀態(tài),您可以根據(jù)這些狀態(tài)來決定您的交易策略。狀態(tài)函數(shù)包括: ENTERPRICE:買入價(jià)格,表示上次交易的買入價(jià)格。 EXITPRICE:賣出價(jià)格,表示上次交易的賣出價(jià)格。 CASH:現(xiàn)金存量,表示當(dāng)前的現(xiàn)金存量。 OPENPROFIT:浮動(dòng)盈虧,表示當(dāng)前持股的浮動(dòng)盈虧,也就是當(dāng)前持倉(cāng)市值與持倉(cāng)成本之差。 HOLDING:當(dāng)前持倉(cāng)量,表示當(dāng)前持有的股票股數(shù)。 AVGENTERPRICE:平均買入成本,表示當(dāng)前持有股票的平均買入成本 ENTERBARS:買入位置,表示上次買入到當(dāng)前的周期數(shù)。 EXITBARS:賣出位置,表示上次賣出到當(dāng)前的周期數(shù). BESTTRADE:最大盈利,表示當(dāng)前位置之前所有交易中盈利最大一次的利潤(rùn)額。 BESTPERCNET:最大利潤(rùn)率,表示當(dāng)前位置之前所有交易中利潤(rùn)率最大一次的利潤(rùn)率。 WORSTTRADE:最大虧損,表示當(dāng)前位置之前所有交易中虧損最大一次的虧損額。 WORSTPERCENT:最大虧損率,表示當(dāng)前位置之前所有交易中虧損率最大一次的利潤(rùn)率。 TOTALTRADE:交易次數(shù),表示當(dāng)前位置之前總共有多少次交易,注意每一次賣出算一次交易,而買入不算。 NUMWINTRADE:盈利交易次數(shù),表示當(dāng)前位置之前總共有多少次盈利的交易。 NUMLOSSTRADE:虧損交易次數(shù),表示當(dāng)前位置之前總共有多少次虧損的交易。 NUMSEQWIN:當(dāng)前連續(xù)盈利次數(shù),表示當(dāng)前位置之前連續(xù)有多少次盈利的交易。 NUMSEQLOSS:當(dāng)前連續(xù)虧損次數(shù), 表示當(dāng)前位置之前連續(xù)有多少次虧損的交易。 MAXSEQWIN:最大連續(xù)盈利次數(shù),表示當(dāng)前位置之前連續(xù)盈利交易的最大次數(shù)。 MAXSEQLOSS,最大連續(xù)虧損次數(shù),表示當(dāng)前位置之前連續(xù)虧損交易的最大次數(shù)。 PERCENTWIN,交易勝率,表示當(dāng)前位置之前盈利交易占總交易次數(shù)的比例,其數(shù)值在0—1之間。 5. 新交易系統(tǒng)的K線指示 使用系統(tǒng)指示功能,在K線圖上顯示新交易系統(tǒng)的交易指示與以往有些不同,主要表現(xiàn)在: 1.交易指示的下面可以標(biāo)注買賣量,買入用Bxxx表示買入若干股,而賣出用Sxxx表示賣出若干股。配合標(biāo)注箭頭旁的切入點(diǎn)指示小三角,可以方便地讓用戶看到每一個(gè)交易的交易價(jià)格和交易量??梢酝ㄟ^鼠標(biāo)右鍵點(diǎn)取指示箭頭并選擇“系統(tǒng)指示顯示買賣量”用來隱藏或顯示買賣量。 2.顯示未成交的交易,過去只要條件滿足,就顯示買賣箭頭,而不管該箭頭是否能夠成交;現(xiàn)在我們將不能夠成交指示用灰色來顯示,方便用戶分析??梢酝ㄟ^鼠標(biāo)右鍵點(diǎn)取指示箭頭并選擇“系統(tǒng)指示顯示未成交交易”以隱藏或顯示它們。 3.設(shè)定資金投入日期,由于加入的資金策略,在什么時(shí)間開始計(jì)算(即投入資金時(shí)間)將會(huì)直接影響交易系統(tǒng)的計(jì)算,因此可以設(shè)定資金投入時(shí)間,方法是鼠標(biāo)右鍵點(diǎn)取指示箭頭并選擇“設(shè)定系統(tǒng)指示開始計(jì)算時(shí)間”。缺省情況下使用股票上市時(shí)間。 4.與新交易系統(tǒng)指示配合,系統(tǒng)加入3個(gè)內(nèi)嵌指標(biāo),他們用來顯示系統(tǒng)指示中第一個(gè)新交易系統(tǒng)的收益、利潤(rùn)、持倉(cāng)狀態(tài)。這三個(gè)指標(biāo)分別是:PROFIT利潤(rùn)指標(biāo),顯示交易系統(tǒng)的歷史總盈利和持倉(cāng)股票的浮動(dòng)利潤(rùn);MARKET浮動(dòng)市值指標(biāo),顯示交易系統(tǒng)的浮動(dòng)市值和總市值,其區(qū)別在于后者只有賣出時(shí)才重新計(jì)算,而前者是隨著股價(jià)的變化隨時(shí)計(jì)算;HOLDING持倉(cāng)量指標(biāo),顯示持倉(cāng)量的歷史變化情況。這三個(gè)指標(biāo)只有在交易系統(tǒng)指示中存在新交易系統(tǒng)是才有效。 6. 新交易系統(tǒng)的測(cè)試 新交易系統(tǒng)將資金模型、連續(xù)買入模型都已經(jīng)放到公式中進(jìn)行設(shè)定,因此在系統(tǒng)測(cè)試平臺(tái)中有關(guān)資金模型、連續(xù)買入模型都被禁止,全市場(chǎng)模型也被禁止。 7. 新交易系統(tǒng)指標(biāo) 配合新交易系統(tǒng),分析家V5.0內(nèi)嵌了三個(gè)指標(biāo),MARKET,PROFIT,HOLDING,當(dāng)主圖上系統(tǒng)指示中存在新交易系統(tǒng)時(shí),用于指示該新交易系統(tǒng)的市場(chǎng)狀態(tài)。 MARKET指標(biāo)描述了交易系統(tǒng)市值,它有浮動(dòng)市值和總市值兩條指標(biāo)線。浮動(dòng)市值表示現(xiàn)金+持有股票的市值,而總市值表示每次賣出后的總資產(chǎn)情況,而買入及持倉(cāng)過程中的浮動(dòng)市值不計(jì)算在內(nèi)。 PROFIT指標(biāo)描述了每次交易的利潤(rùn)情況,它有利潤(rùn)和浮動(dòng)利潤(rùn)兩條指標(biāo)線,利潤(rùn)表示每次賣出所產(chǎn)生的利潤(rùn)的累計(jì),而浮動(dòng)利潤(rùn)則表示當(dāng)前持倉(cāng)的浮動(dòng)利潤(rùn)。 HOLDING指標(biāo)描述了持倉(cāng)量,它表示當(dāng)前持有股票的數(shù)量。 8. 新交易系統(tǒng)舉例 例1:漲幅超過5%則以30%資金買入,超過8%則以50%資金買入,跌幅超過4%則賣出50%,跌幅超過8%則全部賣出。買入使用限價(jià)單,賣出使用收市價(jià)單: PR := (CLOSE/REF(CLOSE,1)-1)*100; IF PR>8 THEN BUY(50%,LIMIT,CLOSE); ELSE IF PR>5 THEN BUY(30%,LIMIT,CLOSE); ELSE IF PR<-8 THEN SELL(100%); ELSE IF PR<-4 THEN SELL(50%); 例2:若5日均線與20日均線金叉,則增加持倉(cāng)量一倍,至少買入1000股。 IF CROSS(MA(CLOSE,5),MA(CLOSE,20)) THEN BUY(MAX(HOLDING,1000)); 這樣碰到連續(xù)買入信號(hào)時(shí),其買入量為1000股,1000股,2000股,4000股… 六. 字符串 1. 字符串的定義 在公式中,我們有時(shí)候需要輸出一些文字,這就需要使用字符串。字符串常量我們?cè)谶^去的版本中已經(jīng)存在,就是使用單引號(hào)“’”括起來的字符,這些字符可以在文字輸出函數(shù)等地方直接使用。 在分析家5.0新公式系統(tǒng)中,我們引入字符串變量這個(gè)概念,它可以像數(shù)值變量一樣自由改變,可以根據(jù)具體情況賦給不同的數(shù)值。字符串變量和普通變量一樣可以賦值、運(yùn)算、賦初始值等等。例如: S := ‘CCC’; 我們將變量S賦值‘CCC’; VARIABLE: S=’ABC’; 表示我們定義了一個(gè)字符串變量S,給它賦初始值‘ABC’; S := STKNAME+ ‘ ’ + STKLABEL; 字符串S等于股票名稱后跟股票代碼。 我們可以像使用字符產(chǎn)常量一樣使用字符串變量,例如在DRAWTEXT函數(shù)中。 2. 字符串的計(jì)算 字符串可以進(jìn)行計(jì)算,包括字符串比較、求字符串子串、大小寫轉(zhuǎn)化、字符串查找等等。字符串的比較是以字母表為順序的,越靠后的越大,小寫字母都大于大寫字母。例如: STRCMP(‘ABC’,’abc’); 比較兩個(gè)字符串,顯然小寫字母大于大寫字母,所以函數(shù)返回1。 在分析家公式系統(tǒng)中引入字符串加法的概念,就是將后面的字符串連接到前面字符串的尾部,我們使用的一個(gè)簡(jiǎn)單的辦法:用加號(hào),例如 S := STKNAME+ ‘的代碼是’ + STKLABEL; 使用加號(hào)直接將后面字符串接到前面字符串的尾部,對(duì)于浦發(fā)銀行來說,字符串S等于“浦發(fā)銀行的代碼是600000”。 更為強(qiáng)大的是,字符串加法還可以直接加數(shù)值型的數(shù)據(jù)。例如: S := ’今天收盤價(jià):’ + CLOSE; 系統(tǒng)會(huì)將收盤價(jià)CLOSE的數(shù)值轉(zhuǎn)化為字符串連接進(jìn)來。所以,當(dāng)我們看到一個(gè)字符串加上數(shù)值的時(shí)候,千萬不要以為這是普通的加法。除了這種隱含的轉(zhuǎn)化方法外,我們還可以用函數(shù)NUMTOSTR將數(shù)值強(qiáng)制轉(zhuǎn)化為字符串,例如: S := NUMTOSTR(CLOSE); 或者將字符串轉(zhuǎn)化為數(shù)值STRTONUM。 七. 數(shù)組 本節(jié)內(nèi)容較復(fù)雜,一般用戶可以跳過本節(jié)。 所謂數(shù)組,就是一個(gè)容器,它可以存放多個(gè)數(shù)據(jù),我們可以通過序號(hào)來訪問這些數(shù)據(jù)。一般說來我們總是將一些相關(guān)的數(shù)據(jù)組織在一起放到數(shù)組中,當(dāng)我們?cè)谑褂醚h(huán)的時(shí)候,數(shù)組就可以發(fā)揮它的優(yōu)勢(shì)。分析家公式系統(tǒng)目前支持一維數(shù)組。 數(shù)組在使用之前一定要先聲明: VARIABLE: V[20]=0; 表示定義一個(gè)數(shù)值型數(shù)組V,它總共有20個(gè)元素,這些元素的初始值為0。 VARIABLE: S[10]=’A’; 表示定義一個(gè)字符串型數(shù)組S,它總共有10個(gè)元素,這些元素的初始值為’A’。 數(shù)組變量聲明以后,就可以像普通變量一樣使用了。在使用數(shù)組變量時(shí),需要在變量名后面帶上序號(hào),表示引用數(shù)組中的第幾個(gè)元素,元素的序號(hào)從1開始。例如: P:= V[5]*CLOSE; 表示V的第5號(hào)元素乘以收盤價(jià)。 數(shù)組和普通變量有一個(gè)重要的區(qū)別,數(shù)組是不能夠引用過去的數(shù)值的,對(duì)數(shù)組進(jìn)行引用過去數(shù)值的操作將會(huì)得到它當(dāng)天的數(shù)值,就是說數(shù)組只存在當(dāng)天的數(shù)值,從某種意義上來說它更像一個(gè)可以重新賦值的常量。因此, REF(V[3],1); MA(V[2],10); 等均會(huì)返回一個(gè)常數(shù)。如果你需要引用過去的數(shù)值,可以將數(shù)組元素賦值給一個(gè)普通變量,例如: P:=V[3]; MA(P,10); 使用數(shù)組以后,我們可以利用數(shù)組的序號(hào)來訪問數(shù)據(jù),這給循環(huán)帶來了方便,我們通過循環(huán)可以遍歷整個(gè)數(shù)組了。 八. 專業(yè)財(cái)務(wù)數(shù)據(jù) 在分析家機(jī)構(gòu)版中,內(nèi)嵌了二百多項(xiàng)專業(yè)財(cái)務(wù)數(shù)據(jù)。這些專業(yè)財(cái)務(wù)數(shù)據(jù)包含了每只股票歷史上的每一次變化,對(duì)于注重基本分析的用戶,我們提供了一整套結(jié)合技術(shù)分析、基本分析的公式平臺(tái)。 專業(yè)財(cái)務(wù)數(shù)據(jù)包括七個(gè)函數(shù),分別用來訪問、設(shè)定專業(yè)財(cái)務(wù)數(shù)據(jù)。所有的財(cái)務(wù)數(shù)據(jù)均帶有一個(gè)數(shù)據(jù)類型參數(shù),它表示需要訪問具體哪一個(gè)數(shù)據(jù),例如1001表示總股本,5001表示第一大股東名稱等等。這些函數(shù)包括: PROFFIN(N,M), PROFSTR(N,M)訪問專業(yè)財(cái)務(wù)數(shù)據(jù)的數(shù)值,它們的區(qū)別在于前者得到數(shù)值型的財(cái)務(wù)數(shù)據(jù),后者得到字符型的財(cái)務(wù)數(shù)據(jù)。N表示數(shù)據(jù)類型,M表示哪一期數(shù)據(jù),0表示最近一期,1表示前一期。 PROFFINON(N,Y,MD), PROFSTRON(N,Y,MD)訪問指定日期的財(cái)務(wù)數(shù)據(jù),它們的區(qū)別在于前者得到數(shù)值型的財(cái)務(wù)數(shù)據(jù),后者得到字符型的財(cái)務(wù)數(shù)據(jù)。N表示數(shù)據(jù)類型,Y表示年,MD表示月日,例如PROFFINON(1001,2001,0101)表示2001年1月1日的總股本。 SETPROFFIN(X)用來設(shè)定財(cái)務(wù)數(shù)據(jù)屬性。財(cái)務(wù)數(shù)據(jù)包括季報(bào)、中報(bào)和年報(bào),適用本函數(shù)可以決定是否需要它們中的哪一些類型。X是一個(gè)五位數(shù),每一位表示不同的含義,最高位表示是否調(diào)整中報(bào)季報(bào)數(shù)據(jù)(分別對(duì)1季報(bào)、中報(bào)和3季報(bào)的部分財(cái)務(wù)指標(biāo)做乘以3、2、4/3的處理),次高位表示是否包含最新財(cái)務(wù)指標(biāo),最低三位表示是否包含季報(bào)、中報(bào)和年報(bào)。這些位置如果為1就表示設(shè)置,如果為0就表示不需要。例如:01111就表示不對(duì)季報(bào)中報(bào)調(diào)整,數(shù)據(jù)包含全部的年報(bào)中報(bào)和季報(bào);00001表示只需要年報(bào)。使用本函數(shù)后,其它專業(yè)財(cái)務(wù)數(shù)據(jù)函數(shù)將受到它的影響。 九. 其它 1. 數(shù)據(jù)二 我們經(jīng)常需要分析兩只股票之間的關(guān)系,比如它們之間的相關(guān)性、貝塔系數(shù)等,新公式系統(tǒng)引入數(shù)據(jù)二概念,它在公式中代表另外一只股票,這只股票可能是K線圖上疊加的股票,或者相關(guān)性分析中的相關(guān)股票。語(yǔ)法: DATA2.[數(shù)據(jù)] 其中數(shù)據(jù)可以是CLOSE、OPEN、HIGH、LOW、VOLUME或AMOUNT,表示引用數(shù)據(jù)二的開盤價(jià)、收盤價(jià)等。例如我們可以計(jì)算兩只股票收盤價(jià)之比: CLOSE/DATA2.CLOSE; 數(shù)據(jù)二對(duì)于相關(guān)性分析很重要,所謂相關(guān)性就是兩個(gè)數(shù)據(jù)的相似程度,該數(shù)值分布在-1到+1之間,若等于+1表示兩者完全相同,若等于-1表示兩者完全相反,若等于0表示二者無關(guān)。一般說來,兩只股票收盤價(jià)的相關(guān)性會(huì)在0—1之間。相關(guān)函數(shù): RELATE(P1,P2,N); 表示P1和P2之間在最近N天的相似程度。 使用相關(guān)性分析不同的數(shù)據(jù),得到的意義是不一樣的。例如收盤價(jià)相關(guān)性: RELATE(CLOSE,DATA2.CLOSE,60); 他描述了兩只股票價(jià)格走勢(shì)的相似性,也就是說基本形態(tài)走勢(shì)相像。而漲跌幅相關(guān)性: RELATE(CLOSE/REF(CLOSE,1),DATA2.CLOSE/REF(DATA2.CLOSE,1),60); 表示每日漲跌的相似性。使用該指標(biāo)所得到的結(jié)果可能看起來走勢(shì)不是十分相似,但在多數(shù)情況下它們的漲跌情況是接近的,也就是說同漲同跌。 如果用其它的指標(biāo)來計(jì)算相關(guān)性,則其結(jié)果可能更難理解,但是真正掌握兩只股票某種屬性的相似可能會(huì)對(duì)你的投資帶來很的大改變。 2. 自定義數(shù)據(jù) 分析家機(jī)構(gòu)版V5.0引入自定義數(shù)據(jù)概念,用戶可以利用該功能自己設(shè)定若干數(shù)據(jù)。自定義數(shù)據(jù)可以從F10資料中提取,可以使用公式計(jì)算得到,可以從文本文件引入,也可以自己手工輸入。該數(shù)據(jù)是基于日線的,也就是說我們只能在日線分析周期中使用它。 自定義數(shù)據(jù)分為四類,分別是 1. 股票相關(guān)序列數(shù):每一只股票均有它自己的一組數(shù)據(jù),每天一個(gè)數(shù)據(jù),它和擴(kuò)展數(shù)據(jù)非常類似,我們可以用它來存儲(chǔ)每日成交筆數(shù)、某公式計(jì)算結(jié)果等數(shù)據(jù)。 2. 股票無關(guān)序列數(shù):所有股票共用一組數(shù)據(jù),每天一個(gè)數(shù)據(jù),它主要用來存儲(chǔ)與市場(chǎng)相關(guān)的數(shù)據(jù),例如每天的流通市值等。 3. 單值數(shù)據(jù):每一只股票均有它自己的一個(gè)數(shù)據(jù),該數(shù)據(jù)并不隨時(shí)間發(fā)生變化,例如我們可以用它來存儲(chǔ)發(fā)行價(jià)、中簽率等。 4. 字符串?dāng)?shù)據(jù):每一只股票均有它自己的一個(gè)字符串?dāng)?shù)據(jù),該數(shù)據(jù)并不隨時(shí)間發(fā)生變化,例如我們可以用它來存儲(chǔ)板塊類別、法人代表等。 用戶可以根據(jù)自己的需要,設(shè)定自定義數(shù)據(jù)類型,對(duì)于從F10提取或使用公式計(jì)算得到的自定義數(shù)據(jù),可以設(shè)定自動(dòng)更新,當(dāng)執(zhí)行收盤作業(yè)時(shí),系統(tǒng)將自動(dòng)執(zhí)行自定義數(shù)據(jù)的刷新工作。 每一個(gè)自定義數(shù)據(jù)均有一個(gè)名稱,我們總是通過它來訪問自定義數(shù)據(jù)。在公式系統(tǒng)中,使用SELFDATA來訪問數(shù)值型的自定義數(shù)據(jù),而使用SELFSTRING來訪問字符串型的自定義數(shù)據(jù)。 在動(dòng)態(tài)顯示牌中,我們也可以直接顯示自定義數(shù)據(jù),方法是用鼠標(biāo)右鍵點(diǎn)擊標(biāo)題欄,選擇自定義數(shù)據(jù)并且選中需要的項(xiàng)目即可。 3. 交易系統(tǒng)介入點(diǎn)設(shè)定 分析家新公式系統(tǒng)中,新增交易系統(tǒng)介入點(diǎn)設(shè)定關(guān)鍵字,放在買入、賣出條件之后,用逗號(hào)將它們隔開,描述方法類似顏色、線型描述符。接入點(diǎn)關(guān)鍵字分為前后兩個(gè)部分,前半部分描述時(shí)本周期介入還是次周期介入,后半部分描述以什么價(jià)格介入,具體如下: 前半部分:THIS—本周期;NEXT—次周期。 后半部分:MID—中價(jià);CLOSE—收盤價(jià);OPEN—開盤價(jià);HIGH—最高價(jià);LOW—最低價(jià)。 前后兩部分直接連接,中間不能有間隔。例如: ENTERLONG: CLOSE>OPEN, NEXTOPEN; 表示如果收陽(yáng)線,則在次日以開盤價(jià)買入。 4. 數(shù)據(jù)引用 公式中會(huì)大量使用數(shù)據(jù)引用函數(shù)REF,比較麻煩?,F(xiàn)在可以在函數(shù)調(diào)用之后加上方括號(hào)表示向前引用,起作用和REF函數(shù)一樣。例如: REF(CLOSE,10)可以寫成CLOSE[10] REF(MA(CLOSE,10),100)可以寫成MA(CLOSE,10)[100] 需要注意方括號(hào)在數(shù)據(jù)引用與數(shù)組下標(biāo)之間的區(qū)別。二者形式一樣,但方括號(hào)跟在函數(shù)后面就是引用,而跟在數(shù)組變量后面就是下標(biāo)。 5. 坐標(biāo)設(shè)定 分析家新公式系統(tǒng)中,坐標(biāo)設(shè)定采用公式來實(shí)現(xiàn),方法是: REFLINE:L1,L2,…LN; 表示在L1、L2、…LN處繪制水平坐標(biāo)線。 6. 宏定義 在許多計(jì)算機(jī)語(yǔ)言中,均提供了宏定義,用于簡(jiǎn)化公式中大量重復(fù)語(yǔ)句的書寫,提高程序的可讀性。分析家新公式系統(tǒng)也提供了宏定義給用戶使用,語(yǔ)法是: #define X Y 它表示,將Y定義為X,今后凡是書寫X,就把它當(dāng)作Y來處理。宏必須定義在整個(gè)公式代碼的最前面。比方說 #define MMA MA(MA(CLOSE,10),10) 表示今后凡是需要MA(MA(CLOSE,10),10)計(jì)算的地方均可以用MMA來代替,直接寫MMA即可。 宏定義也可以帶參數(shù),在公式編譯的時(shí)候?qū)⒑甓x中的參數(shù)用實(shí)際參數(shù)來替代。例如以下定義: #define MMA(x,y) MA(MA(CLOSE,x),y) x,y就是宏參數(shù),在使用時(shí)需要用實(shí)際的參數(shù)來替代,例如: MMA(10,20)就表示MA(MA(CLOSE,10),20),再宏展開時(shí)用10代替了參數(shù)x,用20代替了參數(shù)y。 如果我們需要定義的宏很長(zhǎng),在一行里書寫比較困難,可以用續(xù)行符“\”放在需要許行的最后位置,就可以將下一行接到宏定義中。例如: #define BBY(x) IF CLOSE>OPEN THEN BEGIN\ IF CLOSE>OPEN*1.08 THEN \ BUY(2*x); \ ELSE \ BUY(x); \ END 由于每一行的結(jié)尾均有一個(gè)續(xù)行符“\”,因此BBY宏就代表了整個(gè)這六行代碼。今后凡是需要書寫著六行代碼,只需要書寫B(tài)BY即可。 對(duì)于需要重復(fù)書寫的代碼,可以采用宏定義,將重復(fù)的代碼定義為宏,這樣可以大大減少代碼量,同時(shí)也可以提高公式的可讀性。 十. 調(diào)試 1. 為什么需要調(diào)試 公式系統(tǒng)是一個(gè)簡(jiǎn)單的程序設(shè)計(jì)環(huán)境,只要是程序設(shè)計(jì)就有可能出現(xiàn)差錯(cuò),有可能出現(xiàn)沒有想到的問題,因此多數(shù)程序設(shè)計(jì)工具均提供一個(gè)調(diào)試工具,讓用戶可以一步一步地執(zhí)行程序,查看中間結(jié)果等等。 分析家新公式系統(tǒng)為用戶提供了一個(gè)強(qiáng)大的設(shè)計(jì)環(huán)境,當(dāng)然需要提供一個(gè)調(diào)試器用以查找錯(cuò)誤。利用分析家公式調(diào)試器,你可以單步執(zhí)行公式程序、連續(xù)單步執(zhí)行、查看變量數(shù)值、設(shè)置斷點(diǎn),可以方便查看到公式中的任何數(shù)值是怎樣計(jì)算出來的,分支是怎樣執(zhí)行的,循環(huán)指定了多少次等。 2. 調(diào)試前的準(zhǔn)備工作 當(dāng)你使用專業(yè)公式編輯器寫完一個(gè)公式,或者打開一個(gè)現(xiàn)有的公式,即可進(jìn)入調(diào)試。若你的公式?jīng)]有語(yǔ)法錯(cuò)誤,從菜單、工具條選擇調(diào)試功能,或者直接按F6即可進(jìn)入調(diào)試。進(jìn)入調(diào)試狀態(tài)后,公式編輯窗口下面出現(xiàn)兩個(gè)小窗口,分別是變量窗口和圖形窗口。 左邊的窗口是變量窗口,變量窗口顯示公式中所有的變量及其屬性、數(shù)值,鼠標(biāo)雙擊變量可以彈出窗口顯示該變量的詳細(xì)數(shù)值,而在執(zhí)行過程中若數(shù)值發(fā)生變化就會(huì)用紅色來顯示數(shù)值。 右邊的窗口是圖形窗口,它的上半部分顯示待計(jì)算的股票K線圖,下半部分顯示變量數(shù)值曲線。在變量窗口中打勾的變量將被顯示,用鼠標(biāo)點(diǎn)擊變量前的方塊可以改變其顯示屬性。用鼠標(biāo)點(diǎn)擊圖形窗口右側(cè)的股票名稱、分析周期可以改變待計(jì)算的股票或分析周期。 此時(shí)公式第一行的左側(cè)線是一個(gè)黃色箭頭,它表示當(dāng)前正在準(zhǔn)備執(zhí)行該語(yǔ)句。我們?cè)谡麄€(gè)調(diào)試過程中可以看到該標(biāo)志隨著執(zhí)行過程不斷在移動(dòng)。 3. 運(yùn)行 調(diào)試準(zhǔn)備好以后,按F5就可以執(zhí)行了,此時(shí)公式將很快被執(zhí)行完,然后停在程序的最后一行,此時(shí)你可以查看變量?jī)?nèi)容和圖形。 如果按Ctrl+F5表示重新執(zhí)行程序,系統(tǒng)將重新啟動(dòng)公式并且停留在第一行等待執(zhí)行。 如果按Shift+F5表示停止執(zhí)行,這對(duì)于跳出一個(gè)長(zhǎng)時(shí)間的循環(huán)非常有用。 4. 單步運(yùn)行 從菜單、工具條選擇單步執(zhí)行,或者按F11可以單步執(zhí)行,此時(shí)每按一次執(zhí)行一條語(yǔ)句,在執(zhí)行過程中可以方便地了解到變量的計(jì)算過程,程序的執(zhí)行流程等。我們還可以選擇連續(xù)單步執(zhí)行來讓電腦自動(dòng)進(jìn)行單步運(yùn)行,此是可以將雙手解放出來。 我們會(huì)發(fā)現(xiàn),當(dāng)公式執(zhí)行到最后一行以后,它有跳回到第一行執(zhí)行,這和一般的程序可不一樣!細(xì)心的你可能已經(jīng)發(fā)現(xiàn),在右下角圖形成口中的紅色箭頭已經(jīng)悄悄地向右移動(dòng)了一天,這就是我們所說的隱含循環(huán)。程序從第一行執(zhí)行到最后一行,然后計(jì)算第二天的數(shù)據(jù),又從程序第一行開始執(zhí)行了。 5. 執(zhí)行到指定目標(biāo) 有時(shí)候程序比較長(zhǎng),或者循環(huán)太多,使用單步太慢,可以使用執(zhí)行到指定目標(biāo),移動(dòng)光標(biāo)到你需要的程序行,然后按F7,公式將執(zhí)行到該行后停下。 6. 設(shè)置斷點(diǎn) 斷點(diǎn)就是程序每次執(zhí)行到該行就停下,與F5連續(xù)執(zhí)行配合可以提高工作效率。將光標(biāo)移到需要設(shè)定斷點(diǎn)的位置,按F9可以設(shè)定或取消斷點(diǎn)。斷點(diǎn)所在行的左邊會(huì)有一個(gè)紫紅色的圓形,表示該行被設(shè)置了斷點(diǎn)。 7. 查看變量?jī)?nèi)容 當(dāng)程序運(yùn)行到某處停下來后,鼠標(biāo)雙擊變量窗口的某變量,可以查看變量?jī)?nèi)容。對(duì)于簡(jiǎn)單變量,變量窗口中已經(jīng)顯示了它的數(shù)值,但對(duì)于序列數(shù)、數(shù)組等變量,可以使用本功能詳細(xì)了解變量的每一個(gè)元素的內(nèi)容。 8. 運(yùn)行到指定時(shí)間 我們說過,公式中存在一個(gè)隱含循環(huán),公式是一天一天執(zhí)行的。當(dāng)我們需要執(zhí)行到時(shí)間相對(duì)靠后的數(shù)據(jù)時(shí),可能需要的循環(huán)次數(shù)就很多,此時(shí)可以有鼠標(biāo)右鍵點(diǎn)擊圖形窗口中的你所需要的K線的位置,從彈出菜單中選擇執(zhí)行到該K線或者指定到指定日期就可以跳過前面不必要的循環(huán)。 十一. 綜合舉例 1. 均線系統(tǒng) 在以往均線系統(tǒng)的編制需要用到函數(shù)MA(X,N),該函數(shù)表示求X的N日內(nèi)平均值。在新公式系統(tǒng)中,沒有函數(shù)照樣可以實(shí)現(xiàn)MA(CLOSE,N)。 INPUT:N(5,1,300); {參數(shù)申明} VARIABLE:K=0; {變量申明} FOR I=0 TO N-1 DO K:=K+REF(CLOSE,I);{把最近 N 天的收盤價(jià)累加} MA1:K/N; {實(shí)現(xiàn)MA(C,N)} K:=0; 2. 指數(shù)平滑移動(dòng)平均線 指數(shù)平滑移動(dòng)平均線與上面的簡(jiǎn)單均線系統(tǒng)相比,主要在于均線的算法略有區(qū)別,簡(jiǎn)單均線只是將N日內(nèi)的收盤價(jià)相加然后平均,而指數(shù)平滑移動(dòng)平均線中包含昨日的該數(shù)值,因此理論上比簡(jiǎn)單平均更有價(jià)值。 指數(shù)平均的算法為: 若Y=EMA(X,N), 則Y=[2*X+(N-1)*Y']/(N+1),其中Y'表示上一周期Y值。 如果不使用EMA函數(shù), EMA(CLOSE,N)在新公式系統(tǒng)中可以這樣書寫: INPUT:N(5,1,300); VARIABLE:EMA1=0; {初始化變量} EMA1:(2*C+(N-1)*EMA1)/(N+1); {新公式系統(tǒng)中可以直接迭代,表示指標(biāo)EMA1由昨天的EMA1的一種算法得到} 3. 寶塔線(鬼變臉) 如果昨天寶塔線是紅的,以“昨頂端”為“今開端”,以“昨底端”為“今敏感”; 如果昨天寶塔線是綠的,以“昨底端”為“今開端”,以“昨頂端”為“今敏感”; 如果昨天寶塔線是變色的,則以“昨敏感”為“今敏感”,以強(qiáng)化寶塔線的“隔日糾錯(cuò)功能”。 要實(shí)現(xiàn)上面的功能,需要根據(jù)昨天寶塔線的狀態(tài)來畫今天的寶塔線,在老公式系統(tǒng)中無法實(shí)現(xiàn)這樣的功能。在新公式系統(tǒng)中,可以通過分支語(yǔ)句和迭代的方式實(shí)現(xiàn): VARIABLE:SENSITIVY=-1,TOWERO=0,TOWERC=0,DIRECTION=1; IF BARSCOUNT(C)=0 THEN BEGIN TOWERO:=O; TOWERC:=C; END; IF TOWERC>TOWERO AND NOT(BETWEEN(SENSITIVY,TOWERO,TOWERC)) THEN DIRECTION:=1; ELSE IF TOWERC< TOWERO AND NOT(BETWEEN(SENSITIVY,TOWERO,TOWERC)) THEN DIRECTION:=0; ELSE DIRECTION:=REF(DIRECTION,1); IF NOT(REF(BETWEEN(SENSITIVY,TOWERO,TOWERC),1)) THEN BEGIN TOWERO:=REF(TOWERC,1);TOWERC:=C; SENSITIVY:=REF(TOWERO,1); END ELSE BEGIN TOWERO:=REF(TOWERC,1);TOWERC:=C; SENSITIVY:=REF(SENSITIVY,1); END; IF BETWEEN(SENSITIVY,TOWERO,TOWERC) THEN BEGIN STICKLINE(BETWEEN(SENSITIVY,TOWERO,TOWERC),MAX(TOWERO,TOWERC),SENSITIVY,7,0), COLORRED; STICKLINE(BETWEEN(SENSITIVY,TOWERO,TOWERC),MIN(TOWERO,TOWERC),SENSITIVY,7,0), COLORGREEN; END ELSE BEGIN STICKLINE(SENSITIVY< TOWERC,TOWERO,TOWERC,7,0), COLORRED; STICKLINE(SENSITIVY>TOWERC,TOWERO,TOWERC,7,0), COLORGREEN; END; STICKLINE((TOWERC=TOWERO OR SENSITIVY=TOWERC) AND DIRECTION=1,TOWERO,TOWERC,7,0),COLORRED; STICKLINE((TOWERC=TOWERO OR SENSITIVY=TOWERC) AND DIRECTION=0,TOWERO,TOWERC,7,0),COLORGREEN; 4. 自動(dòng)在MACD指標(biāo)圖上標(biāo)注現(xiàn)在是處于0軸以下的第幾次金叉] INPUT:LONG(26,20,100,1),SHORT(12,5,40,1),M(9,2,60); VARIABLE:I=0; DIFF : EMA(CLOSE,SHORT) - EMA(CLOSE,LONG); DEA : EMA(DIFF,M); MACD : 2*(DIFF-DEA), COLORSTICK; JC:=CROSS(DIFF,DEA); SC:=CROSS(DEA,DIFF); JCCOUNT:=COUNT(JC,BARSLAST(DEA>0)); TEXT:=NUMTOSTR(JCCOUNT); DRAWTEXT(DEA<0 AND JC,DEA*0.8,TEXT); 十二. 新增函數(shù)列表 1. 相關(guān)性函數(shù) 1. BETA 貝塔系數(shù) BETA(N); 貝塔系數(shù)表示當(dāng)前股票的收益與大盤收益相比的放大系數(shù),該系數(shù)表明大盤每變動(dòng)1%,則該股票將變動(dòng)多少。該函數(shù)有一個(gè)參數(shù)N,表示在多少個(gè)周期中計(jì)算。 例如:BETA(10)表示10周期貝塔系數(shù) 2. BETA2 貝塔系數(shù)2 BETA2(X,Y,N) 貝塔系數(shù)2表示第一個(gè)參數(shù)X相對(duì)于第二個(gè)參數(shù)Y的收益的放大系數(shù),該系數(shù)表明參數(shù)Y每變動(dòng)1%,則參數(shù)X將變動(dòng)多少。該函數(shù)的第三個(gè)參數(shù)N表示在多少個(gè)周期中計(jì)算。 例如:BETA2(CLOSE,INDEXC,10)就完全等同于BETA(10) 3. BETADOWN 下跌貝塔系數(shù) BETADOWN(N) 為當(dāng)前股票收益與大盤收益相比的下跌貝塔系數(shù),該系數(shù)表明大盤每下跌1%,則該股票將下跌N%。它的計(jì)算方法是只計(jì)算股票下跌時(shí)的貝塔系數(shù)。 例如:BETADOWN(10)表示10周期下跌貝塔系數(shù) 4. BETAUP 上漲貝塔系數(shù) BETAUP(N) 為當(dāng)前股票收益與大盤收益相比的上漲貝塔系數(shù),該系數(shù)表明大盤每上漲1%,則該股票將上漲N%。它的計(jì)算方法是只計(jì)算股票上漲時(shí)的貝塔系數(shù)。 例如:BETAUP(10)表示10周期上漲貝塔系數(shù) 5. COVAR 兩樣本的協(xié)方差 COVAR(X,Y,N); 計(jì)算X與Y的N周期協(xié)方差。協(xié)方差的計(jì)算方法是: 例如:COVAR(CLOSE,INDEXC,10)表示收盤價(jià)與大盤指數(shù)之間的10周期協(xié)方差 6. RELATE 兩樣本的相關(guān)系數(shù) RELATE(X,Y,N) 為X與Y的N周期相關(guān)系數(shù),其有效值范圍在-1 — 1之間 例如:RELATE(CLOSE,INDEXC,10)表示收盤價(jià)與大盤指數(shù)之間的10周期相關(guān)系數(shù) 2. 除權(quán)除息 1. DIVIDENDBARS 上次派息到現(xiàn)在的周期數(shù) DIVIDENDBARS(N) 取得之前第N次派息到當(dāng)前的周期數(shù)。 例如:DIVIDENDBARS(0)=0表示當(dāng)天發(fā)生派息。 2. DIVIDEND 每股派息數(shù)量 DIVIDEND(N), 取得之前第N次每股派息數(shù)量, 例如:DIVIDEND(0)表示最近一次派息的數(shù)量。 3. SPLIT 除權(quán)比例 SPLIT(N), 取得之前第N次除權(quán)(送股或配股)的除權(quán)比例,表示除權(quán)后股價(jià)將下跌該比例 例如:SPLIT(0)=0.5表示最近一次除權(quán)可能是10送10,股價(jià)下跌一半。 4. SPLITVARS 除權(quán)到現(xiàn)在的周期數(shù) SPLITBARS(N), 取得之前第N次除權(quán)到當(dāng)前的周期數(shù), 例如:SPLITBARS(0)=0表示當(dāng)天發(fā)生除權(quán)。 3. 行情函數(shù) 1. DISPSTATUS 數(shù)據(jù)顯示狀態(tài) DISPSTATUS返回?cái)?shù)據(jù)顯示信息,1表示顯示區(qū)域的第一根K線,2表示顯示區(qū)域最后一根K線,0表示其它位置。 例如:DISPSTATUS=1表示當(dāng)天是圖形顯示中的第一個(gè)周期。 4. 時(shí)間函數(shù) 1. BARPOS 數(shù)據(jù)位置 函數(shù)返回當(dāng)前是第幾根K線。特別的,對(duì)于日線數(shù)據(jù)就表示從上市到現(xiàn)在總共有多少交易日。 2. DAYS1970 取得該周期從1970以來的天數(shù) 函數(shù)返回自從1970年1月1日以來的天數(shù),例如在1971年1月1日返回365,它與DAY函數(shù)不同,前者表示的是天數(shù)間隔,后者表示的是日期。 3. D1970TODATE 1970日轉(zhuǎn)換為日期 D1970TODATE(X), 得到1970日期X的日期值。 4. DATETOD1970 日期轉(zhuǎn)換為1970日 DATETOD1970(X),得到日期X距離1970年1月1日以來的天數(shù) 例如:DATETOD1970(DATE)就返回今天距離1970年1月1日的天數(shù)。 5. TIME0 取得該周期從當(dāng)日0點(diǎn)以來的秒數(shù) 函數(shù)返回自從當(dāng)日0點(diǎn)以來的秒數(shù),對(duì)于日線以上的分析周期,返回0 6. T0TOTIME 秒數(shù)轉(zhuǎn)換為時(shí)間 T0TOTIME(X),得到從0點(diǎn)開始X秒后的時(shí)間值。 7. TIMETOT0 時(shí)間轉(zhuǎn)化為秒數(shù) TIMETOT0(X),得到時(shí)間X距離當(dāng)日0點(diǎn)的秒數(shù)。 5. 引用函數(shù) 1. ALL 一直滿足條件 ALL(X,N), 統(tǒng)計(jì)N周期中是否一直都滿足X條件,若N=0則從第一個(gè)有效值開始。 例如:ALL(CLOSE>OPEN,20)表示是否20周期內(nèi)全部都收陽(yáng)線。 2. ANY 至少一次滿足條件 ANY(X,N), 統(tǒng)計(jì)N周期中是否至少有一次滿足X條件,若N=0則從第一個(gè)有效值開始。 例如:ANY(CLOSE>OPEN,20)表示是否20周期內(nèi)是否存在一根陽(yáng)線。 6. 常數(shù)函數(shù) 1. CATEGORY 證券類型 證券類型,指數(shù)=0,股票=1,基金=2,債券=3,其它=4,期權(quán)=5,外匯=6,期貨=7。 2. CURRENTDATE 計(jì)算當(dāng)時(shí)的日期。 返回計(jì)算時(shí)的日期,該日期是從1900年開始的日期,例如2003年1月1日表示為1030101。 注意:該函數(shù)返回常數(shù) 3. CURRENTTIME 計(jì)算當(dāng)時(shí)的時(shí)間 返回計(jì)算時(shí)的時(shí)間,格式為時(shí)分秒,有效范圍(000000-235959)。 注意:該函數(shù)返回常數(shù) 4. DATATYPE 當(dāng)前分析的數(shù)據(jù)類型 返回?cái)?shù)據(jù)分析周期,分時(shí)線=1,分筆成交=2,1分鐘線=3,5分鐘線=4,15分鐘線=5,30分鐘線=6,60分鐘線=7,日線=8,周線=9,月線=10,多日線=11,年線=12。 注意:該函數(shù)返回常數(shù) 5. MINDIFF 最小價(jià)格變動(dòng) 返回當(dāng)前股票價(jià)格最小變動(dòng)量,對(duì)于股票是0.01元,基金是0.001。 注意:該函數(shù)返回常數(shù) 6. PRODUCTID 取得軟件序列號(hào) 返回軟件的序列號(hào)(加密狗號(hào))。 注意:該函數(shù)返回字符串常數(shù) 7. 繪圖函數(shù) 1. DRAWBMP 畫位圖 DRAWBMP(COND,PRICE,BMPFILE), 當(dāng)COND條件滿足時(shí),在PRICE位置畫BMPFILE文件名指定的BMP位圖(缺省路徑為分析家目錄\USERDATA\BMP)。 例如:DRAWBMP(CLOSE>OPEN,LOW,'SUN')表示當(dāng)收陽(yáng)時(shí)在最低價(jià)位置畫Superstk\UserData\Bmp\Sun.BMP位圖。 2. DRAWGBK 條件填充背景 DRAWGBK(COND,COLOR), 填充滿足COND條件的背景區(qū)域。COLOR可以為漸變顏色STRIP,也可以為BMP圖形文件名(缺省路徑為分析家目錄\USERDATA\BMP),若省略COLOR則使用指標(biāo)線顏色填充(可以使用COLORRED等描述符設(shè)定)。 例如:DRAWGBK(CLOSE>OPEN),COLORRED;表示收陽(yáng)時(shí)用紅色填充背景。 DRAWGBK(CLOSE>OPEN,'MyBMP');表示收陽(yáng)時(shí)用USERDATA\BMP\MyBMP.BMP填充背景。 3. DRAWGBKLAST 最后條件填充背景 DRAWGBKLAST(COND,COLOR), 若圖形中最后一根K線滿足條件COND,則設(shè)定背景COLOR。COLOR可以為漸變顏色STRIP,也可以為BMP圖形文件名(缺省路徑為分析家目錄\USERDATA\BMP),若省略則使用指標(biāo)線顏色填充(可以使用COLORRED等描述符設(shè)定)。 例如:DRAWGBKLAST(CLOSE>OPEN),COLORRED;表示最后一根K線收陽(yáng)時(shí)用紅色填充背景。 DRAWGBKLAST(CLOSE>OPEN,STRIP(RGB(255,0,0),RGB(0,255,0),1));表示圖形中最后一根K線收陽(yáng)時(shí)紅綠過渡色沿水平方向填充背景。 4. FILLRGN 條件填充區(qū)域 FILLRGN(PRICE1,PRICE2,COND1,COLOR1,COND2,COLOR2...), 填充PRICE1到PRICE2之間的區(qū)域,當(dāng)COND1條件滿足時(shí),用COLOR1顏色,當(dāng)COND2條件滿足時(shí),用COLOR2顏色,否則不填充,從COLOR1之后的參數(shù)均可以省略,最多可以有15組條件。 例如:FILLRGN(CLOSE,OPEN,CLOSE>OPEN,RGB(255,0,0),CLOSE< OPEN,RGB(0,255,0))表示填充開盤價(jià)和收盤價(jià)之間的區(qū)域,陽(yáng)線時(shí)用紅色,陰線時(shí)用綠色,平盤不繪制。 5. PARTLINE 條件畫線 PARTLINE(PRICE,COND1,COLOR1,COND2,COLOR2...), 繪制PRICE線,當(dāng)COND1條件滿足時(shí),用COLOR1顏色,當(dāng)COND2條件滿足時(shí),用COLOR2顏色,否則不繪制,從COLOR1之后的參數(shù)均可以省略,最多可以有15組條件。 例如:PARTLINE(CLOSE,CLOSE>OPEN,RGB(255,0,0),CLOSE< OPEN,RGB(0,255,0),1,RGB(0,0,255))表示畫收盤價(jià)線,陽(yáng)線時(shí)用紅色,陰線時(shí)用綠色,平盤用藍(lán)色。注意最后一個(gè)條件為1,表示前面都不滿足時(shí)必然滿足這個(gè)條件。 6. RGB 指定顏色 RGB(R,G,B), 表示用三原色紅(R)綠(G)藍(lán)(B)混合組成指定顏色,每種顏色值可以設(shè)定為0-255。 例如RGB(255,0,0)表示紅色,RGB(0,0,255)表示藍(lán)色 7. STRIP 描述漸變色 STRIP(RGB1,RGB2,DIR), 表示生成RGB1色到RGB2色的漸變區(qū)域,DIR=1表示沿水平方向,否則表示沿垂直方向,其中RGB1,RGB2必須用RGB函數(shù)描述。 例如STRIP(RGB(255,0,0),RGB(0,255,0),0)表示由紅色到綠色的垂直漸變色。 8. TIPTEXT 在圖形上顯示圖標(biāo)及文字 TIPTEXT(COND,PRICE,TEXT), 當(dāng)COND條件滿足時(shí),在PRICE位置顯示圖標(biāo),鼠標(biāo)移近時(shí)顯示文字。 例如:TIPTEXT(CLOSE/OPEN>1.08,LOW,'大陽(yáng)線,股價(jià)為:'+close)表示當(dāng)日漲幅大于8%時(shí)在最低價(jià)位置顯示圖標(biāo),鼠標(biāo)移近時(shí)顯示文字'大陽(yáng)線,股價(jià)為:15.88'字樣。 9. VERTLINE 畫垂直線 VERTLINE(COND,TYPE), 當(dāng)COND條件滿足時(shí),沿垂直方向繪制TYPE類型的線段,TYPE=0表示實(shí)線,1表示虛線'---',2表示點(diǎn)線'...',3表示點(diǎn)劃線'-.-.-',4表示點(diǎn)點(diǎn)劃線'-..-..-'。 例如:VERTLINE(HIGH>=HHV(HIGH,20),1)表示在創(chuàng)20天新高畫垂直虛線。 8. 字符串函數(shù) 1. F10FIND 當(dāng)前F10資料中查找字符串 F10FIND(S,N), 將從當(dāng)前股票的F10資料的第N個(gè)字符開始查找字符串S,返回找到的位置,返回值為負(fù)數(shù)表示未找到。 例如:F10FIND('發(fā)行價(jià)',1),將從F10資料的第1個(gè)字符開始查找字符串'發(fā)行價(jià)',返回找到的位置。 2. F10TEXT 取得F10資料中指定范圍的字符串 F10TEXT(N,M),將得到當(dāng)前股票的F10資料中從第N個(gè)字符開使的M個(gè)字節(jié)長(zhǎng)的字符串,M=0表示一直取到行尾,M<0表示取得之后的全部字符。 例如:F10TEXT(30,10),將得到F10資料中從第30個(gè)字符開使的10個(gè)字節(jié)長(zhǎng)的字符串。 3. INBLOCK 判斷本股票是否板塊成員 INBLOCK(S), 若本股票是板塊S的成員將返回1,否則返回0。 例如:INBLOCK('工業(yè)板塊'),若本股票屬于工業(yè)板塊則返回1。 4. LOWERSTR 將字符串轉(zhuǎn)換為小寫 LOWERSTR(STR), 將返回STR對(duì)應(yīng)的小寫字符串。 例如:LOWERSTR('EFgh')將返回'efgh'。 5. MARKETLABEL 取得當(dāng)前股票的市場(chǎng)代碼 將返回當(dāng)前股票的市場(chǎng)代碼, 例如:滬市返回'SH',深市返回'SZ'。 6. MARKETNAME 取得當(dāng)前股票的市場(chǎng)名稱 將返回當(dāng)前股票的市場(chǎng)名稱, 例如:滬市返回'上海證券交易所',深市返回'深圳證券交易所'。 7. NUMTOSTR 將數(shù)字轉(zhuǎn)化為字符串 NUMTOSTR(N), 將N轉(zhuǎn)化為字符串返回,精確到小數(shù)點(diǎn)后三位,但小數(shù)點(diǎn)后的結(jié)尾為0將被刪除。 例如:NUMTOSTR(close)將返回收盤價(jià)對(duì)應(yīng)的字符串,例如'15.78'。 8. NUMTOSTRN 將數(shù)字轉(zhuǎn)化為字符串 NUMTOSTRN(N,M), 將N轉(zhuǎn)化為字符串返回,精確到小數(shù)點(diǎn)后M位。 例如:NUMTOSTRN(close,5)將返回收盤價(jià)對(duì)應(yīng)的字符串,例如'15.78000'。 9. SELFSTRING 自定義字符串?dāng)?shù)據(jù) SELFSTRING(S), 取得名為S的自定義字符串?dāng)?shù)據(jù) 10. STKLABEL 取得股票代碼 將返回當(dāng)前股票的代碼, 例如深發(fā)展A將返回'000001'。 11. STKNAME 取得股票名稱 將返回當(dāng)前股票的名稱。 12. STRCMP 字符串比較 STRCMP(STR1,STR2), 若STR1>STR2則返回1,STR1< STR2返回-1,相等則返回0。 例如:STRCMP('abcdef','abc')返回1。 13. STRFIND 在字符串中查找另一個(gè)字符串 STRFIND(STR,S1,N), 從字符串STR的第N個(gè)字符開始查找字符串S1,返回找到的位置,若沒有找到就返回0。 例如:STRFIND('abcdefgh','cde',1)返回3。 14. STRLEFT 取得字符串的左邊部分 STRLEFT(STR,N), 返回字符串STR的左邊N個(gè)字符。 例如:STRLEFT('abcdef',3)得到'abc'。 15. STRMID 取得字符串的中間部分 STRMID(STR,N,M), 返回字符串STR的第N個(gè)字符開始的長(zhǎng)度為M個(gè)字符的字符串。 例如:STRMID('abcdef',3,3)得到'cde'。 16. STRRIGHT 取得字符串的右邊部分 STRRIGHT(STR,N), 返回字符串STR的右邊N個(gè)字符。 例如:STRRIGHT('abcdef',3)得到'def'。 17. STRTONUM 將字符串轉(zhuǎn)化為數(shù)字 STRTONUM(STR),將STR轉(zhuǎn)化為數(shù)字返回。 例如:STRTONUM('12.5')將返回?cái)?shù)值12.5。 18. UPPERSTR 將字符串轉(zhuǎn)換為大寫 UPPERSTR(STR), 將返回STR對(duì)應(yīng)的大寫字符串。 例如:UPPERSTR('abcd')將返回'ABCD'。 9. 指標(biāo)函數(shù) 1. FLATZIG 歸一化之字轉(zhuǎn)向 FLATZIG(K,N), 它與ZIG函數(shù)非常相似,不同的是本函數(shù)返回值在0-1之間,也就是說在峰頂時(shí)返回1,峰谷時(shí)返回0。K表示0:開盤價(jià),1:最高價(jià),2:最低價(jià),3:收盤價(jià),4:低點(diǎn)采用最低價(jià)、高點(diǎn)采用最高價(jià)。 例如:FLATZIG(3,5)表示收盤價(jià)的5%的歸一化ZIG轉(zhuǎn)向 10. 數(shù)據(jù)函數(shù) 1. SELFDATA 取得自定義數(shù)據(jù) SELFDATA(S), 取得名為S的自定義數(shù)據(jù),(本函數(shù)僅在日線分析周期有效) 例如,SELFDATA(‘每股收益’)表示取得名為每股收益的自定義數(shù)據(jù)的數(shù)值。 2. SELFSTRING 取得自定義字符串?dāng)?shù)據(jù) SELFSTRING(S), 取得名為S的自定義字符串?dāng)?shù)據(jù),(本函數(shù)僅在日線分析周期有效) 11. 專業(yè)財(cái)務(wù)數(shù)據(jù) 1. PROFFIN 專業(yè)財(cái)務(wù)數(shù)據(jù)。 PROFFIN(N,M) 表示取得M個(gè)報(bào)告期之前的第N號(hào)專業(yè)財(cái)務(wù)數(shù)據(jù), 例如PROFFIN(1001,0)表示最近一期總股本,N的取值請(qǐng)參閱下表 2. PROFSTR 專業(yè)財(cái)務(wù)字符串?dāng)?shù)據(jù) PROFSTR(N,M) 表示取得M個(gè)報(bào)告期之前的第N號(hào)專業(yè)財(cái)務(wù)字符串?dāng)?shù)據(jù), 例如PROFSTR(4001,0)表示最近一期第一大股東名稱,N的取值請(qǐng)參閱下表 3. PROFFINLAST 專業(yè)財(cái)務(wù)數(shù)據(jù)截止期位置 PROFFINLAST(N) 表示最近報(bào)告期的第N號(hào)專業(yè)財(cái)務(wù)數(shù)據(jù)距離現(xiàn)在的周期數(shù),N的取值請(qǐng)參閱下表 4. PROFFINON 指定日期的專業(yè)財(cái)務(wù)數(shù)據(jù) PROFFINON(N,Y,MD) 表示取得Y年M月D日的第N號(hào)專業(yè)財(cái)務(wù)數(shù)據(jù), 如PROFFINON(1001,2000,0101)取得2000年1月1日的總股本,N的取值請(qǐng)參閱下表 5. PROFSTRON 指定日期的專業(yè)字符串財(cái)務(wù)數(shù)據(jù) PROFFINON(N,Y,MD) 表示取得Y年M月D日的第N號(hào)專業(yè)財(cái)務(wù)數(shù)據(jù), 如PROFSTRON(5001,2000,0101)取得2000年1月1日的第一大股東名稱,N的取值請(qǐng)參閱下表 6. PROFFINTERM 專業(yè)財(cái)務(wù)數(shù)據(jù)報(bào)告期 PROFFINTERM(M) 表示取得M個(gè)報(bào)告期之前的財(cái)務(wù)報(bào)表是年報(bào)、中報(bào)還是季報(bào) 返回1:第一季度季報(bào),2:中報(bào),3:第三季度季報(bào),4:年報(bào) 例如:若PROFFINTERM(0)等于4,則表示最近一期財(cái)務(wù)報(bào)表是年報(bào)。 7. SETPROFFIN 設(shè)置專業(yè)財(cái)務(wù)數(shù)據(jù) SETPROFFIN(X) 在本函數(shù)后的其它專業(yè)財(cái)務(wù)函數(shù)將受到本次屬性設(shè)置的影響,表示將專業(yè)財(cái)務(wù)數(shù)據(jù)屬性設(shè)定為X,X從低到高每一位表示一個(gè)含義 第1位:包含年報(bào), 第2位:包含中報(bào), 第3位:包含季報(bào), 第4位:包含最新財(cái)務(wù)指標(biāo), 第5位:調(diào)整中報(bào)、季報(bào)財(cái)務(wù)指標(biāo), 例如SETPROFFIN(01011)表示取得年報(bào)、中報(bào),最新一期數(shù)據(jù),無論是那個(gè)報(bào)告期都要包括在內(nèi),中報(bào)不作調(diào)整 如果不調(diào)用本函數(shù),系統(tǒng)默認(rèn)值為01111 12. 專業(yè)財(cái)務(wù)數(shù)據(jù)代碼內(nèi)容對(duì)照表 股本結(jié)構(gòu) 1001 總股本 1002 國(guó)家股 1003 發(fā)起人股 1004 法人股 1005 一般法人配售 1006 內(nèi)部職工股 1007 流通A股 1008 戰(zhàn)略投資A股 1009 轉(zhuǎn)配股 1010 基金配售 1011 H股 1012 B股 1013 優(yōu)先股 1014 高級(jí)管理人員持股 1015 股本變動(dòng)原因 1016 股本變動(dòng)原因類別 1017 股本變動(dòng)報(bào)告期 1018 截止日期 分紅送配 2001 送股比例 2002 送股股權(quán)登記日 2003 送股除權(quán)日 2004 紅股上市日 2005 轉(zhuǎn)增比例 2006 轉(zhuǎn)增股權(quán)登記日 2007 轉(zhuǎn)增除權(quán)日 2008 轉(zhuǎn)增上市日 2009 派現(xiàn)比例 2010 派現(xiàn)股權(quán)登記日 2011 派現(xiàn)除息日 2012 派現(xiàn)派息日 2013 配股比例 2014 配股股權(quán)登記日 2015 配股除權(quán)基準(zhǔn)日 2016 配股繳款起始日 2017 配股繳款終止日 2018 配股可流通上市日 2019 配股價(jià) 2020 公眾股受讓法人股配股比例 2021 認(rèn)購(gòu)法人股配股每股轉(zhuǎn)讓費(fèi) 2022 配股主承銷商 2023 除權(quán)日期 2024 報(bào)告日期 2025 董事會(huì)日期 2026 股東會(huì)日期 2027 分紅公告日期 2028 總股本基數(shù) 2029 送股數(shù)量 2030 轉(zhuǎn)增總數(shù)量 2031 實(shí)際配股總數(shù) 2032 除權(quán)后總股本 財(cái)務(wù)數(shù)據(jù) 3001 短期投資凈額 3002 應(yīng)收帳款凈額 3003 存貨凈額 3004 流動(dòng)資產(chǎn) 3005 長(zhǎng)期投資凈額 3006 固定資產(chǎn) 3007 無形及其他資產(chǎn) 3008 總資產(chǎn) 3009 短期借款 3010 應(yīng)付帳款 3011 流動(dòng)負(fù)債 3012 長(zhǎng)期負(fù)債 3013 負(fù)債合計(jì) 3014 股本 3015 少數(shù)股東權(quán)益 3016 股東權(quán)益 3017 資本公積 3018 盈余公積 3019 主營(yíng)業(yè)務(wù)收入凈額 3020 主營(yíng)業(yè)務(wù)成本 3021 主營(yíng)業(yè)務(wù)利潤(rùn) 3022 其它業(yè)務(wù)利潤(rùn) 3023 營(yíng)業(yè)費(fèi)用 3024 管理費(fèi)用 3025 財(cái)務(wù)費(fèi)用 3026 投資收益 3027 利潤(rùn)總額 3028 所得稅 3029 凈利潤(rùn) 3030 扣除經(jīng)常性損益后的凈利潤(rùn) 3031 未分配利潤(rùn) 3032 經(jīng)營(yíng)活動(dòng)現(xiàn)金收入 3033 經(jīng)營(yíng)活動(dòng)現(xiàn)金流出 3034 經(jīng)營(yíng)活動(dòng)現(xiàn)金凈額 3035 投資現(xiàn)金流入 3036 投資現(xiàn)金流出 3037 投資現(xiàn)金凈額 3038 籌措現(xiàn)金流入 3039 籌措現(xiàn)金流出 3040 籌措現(xiàn)金凈額 3041 現(xiàn)金及現(xiàn)金等價(jià)物凈增額 3042 銷售商品收到的現(xiàn)金 3043 每股收益 3044 每股凈資產(chǎn) 3045 調(diào)整后每股凈資產(chǎn) 3046 每股資本公積金 3047 每股未分配利潤(rùn) 3048 每股經(jīng)營(yíng)活動(dòng)產(chǎn)生的現(xiàn)金流量?jī)纛~ 3049 每股現(xiàn)金及現(xiàn)金等價(jià)物增加凈額 3050 毛利率 3051 主營(yíng)業(yè)務(wù)利潤(rùn)率 3052 凈利率 3053 總資產(chǎn)報(bào)酬率 3054 凈資產(chǎn)收益率 3055 銷售商品收到的現(xiàn)金占主營(yíng)收入比例 3056 應(yīng)收帳周轉(zhuǎn)率 3057 存貨周轉(zhuǎn)率 3058 固定資產(chǎn)周轉(zhuǎn)率 3059 主營(yíng)業(yè)務(wù)增長(zhǎng)率 3060 凈利潤(rùn)增長(zhǎng)率 3061 總資產(chǎn)增長(zhǎng)率 3062 凈資產(chǎn)增長(zhǎng)率 3063 流動(dòng)比率 3064 速動(dòng)比率 3065 資產(chǎn)負(fù)債比率 3066 負(fù)債比率 3067 股東權(quán)益比率 3068 固定資產(chǎn)比率 3069 扣除非經(jīng)常性損益后每股凈利潤(rùn) 3070 報(bào)告日期 3071 截止日期 增發(fā)回購(gòu) 4001 增發(fā)發(fā)行方式 4002 增發(fā)發(fā)行時(shí)間 4003 增發(fā)發(fā)行價(jià)格 4004 增發(fā)資產(chǎn)置換折股數(shù) 4005 增發(fā)發(fā)行總數(shù)量 4006 增發(fā)配售給基金數(shù)量 4007 增發(fā)公眾股配售數(shù)量 4008 增發(fā)公眾股配售比例 4009 增發(fā)公眾股配售繳款日期 4010 增發(fā)每一賬號(hào)申購(gòu)上限 4011 增發(fā)上網(wǎng)發(fā)行數(shù)量 4012 增發(fā)發(fā)行市盈率 4013 增發(fā)發(fā)行中簽率 4014 增發(fā)發(fā)行募集資金 4015 增發(fā)上市日期 4016 增發(fā)主承銷商 4017 協(xié)調(diào)人 4018 增發(fā)上市推薦 4019 增發(fā)發(fā)行副主承銷商 4020 回購(gòu)數(shù)量 4021 回購(gòu)比例 4022 回購(gòu)價(jià)格 4023 回購(gòu)支付資金總額 4024 回購(gòu)支付資金來源 4025 回購(gòu)支付資金方式 4026 回購(gòu)對(duì)象 4027 回購(gòu)股份名稱 4028 回購(gòu)期限開始日期 4029 報(bào)告日期 4030 截止日期 十大股東 5001 第一股東名稱 5002 股東持股數(shù)量 5003 股東持股比例 5004 備注 5005 法人 5006 經(jīng)營(yíng)范圍 5007 第二股東名稱 5008 股東持股數(shù)量 5009 股東持股比例 5010 備注 5011 法人 5012 經(jīng)營(yíng)范圍 5013 第三股東名稱 5014 股東持股數(shù)量 5015 股東持股比例 5016 備注 5017 法人 5018 經(jīng)營(yíng)范圍 5019 第四股東名稱 5020 股東持股數(shù)量 5021 股東持股比例 5022 備注 5023 法人 5024 經(jīng)營(yíng)范圍 5025 第五股東名稱 5026 股東持股數(shù)量 5027 股東持股比例 5028 備注 5029 法人 5030 經(jīng)營(yíng)范圍 5031 第六股東名稱 5032 股東持股數(shù)量 5033 股東持股比例 5034 備注 5035 法人 5036 經(jīng)營(yíng)范圍 5037 第七股東名稱 5038 股東持股數(shù)量 5039 股東持股比例 5040 備注 5041 法人 5042 經(jīng)營(yíng)范圍 5043 第八股東名稱 5044 股東持股數(shù)量 5045 股東持股比例 5046 備注 5047 法人 5048 經(jīng)營(yíng)范圍 5049 第九股東名稱 5050 股東持股數(shù)量 5051 股東持股比例 5052 備注 5053 法人 5054 經(jīng)營(yíng)范圍 5055 第十股東名稱 5056 股東持股數(shù)量 5057 股東持股比例 5058 備注 5059 法人 5060 經(jīng)營(yíng)范圍 5061 股東總數(shù) 5062 國(guó)家股法人股股東數(shù) 5063 流通股A股股東數(shù) 5064 流通股B股股東數(shù) 5065 報(bào)告日期 5066 截止日期 基金周報(bào) 6001 基金設(shè)立日期 6002 基金管理人 6003 基金托管人 6004 基金規(guī)模 6005 基金凈值總額 6006 基金單位凈值 6007 基金單位初值 6008 基金調(diào)整后凈值 6009 基金調(diào)整后初值 6010 基金增長(zhǎng)率 6011 基金累計(jì)凈值 6012 報(bào)告日期 6013 截止日期 基金持股情況 7001 第一名稱代碼 7002 市值 7003 占凈值比例 7004 第二名稱代碼 7005 市值 7006 占凈值比例 7007 第三名稱代碼 7008 市值 7009 占凈值比例 7010 第四名稱代碼 7011 市值 7012 占凈值比例 7013 第五名稱代碼 7014 市值 7015 占凈值比例 7016 第六名稱代碼 7017 市值 7018 占凈值比例 7019 第七名稱代碼 7020 市值 7021 占凈值比例 7022 第八名稱代碼 7023 市值 7024 占凈值比例 7025 第九名稱代碼 7026 市值 7027 占凈值比例 7028 第十名稱代碼 7029 市值 7030 占凈值比例 7031 報(bào)告日期 7032 截止日期 13. 交易系統(tǒng)函數(shù) 1. AVGENTERPRICE 平均買入成本 交易系統(tǒng)中當(dāng)前持有股票的平均買入成本 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 2. BESTPERCENT 最大利潤(rùn)率 交易系統(tǒng)中當(dāng)前位置之前所有交易中利潤(rùn)率最大一次的利潤(rùn)率 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 3. BESTTRADE 最大盈利 交易系統(tǒng)中當(dāng)前位置之前所有交易中盈利最大一次的利潤(rùn)額 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 4. BUY 買入 本函數(shù)僅能用于交易系統(tǒng)。 BUY(V,Type,P); 表示買入V股當(dāng)前股票,Type表示買入類型,P表示買入價(jià)格,所有參數(shù)均可以省略。 V:買入股數(shù)或買入資金百分比(N%),省略表示100%; Type:可以是本周期收盤(THISCLOSE),次周期開盤(MARKET),次周期限價(jià)單(LIMIT),次周期停損單(STOP); P:對(duì)于限價(jià)單、停損單需要指定的買入價(jià)格 例如: IF CLOSE>OPEN THEN BUY(1000,CLOSE);表示收陽(yáng)線則在本周期收盤價(jià)上買入1000股。 BUY(50%,LIMIT,CLOSE-0.2);表示在次周期CLOSE-0.2元位置下買入限價(jià)單,若價(jià)格達(dá)到或低于該價(jià)格則用50%資金買入。 5. BUYSHORT 空頭買入 本函數(shù)僅能用于交易系統(tǒng)。 BUYSHORT(V,Type,P); 表示空頭買入V股當(dāng)前股票,Type表示買入類型,P表示買入價(jià)格,所有參數(shù)均可以省略。 V:買入股數(shù)或買入資金百分比(N%),省略表示100%; Type:可以是本周期收盤(THISCLOSE),次周期開盤(MARKET),次周期限價(jià)單(LIMIT),次周期停損單(STOP); P:對(duì)于限價(jià)單、停損單需要指定的買入價(jià)格 例如: IF CLOSE>OPEN THEN BUYSHORT(1000,CLOSE);表示收陽(yáng)線則在本周期收盤價(jià)上空頭買入1000股。 BUYSHORT(50%,LIMIT,CLOSE-0.2);表示在次周期CLOSE-0.2元位置下空頭買入限價(jià)單,若價(jià)格達(dá)到或高于該價(jià)格則用50%資金空頭買入。 6. CASH 現(xiàn)金存量 交易系統(tǒng)中當(dāng)前的現(xiàn)金存量 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 7. ENTERBARS 買入位置 交易系統(tǒng)中上次買入到當(dāng)前的周期數(shù) 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 8. ENTERPRICE 買入價(jià)格 交易系統(tǒng)中上次交易的買入價(jià)格 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 9. EXITBARS 賣出位置 交易系統(tǒng)中上次賣出到當(dāng)前的周期數(shù) 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 10. EXITPRICE 賣出價(jià)格 交易系統(tǒng)中上次交易的賣出價(jià)格 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 11. HOLDING 當(dāng)前持倉(cāng)量 交易系統(tǒng)中當(dāng)前持有的股票股數(shù) 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 12. MAXSEQLOSS 最大連續(xù)虧損次數(shù) 交易系統(tǒng)中當(dāng)前位置之前連續(xù)虧損交易的最大次數(shù) 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 13. MAXSEQWIN 最大連續(xù)盈利次數(shù) 交易系統(tǒng)中當(dāng)前位置之前連續(xù)盈利交易的最大次數(shù) 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 14. NUMLOSSTRADE 虧損交易次數(shù) 交易系統(tǒng)中當(dāng)前位置之前總共有多少次虧損的交易,注意每次賣出算一次交易,而買入不算 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 15. NUMSEQLOSS 當(dāng)前連續(xù)虧損次數(shù) 交易系統(tǒng)中當(dāng)前位置之前連續(xù)有多少次虧損的交易,注意每次賣出算一次交易,而買入不算 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 16. NUMSEQWIN 當(dāng)前連續(xù)盈利次數(shù) 交易系統(tǒng)中當(dāng)前位置之前連續(xù)有多少次盈利的交易,注意每次賣出算一次交易,而買入不算 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 17. NUMTRADEWIN 盈利交易次數(shù) 交易系統(tǒng)中當(dāng)前位置之前總共有多少次盈利的交易,注意每次賣出算一次交易,而買入不算 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 18. OPENPROFIT 浮動(dòng)盈虧 交易系統(tǒng)中當(dāng)前浮動(dòng)盈虧(當(dāng)前持倉(cāng)市值與持倉(cāng)成本之差) 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 19. PERCENTWIN 交易勝率 交易系統(tǒng)中當(dāng)前位置之前盈利交易占總交易次數(shù)的比例,其數(shù)值在0—1之間 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 20. SELL 賣出 本函數(shù)僅能用于交易系統(tǒng)。 SELL(V,Type,P); 表示賣出V股當(dāng)前股票,Type表示賣出類型,P表示賣出價(jià)格,所有參數(shù)均可以省略。 V:賣出股數(shù)或賣出持倉(cāng)百分比(N%),省略表示100%; Type:可以是本周期收盤(THISCLOSE),次周期開盤(MARKET),次周期限價(jià)單(LIMIT),次周期停損單(STOP); P:對(duì)于限價(jià)單、停損單需要指定的賣出價(jià)格 例如: IF CLOSE>OPEN THEN SELL(1000,CLOSE);表示收陽(yáng)線則在本周期收盤價(jià)上賣出1000股。 SELL(100%,LIMIT,CLOSE+0.2);表示在次周期CLOSE+0.2元位置下賣出限價(jià)單,若價(jià)格達(dá)到或高于該價(jià)格則賣出全部持倉(cāng)。 21. SELLSHORT 空頭賣出 本函數(shù)僅能用于交易系統(tǒng)。 SELLSHORT(V,Type,P); 表示空頭賣出V股當(dāng)前股票,Type表示賣出類型,P表示賣出價(jià)格,所有參數(shù)均可以省略。 V:賣出股數(shù)或賣出持倉(cāng)百分比(N%),省略表示100%; Type:可以是本周期收盤(THISCLOSE),次周期開盤(MARKET),次周期限價(jià)單(LIMIT),次周期停損單(STOP); P:對(duì)于限價(jià)單、停損單需要指定的賣出價(jià)格 例如: IF CLOSE>OPEN THEN SELLSHORT(1000,CLOSE);表示收陽(yáng)線則在本周期收盤價(jià)上空頭賣出1000股。 SELLSHORT(100%,LIMIT,CLOSE+0.2);表示在次周期CLOSE+0.2元位置下空頭賣出限價(jià)單,若價(jià)格達(dá)到或低于該價(jià)格則賣出全部空頭持倉(cāng)。 22. TOTALTRADE 交易次數(shù) 交易系統(tǒng)中當(dāng)前位置之前總共有多少次交易,注意每次賣出算一次交易,而買入不算 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 23. WORSTPERCENT 最大虧損率 交易系統(tǒng)中當(dāng)前位置之前所有交易中虧損率最大一次的利潤(rùn)率 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 24. WORSTTRADE 最大虧損 交易系統(tǒng)中當(dāng)前位置之前所有交易中虧損最大一次的虧損額 該函數(shù)僅在使用Buy,Sell新交易函數(shù)的交易系統(tǒng)中有效. 14. 輸出修飾符 1. ALIGN 水平對(duì)齊方式 ALIGNx,用逗號(hào)隔開放置在DrawIcon,DrawBmp,DrawText語(yǔ)句后,用于設(shè)定對(duì)齊方式,x=0表示左對(duì)齊,1表示中對(duì)齊,2表示右對(duì)齊,缺省左對(duì)齊。 例如: DrawIcon(CLOSE>OPEN,LOW,6),ALIGN1;表示繪制6號(hào)圖標(biāo),采用中對(duì)齊 2. COLOR 輸出顏色 COLORbbggrr,用逗號(hào)隔開放置在輸出語(yǔ)句后,用于設(shè)定繪制指標(biāo)線的顏色,rr、gg、bb分別表示紅綠藍(lán)三色的份量,用十六進(jìn)制表示,00表示最小,F(xiàn)F表示最大。 例如: CLOSE,COLOR0000FF;表示用紅色繪制收盤價(jià)線 3. LIMIT 限價(jià)買入 交易方式控制符 LIMIT,加入限價(jià)單,次周期達(dá)到限價(jià)即操作,否則放棄。 所謂限價(jià)就是股價(jià)優(yōu)于設(shè)定的價(jià)格,具體說來對(duì)于買入或賣空就是低于設(shè)定價(jià)格,對(duì)于賣出或買空就是高于設(shè)定價(jià)格 4. LINETHICK 輸出線寬 LINETHICKx,用逗號(hào)隔開放置在輸出語(yǔ)句后,用于設(shè)定繪制指標(biāo)線寬度,x可以為0-7,若設(shè)為0則表示不顯示。 例如: CLOSE,LINETHICK6;表示用6點(diǎn)粗線繪制收盤價(jià)線 5. MARKET 市價(jià)買入 交易方式控制符 MARKET,按照次周期開盤價(jià)操作 6. MOVE 向后平移 MOVEx,用逗號(hào)隔開放置在輸出語(yǔ)句后,用于設(shè)定輸出線向后平移x周期,x=0—255 例如: CLOSE,MOVE10;表示繪制收盤價(jià)線向后移動(dòng)10周期 7. PRECIS 輸出精度 PRECISx,用逗號(hào)隔開放置在輸出語(yǔ)句后,用于設(shè)定指標(biāo)數(shù)值精確到小數(shù)點(diǎn)后多少位,x可以為0-6。 例如: CLOSE,PRECIS6;表示收盤價(jià)線顯示6位小數(shù)精度 8. STOP 停損買入 STOP,加入停損單,次周期達(dá)到設(shè)定價(jià)格即操作買入,否則放棄。 所謂停損就是股價(jià)比設(shè)定的價(jià)格要差,具體說來對(duì)于買入或賣空就是高于設(shè)定價(jià)格,對(duì)于賣出或買空就是低于設(shè)定價(jià)格 9. THISCLOSE 收盤價(jià)買入 CLOSED,按照本周期收盤價(jià)操作 10. VALIGN 垂直對(duì)其方式 ALIGNx,用逗號(hào)隔開放置在DrawIcon,DrawBmp,DrawText語(yǔ)句后,用于設(shè)定對(duì)齊方式,x=0表示上對(duì)齊,1表示中對(duì)齊,2表示下對(duì)齊,缺省上對(duì)齊。 例如: DrawIcon(CLOSE>OPEN,LOW,6),ALIGN1,VALIGN0;表示繪制6號(hào)圖標(biāo),采用中對(duì)齊和上對(duì)齊 15. 其它函數(shù) STKINDI 引用指定股票的指標(biāo)數(shù)值 STKINDI('STKNAME','INDINAME',PARAMs),STKNAME是股票代碼,INDINAME是指標(biāo)及其指標(biāo)線名稱,其語(yǔ)法和雙引號(hào)引用指標(biāo)數(shù)值相同,PARAM是可選參數(shù),其數(shù)量應(yīng)當(dāng)?shù)扔诒粦?yīng)用指標(biāo)的參數(shù)數(shù)量,否則將使用缺省參數(shù)數(shù)值。例如: STKINDI('SZ000001','MA.MA1',5,10,15,20)表示引用深發(fā)展的MA指標(biāo)的MA1指標(biāo)線,計(jì)算參數(shù)5,10,15,20。 STKINDI('000001','KDJ.K#WEEK',9,4,4,)表示引用深發(fā)展的周線KDJ指標(biāo)的K指標(biāo)線,計(jì)算參數(shù)9,4,4。 STKINDI('SH600000','EXPLORER.KDJ#MONTH')表示引用浦發(fā)銀行的KDJ條件選股月線公式,計(jì)算使用默認(rèn)值。 |