MQL4 / MQL5 両対応データの持ち方配列
目次
ArrayResize配列の大きさを変える
動的配列(大きさを固定していない配列)の要素数を増減させる関数。「集めた分だけ増やす」処理の基本で、過去の一致件数を集める・履歴を溜めるなど、数が事前に分からない場面で使う。
1書式
int ArrayResize( void &array[], // 大きさを変えたい配列 int new_size, // 新しい要素数 int reserve=0 // 先読みで確保しておく余分な数(省略可) );
書式そのものはMQL4・MQL5で同じ。
2引数
| 引数 | 内容 |
|---|---|
| array | 大きさを変える配列(1次元・多次元とも可) |
| new_size | 変更後の要素数 |
| reserve | 毎回1つずつ増やすと処理が重いときに、まとめて確保しておく余分の数 |
3戻り値
変更後の要素数。失敗すると-1(メモリ不足など)。要素数を減らしても、超えた分のデータが自動で消えるだけで、既存の値は保たれる。
4実際に動かした結果
見つかるたびに1つずつ伸ばす
5件見つかったので5回 ArrayResize を呼び、そのつど末尾に値を積んでいる。
✓ 実測
要素を1つずつ増やしながら値を積む処理を実行。
| 操作 | 結果 |
|---|---|
| ArrayResize(arr, 1) → arr[0]=値 | 要素数1、値が入る |
| ArrayResize(arr, 5) を経て5件積む | 要素数5、先に入れた値は保たれる |
5使用例:見つかるたびに配列を伸ばす
double g_matches[];
int g_n = 0;
void AddMatch(double score)
{
g_n++;
ArrayResize(g_matches, g_n);
g_matches[g_n - 1] = score;
}
MetaEditorでコンパイル0エラー・0警告を確認済み。
6MQL4→MQL5の違い
🔁 差分
関数自体の形は同じだが、配列の並び順の既定がMQL4とMQL5で違う。MQL4のインジケーターバッファは自動で「時系列(新しい方が0番)」になるが、MQL5では既定が普通の並び(古い方が0番)で、時系列にしたいときはArraySetAsSeries(array, true)を自分で呼ぶ必要がある。呼び忘れると、値は入るのに0番目が思っていたのと逆の足になる。
7よくある罠
⚠ 実務で踏んだもの
- ループの中で毎回1つずつ
ArrayResizeを呼ぶと、件数が多いときに遅くなることがある。件数の見込みが立つならreserveでまとめて確保する。 - 要素数を減らしてから増やすと、減らした間の値は保証されない。作り直すときは値も入れ直す。
8関連する関数
9使っている無料ツール
PastEcho — いまの形に似た過去の場面を見つけるたびに、一致した件数ぶんだけ配列を伸ばして集めるために使用(製品ページへ)
MORNING BRIEF平日 毎朝7時までに更新
今日はどこを見ればいいか。
ドル円とユーロドルの主要ライン・予想高値安値を、平日の朝に図1枚にまとめています。
朝刊を見る→9/25 8:27 時点ドル円158.78▼-7 pipsドル円 予想レンジ158.41 〜 159.23ドル円 上の節目158.90▲ドル円 下の節目157.80▼ユーロドル1.1378▼-2 pipsユーロドル 予想レンジ1.1351 〜 1.1408ユーロドル 上の節目1.1403▲ユーロドル 下の節目1.1359▼きょうの指標重要指標なし