(僅適用於函數腳本內)
NumericRef語法用來定義函數腳本的參數為數值型態,並且可以從函數內修改呼叫者傳入的數值。
當一個函數變數被宣告成Numeric時,在函數內對這個數值的修改並不會影響呼叫者端傳入的變數,這個行為稱之為 Call By Value。
如果有需要從函數內可以更改呼叫者端的變數的話,則可以使用NumericRef的語法,此時的行為會變成Call By Reference。
// MACD function
// Input: Price序列, FastLength, SlowLength, MACDLength
// Output: DifValue, MACDValue, OscValue
//
Input: Price(numericseries);
Input: FastLength(numericsimple);
Input: SlowLength(numericsimple);
Input: MACDLength(numericsimple);
Input: DifValue(numericref);
Input: MACDValue(numericref);
Input: OscValue(numericref);
DifValue = XAverage(price, FastLength) - XAverage(price, SlowLength);
MACDValue = XAverage(DifValue, MACDLength) ;
OscValue = DifValue - MACDValue;
在上述MACD函數內,呼叫者端傳入了價格序列(Price), 短天期(FastLength), 長天期(SlowLength),以及MACD的天期(MACDLength),函數內要算出DIF的數值, MACD的數值, 以及OSC的數值。由於總共有三個數值需要回傳,所以利用NumericRef的方式來完成。
呼叫者端的程式碼範例如下:
input: FastLength(12), SlowLength(26), MACDLength(9);
variable: difValue(0), macdValue(0), oscValue(0);
MACD(Close, FastLength, SlowLength, MACDLength, difValue, macdValue, oscValue);
Ret = difValue Crosses Above macdValue;
注意到當呼叫完MACD函數後, difValue, macdValue, 以及 oscValue的數值都會從MACD函數內回傳。