陣列(Array)#
陣列可以想像成一個容器,容器內儲存多個相同型別的值。每一個值稱作元素(element),從第一個元素到最後一個元素依序給予一個索引值(index),索引值從 0 開始遞增。
| 索引 | 0 | 1 | 2 | … | N-1 |
|---|---|---|---|---|---|
| 陣列 | 第 1 個元素 | 第 2 個元素 | 第 3 個元素 | … | 第 N 個元素 |
陣列跟變數一樣,分成宣告和使用兩個階段。
陣列分成靜態陣列(Static Array)和動態陣列(Dynamic Array):
| 靜態陣列 | 動態陣列 | |
|---|---|---|
| 宣告方式 | 指定維度,如 [8]、[5, 6] | 不指定維度,如 [] |
| 大小 | 宣告後無法改變 | 可透過 Array_SetMaxIndex 改變 |
| 維度 | 可以是一維或多維 | 只能是一維 |
| 初始大小 | 由宣告時指定 | 1(索引值只有 0) |
宣告#
宣告陣列的名稱、大小和維度,給予所有元素的初始值,初始值決定型別。
語法#
| |
| 語法元素 | 是否可省略 | 說明 |
|---|---|---|
Array | 必填 | 表示宣告陣列。同義字: Arrays |
IntraBarPersist | 可省略 | 每收到一筆成交就重新計算元素值(update by tick)。預設每一根K棒結束才重新計算(update by bar) |
ArrayName | 必填 | 陣列的名稱,可由字母、底線、數字、句點(.)組成,不區分大小寫,不可以是數字或句點(.)開頭 |
D | 可省略 | 維度,指定靜態陣列的大小,索引值從 0 開始。指定多個維度(D1, D2, D3…)代表多維靜態陣列。如果不指定維度,表示宣告動態陣列 |
InitialValue | 必填 | 全部元素的初始值,初始值決定型別,可以是數值、字串或真假值 |
DataN | 可省略 | 指定陣列綁定的 Data,預設綁定預設的 Data |
使用#
透過 ArrayName[I1, I2, I3] 指定要使用陣列裡的哪一個元素。
| |
| 語法元素 | 說明 |
|---|---|
ArrayName | 陣列名稱 |
I | 索引值。I1 為第一維索引值、I2 為第二維索引值、I3 為第三維索引值,以此類推 |
範例#
一維靜態陣列#
宣告 Factor 是大小為 9(索引值 0~8)且元素初始值為 0 的靜態陣列。使用 for 迴圈,將每個元素的值設為其索引值。
| |
二維靜態陣列#
宣告 Level 是大小為 6×7(索引值 0~5 × 0~6)且元素初始值為 0 的二維靜態陣列。使用 for 迴圈,將每個元素的值設為兩個維度的索引值之和。
| |
動態陣列#
宣告 Alpha 是初始值為 0 的動態陣列(初始大小為 1)。使用 Array_SetMaxIndex 將大小改為 9(索引值 0~8),再使用 for 迴圈將每個元素的值設為其索引值。
| |
常見錯誤: 陣列界限。索引值錯誤#
當使用的索引值不存在陣列中,會產生 陣列界限。索引值錯誤: x 的錯誤,其中 x 為發生錯誤的索引值。
範例: 索引值超出範圍#
宣告 Factor 是大小為 9(索引值 0~8)的靜態陣列。使用 for 迴圈存取索引值 0 到 10,當執行到索引值 9 時,因為超出範圍(0~8),產生 陣列界限。索引值錯誤: 9。
| |
範例: 動態陣列未設定大小#
宣告 Alpha 是初始值為 0 的動態陣列(初始大小為 1,索引值只有 0)。沒有使用 Array_SetMaxIndex 設定大小,當 for 迴圈執行到索引值 1 時,因為超出範圍(0),產生 陣列界限。索引值錯誤: 1。
| |
Reference#
https://www.multicharts.com/trading-software/index.php?title=Array
https://www.multicharts.com/trading-software/index.php?title=Array_SetMaxIndex