陣列(Array)#

陣列可以想像成一個容器,容器內儲存多個相同型別的值。每一個值稱作元素(element),從第一個元素到最後一個元素依序給予一個索引值(index),索引值從 0 開始遞增。

索引012N-1
陣列第 1 個元素第 2 個元素第 3 個元素第 N 個元素

陣列跟變數一樣,分成宣告使用兩個階段。

陣列分成靜態陣列(Static Array)和動態陣列(Dynamic Array):

靜態陣列動態陣列
宣告方式指定維度,如 [8][5, 6]不指定維度,如 []
大小宣告後無法改變可透過 Array_SetMaxIndex 改變
維度可以是一維或多維只能是一維
初始大小由宣告時指定1(索引值只有 0)

宣告#

宣告陣列的名稱、大小和維度,給予所有元素的初始值,初始值決定型別

語法#

1
2
3
Array: [IntraBarPersist] ArrayName1[D1, D2, D3, ...](InitialValue1 [,DataN])
     , [IntraBarPersist] ArrayName2[D1, D2, D3, ...](InitialValue2 [,DataN])
     , ...;
語法元素是否可省略說明
Array必填表示宣告陣列。同義字: Arrays
IntraBarPersist可省略每收到一筆成交就重新計算元素值(update by tick)。預設每一根K棒結束才重新計算(update by bar)
ArrayName必填陣列的名稱,可由字母、底線、數字、句點(.)組成,不區分大小寫,不可以是數字或句點(.)開頭
D可省略維度,指定靜態陣列的大小,索引值從 0 開始。指定多個維度(D1, D2, D3…)代表多維靜態陣列。如果不指定維度,表示宣告動態陣列
InitialValue必填全部元素的初始值,初始值決定型別,可以是數值、字串或真假值
DataN可省略指定陣列綁定的 Data,預設綁定預設的 Data

使用#

透過 ArrayName[I1, I2, I3] 指定要使用陣列裡的哪一個元素。

1
ArrayName[I1, I2, I3];
語法元素說明
ArrayName陣列名稱
I索引值。I1 為第一維索引值、I2 為第二維索引值、I3 為第三維索引值,以此類推

範例#

一維靜態陣列#

宣告 Factor 是大小為 9(索引值 0~8)且元素初始值為 0 的靜態陣列。使用 for 迴圈,將每個元素的值設為其索引值。

1
2
3
4
5
6
Array: Factor[8](0);
Variables: index(0);

For index = 0 To 8 Begin
  Factor[index] = index;
End;

二維靜態陣列#

宣告 Level 是大小為 6×7(索引值 0~5 × 0~6)且元素初始值為 0 的二維靜態陣列。使用 for 迴圈,將每個元素的值設為兩個維度的索引值之和。

1
2
3
4
5
6
7
8
Array: Level[5, 6](0);
Variables: d1_index(0), d2_index(0);

For d1_index = 0 To 5 Begin
  For d2_index = 0 To 6 Begin
    Level[d1_index, d2_index] = d1_index + d2_index;
  End;
End;

動態陣列#

宣告 Alpha 是初始值為 0 的動態陣列(初始大小為 1)。使用 Array_SetMaxIndex 將大小改為 9(索引值 0~8),再使用 for 迴圈將每個元素的值設為其索引值。

1
2
3
4
5
6
7
8
Array: Alpha[](0);
Variables: index(0);

Array_SetMaxIndex(Alpha, 8);

For index = 0 To 8 Begin
  Alpha[index] = index;
End;

常見錯誤: 陣列界限。索引值錯誤#

當使用的索引值不存在陣列中,會產生 陣列界限。索引值錯誤: x 的錯誤,其中 x 為發生錯誤的索引值。

範例: 索引值超出範圍#

宣告 Factor 是大小為 9(索引值 0~8)的靜態陣列。使用 for 迴圈存取索引值 010,當執行到索引值 9 時,因為超出範圍(0~8),產生 陣列界限。索引值錯誤: 9

1
2
3
4
5
6
Array: Factor[8](0);
Variables: index(0);

For index = 0 To 10 Begin
  Factor[index] = index;
End;

範例: 動態陣列未設定大小#

宣告 Alpha 是初始值為 0 的動態陣列(初始大小為 1,索引值只有 0)。沒有使用 Array_SetMaxIndex 設定大小,當 for 迴圈執行到索引值 1 時,因為超出範圍(0),產生 陣列界限。索引值錯誤: 1

1
2
3
4
5
6
7
Array: Alpha[](0);
Variables: index(0);

// 沒有使用 Array_SetMaxIndex 設定動態陣列的大小
For index = 0 To 8 Begin
  Alpha[index] = index;
End;

Reference#

https://www.multicharts.com/trading-software/index.php?title=Array

https://www.multicharts.com/trading-software/index.php?title=Array_SetMaxIndex

© 2026 CodeReindeer. All rights reserved.