ArrayRange関数の働き・役割
ArrayRange関数は、指定された配列の特定の次元における要素数を返します。多次元配列を扱う際、各次元の要素数を取得するために使用されます。次元のインデックスは0から始まるため、例えば2次元配列の場合、第1次元はインデックス0、第2次元はインデックス1で指定します。この関数を利用することで、配列のサイズに応じた処理を効率よく行うことが可能になります。
ArrayRange関数の引数について
int ArrayRange(
const void& array[], // チェックされる配列
int rank_index // 次元のインデックス
);
ArrayRange関数は、以下の2つの引数を取ります。
第1引数: array[]
第2引数: rank_index
ArrayRange関数の戻り値について
ArrayRange関数は、指定された次元における配列の要素数を整数型(int
)で返します。配列が持つ次元数の範囲内で指定された次元のインデックスに基づいて、その次元の要素数を取得できます。
例えば、2次元配列に対してインデックス0を指定すると第1次元の要素数が返され、インデックス1を指定すると第2次元の要素数が返されます。
ArrayRange関数を使う際の注意点
ArrayRange関数を使用する際、指定する次元のインデックスは0から始まることを考慮する必要があります。配列の次元数よりも大きいインデックスを指定するとエラーとなるため、配列の次元数に注意してコードを記述する必要があります。
また、動的にサイズが変更された配列の場合、再度ArrayRange関数で要素数を確認することで、最新のサイズを取得できる点も留意してください。
ArrayRange関数を使ったサンプルコード
void OnStart()
{
// 4次元の配列を作成する(サイズは後から調整)
double array[][5][2][4];
// 0次元のサイズを10に設定する
ArrayResize(array, 10);
// 各次元の要素数をプリントするための一時変数
int temp;
// 4次元の配列なので、0から3までの次元について要素数を取得
for(int i = 0; i < 4; i++)
{
// i次元目の要素数を取得
temp = ArrayRange(array, i);
// 結果をエキスパートログに出力
PrintFormat("dim = %d, range = %d", i, temp);
}
// --- 実行結果 ---
// dim = 0, range = 10
// dim = 1, range = 5
// dim = 2, range = 2
// dim = 3, range = 4
}
サンプルコードに使われた関数や文法要素の解説
- 配列の宣言
double array[][5][2][4];
これは4次元配列の宣言です。最初の次元(インデックス0)は動的サイズであり、他の次元(インデックス1, 2, 3)は固定サイズです。後でArrayResize関数を使用して動的にサイズを変更します。 - ArrayResize関数
ArrayResize(array, 10);
配列の最初の次元(インデックス0)のサイズを10に変更しています。ArrayRange関数を使ってこの変更後のサイズを確認できます。 - ArrayRange関数
ArrayRange(array, i);
各次元のインデックスを指定して、その次元の要素数を取得しています。インデックスは0から始まり、4次元配列では0から3までが有効なインデックスです。 - PrintFormat関数
PrintFormat(“dim = %d, range = %d”, i, temp);
PrintFormat関数はエキスパートログにフォーマットされた文字列を出力します。この場合、次元のインデックスと要素数を表示しています。
この関数を使ってEAを作る際のアイディア
ArrayRange関数を使うことで、多次元配列を効率的に操作できるため、配列ベースのデータ管理を行うエキスパートアドバイザー(EA)の作成に役立ちます。例えば、以下のようなアイディアがあります。
- マルチタイムフレームのデータ管理
各タイムフレームのデータを次元ごとに保存するための多次元配列を作成し、各次元のデータサイズをArrayRange関数で動的に管理します。これにより、異なる時間軸の価格データやインジケータを効率的に扱うことができます。 - 複数の通貨ペアやシンボルのデータ管理
複数の通貨ペアやシンボル(特定の文字や記号)のデータを扱う場合、多次元配列を使用し、通貨ペアごとに異なる次元でデータを管理します。ArrayRange関数を使って、それぞれの次元のデータ数を動的に把握することが可能です。 - リスク管理やポジション管理のシステム
ポジションやリスク管理のために、複数のポジションデータを次元ごとに管理し、ArrayRange関数を用いて各ポジションの状態を効率的に処理するEAを開発できます。