【MQL5】matrix::Tri関数について

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

matrix::Tri関数の働き・役割

matrix::Tri関数は、指定した行数と列数を持ち、対角線以下に1を配置し、それ以外を0で埋めた行列を生成する静的関数です。この関数を利用することで、下三角行列や特定の対角線に基づいた行列を作成できます。

対角線の位置を基準として、配置される1の範囲は「ndiag」という引数で制御します。この値を調整することで、主対角線だけでなく、その上または下の対角線に基づいた行列も生成可能です。

例えば、以下のような行列を生成できます。

  1. matrix::Tri(3, 4, 1) の場合:
[[1, 1, 0, 0]
 [1, 1, 1, 0]
 [1, 1, 1, 1]]
  1. matrix::Tri(4, 3, -1) の場合:
[[0, 0, 0]
    [1, 0, 0]
    [1, 1, 0]
    [1, 1, 1]]

このように、matrix::Tri関数は、下三角行列を効率的に生成するために利用されます。

matrix::Tri関数の引数について

static matrix matrix::Tri(
  const ulong rows,        // 行数
  const ulong cols,        // 列数
  const int  ndiag=0      // 対角線の数
  );

matrix::Tri関数は、行列の形状と内容を決定するために3つの引数を取ります。それぞれの引数は以下の通りです。

rows(行数)

行列の縦方向のサイズを指定します。この引数には正の整数を指定し、生成する行列の行数を決定します。例えば、rowsを3に指定すると、3行を持つ行列が生成されます。

cols(列数)

行列の横方向のサイズを指定します。この引数には正の整数を指定し、生成する行列の列数を決定します。例えば、colsを4に指定すると、4列を持つ行列が生成されます。

ndiag(劣対角)

主対角線を基準として、どの範囲に1を配置するかを指定します。この引数は整数で、以下のような役割を持ちます。

  • ndiagを0にすると、主対角線以下の部分が1になります。
  • ndiagを正の値にすると、主対角線の上側も含めた範囲に1を配置します。例えば、ndiagを1にすると、主対角線の1つ上の対角線も含めて1になります。
  • ndiagを負の値にすると、主対角線の下側の一部に1を配置します。例えば、ndiagを-1にすると、主対角線の1つ下の対角線のみが1になります。

これらの引数を調整することで、目的に応じたさまざまな形状の行列を作成することが可能です。

matrix::Tri関数の戻り値について

matrix::Tri関数は、指定された条件に基づいて作成された行列戻り値として返します。この行列は以下の特徴を持ちます。

  1. 下三角部分に1が配置される
    対角線以下の位置には1が配置されます。どの対角線を基準にするかは、ndiag引数によって指定されます。
  2. それ以外の部分は0
    上三角部分や指定範囲外の要素はすべて0になります。

例えば、以下のようなコードを実行すると、それぞれ異なる条件に基づく行列戻り値として得られます。

  1. matrix::Tri(3, 4, 1) の場合:
  [[1, 1, 0, 0]
    [1, 1, 1, 0]
    [1, 1, 1, 1]]

この例では、主対角線とその1つ上の対角線以下に1が配置されます。

  1. matrix::Tri(4, 3, -1) の場合:
   [[0, 0, 0]
    [1, 0, 0]
    [1, 1, 0]
    [1, 1, 1]]

この例では、主対角線より1つ下の対角線以下に1が配置されます。

戻り値として返される行列は、指定した行数と列数を持ち、対角線の条件に従って1と0が配置された状態で提供されます。この行列は後続の計算やアルゴリズムに利用することができます。

matrix::Tri関数を使ったサンプルコード

以下に、matrix::Tri関数を用いて下三角行列を生成し、エキスパートログに出力するサンプルコードを示します。

// OnStart関数はスクリプトのエントリーポイントです。
// スクリプトが開始されると、自動的にこの関数が呼び出されます。
void OnStart()
{
    // matrix::Tri関数を使って行列を生成します。
    // 第一引数は行数、第二引数は列数、第三引数は劣対角を指定します。
    // ここでは、3行4列で、主対角線とその1つ上まで1を配置した行列を作成します。
    matrix matrix_a = matrix::Tri(3, 4, 1);

    // 作成した行列をエキスパートログに出力します。
    // エキスパートログはデバッグ用に使用される出力画面です。
    Print("matrix::Tri(3, 4, 1) の結果:\n", matrix_a);

    // 次に、別の条件で行列を生成します。
    // 第一引数を4行、第二引数を3列、第三引数を-1とし、
    // 主対角線より1つ下の部分のみ1を配置した行列を作成します。
    matrix_a = matrix::Tri(4, 3, -1);

    // 再度、作成した行列をエキスパートログに出力します。
    Print("matrix::Tri(4, 3, -1) の結果:\n", matrix_a);
}

サンプルコードの解説

OnStart関数について

OnStart関数MQL5スクリプトが開始されると自動的に呼び出される関数です。この関数の役割は、スクリプトのメイン処理を記述することです。

matrix::Tri関数の呼び出しについて

この部分は、matrix::Tri関数を呼び出して行列を作成し、その結果をmatrix_aという名前の変数代入しています。

Print関数について

Print関数MQL5の組み込み関数で、引数として指定された内容をエキスパートログに出力します。

  • Print関数引数には文字列変数を指定できます。
  • matrix::Tri(3, 4, 1) の結果:\n”は出力する文字列です。この中に特殊文字\nを含めることで、改行が挿入されます。
  • matrix_aは出力される行列です。行列の内容がログに表示されます。

matrix::Tri関数を使ってEAを作る際のアイディア

matrix::Tri関数は、特定の条件に基づいた行列を生成するために役立つ機能です。これを利用することで、トレードロジックやデータ分析を効率的に行うEAエキスパートアドバイザー)を構築できます。以下にmatrix::Tri関数を活用した具体的なEA作成のアイディアを紹介します。


1. 移動平均の重み行列を作成する

移動平均を計算する際に、最新のデータをより重要視したい場合、重みを利用します。重みとは、データに対して重要度を示す値のことで、特定のデータが計算結果に与える影響を制御します。matrix::Tri関数を使えば、重み付きの行列を簡単に作成できます。

実装例

  • ndiagを正の値に設定して、最新の価格データに高い重みを与える行列を作成します。
  • 重み行列を価格データに掛け算して、加重移動平均を計算します。

2. トレード履歴のパターン分析

matrix::Tri関数で作成した行列にトレード履歴を入力し、特定の成功パターンや失敗パターンを分析できます。下三角行列を用いることで、時間的な遷移を考慮したパターン認識が可能です。

実装例

  • 行をトレード履歴(時間軸)、列を通貨ペアや指標データに対応させます。
  • 主対角線以下のデータを1に設定して、過去のトレード履歴を可視化。
  • 特定のパターンを検出し、その後のトレード戦略に応用します。

3. リスク管理行列を生成

リスク管理はEAを運用する上で重要です。matrix::Tri関数を使って、ポジションサイズやリスク割合を管理する行列を作成できます。

実装例

  • 主対角線以下に、リスク許容範囲を1で表す行列を生成。
  • 各トレードのリスク割合をこの行列と比較し、適切なポジションサイズを計算します。

4. 複数インジケータの信号統合

複数のインジケータ信号を行列で統合し、トレード戦略に組み込むことができます。matrix:Tri関数を使用すれば、特定の条件に一致するデータだけを強調する行列を作成できます。

実装例

  • インジケータ信号を行列の列に対応させ、必要な条件を満たす部分のみ1を配置。
  • 作成した行列を解析して、複数の条件が一致した場合にエントリーするロジックを構築。

5. ヒストリカルデータの視覚化

過去のデータをmatrix::Tri関数を使った行列で整理し、視覚的に分析するツールを作成できます。主対角線以下のデータを強調することで、特定の期間に注目した分析が可能です。

実装例


6. トレード予測モデルの構築

matrix::Tri関数を使って、過去一定期間の価格データを保持するモデルを構築します。このデータを基に、次の値動きを予測するアルゴリズムを開発できます。

実装例

  • 行列の下三角部分に過去の価格データを記録。
  • 時系列データを基にした予測モデルを構築し、トレードエントリーやエグジットのタイミングを最適化。

matrix::Tri関数を活用することで、行列構造を用いたデータの整理や分析が容易になり、トレードロジックの設計やEAのパフォーマンス向上に貢献します。

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