Ones関数の働き・役割
Ones関数は、指定した行数と列数に基づいて「1」で満たされた行列(またはベクトル)を作成する関数です。たとえば、4行4列の行列が欲しい場合に、全ての要素が1で構成された行列を簡単に作成できます。
この関数は、エキスパートアドバイザーやカスタムインジケータの開発時に、初期値を1としたデータを扱う場面で便利です。
Ones関数の引数について
Ones関数には2種類の形式があり、それぞれ異なる引数を取ります。
1つ目の形式では、行列の形で「1」で埋められたデータを作成します。この場合は行数と列数を指定します。
形式1:行列を作成する場合
static matrix matrix::Ones(
const ulong rows, // 行数
const ulong cols // 列数
);
たとえば、rowsに4、colsに4を指定すると、4行4列の「1」で埋められた行列が作成されます。
2つ目の形式では、ベクトルの形で「1」で埋められたデータを作成します。この場合はサイズのみを指定します。
※ベクトルとは
ベクトルとは、数学やプログラミングの世界で使われる概念で、簡単にいうと「データが一列に並んだもの」のことを指します。ここでは、数値が1列に並んだものをイメージしてください。
たとえば、ベクトルのサイズを4にすれば、「1, 1, 1, 1」という4つの「1」で構成されたデータが作成されます。
形式2:ベクトルを作成する場合
static vector vector::Ones(
const ulong size, // ベクトルサイズ
);
Ones関数の戻り値について
Ones関数は、指定された行数と列数に基づき「1」で埋められた新しい行列またはベクトルを返します。
行列の場合
行列の形式で呼び出された場合は、指定した行数と列数の「1」のみで構成された2次元の行列データを返します。例えば、4行4列を指定すると、次のような行列が返されます。
[[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1],
[1, 1, 1, 1]]
ベクトルの場合
ベクトルの形式で呼び出された場合は、指定されたサイズの「1」のみで構成された1次元のデータ(ベクトル)を返します。たとえば、サイズ4を指定すると、次のようなデータが返されます。
[1, 1, 1, 1]
このように、Ones関数は指定された形状とサイズで1だけが含まれた行列やベクトルを生成し、戻り値として提供します。
Ones関数を使ったサンプルコード
// スクリプトの実行が開始されると、OnStart関数が自動的に呼び出されます
void OnStart()
{
// Ones関数を使って4行4列の1で埋められた行列を作成します
matrix onesMatrix = matrix::Ones(4, 4);
// 作成した行列をエキスパートログに出力して確認します
// 行列の内容は、4行4列の全ての要素が「1」となります
Print("4行4列の行列:\n", onesMatrix);
// Ones関数を使って要素数4の1で埋められたベクトルを作成します
vector onesVector = vector::Ones(4);
// 作成したベクトルをエキスパートログに出力して確認します
// ベクトルの内容は、4つの「1」が一列に並んだ形になります
Print("要素数4のベクトル:\n", onesVector);
}
サンプルコードの解説
このコードでは、Ones関数を使って行列とベクトルを作成する方法を示しています。コード内の各ステップを詳しく説明していきます。
OnStart関数は、スクリプトが実行されると最初に呼び出される関数で、この中で実際のプログラムの処理を行います。
次に、matrix::Ones関数を使って行列を作成しています。ここで、matrix::Ones(4, 4)という呼び出しにより、4行4列の行列が作成されます。この行列は、すべての要素が「1」で埋められた行列になります。この行列はonesMatrixという名前の変数に代入され、その後、Print関数を使ってエキスパートログに出力されています。Print関数は、指定した情報をエキスパートログに表示するための関数です。
続いて、vector::Ones関数を使ってベクトルを作成しています。vector::Ones(4)とすることで、4つの「1」で構成されたベクトルが作成されます。このベクトルはonesVectorという名前の変数に代入され、Print関数で出力されます。ベクトルはデータが1列に並んだ形式で、ここでは「1」が4つ並んだ形になります。
以上のように、matrix::Ones関数は行列を作成するため、vector::Ones関数はベクトルを作成するために使用されます。どちらも、サイズや形状を指定することで、その要素が全て「1」で構成されたデータを生成できます。
Ones関数を使ってEAを作る際のアイディア
Ones関数は、指定されたサイズで「1」が埋められた行列やベクトルを作成するため、様々なEA(エキスパートアドバイザー)に応用が可能です。以下にいくつかの具体的なアイディアを紹介します。
資産ポートフォリオの均等配分
ポートフォリオ管理を行うEAにおいて、複数の資産に均等に投資を分配する際、各資産の割合を「1」で初期化した行列やベクトルとして扱うことができます。このような設定で、各資産に同じ比率で投資を行うアルゴリズムを実装しやすくなります。
シグナル強度の初期化
複数のインジケータのシグナルを扱うEAで、シグナル強度の初期値として「1」で埋められたベクトルを使用することができます。これにより、すべてのシグナルを等しく評価し、その後の条件に基づいて重みを調整するようなEAを簡単に作成できます。
データ分析やモデルのトレーニング
トレード履歴や価格データなどの分析時に、一定の初期条件を設定した上で学習や最適化を行う場合、基準となるデータとして「1」で埋められた行列を利用することができます。このようにして、特定のアルゴリズムが異常なデータに偏らないように調整する役割を果たすことが可能です。
リスク管理の基準値設定
リスク管理を行うEAで、各ポジションの初期リスクを均等に設定し、その後の状況に応じてリスクを動的に変更する場合、最初のリスク基準値として「1」を使用できます。
例えば、ポジションごとのリスク比率を一旦すべて「1」とし、その後の取引状況に合わせてリスクを増減させることで、柔軟なリスク管理が実現できます。
マトリクス計算を使った複雑な戦略
複数のテクニカル指標や条件を組み合わせて戦略を組み立てる場合、Ones関数で生成した行列を基盤にして、各要素に対する重み付けや条件分岐を行う方法も考えられます。例えば、テクニカル指標の値に基づいて行列の値を変化させ、各シグナルの重要度を相対的に管理することが可能です。