函數

By | 2015-05-26

當我們有了開高低收成交量這些回傳值可以使用,也知道如何叫出時間序列上的每一根K棒來為我們利用來作運算之後, 很自然的,我們就可以計算出一個商品的其他有意義的數值。
例如 我們要計算五日移動平均,我們可以用以下腳本來表示 :

(close+close[1]+close[2]+close[3]+close[4])/5

所以如果要寫一個腳本是當股價突破五日移動平均時,請電腦通知我們,我們可以寫出以下的腳本 :

If close[1]<(close[1]+close[2]+close[3]+close[4]+close[5])/5 and close>(close+close[1]+close[2]+close[3]+close[4])/5
Then ret=1;

但在使用回傳值去運算一些數值時,如果我們就這麼平鋪直述的把運算過程寫出來,那麼當運算過程很繁複, 而我們要運算的次數又不只一次時,我們就會寫的很辛苦,而且很容易出錯。

例如上面的例子是五日移動平均,所以我們還可以close,close[1]…….的一直加上去,但如果是100日移動平均線, 那該怎麼辦呢?如果我們每次計算移動平均時,都得從第一根加到第n根再除以n,要是n大一點,那我們就會打字打到手酸。

所以在xscript上,我們加入一種叫作函數 的語法,這種語法讓我們可以把經常要計算的方法,用一個函數來表示, 例如5日收盤價的移動平均數我們可以直接寫成 average(close,5)
這樣上面的例子我們就可以改寫成 :

If average (close,5) [1] > close[1] and close > average (close,5)
Then ret=1;

在函數中,也不是收盤價才能拿來做為移動平均計算的價格,只要是每一根bar都會有的數值, 都可以拿來計算移動平均,連在這些回傳值基礎上計算出來的數值,也可以拿來用 。
函數的語法格式通常會有一個函數名稱,然後會有一個小括號,小括號裡頭會有回傳值(如上例中的close),會有一個或多個參數值(如上例中的5), 所以當您寫average(close,5)時,電腦知道您要的是收盤價的五期的移動平均值,如果您寫的是average(volume,100), 電腦會知道您要的是100期的移動平均量。

XS有把一些大家常用的運算方式都預先寫成函數,讓大家可以直接拿來使用,例如合計的概念,XS有提供一個 Summation的函數,它的語法是summation(價格,長度), 例如我們如果要算十日成交量的總合,我們可以寫成summation(volume,10),如果我們要計算最近五根K 棒的最高價平均,我們可以寫成

summation(high,5)/5

一百日均量,我們也可以寫成 :

Vlaue1=summation(volume,100)/100

其次,XS也把大家常用的指標做成函數,例如我們常用RSI,XS就也它預設成函數,所以如果你需要的是六日RSI突破十二日RSI,你只要直接寫 :

RSI (close,6) cross over RSI (close,12)

這樣就可以了。
另外有一種函數是用在兩個數值的比較的,這種函數後面不必帶回傳值及長度,直接把函數名稱擺在兩個數值中間就代表這兩個數值的關係, 我們在決定交易策略的時候,常會用到兩個專有名詞,一個叫黃金交叉 ,一個叫死亡交叉 。

黃金交叉的意思是有兩條線,當A線的前一個點比B線的前一個點低,但A 線的最近一點比B線的最近一點高,我們就稱為黃金交叉, 而其相反的情況就是死亡交叉,由於這兩種情況使用者實在太常用了,因此XS乾脆把這兩個都寫成預設的函數, 這種函數就是我們常說的黃金交叉及死亡交叉,這兩個函數的名稱分別為crossover 及crossunder。
在語法上如果A crossover B,代表A[1]<B[1]and A>B,也就是前一根K棒時,A值比B值低,但最近這根K棒時,A值已經變的比B值高, 也就是黃金交叉的意思,同樣的,如果A crossunder B,代表A[1]>B[1] and A < B 。
有了這兩個函數,上面的例子我們就可以寫成

RSI(close,6) crossover RSI(close,12)

一行敘述式就可以解決掉了。

換句話說,黃金交叉crossover的定義就是:
CrossOver = lineA > lineB and lineA[1] <= lineB[1];

而死亡交叉的話,我們用crossunder來表示 :
CrossUnder = lineA < lineB and lineA[1] >= lineB[1];

有了這兩個函數之後,當我們要寫兩個數值出現黃金交叉時,我們只要寫 A Crossover B就是A對 B出現黃金交叉, 相反的,當 A Crossunder B代表的就是A對B出現死亡交叉。
Crossunder與 Crossover串聯起來的這個述敘是一個邏輯判斷式,電腦會去判斷它是true還是false。
例如我們想要電腦在個股突破五日均線時發出警示,我們可以寫一個腳本如下:

If close crossover average(close,5)
Then ret=1;

當電腦在跑這個腳本時,如果引進來計算的商品符合close crossover average(close,5),也就是close crossover average(close,5), 這個敘述為true時,系統就會啟動觸發通知。
XS所支援的函數頗多,在腳本編輯器上的選單”說明”項下,有一個”使用說明”的選項,按這個選項或直接按F1,就可以直接連到說明的網頁。