そもそもベクトルとは?
ベクトルとは、複数の数値を一つのデータ構造にまとめたものです。
配列と似ていますが、より高機能なデータ操作を可能にします。特に数値計算やデータ解析において便利に使用されます。ベクトルの要素には、それぞれインデックス(通し番号)が割り当てられ、順番にアクセスできます。ベクトルは、サイズの変更が可能で、柔軟なデータ管理が可能です。
MQL5では、vectorキーワードを使ってベクトルデータの操作を行っていきます。
vectorキーワードの文法と使用例
MQL5では、vectorキーワードは一種のデータ型として利用でき、主に一次元配列(ベクトル)を扱うために使用されます。vectorを使用することで、動的にサイズを変更できる配列を扱うことができます。
// ベクトルの宣言
vector vec;
// ベクトルの初期化(サイズ10のベクトルを作成)
vector vec(10);
// ランダムな値でベクトルを初期化する関数の例
void ArrayRandom(vector &v) {
for (ulong i = 0; i < v.Size(); i++) {
v[i] = double(MathRand()) / 32767.;
}
}
文法的な解説
上記コードについて文法的な解説をします。
// ベクトルのサイズを取得
ulong size = vec.Size();
// ベクトルの要素にアクセス(インデックス0の要素を取得)
double element = vec[0];
// ベクトルに数学関数を適用
vector result = MathSqrt(vec); // 各要素の平方根を計算
1. ベクトルのサイズを取得
説明:
- ulongは、無符号の長整数型を示します。これは変数
size
のデータ型です。 - vec.Size()は、ベクトル
vec
のサイズ(要素数)を返すメソッドです。 - この行は、
vec
の要素数をsize
に代入しています。
この記述は、オブジェクト指向プログラミング(OOP)の一部です。オブジェクト指向プログラミングでは、データとそれに関連する機能を一緒に「オブジェクト」としてまとめます。vecはベクトルオブジェクトで、Size()はそのオブジェクトのメソッドです。
メソッドとは
メソッドは、オブジェクト(変数やクラスのインスタンス)に関連付けられた関数のことです。メソッドは、そのオブジェクトのデータ(プロパティ)にアクセスしたり、操作したりするための手段を提供します。オブジェクト指向プログラミングでは、データとそれに関連するメソッドを一緒にまとめることで、コードの再利用性とメンテナンス性を向上させます。
関数とメソッドの類似点は、両方とも一連の命令を実行するためのコードブロックであること、引数を受け取り、計算や処理を行い、結果を返すことができる点です。
しかし、関数は独立して存在し、特定のオブジェクトに属しません。一方、メソッドは特定のオブジェクトに属し、そのオブジェクトのデータにアクセスして操作することができます。
メソッドを呼び出すには、オブジェクト名の後にドットを付けて呼び出します(例:vec.Size()
)。
2. ベクトルの要素にアクセス
double element = vec[0];
説明:
double
は、倍精度浮動小数点数型を示します。これは変数elementのデータ型です。vec[0]
は、ベクトルvec
の最初の要素(インデックス0)の値を取得します。- この行は、
vec
の最初の要素の値をelementに代入しています。
3. ベクトルに数学関数を適用
vector result = MathSqrt(vec);
説明:
- vectorは、ベクトル型を示します。これは変数
result
のデータ型です。 - MathSqrt(vec)は、ベクトル
vec
の各要素の平方根を計算し、新しいベクトルを返しています。MathSqrt関数は指定した数値の平方根を計算するための関数です。 - この行は、
vec
の各要素の平方根を含む新しいベクトルをresult
に代入しています。
vectorを使ったサンプルコード
// ベクトルの宣言
vector vec;
// ベクトルの初期化(サイズ10のベクトルを作成)
vector vec(10);
// ランダムな値でベクトルを初期化する関数の例
void ArrayRandom(vector &v) {
for (ulong i = 0; i < v.Size(); i++) {
v[i] = double(MathRand()) / 32767.;
}
}
サンプルコード解説
ベクトルを宣言する際には、vectorというキーワードを使用し、変数名を続けます。この例では、vecという名前のベクトルを宣言しています。
ベクトルを特定のサイズで初期化するには、vectorキーワードに続けて、括弧内にサイズを指定します。この例では、サイズ10のベクトルを作成しています。
ArrayRandom関数はベクトルをランダムな値で初期化するオリジナル定義の関数です。ベクトルへの参照を引数として受け取ります。
forループを使用して、ベクトルの各要素にランダムな値を割り当てます。MathRand関数はランダムな整数を生成し、それを32767で割ることで0から1の間の値に変換しています。このようにして、ベクトルの各要素がランダムな値で初期化されます。
※MathRand関数は、0から32767までの整数を生成します。これにより、生成されるランダムな値は常にこの範囲内にあります。この値を32767で割ると、以下のようになります。
- 最小値0を32767で割ると、0/32767 = 0
- 最大値32767を32767で割ると、32767/32767 = 1
したがって、0から32767までの任意の整数を32767で割ると、その結果は常に0以上1以下の浮動小数点数になります。この方法で、生成されるランダムな値が0から1の間にスケーリングされます。