
MQL4 配列関数の一覧|19個の関数と静的配列・動的配列

配列関数19個の分類
数えたのは、公式リファレンスの配列の索引ページ(docs.mql4.com/array)に載っている関数です。2026年10月に確認して、19個ありました。図では、使い方で5つに分けています。サイズを扱う関数が5個、種類と向きを調べたり変えたりする関数が4個、入れる・写す関数が5個、並べる・探す関数が4個、比べる関数が1個で、合わせて19個です。
この記事は、使う機会の多い関数から順に、引数と戻り値を公式の説明と手元の実行結果で並べていきます。公式の説明と手元の動きが違った点は、そのつど書き分けました。
静的配列と動的配列
MQL4の配列には、大きさが決まっている静的配列と、あとから大きさを変えられる動的配列があります。double a[100]; のように大きさを書くと静的配列、double b[]; のように大きさを書かないと動的配列です。大きさを変える ArrayResize は、公式の説明では動的配列のための関数です。
配列が動的かどうかは、ArrayIsDynamic で調べられます。要素数は ArraySize で取れます。次元が2つ以上の配列では、次元の数を ArrayDimension、指定した次元の要素数を ArrayRange で調べます。使い方は3つめの節のサンプルで確かめました。
アドバイス配列の関数は19個。まず、サイズ・向き・入れる写す・並べる探す・比べるの5つに分けて見ると探しやすいよ。
MQL4 配列関数 ArrayResize・ArrayFree|サイズを変える

ArrayResizeの引数と戻り値
宣言は int ArrayResize(void& array[], int new_size, int reserve_size=0) です。公式の説明では、戻り値は変更後の要素数で、失敗したときは-1です。第3引数の予約サイズは、配列のメモリを実際に取り直すときに使われます。
次のサンプルは、動的配列を1つずつ増やして直近5本の終値を入れ、縮めて、解放するまでの流れです。MT4のスクリプトにして、EURUSDの15分足のチャートで実行しました。
#property strict
// 動的配列を 1 つずつ増やし、直近 5 本の終値を入れる
void OnStart()
{
double prices[]; // 動的配列(サイズ未指定)
int size = ArrayResize(prices, 0); // 戻り値は変更後の要素数
Print("空にした: 戻り値=", size, " ArraySize=", ArraySize(prices));
for(int i = 0; i < 5; i++)
{
size = ArrayResize(prices, i + 1);
prices[size - 1] = Close[i];
}
Print("5 本追加: ArraySize=", ArraySize(prices),
" prices[0]==Close[0]: ", prices[0] == Close[0],
" prices[4]==Close[4]: ", prices[4] == Close[4]);
ArrayResize(prices, 3); // 縮めると先頭 3 つは残る
Print("3 に縮めた: ArraySize=", ArraySize(prices),
" prices[2]==Close[2]: ", prices[2] == Close[2]);
ArrayFree(prices); // バッファを解放し、要素数は 0
Print("ArrayFree 後: ArraySize=", ArraySize(prices));
double fixedArr[10]; // 静的配列
int r = ArrayResize(fixedArr, 20); // 静的配列に使うと
Print("静的配列に ArrayResize: 戻り値=", r, " ArraySize=", ArraySize(fixedArr),
" ArrayIsDynamic=", ArrayIsDynamic(fixedArr));
double buf[100];
int n = ArrayInitialize(buf, EMPTY_VALUE); // 全要素を同じ値にする
Print("ArrayInitialize の戻り値=", n, " buf[99]==EMPTY_VALUE: ", buf[99] == EMPTY_VALUE);
}結果は次のとおりです。ArrayResize(prices, 0) の戻り値は0でした。5つに増やすと ArraySize が5になり、prices[0]==Close[0] と prices[4]==Close[4] がどちらも true でした。3つに縮めても、先頭の3つは残り、prices[2]==Close[2] は true でした。ArrayFree のあとは ArraySize が0になりました。
静的配列 double fixedArr[10] に ArrayResize(fixedArr, 20) を呼ぶと、手元のビルド1492では戻り値が20で、ArraySize も20、ArrayIsDynamic は true になりました。公式の説明は動的配列向けなので、この動きは公式にない挙動です。静的配列には使わず、大きさを変えたい配列は、最初から動的配列で宣言するのが安全です。
予約サイズで増やす時間を測った結果
要素を1つずつ増やすたびに、メモリを取り直すと時間がかかります。そこで、ArrayResize(a, i) を i=1 から n まで繰り返す「予約なし」と、ArrayResize(b, i, n) を同じ回数繰り返す「予約あり」を比べました。n は1万・3万・10万の3通りで、各 n を5回ずつ実行し、GetMicrosecondCount で測った時間の中央値を出しています。1回の測定は、n 要素まで増やし終えるまでの時間です。
#property strict
// 予約サイズなしと、予約サイズありで、配列を 1 要素ずつ増やす時間を比べる
void OnStart()
{
int sizes[3] = {10000, 30000, 100000};
int handle = FileOpen("arr_reserve.csv", FILE_WRITE | FILE_CSV | FILE_ANSI, ',');
FileWrite(handle, "n", "run", "no_reserve_us", "reserve_us");
for(int k = 0; k < 3; k++)
{
int n = sizes[k];
for(int run = 1; run <= 5; run++)
{
double a[], b[];
ulong t0 = GetMicrosecondCount();
for(int i = 1; i <= n; i++)
ArrayResize(a, i); // 予約なし
ulong t1 = GetMicrosecondCount();
for(int j = 1; j <= n; j++)
ArrayResize(b, j, n); // 予約サイズ n
ulong t2 = GetMicrosecondCount();
FileWrite(handle, n, run, t1 - t0, t2 - t1);
ArrayFree(a);
ArrayFree(b);
}
}
FileClose(handle);
Print("arr_reserve done");
}中央値は、n が1万のとき、予約なしが8.5ミリ秒、予約ありが0.14ミリ秒でした。3万のとき、85.0ミリ秒と0.38ミリ秒でした。10万のとき、909.2ミリ秒と1.38ミリ秒です。予約ありのほうが、約62倍、約224倍、約658倍短い結果でした。10万要素の5回の範囲は、予約なしが888.4〜966.8ミリ秒、予約ありが0.87〜1.71ミリ秒で、予約なしの最短より予約ありの最長のほうが小さい値でした。
| 要素数 n | 予約なし | 予約あり | 倍率 |
|---|---|---|---|
| 1万 | 8.5 | 0.14 | 約62倍 |
| 3万 | 85.0 | 0.38 | 約224倍 |
| 10万 | 909.2 | 1.38 | 約658倍 |
表の「予約なし」「予約あり」は、5回の中央値(単位はミリ秒)です。「倍率」は、予約なしの中央値を予約ありの中央値で割った値です。測定条件は、XMTradingのデモ口座のMT4(ビルド1492)で、EURUSDの15分足のチャートにスクリプトを載せて実行したものです。
この結果は、手元の1台のPCで、デモ口座のMT4を動かしたときの値です。ほかの環境で同じ倍率になるとは限りません。使うメモリの量も測っていません。予約サイズは、増やす回数が先に分かっているときに、n と同じ値かそれ以上を渡す使い方になります。公式の説明のサンプルにも、予約サイズで速くなる例があります。
アドバイス増やす回数が先に分かっているなら、第3引数に予約サイズを入れよう。10万回増やす例では、909.2ミリ秒が1.38ミリ秒になったよ。
MQL4 配列関数 ArrayCopy・ArrayInitialize|コピー・初期化・比較

ArrayCopyの引数と戻り値
宣言は int ArrayCopy(dst_array[], src_array[], int dst_start=0, int src_start=0, int count=WHOLE_ARRAY) です。公式の説明では、戻り値はコピーした要素数で、コピー先の配列は足りなければ自動で広がります。同じ配列を、コピー元とコピー先の両方に指定すると、結果は決まっていません。
#property strict
void OnStart()
{
double source[] = {1.0, 2.0, 3.0, 4.0, 5.0};
double dest[]; // サイズを決めていない動的配列
int c1 = ArrayCopy(dest, source); // 全要素。コピー先は自動で広がる
Print("全部: 戻り値=", c1, " ArraySize(dest)=", ArraySize(dest));
double partial[];
int c2 = ArrayCopy(partial, source, 0, 2, 2); // dst_start=0, src_start=2, count=2
Print("部分: 戻り値=", c2, " partial[0]=", partial[0], " partial[1]=", partial[1]);
double recent[];
int c3 = ArrayCopy(recent, Close, 0, 0, 3); // 時系列の Close から 3 本
Print("Close: 戻り値=", c3, " recent[0]==Close[0]: ", recent[0] == Close[0],
" recent[2]==Close[2]: ", recent[2] == Close[2]);
int c4 = ArrayCopy(recent, source, 3, 0, 2); // コピー先の 3 番目から 2 要素
Print("後ろへ足す: 戻り値=", c4, " ArraySize(recent)=", ArraySize(recent),
" recent[3]=", recent[3], " recent[4]=", recent[4]);
}図の4つが、このサンプルの結果です。全部をコピーすると戻り値は5で、コピー先は5要素に広がりました。ArrayCopy(partial, source, 0, 2, 2) は、コピー元の2番目から2個を、コピー先の先頭へ入れるので、{3.0, 4.0} になります。時系列の Close から3本をコピーすると、戻り値は3で、recent[0]==Close[0] と recent[2]==Close[2] がどちらも true でした。
最後の呼び出しは、コピー先の3番目から2個を足す形です。戻り値は2で、ArraySize は5になり、recent[3] が1.0、recent[4] が2.0でした。コピー先の開始位置を、いまの要素数にそろえると、後ろへ足せます。
ArrayInitializeとArrayFill
ArrayInitialize は、配列の全要素を同じ値にします。公式の説明には戻り値の記載がなく、No return value とあります。ところが、手元のビルド1492では、double buf[100] に ArrayInitialize(buf, EMPTY_VALUE) を呼ぶと戻り値が100で、buf[99]==EMPTY_VALUE は true でした。戻り値は当てにせず、初期化だけに使うと決めておくと安全です。
配列の一部だけを同じ値にしたいときは、ArrayFill(void ArrayFill(array[], int start, int count, value))を使います。サンプルでは、10要素の配列に、0番目から5個を123、5番目から5個を456にして、a[0] と a[4] が123、a[5] と a[9] が456になりました。
ArrayRange・ArrayDimension・ArrayCompare
#property strict
void OnStart()
{
double grid[][3]; // 2 次元の動的配列(最初の次元だけ可変)
ArrayResize(grid, 4); // 最初の次元を 4 にする
Print("ArraySize=", ArraySize(grid), " ArrayRange(0)=", ArrayRange(grid, 0),
" ArrayRange(1)=", ArrayRange(grid, 1), " ArrayDimension=", ArrayDimension(grid));
int a[];
ArrayResize(a, 10);
ArrayFill(a, 0, 5, 123); // 0 番目から 5 個を 123 に
ArrayFill(a, 5, 5, 456); // 5 番目から 5 個を 456 に
Print("ArrayFill: a[0]=", a[0], " a[4]=", a[4], " a[5]=", a[5], " a[9]=", a[9]);
int x[] = {1, 2, 3};
int y[] = {1, 2, 4};
int z[] = {1, 2, 3};
Print("ArrayCompare(x,y)=", ArrayCompare(x, y), " (y,x)=", ArrayCompare(y, x),
" (x,z)=", ArrayCompare(x, z), " (x,y,0,0,2)=", ArrayCompare(x, y, 0, 0, 2));
}2次元の動的配列 double grid[][3] の最初の次元を4にすると、ArraySize は12、ArrayRange(grid, 0) は4、ArrayRange(grid, 1) は3、ArrayDimension は2でした。ArrayRange は、次元ごとの要素数を返します。
ArrayCompare は、2つの配列の中身を比べます。公式の説明では、戻り値は、同じなら0、1つめが小さければ-1、大きければ1で、エラーのときは-2です。サンプルでは、{1,2,3} と {1,2,4} の比較が-1、逆順が1、{1,2,3} どうしが0でした。比べる個数を2にすると、{1,2,3} と {1,2,4} も0になりました。
アドバイスArrayCopyの戻り値は、コピーした要素数。後ろへ足したいときは、コピー先の開始位置をいまの要素数にそろえようね。
MQL4 配列関数 ArraySort・ArrayBsearch|並べ替えと探索

ArraySortの引数と結果
宣言は bool ArraySort(array[], int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND) です。公式の説明では、配列の時系列の向きも考えて並べ替えます。第2引数が個数、第3引数が開始位置、第4引数が昇順か降順かの指定です。
#property strict
string Join(const double &a[])
{
string s = "";
for(int i = 0; i < ArraySize(a); i++)
s += (i > 0 ? "," : "") + DoubleToString(a[i], 0);
return s;
}
void OnStart()
{
double values[] = {5, 2, 8, 1, 9, 3};
ArraySort(values); // 昇順(既定)
Print("昇順: ", Join(values));
ArraySort(values, WHOLE_ARRAY, 0, MODE_DESCEND); // 降順
Print("降順: ", Join(values));
double part[] = {5, 2, 8, 1, 9, 3};
ArraySort(part, 3, 1); // count=3, start=1: [1]〜[3] だけ
Print("一部だけ: ", Join(part));
double s[]; // 時系列にした配列
ArrayResize(s, 4);
s[0] = 3; s[1] = 1; s[2] = 4; s[3] = 2;
ArraySetAsSeries(s, true);
ArraySort(s); // 昇順を指定
Print("時系列のまま昇順: s[0]=", s[0], " s[3]=", s[3]);
ArraySetAsSeries(s, false); // 通常の向きで見直す
Print("通常の向きで見ると: ", Join(s));
double sorted[] = {1, 2, 3, 5, 8, 9};
Print("ArrayBsearch(5)=", ArrayBsearch(sorted, 5.0)); // 値がある
Print("ArrayBsearch(4)=", ArrayBsearch(sorted, 4.0)); // 値がない: 近い要素の位置
Print("ArrayBsearch(7)=", ArrayBsearch(sorted, 7.0), " ArrayBsearch(0)=", ArrayBsearch(sorted, 0.0),
" ArrayBsearch(10)=", ArrayBsearch(sorted, 10.0));
double unsorted[] = {5, 2, 8, 1, 9, 3};
Print("並べていない配列で ArrayBsearch(8)=", ArrayBsearch(unsorted, 8.0));
}{5, 2, 8, 1, 9, 3} を昇順にすると 1, 2, 3, 5, 8, 9、降順にすると 9, 8, 5, 3, 2, 1 になりました。ArraySort(part, 3, 1) は、番号1から3個だけを昇順にするので、5, 1, 2, 8, 9, 3 です。
時系列にした配列 {3, 1, 4, 2} を昇順にすると、時系列の向きで s[0] が1、s[3] が4になりました。通常の向きに戻して見ると、4, 3, 2, 1 です。時系列の配列でも、並べ替えは時系列の向きに合わせて行われます。通常の向きに戻してから並べ替える必要はありません。
ArrayBsearchは並べた配列だけ
ArrayBsearch は、昇順に並んだ配列から、値の位置を二分探索で探します。{1, 2, 3, 5, 8, 9} では、5を探すと3が返りました。値がない場合、公式の説明は近い位置を返すとしています。手元では、4を探すと2、7を探すと3、0を探すと0、10を探すと5でした。値以下で最も後ろの要素の位置が返っていて、7では、値が近い8(番号4)ではなく5(番号3)の位置です。
並べていない {5, 2, 8, 1, 9, 3} で8を探すと、正しい位置は2ですが、5が返りました。ArrayBsearch は、必ず ArraySort のあとに使います。
アドバイスArraySortは、時系列にした配列でも、その向きに合わせて並べてくれたよ。ArrayBsearchの前には必ず並べ替えよう。
MQL4 配列関数 ArrayMaximum・ArrayMinimum|引数の順番

第2引数が個数、第3引数が開始位置
宣言は int ArrayMaximum(array[], int count=WHOLE_ARRAY, int start=0) で、ArrayMinimum も同じ形です。公式の説明では、戻り値は最大値の位置で、探せないときは-1です。MQL4では、個数が先、開始位置があとです。
#property strict
void OnStart()
{
double myData[] = {10.5, 20.3, 5.8, 15.2, 30.1};
int maxIdx = ArrayMaximum(myData); // 全体から探す
int minIdx = ArrayMinimum(myData);
Print("最大 ", myData[maxIdx], " は ", maxIdx, " 番目、最小 ", myData[minIdx], " は ", minIdx, " 番目");
int a = ArrayMaximum(myData, 3, 1); // 第2引数が count、第3引数が start
int b = ArrayMaximum(myData, 1, 3); // 順番を逆にすると別の範囲になる
Print("ArrayMaximum(myData, 3, 1)=", a, " ArrayMaximum(myData, 1, 3)=", b);
int hi = iHighest(NULL, 0, MODE_CLOSE, 20, 1); // 価格の配列を直接探す
int ar = ArrayMaximum(Close, 20, 1); // Close[] は時系列配列
Print("iHighest=", hi, " ArrayMaximum(Close,20,1)=", ar, " 一致: ", hi == ar);
}{10.5, 20.3, 5.8, 15.2, 30.1} の全体から探すと、最大値は30.1で位置は4、最小値は5.8で位置は2でした。引数を付けた ArrayMaximum(myData, 3, 1) は、番号1から3個(20.3, 5.8, 15.2)を探して、20.3の位置1を返しました。順番を入れ替えた ArrayMaximum(myData, 1, 3) は、番号3から1個(15.2)を探すので、3が返ります。
2つの呼び出しは、引数が同じ数字でも、範囲がまったく違います。戻り値は位置なので、値を取るには、myData[ArrayMaximum(myData)] のように添え字へ入れます。
iHighestとの照合
チャートの価格を直接探す iHighest もあります。iHighest(NULL, 0, MODE_CLOSE, 20, 1) と、時系列配列の Close に対する ArrayMaximum(Close, 20, 1) を、EURUSDの15分足で同時に呼ぶと、どちらも13が返りました。1回の照合なので、一致する保証にはなりませんが、Close を ArrayMaximum に渡しても、iHighest と同じ位置を探せました。
アドバイスMQL4のArrayMaximumは、配列・個数・開始位置の順だよ。順番を逆にすると、探す範囲が変わるから気をつけてね。
MQL4 配列関数 ArraySetAsSeries|時系列配列の向き

ArraySetAsSeriesで番号が逆になる
宣言は bool ArraySetAsSeries(array[], bool flag) です。公式の説明では、true にすると、配列の番号が時系列の向き(最新が0)になります。値は動かず、番号の振り方だけが変わります。
#property strict
void OnStart()
{
double data[];
ArrayResize(data, 5);
for(int i = 0; i < 5; i++)
data[i] = 100 + i; // 100, 101, 102, 103, 104
Print("通常: [0]=", data[0], " [4]=", data[4], " 時系列か=", ArrayGetAsSeries(data));
bool ok = ArraySetAsSeries(data, true); // 値は動かず、番号の向きだけ変わる
Print("時系列に変更: 戻り値=", ok, " [0]=", data[0], " [4]=", data[4]);
double fixedArr[5];
Print("静的配列に設定: 戻り値=", ArraySetAsSeries(fixedArr, true));
Print("Close は時系列か=", ArrayIsSeries(Close), " Bars=", Bars, " ArraySize(Close)=", ArraySize(Close));
Print("Time[0] は Time[1] より新しい: ", Time[0] > Time[1]);
}100〜104を入れた配列は、通常の向きでは [0] が100、[4] が104で、ArrayGetAsSeries は false でした。ArraySetAsSeries を true にすると、[0] が104、[4] が100になり、戻り値は true でした。
公式の説明では、静的配列にはこの設定ができないとされています。手元のビルド1492では、静的配列 double fixedArr[5] に呼んでも戻り値は true でした。公式の説明と違う動きなので、時系列にしたい配列は動的配列にしておくのが安全です。
Closeなどの定義済み配列
Close・High・Low・Open・Time・Volume は、最初から時系列の配列です。ArrayIsSeries で Close を調べると true で、Bars は65,000、ArraySize(Close) も65,000でした。Time[0]>Time[1] も true なので、[0]が現在の足で、番号が増えるほど過去になります。
価格の履歴を別の配列へ取る関数には、ArrayCopyRates(価格をまとめて配列にコピーして、コピーした本数を返す)と、ArrayCopySeries(指定した時系列配列を別の配列へコピーして、コピーした要素数を返す)があります。この2つは、この記事では実行していません。
アドバイスArraySetAsSeriesは、値を動かさず、番号の向きだけを変えるよ。Closeなどは、最初から最新が[0]だね。
MQL4 配列関数の動作確認|コンパイルと名前の照合

コンパイルと実行の結果
この記事のサンプルは、arr_resize・arr_copy・arr_sort・arr_max・arr_series・arr_reserve・arr_misc の7本です。MT4のMetaEditorでコンパイルして、7本ともエラー0・警告0でした。実行は、XMTradingのデモ口座のMT4(ビルド1492)に入っていた、EURUSDの15分足の履歴65,000本で行いました。
7本で実行した配列関数は、公式の索引19個のうち17個です。ArrayCopyRates と ArrayCopySeries は、実行していません。数字の「19個のうち17個」は、サンプルの中で関数名を1つ以上呼んでいるものを、関数ごとに1個と数えたものです。
関数名の照合と公式との違い
サンプルで呼んでいる関数名を、公式の関数索引と機械で突き合わせました。同じ関数が何度出ても1個と数えて、24個です。そのうち23個が索引にあり、索引になかったのは GetMicrosecondCount の1個でした。この関数は、公式に個別のページがあります。名前の綴りは、機械で確かめられています。
公式の説明と、手元のビルド1492の動きが違ったのは、3点です。静的配列に ArrayResize を呼ぶと、サイズが変わった。ArrayInitialize が要素数を返した。静的配列に ArraySetAsSeries を呼ぶと、true が返った。この3点は、別のビルドでは同じとは限らないので、サンプルでは使っていません。
アドバイスサンプル7本は、エラー0・警告0でコンパイルできたよ。公式と動きが違った3点は、使わないでおくと安心だね。
MQL4 配列関数とMQL5の違い|引数の並びに注意

引数が違う関数
MQL4のコードをMQL5へ移すときは、引数の並びに注意が要ります。ArrayMaximum と ArrayMinimum は、MQL4が(array, count, start)、MQL5が(array, start, count)で、個数と開始位置の順が逆です。ArraySort は、MQL4が4つの引数を取るのに対し、MQL5のArraySortは配列だけを渡す形で、降順の指定はありません。ArrayResize と ArrayCopy は、どちらも引数が同じでした。
移植のとき
引数の個数が同じでも、順番が違う関数は、コンパイルが通っても動きが変わる場合があります。MQL5のArrayMaximumに、MQL4の呼び出し ArrayMaximum(myData, 3, 1) をそのまま使うと、開始位置が3、個数が1の意味になります。MQL5側の記事は、MQL5 配列関数にまとめています。
アドバイスMQL5へ移すときは、ArrayMaximum・ArrayMinimumの個数と開始位置の順、それとArraySortの引数を見直そうね。
要点
・MQL4の配列関数は、公式の索引に19個ある。使い方で5つに分けると探しやすい
・ArrayMaximum・ArrayMinimumは、配列・個数・開始位置の順。MQL5は開始位置・個数の順
・予約サイズありだと、10万要素を1つずつ増やす時間の中央値が、909.2ミリ秒から1.38ミリ秒になった(手元の1台、各5回)
・ArraySortは時系列にした配列でも、その向きに合わせて並べた。ArrayBsearchは並べた配列だけに使う
・サンプル7本は、エラー0・警告0でコンパイルできた。公式と動きが違った3点は、サンプルで使っていません
MQL4 配列関数のよくある質問
MQL4に配列関数はいくつありますか?
公式の索引に19個あります。サイズ、種類と向き、入れる・写す、並べる・探す、比べるの5つの使い方に分けられます。
ArrayMaximumの引数の順番は?
配列、個数、開始位置の順です。MQL5では開始位置、個数の順なので、MQL4から移すときは、入れ替えが要ります。
ArrayResizeを何度も呼ぶと遅くなりますか?
要素数が増えるほど、予約サイズなしは遅くなりました。1つずつ10万回増やした手元の測定では、予約なしの中央値が約0.9秒、予約ありが約1.4ミリ秒でした。
時系列にした配列に、ArraySortは使えますか?
使えます。手元の実行では、時系列にした配列を昇順にすると、[0]側から小さい順に並びました。
ArrayBsearchは、並べていない配列にも使えますか?
使えません。{5, 2, 8, 1, 9, 3} で8を探したところ、正しい位置の2ではなく5が返りました。先に ArraySort で並べてください。
配列関数の引数は、MQL4とMQL5で同じですか?
関数によって違います。ArrayResizeとArrayCopyは同じです。ArrayMaximum・ArrayMinimumは個数と開始位置が逆、ArraySortはMQL5だと配列だけを渡します。
MQL4 配列関数のまとめ
MQL4の配列関数は、公式の索引に19個あります。ArrayMaximumの引数は配列・個数・開始位置の順で、ArraySortは時系列にした配列でもその向きに合わせて並べ、ArrayBsearchは並べた配列だけに使います。7本のサンプルは、エラー0・警告0でコンパイルでき、手元のMT4(ビルド1492)で17個の関数を実行しました。予約サイズの測定では、10万要素を1つずつ増やす時間の中央値が、909.2ミリ秒から1.38ミリ秒になりました。
公式の説明と違った3点は、手元のビルドでの動きなので、サンプルでは使っていません。次は、チャートの操作をMQL4 チャート操作、エラーの読み方をMQL4 エラーコード、文字列の扱いをMQL4 文字列関数、ファイルの読み書きをMQL4 ファイル操作で確かめてください。インジケーターの値を取る関数は、MQL4 インジケーター関数にあります。関数全体の一覧は、MQLリファレンスから探せます。
この記事はMQL4のプログラミングの情報提供で、特定の取引をすすめるものではありません。FXには価格変動のリスクがあり、元本を超える損失が出ることもあります。取引は自己責任で、リスク管理を自分で決めて行ってください。
⚠ リスクに関する注意事項
本記事は情報提供を目的としており、特定の金融商品の売買を推奨するものではありません。FX取引はレバレッジ取引の特性上、預託した証拠金以上の損失が生じる可能性があります。取引の際は、ご自身の判断と責任において行ってください。詳しくは特定商取引法に基づく表記をご確認ください。






