【MQL5】Zeros関数について

MQL5リファレンス
スポンサーリンク
スポンサーリンク

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);
}

サンプルコードの解説

  1. OnStart関数
    OnStart関数MQL5スクリプトが実行されるときに自動的に呼び出される関数です。
    MQL5のプログラムでは、スクリプトが開始する際にOnStart関数を定義することで、スクリプト実行時の処理内容を指定できます。
    ここでは、行列の作成と表示の処理をこの関数の中に書いています。
  2. matrix zeros = matrix::Zeros(3, 4);
    matrixは、行列を扱うためのデータ型です。zerosは変数名で、この変数に0で初期化された行列が格納されます。 matrix::Zeros(3, 4)の部分は、行列型であるmatrixZeros関数を使って新しい行列を作成しています。
    コロン二つの::は、特定のクラス内にある関数メソッドを呼び出すときに使います。この場合、matrixクラス内のZeros関数を呼び出しています。
    Zeros関数に与える引数として3と4を指定しています。これにより、3行4列の行列が作成され、すべての要素に0が設定されます。行列は縦と横の二次元で構成されるため、行数と列数が必要です。
  3. 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モデルの入力形式に整える作業が効率的に行えます。

タイトルとURLをコピーしました