在前幾天的例子裡,我們有看到 value1=...
、variable:...
。如果有認真看的話,應該不難猜出這些的指令,主要作用在設定變數。但其實在 XS 中,為了要方便各種腳本執行的情境,可不單只有變數的宣告而已。
今天我們就來更進一步了解吧!
在 XS 中,以參數方式來定義數值,主要有兩種考量
input:參數名稱(初始值?:any, 參數描述?:string)
在宣告上我們可以選擇性地設定初始值和描述。舉個例子
// 將百分比的數值,以pctge設為參數,初始值為1
input:pctge(1, "百分比%");
// 如果跳空上漲1%,則觸發警示通知
if open/close[1] > (1+pctge)/100
then ret=1;
另外跟 Javascript 一樣,我可以一次宣告多個參數,並以 ,
隔開。
input: FastLength(12), SlowLength(26), MACDLength(9);
setinputname(參數順序:number, 參數描述:string)
在 XS 中有提供 setinputname
可另外設定參數的描述。
不過要特別注意參數順序的數字是從 1
開始,並且要注意該參數的順序是否正確對應。
直接以上面的例子練習看看。
setinputname(1, "DIF短期期數");
setinputname(2, "DIF長期期數");
setinputname(3, "MACD期數");
當程式需要把利用某個運算過後的數值,進行其他操作時,我們就需要為這個數值建立名稱,並且儲存在執行環境中。
variable:變數名稱(初始值)
在 XS 中,我們需要以 variable
來宣告一個變數,並且為變數建立初始值。可以參考官網上的示意圖
建立變數相當於告訴系統說,請為這個變數隔出一個有名稱的空間。而空間的內容是隨時有可能更換的。
另外 variable
也可簡寫成 var
,方便程式撰寫。
var:range(0);
range = high-low;
value1
to value99
如果沒有特意要語意化變數名稱,在 XS 中就有先內建 value1
、 value2
、到 value99
等 99 個預設變數名稱。可以直接取這些變數名稱來指派數值,減少程式上的撰寫。
value1 = high - low;
value2 = close - close[1];
在變數的指派上,我們不用額外告訴系統要建立什麼類型的資料,系統會以初始值的類型,來判定該建立哪一種型別的資料
VAR:AV20(0);
VAR:x1 ("我是一串文字");
VAR:a1(True);
其中數字類型的變數,如果在時間相關的函數中傳入,系統就會把數字當作時間格式進行處理。例如091250
,在系統中會以格式 hhmmss
做轉換,代表的是早上 9 點 12 分 50 秒。
VAR:X1(090000); // X1 表示 早上9點0分0秒
If timediff(time,x1,"m")>30 // 如果X1跟現在時間相差30分以上,也就是說 早上9點30分時
Then ret=1; // 觸發警示通知
參數跟變數,乍看之下很像,因為用途都是為特定的值建立參數或變數。不過如果站在程式語言的角度看,其實就是常數跟變數的差別。
在參數的部分有提到說,如果這個值不會變動,或是希望可以透過操作介面就能進行修改的話,就能以參數方式定義。
變數則是如字面上意思,值是會隨著運算結果改變的。
以官網上例子來體驗看看
Input: X1(10); // 設定X1為參數 預設值是10
Input: X3(5); // 設定X3為參數 預設值是5
value1=average(close,X1); // 指定 value1 是以 X1 為天期的收盤價移動平均值
value2=average(close,X3); // 指定 value2 是以 X3 為天期的收盤價移動平均值
If value2 cross over value1 then ret=1; // 如果出現黃金交叉時 觸發警示通知
今天的內容雖然很基礎,但也要對這兩者的觀念也要很清楚,才能寫出好的腳本。
今天就到這邊
Happy trading ! 明天見囉 !