iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
0

在前幾天的例子裡,我們有看到 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 來宣告一個變數,並且為變數建立初始值。可以參考官網上的示意圖

png

建立變數相當於告訴系統說,請為這個變數隔出一個有名稱的空間。而空間的內容是隨時有可能更換的。

另外 variable 也可簡寫成 var,方便程式撰寫。

var:range(0);
range = high-low;

value1 to value99

如果沒有特意要語意化變數名稱,在 XS 中就有先內建 value1value2、到 value99等 99 個預設變數名稱。可以直接取這些變數名稱來指派數值,減少程式上的撰寫。

value1 = high - low;
value2 = close - close[1];

型別

在變數的指派上,我們不用額外告訴系統要建立什麼類型的資料,系統會以初始值的類型,來判定該建立哪一種型別的資料

  • 數字 e.g. VAR:AV20(0);
  • 字串 e.g. VAR:x1 ("我是一串文字");
  • 布林 e.g. 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 ! 明天見囉 !/images/emoticon/emoticon37.gif

參考資源


上一篇
[Day06] 輸出
下一篇
[Day08] 內建函數 - 取得欄位
系列文
投資小白的煉金之旅 - XScript快速入門30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言