函數

當我們有了開高低收成交量這些回傳值可以使用,也知道如何叫出時間序列上的每一根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大一點,那我們就會打字打到手酸。
所以在djscript上,我們加入一種叫作函數的語法,這種語法讓我們可以把經常要計算的方法,用一個函數來表示,
例如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也把大家常用的指標做成函數例如我們常用RSIXS就也它預設成函數所以如果你需要的是六日RSI突破十二日RSI你只要直接寫
RSI(close,6)[1]<RSI(close,12) and
RSI(close,6)>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)crossoverRSI(close,12) 一行敘述式就可以解決掉了。

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代表的就是AB出現死亡交叉。

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,就可以直接連到說明的網頁。