Zeros関数の働き・役割
Zeros関数は、指定した行数と列数で構成された行列や、指定されたサイズのベクトルを新しく作成し、そのすべての要素を0で埋めて返します。これは、分析や計算で初期化されたデータが必要な場合に役立つ関数です。
行列とは、数字を縦と横に並べた二次元の表のようなもので、数学やプログラミングでデータを整理して扱うために使われます。例えば、3行4列の行列は、3つの行と4つの列を持ち、計12個の要素で構成されています。
ベクトルとは、行列の一種ですが、1列(または1行)に並んだデータの集まりを指します。たとえば、1列に5つの数字が並んでいるものがベクトルです。行列が二次元なのに対し、ベクトルは一方向だけのデータ構造です。
このように、Zeros関数を使用することで、すぐに0で初期化された行列やベクトルを準備し、計算の基礎となるデータ構造を簡単に作成できます。
Zeros関数の引数について
Zeros関数には、行列とベクトルの二つの書式(異なる形式)があります。それぞれの書式に応じた引数の説明を以下に示します。
行列用の書式
static matrix matrix::Zeros(
const ulong rows, // 行数
const ulong cols // 列数
);
行列を作成する書式では、行数と列数を指定します。
- rows
行数を指定する引数です。作成する行列の行数(縦の長さ)を整数で指定します。たとえば、3を指定すると、3行の行列が作成されます。 - cols
列数を指定する引数です。作成する行列の列数(横の長さ)を整数で指定します。たとえば、4を指定すると、4列の行列が作成されます。
ベクトル用の書式
static vector vector::Zeros(
const ulong size, // ベクトルサイズ
);
ベクトルを作成する書式では、ベクトルのサイズのみを指定します。
行列の書式の場合は、行数と列数を指定し、ベクトルの書式の場合はサイズを設定することで、すべての要素が0で埋められた行列やベクトルを簡単に作成することができます。
Zeros関数の戻り値について
Zeros関数は、指定された行数と列数、またはベクトルのサイズに基づいて、すべての要素が0で埋められた新しい行列またはベクトルを返します。
行列用の書式の戻り値
行列の書式を使用した場合、Zeros関数は指定された行数と列数を持つ新しい行列を返します。たとえば、行数3、列数4を指定した場合、3行4列の行列が返され、各要素には0が設定されています。
ベクトル用の書式の戻り値
ベクトルの書式を使用した場合、Zeros関数は指定されたサイズの新しいベクトルを返します。たとえば、サイズ5を指定すると、5つの要素がすべて0で埋められたベクトルが返されます。
このように、Zeros関数は初期値が0の行列やベクトルを返し、データの初期化をシンプルに行うことができます。
Zeros関数を使ったサンプルコード
// スクリプトが実行されたときに自動的に呼び出されるOnStart関数
void OnStart()
{
// Zeros関数を使って、3行4列の行列を0で初期化して作成する
matrix zeros = matrix::Zeros(3, 4);
// 作成した行列の内容をエキスパートログに出力する
// TimeToString関数を使用して、行列が作成された時刻も合わせて表示する
Print("zeros = \n", zeros);
}
サンプルコードの解説
- OnStart関数
OnStart関数はMQL5でスクリプトが実行されるときに自動的に呼び出される関数です。
MQL5のプログラムでは、スクリプトが開始する際にOnStart関数を定義することで、スクリプト実行時の処理内容を指定できます。
ここでは、行列の作成と表示の処理をこの関数の中に書いています。 - matrix zeros = matrix::Zeros(3, 4);
matrixは、行列を扱うためのデータ型です。zerosは変数名で、この変数に0で初期化された行列が格納されます。 matrix::Zeros(3, 4)の部分は、行列型であるmatrixのZeros関数を使って新しい行列を作成しています。
コロン二つの::は、特定のクラス内にある関数やメソッドを呼び出すときに使います。この場合、matrixクラス内のZeros関数を呼び出しています。
Zeros関数に与える引数として3と4を指定しています。これにより、3行4列の行列が作成され、すべての要素に0が設定されます。行列は縦と横の二次元で構成されるため、行数と列数が必要です。 - Print(“zeros = \n”, zeros);
Print関数は、指定された内容をエキスパートログに出力するための関数です。ここでは、”zeros = \n”とzerosの内容を出力しています。 “\n”は改行を表す特殊な文字で、文字列内に入れるとその位置で改行されます。これにより、行列の各行が見やすく表示されるようになります。 最終的に、エキスパートログには、zerosという名前の3行4列の行列が0で埋められた状態で出力されます。
Zeros関数を使ってEAを作る際のアイディア
トレードデータの記録と分析
Zeros関数で作成した行列を、トレード結果の履歴データや分析データの一時的な保存場所として利用できます。たとえば、行ごとに日別のトレード情報(取引回数、利益、損失、勝率など)を保存し、列ごとに異なるデータ項目を割り当てることで、トレードデータの傾向や統計分析を行えます。
短期移動平均や長期移動平均の計算
短期・長期の移動平均を使ったシグナル生成を行う際、Zeros関数で初期化された行列やベクトルを利用して、異なる期間の価格データを記録し、計算の基盤とすることが可能です。これにより、複雑な計算や多期間のデータを管理しやすくなります。
マルチタイムフレーム分析の結果格納
マルチタイムフレーム(異なる時間軸)の価格データやインジケータの値を行列として記録し、各タイムフレームの分析結果を格納することができます。各行に異なる時間足(例えば、5分足、15分足、1時間足)でのデータを格納し、リアルタイムの価格変動に基づいた判断を行うEAを設計できます。
ポートフォリオのリスク管理
複数の通貨ペアや資産を対象としたポートフォリオのリスク管理を行うため、各通貨ペアのリスク情報を行列で管理し、Zeros関数で初期化してリスクデータを一元化できます。たとえば、行列の各行に通貨ペアを割り当て、各列にエクスポージャー(資産のリスクへの関与度)や利益率、最大ドローダウンなどのリスク指標を格納することで、全体のリスク管理に活用できます。
AIや機械学習モデルのデータ前処理
EAでAIや機械学習を活用する際に、Zeros関数で初期化された行列をデータ前処理用に使用できます。例えば、入力データを正規化したり、各パラメータを行列に整形することで、データをAIモデルの入力形式に整える作業が効率的に行えます。