【MQL5】TriL関数について

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

TriL関数の働き・役割

TriL関数は、与えられた行列の一部を取り出し、下三角行列に変換した新しい行列を作成します。このとき、指定された対角線より上にある要素をゼロにします。例えば、「主対角線」や「その下にある対角線」などを基準にして、それより上の部分をゼロにする操作を行います。

下三角行列とは、行列の対角線を基準として、左下側の要素は元の値をそのまま保ち、それ以外の右上側の要素はゼロになるように構成された行列です。この形式は数学やプログラム内でデータの整理や特定の計算を効率化するために使われます。

TriL関数を使うことで、こうした三角行列を簡単に作成でき、数値計算やデータ処理に役立ちます。

TriL関数の引数について

matrix matrix::Tril(
  const int    ndiag=0      // 対角のインデックス
  );

TriL関数引数は、以下のように構成されています。

ndiagは、対角線のインデックスを指定する整数値です。この引数によって、ゼロにする範囲を決定します。初期値は0に設定されています。

  • ndiag=0の場合、主対角線より上の要素がゼロになります。主対角線とは、行列の左上から右下へ続く斜めの線に該当します。
  • ndiag>0の場合、主対角線よりさらに上の要素がゼロになります。例えば、ndiag=1では主対角線の1つ上の対角線より上がゼロになります。
  • ndiag<0の場合、主対角線より下の対角線を基準として、それより上の要素がゼロになります。例えば、ndiag=-1では主対角線の1つ下の対角線を基準に、さらに上がゼロになります。

この引数により、ゼロにする範囲を柔軟に制御することができます。

TriL関数の戻り値について

TriL関数は、指定した条件に従い、行列の下三角部分を保った新しい行列を返します。この新しい行列は、以下のような特徴を持ちます。

  • 指定した対角線より上の要素はゼロになります。
  • 指定した対角線やその下にある要素は元の値をそのまま保持します。

例えば、元の行列が次のようなものであった場合:

1  2  3
4  5  6
7  8  9

TriL関数をndiag=-1で実行すると、以下の行列戻り値として返されます:

0  0  0
4  0  0
7  8  0

このように、指定した対角線の条件に基づいて加工された行列が生成されます。この戻り値は、入力行列とは別の新しい行列として生成されるため、元の行列は変更されません。

TriL関数を使ったサンプルコード

以下は、TriL関数を使用して行列の下三角行列を作成するサンプルコードです。

// スクリプトのエントリポイント
void OnStart()
{
    // 元の行列を定義します
    // 4行3列の行列を作成
    matrix original_matrix = {{1, 2, 3}, 
                              {4, 5, 6}, 
                              {7, 8, 9}, 
                              {10, 11, 12}};
                              
    // TriL関数を使用して下三角行列を作成します
    // 第1引数に -1 を指定し、主対角線の1つ下を基準に上の部分をゼロにします
    matrix lower_triangle_matrix = original_matrix.TriL(-1);
    
    // 結果の行列をエキスパートログに出力します
    // Print関数で行列の内容を表示します
    Print("元の行列:\n", original_matrix);
    Print("生成された下三角行列:\n", lower_triangle_matrix);
}

コードの解説

このコードは、TriL関数を使用して行列を下三角行列に変換する方法を示しています。それぞれの処理について詳しく説明します。


OnStart関数について

OnStart関数は、スクリプトが開始された際に最初に呼び出される特別な関数です。この関数の中に、スクリプトで実行したい処理を記述します。スクリプトは一度だけ実行される簡単なプログラムで、取引プラットフォーム上での計算やデータ処理を目的としています。


行列の作成について

行列を作成するために、matrix型を使用しています。ここでは、4行3列の行列を初期化し、original_matrixという名前の変数に格納しています。

行列の各要素は、波括弧を使って定義され、各行はさらに波括弧で囲まれています。例えば、1行目の要素として1, 2, 3が指定されています。同様に、2行目には4, 5, 6が含まれています。

このコードでは次のような行列が生成されます:
1行目から順に、1, 2, 3
2行目から順に、4, 5, 6
3行目から順に、7, 8, 9
4行目から順に、10, 11, 12

このように、データを行単位で格納しています。


TriL関数の使用について

TriL関数は、指定された条件に従い、行列を下三角行列に変換します。この処理では、元の行列のデータを基に、指定した基準より上にある要素をゼロに置き換えた新しい行列を生成します。

ここでは、引数として-1を指定しています。この値は、主対角線の1つ下の対角線を基準に設定することを意味します。その結果、1行目はすべてゼロに置き換えられ、2行目以降は基準に従って上部分がゼロになります。

元の行列に影響を与えず、新しい行列が作成される点も重要です。この新しい行列は、lower_triangle_matrixという変数に格納されています。


結果の出力について

Print関数を使用して、元の行列と生成された下三角行列をエキスパートログに出力しています。この関数は、テキストや数値などをログに記録するために使用されます。

ここでは、2つの行列を比較しやすくするために、元の行列:と生成された下三角行列:という説明文を付加しています。また、\nを使用することで、ログの表示を見やすく整えています。


このコードの全体的な流れ

  1. matrix型を使って元の行列を定義します。
  2. TriL関数を用いて、下三角行列を生成します。
  3. 元の行列と変換後の行列をエキスパートログに出力します。

このスクリプトを実行すると、元の行列と下三角行列の違いを確認でき、TriL関数の動作を理解することができます。このコードを基に、さらに複雑な行列操作を学ぶことも可能です。

TriL関数を使ってEAを作る際のアイディア


トレード履歴データの加工

トレード履歴や価格データを行列形式で扱う場合、TriL関数を使って特定の計算範囲を制限することができます。例えば、過去の取引データを行列として扱い、一定期間内のデータだけを下三角行列として取り出すことで、効率的なバックテストや分析が可能になります。


マルチペア分析のデータフィルタリング

複数の通貨ペアの相関関係を行列で表現し、TriL関数を使って下三角部分を取り出すことで、重複する計算を省略できます。これにより、計算量を削減しつつ、相関関係の強い通貨ペアを見つけ出す処理を効率化できます。


分散計算の最適化

ポートフォリオの分散やリスクを計算する際、行列の上三角部分は不要な場合があります。TriL関数で下三角行列を作成し、必要な要素だけを効率的に取り出してリスク分析を実施するアイディアが考えられます。


ボラティリティ分析

価格変動の分散や共分散を計算する際、TriL関数を使って行列を加工することで、特定の時間範囲に限定した分析を行うことができます。これにより、過去のデータを部分的に利用し、変動の傾向を効率的に計測するEAを構築できます。


三角行列を用いた特定アルゴリズムの実装

数学的に三角行列を扱うアルゴリズムは、高速化や効率化が求められる場合に役立ちます。例えば、行列計算を含む統計モデルをEAに組み込む場合、TriL関数を用いて計算の対象範囲を調整することで、計算負荷を低減できます。


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