指南針指標(biāo)設(shè)計(一)
1. 指南針自定義指標(biāo)語法
指南針自定義指標(biāo)平臺以高級程序語言語法為模板,定義了功能強大的自定義指標(biāo)語法,支持高級語言的所有主要的程序結(jié)構(gòu)——順序、循環(huán)和條件跳轉(zhuǎn)。
指南針自定義指標(biāo)語法以語句為單位,每個語句都需要以“;”作結(jié)尾。在自定義指標(biāo)的語法中,有三種語句:賦值語句、條件跳轉(zhuǎn)語句和循環(huán)語句。
1.1. 指標(biāo)文件結(jié)構(gòu)
指南針指標(biāo)文件(zbt或者zbu)可以直接用文本編輯器打開。但是不提倡直接在文本編輯器中改寫指標(biāo)文件,因為這樣做容易發(fā)生語法錯誤,而且無法使用指標(biāo)平臺編輯環(huán)境的提示功能。
指標(biāo)文件的結(jié)構(gòu)如下(括號中是注釋說明):
__ZBT ?。ㄖ改厢樦笜?biāo)文件起始標(biāo)志)
_NAME …… ?。ㄖ笜?biāo)文件名稱,不能為空)
_COMM …… ?。ㄖ笜?biāo)文件注釋,可以為空)
_PAR …… (指標(biāo)的參數(shù)列表,如果有多個參數(shù),用逗號“,”分割)
_VAR …… ?。ㄖ笜?biāo)的局部變量列表,如果有多個,用逗號“,”分割)
_ZB …… ?。ㄖ笜?biāo)的參數(shù)指標(biāo)列表,即需要用到的指標(biāo)列表)
_RES …… ?。ㄖ笜?biāo)文件的結(jié)果指標(biāo)列表,即本文件能計算的指標(biāo)列表)
_DEF …… (指標(biāo)的默認(rèn)值,如果在計算中發(fā)生錯誤,則指標(biāo)值填為默認(rèn)值)
_CODE ?。ㄖ笜?biāo)文件代碼段起始標(biāo)志)
……
…… (代碼段)
……
__END ?。ㄖ笜?biāo)文件結(jié)束標(biāo)志)
1.2. 運算符
指南針自定義指標(biāo)中支持以下運算符(按優(yōu)先級從高到低排列):
l “(”、“)” 左右括號
l “*”、“/” 乘、除
l “+”、“-” 加、減
l “>”、“<”、“>=”、“<=” 大于、小于、大于或等于、小于或等于
l “=” 、“<>” 等于、不等于
l “&” 與,邏輯運算符,僅當(dāng)兩
l “|” 或
l “=” 賦值,注意賦值號和等于號是一樣的
為了兼容中文輸入的使用習(xí)慣,下列運算符“()*/+-=”支持中文全角輸入。
1.3. 賦值語句
賦值語句的語法非常簡單,沒有關(guān)鍵字。賦值語句的型式有:
a = b + c;
a = 系統(tǒng)函數(shù)();
系統(tǒng)函數(shù)();
1.4. 條件跳轉(zhuǎn)語句
條件跳轉(zhuǎn)語句有4個關(guān)鍵字:IF (表示如果)、THEN (表示則)、ELSE (表示否則)、ENDIF (表示條件語句結(jié)束)。完整的條件跳轉(zhuǎn)語句的形式是:
IF 條件
THEN
語句1;
語句2;
……
ELSE
語句1;
語句2;
……
ENDIF;
“條件”的形式是型如 “a > b”、“a < b”、“a = b”(注意這里的“=”是相等而不是賦值的意思),也可以用與和或把簡單條件串連起來,型如:“(a > b) & ( b > c)”、“(a = b) | (b < c)”。
“語句1”、“語句2”可以是任何語句,包括賦值、條件跳轉(zhuǎn)或者循環(huán)語句。
注意條件跳轉(zhuǎn)語句必須包含“THEN”分支,但是可以沒有“ELSE”分支,型如:
IF 條件
THEN
語句1;
語句2;
……
ENDIF;
1.5. 循環(huán)語句
循環(huán)語句有3個關(guān)鍵字:LOOPBEGIN (表示開始循環(huán))、LOOP (表示返回上一個LOOPBEGIN處繼續(xù)執(zhí)行)、BREAK (表示結(jié)束循環(huán))。循環(huán)語句的一般形式是:
LOOPBEGIN
語句1;
語句2;
……
LOOP;
循環(huán)語句一般是在滿足一定條件時退出循環(huán),所以循環(huán)語句一般都需要和條件語句組合使用,型如
LOOPBEGIN
IF 條件
THEN BREAK;
ENDIF;
語句1;
語句2;
……
LOOP;
1.6. 指標(biāo)的引用
自定義指標(biāo)中需要引用其他指標(biāo)。指標(biāo)的引用分為兩類:引用參數(shù)指標(biāo)和引用結(jié)果返回指標(biāo)。
1. 參數(shù)指標(biāo)的引用
引用參數(shù)指標(biāo)時的一般形式是:指標(biāo)名稱[日期偏移](參數(shù)列表)。日期偏移是指需要引用當(dāng)前天往前幾天的指標(biāo)數(shù)值,如果為0則表示引用當(dāng)前天的指標(biāo)數(shù)值,1則表示當(dāng)前天往前1天的指標(biāo)數(shù)值,一次類推……,注意日期偏移為0時可以不寫;參數(shù)列表標(biāo)示所引用的指標(biāo)的參數(shù),如果所引用的指標(biāo)沒有參數(shù)則不能寫該項,如果指標(biāo)有多個參數(shù),則中間用逗號(半角)分割。
例如CYF指標(biāo)需要有一個參數(shù),當(dāng)引用兩天前以22為參數(shù)的CYF指標(biāo)應(yīng)該表述為:CYF[2](22);收盤價指標(biāo)沒有參數(shù),需要引用當(dāng)前天的收盤價應(yīng)該表述為:CLOSE[0]或者CLOSE。
2. 結(jié)果返回指標(biāo)的引用
引用結(jié)果返回指標(biāo)分為兩種情況,即結(jié)果返回指標(biāo)出現(xiàn)在等號右側(cè)和出現(xiàn)在等號左側(cè)。結(jié)果返回指標(biāo)出現(xiàn)在等號右側(cè)時,含義是引用結(jié)果返回指標(biāo)的數(shù)值,引用的一般形式是:指標(biāo)名稱[引用日期]注意此時不能有參數(shù)列表;結(jié)果返回指標(biāo)出現(xiàn)在等號左側(cè)時,含義是給結(jié)果返回指標(biāo)賦值,引用的一般形式是:指標(biāo)名稱,注意此時不能有日期偏移和參數(shù)列表。
1.7. 注釋
指南針自定義指標(biāo)語法中,允許使用注釋來標(biāo)識語句的具體意義。注釋以雙斜杠“//”開始到本行的結(jié)束。在指標(biāo)文本窗口中注釋以綠色字體顯示。
指南針指標(biāo)設(shè)計(二)
自定義指標(biāo)語法范式



指南針指標(biāo)設(shè)計(三)
函數(shù)列表
3.1. 引用函數(shù)
● BLAST( X, N )
求0~N-1周期中,最近一次條件X成立的周期到當(dāng)前天的日期偏移。如果N為0,則一直搜索到第一個有效周期(上市第一天)。X是條件表達(dá)式,例如CLOSE > OPEN、CYF13 > CYF34等;N是搜索的范圍。如果當(dāng)前天即滿足條件X,返回0,在搜索范圍內(nèi)條件X沒有滿足則返回N
舉例:BLAST( CYF13 > CYF34, 10 ),表示求當(dāng)前天和過去9天中最近一次CYF13 > CYF34的日期偏移。
● COST( N )
取得成本分布情況。N是一個表示百分比的表達(dá)式,如20、漲跌幅等。合法的N必須是0~100間的數(shù),如果N小于0,則視為0,如果N大于100,則視為100。
舉例:COST(20),表示20%獲利盤的價格是多少,即有20%的流通盤成本在該價格以下(獲利盤),其余80%的流通盤成本在該價格以上(套牢盤)。
● COSTD( X, N )
取得價格分布情況。X是一個表示價格的表達(dá)式,如15、CLOSE、HIGH等;N是一個表示百分比的表達(dá)式,表示相對價格X的偏移。合法的N值應(yīng)該是一個-100到100的數(shù)值,如果N<-100,則視為-100,N大于100,則視為100。
舉例:COSTD( CLOSE, 15 ),表示求當(dāng)天收盤價(1 + 15%) =115%的價格上的獲利盤是多少,即有多少流通盤的成本在當(dāng)天收盤價115%以下。COSTD( HIGH[1], -10 ),表示求昨天最高價(1 - 10%) =90%的價格上的獲利盤是多少。
● COUNT( X, N )
求0~N-1周期中,條件X成立的周期數(shù)。如果N為0,則從第一個有效周期(上市第一天)開始搜索。X是條件表達(dá)式,例如CLOSE > OPEN、CYF13 > CYF34等;N是搜索的范圍。
舉例:COUNT( CLOSE > OPEN, 10 ),表示10日內(nèi)K線收陽的天數(shù)。
● DMA( Z, X, A )
求X的以A為平滑因子的指數(shù)移動平均。其中Z是必須是結(jié)果返回指標(biāo),X是一個不為常數(shù)的表達(dá)式,A是平滑因子,其合理范圍應(yīng)該在0~1之間,如果A小于0則視為0,大于1則視為1。DMA的具體算法: Z = (1-A) × Z[1] + X × A 。 Z[1]表示前一天指標(biāo)Z的數(shù)值。
舉例:DMA( Z, CLOSE + OPEN, 0.2 ),表示求以0.2為平滑因子的開盤價與收盤價之和的指數(shù)移動平均值,結(jié)果存放在指標(biāo)Z中。
● EMA( Z, X, N )
求X的N日指數(shù)平滑移動平均。N是一個非負(fù)整數(shù),如果N小于0,則視為0。EMA的具體算法:Z = [(N-1)× Z[1]+ 2×X]/(N+2)
舉例:EMA( Z, CYF13[1], 10 ),表示對當(dāng)前天的前一天的CYF13指標(biāo)作10日指數(shù)平滑移動平均,結(jié)果存放在指標(biāo)Z中。
● HHV( X, N )
求N周期內(nèi)X的最大值。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示周期范圍,如果N為0表示從第一個有效周期(上市第一天)開始計算。
舉例:HHV( (OPEN + HIGHT + LOW + CLOSE) / 4, 10 ),表示求10天內(nèi)的最高均價。
● HHVB( X, N )
求N周期內(nèi)X值最大的周期到當(dāng)前周期的日期偏移。X和N的含義同HHV(X,N)。如果X的最大值出現(xiàn)在當(dāng)前周期,函數(shù)返回0。
舉例:HHVB( (OPEN + HIGHT + LOW + CLOSE) / 4, 10 ),表示求10天內(nèi)的最高均價出現(xiàn)日期到當(dāng)前天的偏移值。
● KLINEINDEX
求當(dāng)前周期是K線鏈上的第一個節(jié)點。如果當(dāng)前是上市第一個周期,函數(shù)返回0;第二個周期,函數(shù)返回1;……
● LFCAST( X, N )
求X的N周期線形回歸值。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作線性擬合,如果N為0表示從第一個有效周期(上市第一天)開始擬合。
舉例:LFCAST( CYF34, 0 ),表示對股票上市以來指標(biāo)CYF34的線性擬合值。
● LLV( X, N )
求N周期內(nèi)X的最小值。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示周期范圍,如果N為0表示從第一個有效周期(上市第一天)開始計算。
舉例:LLV( (OPEN + HIGHT + LOW + CLOSE) / 4, 20 ),表示求20天內(nèi)的最低均價。
● LLVB( X, N )
求N周期內(nèi)X值最小的周期到當(dāng)前周期的日期偏移。X和N的含義同LLV(X,N)。如果X的最小值出現(xiàn)在當(dāng)前周期,函數(shù)返回0。
舉例:LLVB( (OPEN + HIGHT + LOW + CLOSE) / 4, 20 ),表示求20天內(nèi)的最低均價出現(xiàn)日期到當(dāng)前天的偏移值
● LSLOPE( X, N )
求X的N周期線形回歸線的斜率。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作線性擬合,如果N為0表示從第一個有效周期(上市第一天)開始擬合。
舉例:LSLOPE( CYF13, 0 ),表示對股票上市以來指標(biāo)CYF13的數(shù)值作線性擬合后的直線斜率。
● MA( X, N )
求X的N周期簡單平均值。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作平均,如果N為0表示從第一個有效周期(上市第一天)開始計算。MA的具體算法是:
舉例:MA( CLOSE[1] + OPEN, 20 ),表示20個周期內(nèi),每日的前收加上今開的平均值。
● SMA( Z, X, N, M )
求X的N日指數(shù)移動平均,平滑因子a = M / N。其中Z是必須是結(jié)果返回指標(biāo),X是一個不為常數(shù)的表達(dá)式,M的數(shù)值應(yīng)該小于N的數(shù)值。SMA的具體算法是:
舉例:SMA( Z, CYF13, 10, 5 ),表示對CYF13作平滑因子為5/10=0.5的指數(shù)移動平均。
● SUM( X, N )
求X的N周期簡單累加值。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作簡單累加,如果N為0表示從第一個有效周期(上市第一天)開始計算。
舉例:SUM( CLOSE[1] + OPEN, 20 ),表示20個周期內(nèi),每日的前收加上今開的簡單累加值。
● SUMD( X, N, D )
求X的N周期衰減累加值。X應(yīng)該是一個不為常數(shù)的表達(dá)式;N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作簡單累加,如果N為0表示從第一個有效周期(上市第一天)開始計算;D是相對日期偏移的衰減系數(shù),D應(yīng)該小于N。
舉例:SUMD( CLOSE - OPEN, 5, 1 ),表示5個周期內(nèi)的當(dāng)日漲的衰減累加,即 (CLOSE - OPEN) + (CLOSE[1] - OPEN[1]) * 4 / 5 + (CLOSE[2] - OPEN[2]) * 3 / 5 + (CLOSE[3] - OPEN[3]) * 2 / 5 + (CLOSE[4] - OPEN[4]) /5
3.2. 大盤函數(shù)
● S0( X )
引用指南針0號指數(shù)的數(shù)值,X是一個不為常數(shù)的表達(dá)式。
舉例:S0( CLOSE[1] + OPEN ),表示求0號指數(shù)當(dāng)前周期的前收加今開的數(shù)值。
● S0A01( X )
引用指南針0A01指數(shù)的數(shù)值,X是一個不為常數(shù)的表達(dá)式。
舉例:S0A01( 成交量 ),表示求0A01指數(shù)當(dāng)前周期的成交量的數(shù)值。
● S0AMV( X )
引用指南針0AMV指數(shù)的數(shù)值,X是一個不為常數(shù)的表達(dá)式。
● S0DMV( X )
引用指南針0DMV指數(shù)的數(shù)值,X是一個不為常數(shù)的表達(dá)式
3.3. 數(shù)學(xué)函數(shù)
● ABS( X )
取絕對值,ABS(X) = |X|。
● DERIV( Z, X )
求X的導(dǎo)數(shù),結(jié)果存放在Z中。Z應(yīng)該是結(jié)果返回指標(biāo),X是一個不為常數(shù)的表達(dá)式。
舉例:DERIV( Z, CLOSE[1] ),表示求前收的導(dǎo)數(shù)。
● EXP( X )
求e的X次方,EXP(X)=ex 。
● INTEGER( X )
X向下取整, 。
● LN( X )
求X的自然對數(shù)。
● LOG( X )
求X的以10為底的對數(shù)。
● MAX( A, B )
求A、B中的較大值。
● MIN( A, B )
求A、B中的較小值。
● MOD( X, N )
求X模N的值,
● POW( X, N )
求X的N次方,
● SGN( X )
取X的符號,如果X是正數(shù),返回1;如果X是負(fù)數(shù)返回-1;如果X是0,返回0。
● SQRT( X )
取X的平方根
3.4. 統(tǒng)計函數(shù)
● AVEDEV( X, N )
求X的N日平均絕對差。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作統(tǒng)計。
舉例AVEDEV( CLOSE – OPEN, 10 ),表示統(tǒng)計10日內(nèi)的當(dāng)日漲跌的平均絕對差。
● DEVSQ( X, N )
求X的N日偏差均方和。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作統(tǒng)計。
舉例DEVSQ( CLOSE – OPEN, 10 ),表示統(tǒng)計10日內(nèi)的當(dāng)日漲跌的偏差均方和。
● STD( X, N )
求X的N日估算標(biāo)準(zhǔn)差。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作統(tǒng)計。
舉例STD( CLOSE – OPEN, 10 ),表示統(tǒng)計10日內(nèi)的當(dāng)日漲跌的估算標(biāo)準(zhǔn)差。
● STDP( X, N )
求X的N日總體標(biāo)準(zhǔn)差。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作統(tǒng)計。
舉例STDP( CLOSE – OPEN, 10 ),表示統(tǒng)計10日內(nèi)的當(dāng)日漲跌的估算標(biāo)準(zhǔn)差。
● VAR( X, N )
求X的N日估算樣本方差。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作統(tǒng)計。
舉例VAR( CLOSE – OPEN, 10 ),表示統(tǒng)計10日內(nèi)的當(dāng)日漲跌的估算樣本方差。
● VARP( X, N )
求X的N日總體樣本方差。X應(yīng)該是一個不為常數(shù)的表達(dá)式,N是一個非負(fù)表達(dá)式,表示在多少周期內(nèi)作統(tǒng)計。
舉例VARP( CLOSE – OPEN, 10 ),表示統(tǒng)計10日內(nèi)的當(dāng)日漲跌的總體樣本方差。
3.5. 三角函數(shù)
● ACOS( X )
求X的反余弦值。X取值應(yīng)該在0~1范圍內(nèi),如果X小于0,則視為0;如果X大于1,則視為1。返回值在0~ 之間。
● ASIN( X )
求X的反正弦值。X取值應(yīng)該在0~1范圍內(nèi),如果X小于0,則視為0;如果X大于1,則視為1。返回值在 ~ 之間。
● ATAN( X )
求X的反正切值。返回值在0~ 之間。
● COS( X )
求X的余弦值,X的單位是弧度,返回值在-1~1之間。
● SIN( X )
求X的正弦值,X的單位是弧度,返回值在-1~1之間。
● TAN( X )
求X的正切值,X的單位是弧度。
指南針指標(biāo)設(shè)計(四)
4. 指標(biāo)點評 4.1. AR、BR、CR指標(biāo) 我們通過介紹AR、BR、CR指標(biāo)的實現(xiàn)代碼,進(jìn)一步說明賦值、條件跳轉(zhuǎn)和循環(huán)三種基本語句的應(yīng)用。指標(biāo)的代碼如下: ————————————————————————————————— 指標(biāo)名稱:ABCR 指標(biāo)注釋:(空) 默認(rèn)值:0 輸入?yún)?shù):M 局部變量:V1, V2, V3, V4, V5, V6, AV, I 參數(shù)指標(biāo):開盤價, 最高價, 最低價, 收盤價 結(jié)果指標(biāo):AR, BR, CR 指標(biāo)文本: ————————————————————————————————— T1 = 0; T2 = 0; T3 = 0; T4 = 0; T5 = 0; T6 = 0; I = 0; LOOPBEGIN IF( I = M ) THEN BREAK; ENDIF; T1 = T1 + HIGH[I] - OPEN[I]; T2 = T2 + OPEN[I] - LOW[I]; IF( HIGH[I] > CLOSE[I+1] ) THEN T3 = T3 + HIGH[I] - CLOSE[I+1]; ENDIF; IF( OPEN[I] > CLOSE[I+1] ) THEN T4 = T4 + OPEN[I] - CLOSE[I+1]; ENDIF; AV = (HIGH[I+1] + LOW[I+1]) / 2; IF( HIGH[I] > AV ) THEN T5 = T5 + HIGH[I] - AV; ENDIF; IF( AV > LOW[I] ) THEN T6 = T6 + AV - LOW[I]; ENDIF; I = I + 1; LOOP; AR = T1 / T2; BR = T3 / T4; CR = T5 / T6; ————————————————————————————————— 下面詳細(xì)分析指標(biāo)的代碼段,文本的一開始是7條賦值語句,分別把7個局部初始化為0; T1 = 0; //賦值語句 T2 = 0; T3 = 0; T4 = 0; T5 = 0; T6 = 0; I = 0; 接下來是一個循環(huán)體: LOOPBEGIN //循環(huán)開始,I是循環(huán)控制變量 IF( I = M ) //條件跳轉(zhuǎn)語句,控制循環(huán)結(jié)束 THEN BREAK; //結(jié)束循環(huán)的分支 ENDIF; …… I = I + 1; //賦值語句,循環(huán)控制變量賦值 LOOP; //循環(huán)結(jié)束 聯(lián)系前面的賦值語句I=0 、循環(huán)中的賦值語句I=I+1以及控制循環(huán)的條件跳轉(zhuǎn)語句可以發(fā)現(xiàn),這是一個參數(shù)M次的循環(huán),例如如果參數(shù)M為10時,這個循環(huán)需要執(zhí)行10次。 在循環(huán)體中有4條賦值語句和5條條件判斷語句我們舉例說明, T1 = T1 + HIGH[I] - OPEN[I]; 意思是把當(dāng)前天的前面第I天的最高價和開盤價的差值加到局部變量T1中; T2 = T2 + OPEN[I] - LOW[I]; 是說把當(dāng)前天往前第I天的開盤價和最低價的差值加到局部變量T2中; IF( HIGH[I] > CLOSE[I+1] ) THEN T3 = T3 + HIGH[I] - CLOSE[I+1]; ENDIF; 如果當(dāng)前天前面第I天的最高價大于第I+1天的收盤價,則把當(dāng)前天往前第I天的最高價和第I+1天的收盤價的差值加到局部變量T3中; AV = (HIGH[I+1] + LOW[I+1]) / 2; 是說把前天往前第I+1天的最高價和最低價的平均值賦給局部變量AV; 最后是三句賦值語句,分別給三個結(jié)果返回指標(biāo)賦值。 AR = T1 / T2; BR = T3 / T4; CR = T5 / T6; 4.2. SRDM(動向速比率)指標(biāo) SRDM(動向速比率)指標(biāo)是一個經(jīng)典指標(biāo),我們通過這個指標(biāo)的實現(xiàn)代碼,進(jìn)一步說明指南針指標(biāo)平臺中函數(shù)的應(yīng)用。 ————————————————————————————————— 指標(biāo)名稱:SRDM 指標(biāo)注釋:動向速比率 默認(rèn)值:1.000 輸入?yún)?shù):N 局部變量: 參數(shù)指標(biāo):最高價, 最低價 結(jié)果指標(biāo):SRDM_DMZ, SRDM_DMF, SRDM_SRDM, SRDM_ASRDM, SRDM_ADMZ, SRDM_ADMF 指標(biāo)文本: ————————————————————————————————— IF( (最高價 + 最低價) <= (最高價[1] + 最低價[1]) ) THEN SRDM_DMZ = 0; ELSE SRDM_DMZ = MAX( ABS(最高價 - 最高價[1]), ABS(最低價 - 最低價[1]) ); ENDIF; IF( (最高價+最低價) >= (最高價[1]+最低價[1]) ) THEN SRDM_DMF = 0; ELSE SRDM_DMF = MAX( ABS(最高價 - 最高價[1]), ABS(最低價 - 最低價[1]) ); ENDIF; SRDM_ADMZ = MA( SRDM_DMZ, 10 ); SRDM_ADMF = MA( SRDM_DMF, 10 ); IF( SRDM_ADMZ > SRDM_ADMF ) THEN SRDM_SRDM = (SRDM_ADMZ - SRDM_ADMF) / SRDM_ADMZ; ELSE IF( SRDM_ADMZ = SRDM_ADMF ) THEN SRDM_SRDM = 0; ELSE SRDM_SRDM = (SRDM_ADMZ - SRDM_ADMF) / SRDM_ADMF; ENDIF; ENDIF; SMA( SRDM_ASRDM, SRDM_SRDM, N, 1 ); ————————————————————————————————— 這里著重分析指標(biāo)代碼中的函數(shù)調(diào)用。在第一個條件跳轉(zhuǎn)語句IF……ENDIF的ELSE分支是一個賦值語句: SRDM_DMZ = MAX( ABS(最高價 - 最高價[1]), ABS(最低價 - 最低價[1]) ); 語句的含義是取相鄰兩天最高價差值的絕對值與最低價差值絕對值中較大的數(shù)值,賦給指標(biāo)SRDM_DMZ。從這里可以發(fā)現(xiàn),指標(biāo)平臺支持多重函數(shù)調(diào)用,即函數(shù)中再套函數(shù),這種調(diào)用的套用次數(shù)沒有限制。 代碼的的最后是一個調(diào)用SMA函數(shù)的賦值語句: SMA( SRDM_ASRDM, SRDM_SRDM, N, 1 ); 這個語句的含義是對指標(biāo)SRDM_SRDM作N日指數(shù)移動平均,平滑系數(shù)是1/N。注意,DMA、EMA、SMA這一類函數(shù)的第一個參數(shù)必須是結(jié)果返回指標(biāo),函數(shù)計算是會把結(jié)果直接賦給第一個參數(shù),所以可以不寫賦值部分,這條語句也可以這樣寫: SRDM_ASRDM = SMA( SRDM_ASRDM, SRDM_SRDM, N, 1 ); 實際上這兩種寫法是完全等價的。 指南針指標(biāo)設(shè)計(五) 5. 指標(biāo)進(jìn)階 5.1. 常見錯誤 技術(shù)指標(biāo)是量化分析和設(shè)計操作方法的基礎(chǔ),每個自定義指標(biāo)都可以反映作者對股市的獨特簡介。指南針自定義指標(biāo)平臺推出以來,廣大網(wǎng)員編寫了許多指標(biāo),其中有許多精品,但是也有一些普遍性的錯誤,在本章中列舉一些常見的錯誤類型,供廣大網(wǎng)員參考。 5.1.1. 條件語句沒有考慮所有情況 條件跳轉(zhuǎn)語句屬于分支結(jié)構(gòu),每個條件跳轉(zhuǎn)語句都應(yīng)該有兩個分支——條件滿足和條件不滿足,原則上兩個分支都需要考慮。請看下面指標(biāo)TEST的實現(xiàn)代碼(結(jié)果指標(biāo)是TEST和AA): IF( CLOSE > OPEN ) THEN AA = CLOSE; ENDIF; TEST = MA( AA, 10 ); 這種類型的代碼在指標(biāo)平臺的實際使用中很常見。我們先看條件跳轉(zhuǎn)語句,如果今天K線收陽(CLOSE > OPEN),則結(jié)果指標(biāo)AA賦值為CLOSE,下面直接把AA作簡單移動平均賦值給結(jié)果指標(biāo)TEST。但是如果今天K線不收陽(CLOSE<=OPEN)那?此時結(jié)果指標(biāo)AA沒有被賦值,接下來對AA作MA運算是沒有意義的,此時指標(biāo)TEST的數(shù)值可能會和用戶原來的設(shè)想大相徑庭。 依據(jù)實際情況,這段代碼有多種修改方法,例如: IF( CLOSE > OPEN ) THEN AA = CLOSE; ELSE AA = OPEN; ENDIF; TEST = MA( AA, 10 ); 或者 AA = 0; IF( CLOSE > OPEN ) THEN AA = CLOSE; ENDIF; TEST = MA( AA, 10 ); 可以看出,第一種修改方法把條件跳轉(zhuǎn)的兩個分支都考慮進(jìn)去了,而第二種方法則是先對指標(biāo)AA賦初始值,然后無論接下來的條件跳轉(zhuǎn)語句是否會對AA賦值,AA的數(shù)值都是有意義的。 5.1.2. 循環(huán)語句不能正常退出 技術(shù)指標(biāo)是量化分析和設(shè)計操作方法的基礎(chǔ),每個自定義指標(biāo)都可以反映作者對股市的獨特簡介。指南針自定義指標(biāo)平臺推出以來,廣大網(wǎng)員編寫了許多指標(biāo),其中有許多精品,但是也有一些普遍性的錯誤,在本章中列舉一些常見的錯誤類型,供廣大網(wǎng)員參考。 有兩種循環(huán)語句:一種明確知道循環(huán)次數(shù),另一種則不明確知道循環(huán)次數(shù)。無論哪種循環(huán)語句,在實際使用中都經(jīng)常出現(xiàn)循環(huán)不能正常退出的錯誤。 1) 明確知道循環(huán)次數(shù)的循環(huán)語句 明確知道循環(huán)次數(shù)的循環(huán)語句的一般形式如下(I是局部變量,用來控制循環(huán)次數(shù),稱為循環(huán)控制變量): I = 0; LOOPBEGIN IF( I >= 10 ) THEN BREAK; ENDIF; …… // I = I + 1; LOOP; 具體來說,這種循環(huán)語句由三部分構(gòu)成:循環(huán)控制變量(I)賦初值;通過I值判斷是否需要退出循環(huán);累加I。這三個部分是缺一不可的。但是,實際使用中缺經(jīng)常出現(xiàn)類似下面的代碼: LOOPBEGIN IF( I >= 10 ) THEN BREAK; ENDIF; …… I = I + 1; LOOP; 或者 I = 0; LOOPBEGIN IF( I >= 10 ) THEN BREAK; ENDIF; …… LOOP; 第一中情況中,循環(huán)控制變量I沒有賦初值就直接進(jìn)入循環(huán),此時I值沒有意義,所以無論是接下來的條件判斷語句或者累加I的操作都變成沒有意義了。第二種情況則是忘了寫累加I的語句,此時I一直是0,條件語句恒不滿足,是個不能退出的死循環(huán)。 2) 不明確知道循環(huán)次數(shù)的循環(huán)語句 先觀察一個實際指標(biāo)的實現(xiàn)代碼(F、N是局部變量,): F = 0; //用來累加“換手率” N = 0; LOOPBEGIN IF( F > 100 ) THEN BREAK; ENDIF; …… F = F + 換手率[N]; N = N + 1; LOOP; 這個循環(huán)語句的結(jié)束條件是累加換手率超過100。從設(shè)計思想上來說沒有錯,但是,如果新股剛上市,所有交易日的換手率加起來也不到100,則這個指標(biāo)就出現(xiàn)問題了,此時循環(huán)可能無法退出。應(yīng)該改為下面的寫法: F = 0; //用來累加“換手率” N = 0; LOOPBEGIN IF( (F > 100) & (KLINEINDEX <= 0) ) THEN BREAK; ENDIF; …… F = F + 換手率[N]; N = N + 1; LOOP; 比較兩段代碼,可以發(fā)現(xiàn)第二段代碼中增加了一個退出循環(huán)的條件:如果到了上市第一天,也退出循環(huán)。通過增加這個條件,避免了新股剛上市的問題。 5.1.3. 局部變量的使用 在使用中,經(jīng)常可以發(fā)現(xiàn)這樣的代碼(N是局部變量,TEST是結(jié)果指標(biāo)): //…… //…… 通過一段代碼計算出局部變量N的數(shù)值 TEST = MA( N, 10 ); 在通過一系列復(fù)雜的運算計算出局部變量N的值后,對N作簡單移動平均并把結(jié)果賦值給結(jié)果指標(biāo)TEST。這段代碼的初始構(gòu)想是把上面的一系列運算的結(jié)果作平均,但是最后一條語句中局部變量的用法卻是錯誤的,得到的結(jié)果與原來的構(gòu)想完全不同。實際上,最后一條語句等同于: TEST = N; 要明白這一點,就要先分清楚局部變量和指標(biāo)的區(qū)別。指標(biāo)相當(dāng)與一個數(shù)組,指標(biāo)的數(shù)值會隨著日期的改變而改變,對于一個指標(biāo)A來說,A[0]、A[1]、A[2]是不同的數(shù)值,一般來說指標(biāo)數(shù)值是不一樣的。而局部變量則不同,局部變量的數(shù)值不會隨著日期的改變而改變,所以N[1]、N[2]、N[3]其實都是N。所以,通過MA的算法可以看出: TEST = MA( N, 10 ) = 10 * N / 10 = N; 總的來說,在引用函數(shù)、大盤函數(shù)和統(tǒng)計函數(shù)中,以X表述的參數(shù)都應(yīng)該是一個包含了指標(biāo)的表達(dá)式,例如: CLOSE CLOSE + OPEN (HIGH[1] + LOW) / 2 等等……。 5.2. 用指標(biāo)速度測試提高指標(biāo)計算速度 自定義指標(biāo)的代碼越復(fù)雜,計算速度就越慢。而那些實現(xiàn)復(fù)雜,計算速度極慢的自定義指標(biāo)是系統(tǒng)速度的瓶頸。找到這些指標(biāo),對指標(biāo)代碼進(jìn)行優(yōu)化,甚至在必要情況下不加載這些指標(biāo),往往可以極大的提高系統(tǒng)速度。而自定義指標(biāo)平臺中的“速度測試” 功能則是找到這些“龜速指標(biāo)”標(biāo)的利器。 可以在“速度測試”功能中的“添加指標(biāo)”中加入一個或者幾個指標(biāo),但是最方便的方法是使用“添加指標(biāo)”中的“所有自定義指標(biāo)”按鈕,加入系統(tǒng)中的所有自定義指標(biāo)進(jìn)行測試,雖然測試速度會慢一些,但是可以對自己的所有自定義指標(biāo)的速度有一個綜合了解,能夠更好的做取舍。 | |
指南針指標(biāo)平臺繪圖函數(shù)說明:指標(biāo)平臺繪圖函數(shù)說明(一)
畫曲線
2003年1月中旬的指南針證券軟件升級中,指標(biāo)平臺新增了一系列功能強大的繪圖函數(shù),這些繪圖函數(shù)包括:畫曲線、畫折線、畫柱狀線、畫K線,畫文本、畫標(biāo)題和畫分割線等7類。通過這些繪圖函數(shù),可以實現(xiàn)多種畫圖效果。為了大家能夠更好的使用繪圖函數(shù),在這里對繪圖函數(shù)作一個詳細(xì)的介紹。
1、畫曲線(CURVELINE)
畫曲線的函數(shù)是CURVELINE,可以有1~4個參數(shù),畫曲線函數(shù)的完整形式如下:CURVELINE( 指標(biāo)表達(dá)式_X, 圖線顏色_CLR, 線寬_W, 忽略條件_I ) [1]
同時也可以有如下簡化模式:
CURVELINE( 指標(biāo)表達(dá)式_X ) [2]
CURVELINE( 指標(biāo)表達(dá)式_X, 圖線顏色_CLR ) [3]
CURVELINE( 指標(biāo)表達(dá)式_X, 圖線顏色_CLR, 線寬_W ) [4]
各參數(shù)的含義如下:
■ 指標(biāo)表達(dá)式_X
可以是指標(biāo)、常數(shù)以及指標(biāo)與常數(shù)的表達(dá)式,例如CYS13、CYF5[1]、10、(OPEN+CLOSE)/ 2。需要注意的是,參數(shù)表達(dá)式中只能出現(xiàn)常數(shù)、結(jié)果指標(biāo)和參數(shù)指標(biāo),不能出現(xiàn)臨時指標(biāo)、局部變量和輸入?yún)?shù)。
■ 圖線顏色_CLR
這個變量用來定義圖線的顏色,在系統(tǒng)中已經(jīng)預(yù)先定義好了一些常用的顏色,引用這些顏色時,只需線輸入“clr”,即可在wizard框中選擇需要的顏色,這些顏色包括:
☆clrBlack(黑色)☆clrBlue(藍(lán)色)☆clrDefault(默認(rèn)色)☆clrGreen(綠色)
☆clrPink(粉紅色)☆clrPurple(紫色)☆clrRed(紅色) ☆clrSky(天藍(lán)色)
☆ clrWhite(白色)☆clrYellow(黃色)
其中使用默認(rèn)色時,系統(tǒng)會為圖線選擇一種比較合適的顏色。如果不輸入這個變量(如[2]),指標(biāo)平臺將自動按照默認(rèn)色顯示指標(biāo)圖線。
除了以上幾種顏色外,指標(biāo)平臺還允許使用自定義的顏色,用戶可以通過RGB()函數(shù)設(shè)定自己希望的顏色。RGB函數(shù)有三個參數(shù),按順序分別是紅、綠、藍(lán)三種基色,指定了這三個值后,RGB函數(shù)將會生成一個系統(tǒng)可用的顏色,這三個參數(shù)的取值范圍都是0~255。如果不知道自己希望的顏色的這三個值,可以通過指標(biāo)組編輯對話框中的顏色選擇對話框(注意點擊“More…”按鈕)找到顏色對應(yīng)的紅、綠、藍(lán)三種基色的數(shù)值。
注意,這個參數(shù)不僅僅可以是常量,還可以是指標(biāo)、函數(shù)等變量表達(dá)式,靈活使用這種方法,可以實現(xiàn)在不同的條件下,用不同的顏色畫指標(biāo)圖線。大家可以從下面的例子中找到這種應(yīng)用。
■ 線寬_W
線寬標(biāo)示曲線的寬度,以分辨率為單位,取值范圍是:1~5。如果不輸入這個變量,圖線寬度將自動設(shè)為1。和圖線顏色_CLR一樣,這個參數(shù)是可以是指標(biāo)、函數(shù)等變量表達(dá)式,可以在不同的條件下用不同的線寬顯示指標(biāo)圖線。
■ 忽略條件_I
忽律條件用于設(shè)定在什么條件下不畫圖線,例如顯示CYS13的圖線時,不希望看到CYS13大于0的部分,則可以把忽略條件設(shè)定為:CYS13 > 0,此時CYS13大于0的部分將不被顯示。如果忽略條件是0,則標(biāo)識不忽略。
下面舉一些畫曲線的簡單例子,下面每一個例子中都附帶有一個zbt文件,解壓壓縮包后會生成到本文檔所在目錄,把對應(yīng)的zbt文件拷貝到“盤后分析\自定指標(biāo)\指標(biāo)”目錄即可直接使用。
1) 簡單模式
在CURVE1.zbt中只有一句話:CURVELINE(CYS13); 即畫CYS13的曲線,曲線函數(shù)中僅有一個參數(shù)——指標(biāo)名稱,從上面的分析我們可以知道,此時系統(tǒng)使用默認(rèn)顏色畫曲線,線寬為1,不忽略任何交易日,整條曲線是完整的。
曲線如下圖示:
2) 指定顏色
CURVELINE( CYS13, CHOOSE(CYS13 > -1.6, clrPurple, clrYellow) );
在Curve2.zbt的CURVELINE函數(shù)中,指定了圖線的顏色,但是,我么可以看到,指標(biāo)代碼中并不是單純指定一種顏色,而是使用了CHOOSE函數(shù),CHOOSE函數(shù)是一個簡單的二選一函數(shù),它的意思是當(dāng)?shù)谝粋€參數(shù)為真是,返回第二個參數(shù)的數(shù)值,否則返回第三個參數(shù)的數(shù)值。在Curve2.zbt中,當(dāng)CYS13大于-1.6時,指標(biāo)圖線是粉色的,否則指標(biāo)圖線是黃色的。顯示效果如下圖示:
仔細(xì)觀察圖線可能會有這樣的疑問——為什么有些地方似乎CYS13大于了-1.6了,但是指標(biāo)圖線卻是黃色,而有些地方CYS13小于-1.6,指標(biāo)圖線卻是粉紅的?這種情況與曲線的特性有關(guān),我們看到的指標(biāo)窗中的曲線并不平滑,它其實是由相鄰兩天對應(yīng)指標(biāo)值的連線連接而成,是一條很密集的折線。而連接相鄰兩天指標(biāo)值的線段是曲線的最小繪圖單位,沒條線段只能有一種顏色,這種顏色由時間較晚的交易日的指標(biāo)數(shù)值決定。假設(shè)第4天CYS13是-3,而第5天CYS13是2,那么連接第4第5天的線段的顏色將由第5天的指標(biāo)數(shù)值來決定,此時應(yīng)該是粉色的。在另外一個參數(shù)“忽略條件_I”中,也有這種情況。
3) 指定顏色與線寬
CURVELINE( CYS13, CHOOSE(CYS13 > -1.6, clrPurple, clrYellow), 3 )
在CURVE3.zbt中,CURVELINE函數(shù)除了指定圖線顏色,還指定了線寬(線寬_W)參數(shù),數(shù)值為3,效果如下圖所示。在CURVELINE函數(shù)中,線寬的取值范圍為[1, 5],數(shù)值越大,圖線越粗。注意,所有小于1的值視同1,所有大于5的值視同5。
4) 帶忽略條件
CURVELINE( CYS13, CHOOSE(CYS13 > -1.6, clrPurple, clrYellow), 3, CYS13< -4 )
忽略條件的作用是當(dāng)?shù)贜日滿足忽略條件時,不畫第N日與第N-1日間的指標(biāo)線。在CURVE4.zbt中,我們畫出了CYS13的圖線,但是忽略CYS13<-4的部分。仔細(xì)觀察下圖可能會發(fā)現(xiàn),有些圖線中CYS13的數(shù)值明顯小于4,但是也被畫出來了,原因和“圖線顏色_CLR”一樣,請參照CURVE2.zbt的說明。
5) 綜合效果——漸變色
CURVELINE( CYS13
, RGB( ABS(MOD(KLINEINDEX*4,511)-255)
, ABS(MOD(KLINEINDEX*4,511)-330)
, ABS(MOD(KLINEINDEX*4,420)-350))
, 3 )
前面所舉的幾個關(guān)于CURVELINE的例子中,圖線顏色參數(shù)都是常數(shù)或者是有限的幾種顏色,這是CURVELINE的基本應(yīng)用。除此以外,CURVELINE函數(shù)中的顏色參數(shù)還支持變量,允許的變量形式是:函數(shù)、結(jié)果指標(biāo)、參數(shù)指標(biāo)和他們的四則運算式。在CURVE5.zbt中,主要就是以KLINEINDEX函數(shù)作為變量通過RGB函數(shù)組合出每一個交易日的指標(biāo)顏色,效果如下圖示。
如果不希望使用RGB函數(shù)組合顏色,甚至可以直接指定一個指標(biāo)作為顏色,如 CURVELINE( CYS5, CYF13, 3 )。此時每日的指標(biāo)圖線都以CYF13的數(shù)值作為顏色。有興趣的用戶可以自己動手試試這樣的效果(注意有些地方可能看起來沒有指標(biāo)線,但是這不是被忽略了,而是因為這些交易日CYF13的數(shù)值轉(zhuǎn)換為顏色后是黑色,和背景色一樣,所以…… J )。
6) 綜合效果——線寬漸變
CURVELINE( CYS13
, RGB( ABS(MOD(KLINEINDEX*4,511)-255)
, ABS(MOD(KLINEINDEX*4,511)-330)
, ABS(MOD(KLINEINDEX*4,420)-350))
, CHOOSE(CYS13 >-0.8, 3, CHOOSE(CYS13 > -2.8, 1, 2)) )
和顏色參數(shù)一樣,線寬參數(shù)“線寬_W”也支持變量表達(dá)式。在CURVE6.zbt中,當(dāng)CYS13>-0.8時,線寬為3,CYS13在-2.8到-0.8之間時,線寬為1,小于-2.8時線寬為2。
指標(biāo)平臺繪圖函數(shù)說明(二)
畫折線
2003年1月中旬的指南針證券軟件升級中,指標(biāo)平臺新增了一系列功能強大的繪圖函數(shù),這些繪圖函數(shù)包括:畫曲線、畫折線、畫柱狀線、畫K線,畫文本、畫標(biāo)題和畫分割線等7類。通過這些繪圖函數(shù),可以實現(xiàn)多種畫圖效果。為了大家能夠更好的使用繪圖函數(shù),在這里對繪圖函數(shù)作一個詳細(xì)的介紹。
2、 畫折線(ZIGLINE)
畫折線的函數(shù)是ZIGLINE,可以有2~5個參數(shù),畫折線函數(shù)的完整形式如下:
ZIGLINE(周期條件_TC,圖線位置_P,圖線顏色_CLR,線寬_W,忽略條件_I ) [5]
同時也可以有如下簡化模式:
ZIGLINE (周期條件_TC,圖線位置_P) [6]
ZIGLINE (周期條件_TC,圖線位置_P,圖線顏色_CLR ) [7]
ZIGLINE(周期條件_TC,圖線位置_P,圖線顏色_CLR,線寬_W,忽略條件_I ) [8]
各參數(shù)的含義如下:
n 周期條件_TC 與 圖線位置_P
這兩個參數(shù)是ZIGLINE函數(shù)最基本的部分,折線是指把所有“轉(zhuǎn)折點”用直線連接起來的指標(biāo)圖線,周期條件的作用就是確定那些交易日是轉(zhuǎn)折點。周期條件應(yīng)該是一個條件表達(dá)是,當(dāng)周期條件非0是,表示當(dāng)前交易日是轉(zhuǎn)折點,例如把HHVB(OPEN,7)=0作為周期條件,那么“當(dāng)前天的開盤價是過去七日的最大開盤價”的交易日將成為折線的轉(zhuǎn)折點。
確定了那些交易日是轉(zhuǎn)折點以后,相當(dāng)于確定了轉(zhuǎn)折點的橫坐標(biāo),我們還需要確定轉(zhuǎn)折點的縱坐標(biāo),這個縱坐標(biāo)通過“圖線位置_P”參數(shù)確定。
例如周期條件是第N日和第M日是兩個相鄰的轉(zhuǎn)折點,圖線位置是最高價(HIGH),則ZIGLINE函數(shù)會一個直線段把N、M兩天的最高價連接起來。
n 圖線顏色_CLR
折線的圖線顏色于曲線完全一致,可以參照CURVELINE函數(shù)“圖線顏色”參數(shù)的說明。折線的圖線顏色也支持變量表達(dá)式。
n 線寬_W
折線函數(shù)的“線寬”參數(shù)于曲線函數(shù)完全一致,可以參照CURVELINE的“線寬”參數(shù)的說明。折線的“線寬”參數(shù)也支持變量表達(dá)式。
n 忽略條件_I
折線函數(shù)的“忽略條件”參數(shù)于曲線函數(shù)完全一致,可以參照CURVELINE的“忽略條件”參數(shù)的說明。折線的“忽略條件”參數(shù)也支持變量表達(dá)式。
下面舉一些畫折線的簡單例子(K線窗疊加):
1) 簡單模式
ZIGLINE( HHVB(HIGH,7)=0, HIGH )
在ZIGLINE1.zbt中,ZIGLINE函數(shù)只有“周期條件”和“圖線位置”兩個參數(shù),這也是折線函數(shù)最簡單的應(yīng)用。上例中,周期條件是HHVB(HIGH,7)=0,即當(dāng)前交易日是過去7個交易日最高價的最大值;位置條件是最高價(HIGH)。畫圖效果如下圖示(K線窗疊加的效果)。
在下圖中,最晚幾天沒有圖線,這不是有忽略條件起作用,而折線函數(shù)的性質(zhì)決定的——要出現(xiàn)一條折線段,就必須有兩個相鄰的轉(zhuǎn)折點,可以看出在下圖最后的10天中,沒有符合的HHVB(HIGH,7)=0交易日,找不到轉(zhuǎn)折點,所以最后10天沒有圖線。事實上,折線能畫到最后一個交易日的情況極少(僅當(dāng)最后一個交易日滿足周期條件),大多數(shù)情況最后幾天是沒有圖線的。使用ZIGLINE函數(shù)時還需要注意一種更特殊的情況——新股K線鏈較短,可能整條K線鏈上只要一個轉(zhuǎn)折點甚至一個都沒有,此時將完全看不到折線?。?!
2) 綜合效果
ZIGLINE( HHVB(HIGH,7)=0, HIGH , CHOOSE(HIGH / LOW > 1.02, clrPurple,clrSky) , 3, CLOSE>OPEN );
在ZIGLINE2.zbt中,ZIGLINE函數(shù)的“周期條件”和“圖線位置”兩個參數(shù)與ZIGLINE1.zbt一樣。此外:
² 當(dāng)天振幅大于2%時,用紫色(clrPurple)畫圖線,否則用天藍(lán)色(clrSky)畫圖線;
² 折線的線寬為3;
² 如果當(dāng)前天收陽線,則忽略當(dāng)前天與前一天的線段。
指標(biāo)平臺繪圖函數(shù)說明(三)
畫柱狀線
2003年1月中旬的指南針證券軟件升級中,指標(biāo)平臺新增了一系列功能強大的繪圖函數(shù),這些繪圖函數(shù)包括:畫曲線、畫折線、畫柱狀線、畫K線,畫文本、畫標(biāo)題和畫分割線等7類。通過這些繪圖函數(shù),可以實現(xiàn)多種畫圖效果。為了大家能夠更好的使用繪圖函數(shù),在這里對繪圖函數(shù)作一個詳細(xì)的介紹。
3、畫柱狀線(COLUMN)
柱狀線函數(shù)是COLUMN,可以有3個或者3個以上的參數(shù),畫柱狀線函數(shù)的完整形式如下:COLUMN(柱線類型_TYPE, 頂價_TOP, 底價_BOTTOM, 圖線顏色_CLR, 忽略條件_I, 價格1_V1, 價格顏色1_C1, ... ) [9]
同時也可以有如下簡化模式:
COLUMN (柱線類型_TYPE, 頂價_TOP, 底價_BOTTOM) [10]
COLUMN (柱線類型_TYPE, 頂價_TOP, 底價_BOTTOM, 圖線顏色_CLR) [11]
COLUMN (柱線類型_TYPE, 頂價_TOP, 底價_BOTTOM, 圖線顏色_CLR, 忽略條件_I) [12]
各參數(shù)的含義如下:
n 柱線類型_TYPE
一共有3種類型的柱狀線:
² 同向柱狀線(clt1Dir);
² 異向柱狀線(clt2Dir);
² 懸空柱狀線(cltSuspend);
同向柱狀線與異向柱狀線和指標(biāo)組平臺中一樣,在本函數(shù)中新增了懸空柱狀線。所謂懸空柱狀線是指不以0為基點的柱狀線,在后面的例子中可以清除的看到它們的區(qū)別。
n 頂價_TOP和底價_BOTTOM
要確定一條柱狀線,就需要確定柱狀線頂部和底部的位置,這兩個信息通過“頂價”和“底價”參數(shù)確定。
注意,雖然“底價”也是COLUMN函數(shù)中必須填寫的參數(shù),但是底價只有在懸空柱狀線中才起作用,對于同向和異向柱狀線來說,這個參數(shù)不起作用,可以隨便填(但是必須填)。
n 圖線顏色_CLR
這里說的圖線顏色其實是圖線的默認(rèn)顏色,如果COLUMN函數(shù)中沒有“價格”和“價格顏色”的參數(shù)列表,這個圖線顏色可以唯一確定柱狀線的顏色。
n 忽略條件_I
柱狀線的忽略條件的含義和曲線、折線函數(shù)基本相同,可以參照前面對忽略條件的說明。
n 價格、價格顏色列表
理論上來說,價格、價格顏色列表的元素個數(shù)沒有限制,但是這兩個參數(shù)必須成對出現(xiàn),每個價格都必須有一個價格顏色與之對應(yīng)。列表中的每個元素應(yīng)該按照價格降序排列,排在前面的元素價格應(yīng)該較大。
每個價格、價格顏色表示當(dāng)指標(biāo)值大于價格(V)時柱狀線使用的顏色。我們可以通過一個簡單的例子了解價格、價格顏色列表的作用:
COLUMN( clt2Dir, CYS13, 0, clrGreen, 0 , 0, clrRed , -4, clrYellow , -10, clrPurple );
上例中,默認(rèn)顏色是綠色(clrGreen),價格、價格顏色列表中一共有3個元素,綜合起來看,每條柱狀線CYS13大于等于0的部分用紅色(clrRed)畫,大于等于-4小于0的部分用黃色(clrYellow)畫,大于等于-10小于-4的部分用紫色(clrPurple)畫,小于-10的部分沒有定義,使用“圖線顏色”參數(shù)中所指定的顏色——綠色(clrGreen)。最終的圖線效果如下圖示:
下面舉一些畫柱狀線的簡單例子:
1) 簡單模式1——同向與異向柱狀線
COLUMN( clt2Dir, HIGH - MA(HIGH,10), 0, CHOOSE(OPEN < CLOSE,clrRed,clrGreen) )
在COL1.zbt中,COLUMN函數(shù)畫的是一條異向柱狀線;頂價是今天的最高價與過去10日最高價簡單平均的差值;如前面所說,“底價”參數(shù)只在懸空柱狀線(cltSuspend)中起作用,同向和異向柱狀線中可以隨便填寫,這里填入一個0;在圖線顏色上,這個例子中COLUMN函數(shù)沒有價格、價格顏色列表,每根柱狀線的顏色都由圖線顏色參數(shù)確定——陽線時用紅色,陰線時用綠色。
2) 簡單模式2——懸空柱狀線
COLUMN(cltSuspend,CLOSE,OPEN, CHOOSE(CLOSE >= OPEN,clrRed,clrGreen))
在COL2.zbt中,COLUMN函數(shù)畫了一條懸空柱狀線,頂價是收盤價,底價是開盤價,圖線顏色與正常K線的顏色一致,這其實就是正常K線的實體部分。效果如下圖示:
3) 綜合效果
COLUMN( cltSuspend, HIGH, LOW, clrGreen, CLOSE / OPEN > 1.02 , HIGH - (HIGH - LOW) * 0.2, clrYellow , HIGH - (HIGH - LOW) * 0.4, clrBlue , HIGH - (HIGH - LOW) * 0.6, clrRed , HIGH - (HIGH - LOW) * 0.8, clrSky , HIGH - (HIGH - LOW), clrPurple );
COL3.zbt中,COLUMN畫的是一條懸空柱狀線,柱狀線的頂價是最高價(HIGH),底價是最低價(LOW),默認(rèn)圖線顏色是綠色,如果K線長陽(CLOSE / OPEN > 1.02)則忽略當(dāng)天的柱狀線,通過后面的價格、價格顏色列表,把每根柱狀線的平均分割為5段,每段一種顏色。
值得注意的是上圖中雖然“圖線顏色”參數(shù)是綠色(clrGreen),但是因為價格、價格顏色列表已經(jīng)完全含蓋柱狀線的范圍,所以“圖線顏色”參數(shù)相當(dāng)于不起作用。
指標(biāo)平臺繪圖函數(shù)說明(四)
畫K線(KLINE)
2003年1月中旬的指南針證券軟件升級中,指標(biāo)平臺新增了一系列功能強大的繪圖函數(shù),這些繪圖函數(shù)包括:畫曲線、畫折線、畫柱狀線、畫K線,畫文本、畫標(biāo)題和畫分割線等7類。通過這些繪圖函數(shù),可以實現(xiàn)多種畫圖效果。為了大家能夠更好的使用繪圖函數(shù),在這里對繪圖函數(shù)作一個詳細(xì)的介紹。
4、畫K線(KLINE)
畫K線的函數(shù)是KLINE,可以有4個或者4個以上的參數(shù),畫K線函數(shù)的完整形式如下:
KLINE( 開_OPEN , 高_(dá)HIGH , 低_LOW , 收_CLOSE , 圖線顏色_CLR , 忽略條件_I , 價格1_V1, 價格顏色1_C1, ... ) [13]
同時也可以有如下簡化模式:
KLINE ( 開_OPEN, 高_(dá)HIGH, 低_LOW, 收_CLOSE ) [14]
KLINE (開_OPEN, 高_(dá)HIGH, 低_LOW, 收_CLOSE, 圖線顏色_CLR) [15]
KLINE( 開_OPEN , 高_(dá)HIGH , 低_LOW , 收_CLOSE , 圖線顏色_CLR , 忽略條件_I ) [16]
各參數(shù)的含義如下:
n 開_OPEN, 高_(dá)HIGH, 低_LOW, 收_CLOSE
構(gòu)成K線的四個基本指標(biāo),分別對應(yīng)正常K線的開、高、低、收四個指標(biāo),輸入時注意參數(shù)順序。
n 圖線顏色_CLR、忽略條件_I、價格、價格顏色列表
KLINE函數(shù)的“圖線顏色”、“忽略條件”、“價格、價格顏色列表” 參數(shù)和柱狀線函數(shù)完全一樣,可以參照COLUMN函數(shù)中的說明。
一般而言,K線都分為陰線和陽線,用不同的顏色顯示,所以,一般使用KLINE函數(shù)時,“圖線顏色”參數(shù)應(yīng)該使用CHOOSE函數(shù),例如CHOOSE( CLOSE >= OPEN, clrRed, clrGreen )。
下面舉一些畫K線的簡單例子:
1、簡單模式
KLINE( OPEN, HIGH, LOW, CLOSE, CHOOSE(CLOSE>=OPEN,clrRed,clrGreen)
KLINE1.zbt中,KLINE函數(shù)畫的是一條標(biāo)準(zhǔn)的K線,值得留意的地方是顏色的設(shè)定,KLINE函數(shù)中,只有一個“圖線顏色”的參數(shù),但是,通過CHOOSE函數(shù),可以針對多種情況定義多種顏色。
2、綜合效果1
KLINE( OPEN, HIGH, LOW, CLOSE, CHOOSE(CLOSE>OPEN,clrRed,clrGreen), 0 , 10.5, clrBlue , 10.3, clrPink , 10.1, clrPurple , 9.9, clrSky , 9.7, clrWhite , 9.5, clrYellow );
和KLINE1.zbt相比,在KLINE2.zbt中K線除了默認(rèn)顏色外,還增加了價格、價格顏色列表。在顏色列表中,大于價格10.5的部分用藍(lán)色畫、[10.5, 10.3]的部分使用粉色、……、[9.7,9.5]的部分使黃色、小于9.5的部分在顏色列表中沒有設(shè)定,用“圖線顏色”參數(shù)中設(shè)定的默認(rèn)色畫。效果如下圖示:
3、綜合效果2
KLINE( OPEN, HIGH, LOW, CLOSE, CHOOSE(CLOSE>OPEN,clrRed,clrGreen), OPEN >CLOSE , HIGH - (HIGH - LOW) * 0.2, clrYellow , HIGH - (HIGH - LOW) * 0.4, clrBlue , HIGH - (HIGH - LOW) * 0.6, clrRed , HIGH - (HIGH - LOW) * 0.8, clrSky , HIGH - (HIGH - LOW), clrPurple )
和KLINE1.zbt相比,在KLINE3.zbt中增加了顏色列表和忽略條件,和KLINE2.zbt不同的是,KLINE2.zbt中的顏色列表中的價格都是常數(shù),而KLINE3.zbt中的顏色列表其實是把當(dāng)前天K線等分為5個部分,每個部分使用一種顏色顯示。此外KLINE3.zbt中增加了忽略條件(OPEN >CLOSE),也就是說,忽略所有陰線交易日,僅畫出陽線交易日的K線 。