Full関数の働き・役割
Full関数は、指定したサイズの行列またはベクトルを作成し、そのすべての要素に特定の値を埋め込んだ状態で返す関数です。この関数を使うことで、特定の値で初期化された行列やベクトルを生成することができます。
行列とは、数字を縦と横に並べて構成されるデータのまとまりのことです。例えば、3行4列の行列は3つの行と4つの列で構成され、以下のように表示されます。
[10, 10, 10, 10]
[10, 10, 10, 10]
[10, 10, 10, 10]
ベクトルとは、行列の中でも1行または1列のデータだけを持つ構造です。ベクトルは数値の並びとして、例えば「[10, 10, 10, 10]」といった形で表されます。
Full関数は、このような行列やベクトルのすべての要素に特定の値を設定する際に役立ちます。たとえば、3行4列の行列のすべての要素に「10」を設定したい場合、この関数を利用すれば1行でその行列を作成できます。
Full関数の引数について
Full関数には、行列またはベクトルのサイズや埋め込む値を指定するための引数がいくつかあります。
matrix::Full関数の引数
static matrix matrix::Full(
const ulong rows, // 行数
const ulong cols, // 列数
const double value // 書き入れる値
);
- rows
行数を指定します。行列の縦のサイズを表し、どれだけの行が必要かを決めます。 - cols
列数を指定します。行列の横のサイズを表し、どれだけの列が必要かを決めます。 - value
行列のすべての要素に設定する値です。この値が、作成される行列内のすべての要素に書き入れられます。
vector::Full関数の引数
static vector vector::Full(
const ulong size, // ベクトルサイズ
const double value // 書き入れる値
);
- size
ベクトルのサイズを指定します。ベクトルの要素数を決定し、ベクトルの長さを表します。 - value
ベクトルのすべての要素に設定する値です。この値が、作成されるベクトル内のすべての要素に書き入れられます。
これらの引数を指定することで、指定したサイズで指定した値が埋め込まれた行列やベクトルを作成することができます。
Full関数の戻り値について
Full関数は、指定されたサイズの行列またはベクトルを返します。この行列またはベクトルのすべての要素には、引数として指定された値が埋め込まれています。
- matrix::Full関数の場合
指定された行数と列数で構成され、すべての要素に指定された値が埋め込まれた新しい行列を返します。 - vector::Full関数の場合
指定されたサイズで構成され、すべての要素に指定された値が埋め込まれた新しいベクトルを返します。
これにより、初期化されたデータ構造として行列やベクトルを返すため、特定の値を持つデータを基礎にした計算や処理に役立ちます。
Full関数を使ったサンプルコード
// OnStart関数はスクリプトが開始されたときに自動的に呼び出される関数です
void OnStart()
{
// matrix::Full関数を使用して、3行4列の行列を作成します
// ここでは、3行4列の行列のすべての要素に「10」を設定しています
matrix full_matrix = matrix::Full(3, 4, 10);
// vector::Full関数を使用して、5要素のベクトルを作成します
// ここでは、5つの要素すべてに「5」を設定しています
vector full_vector = vector::Full(5, 5);
// 作成した行列をエキスパートログに出力します
// エキスパートログには「full_matrix =」というテキストと共に行列が表示されます
Print("full_matrix = \n", full_matrix);
// 作成したベクトルをエキスパートログに出力します
// エキスパートログには「full_vector =」というテキストと共にベクトルが表示されます
Print("full_vector = \n", full_vector);
}
サンプルコードの解説
関数宣言
OnStart関数は、MQL5のスクリプトが開始されると自動的に実行される関数です。OnStart関数のブロック内にスクリプトの処理内容を書きます。
OnStart関数は、イベントハンドラーと呼ばれる関数の一種で、スクリプトを実行する際に必ず最初に呼び出されます。
matrix::Full関数による行列の作成
matrix full_matrix = matrix::Full(3, 4, 10); は、matrix::Full関数を使用して3行4列の行列を作成し、変数full_matrixに格納しています。
- matrix::Full(3, 4, 10); はmatrix::Full関数の呼び出しで、3行4列の行列を作成し、そのすべての要素に「10」を設定します。
- matrixは行列データを扱うためのデータ型です。full_matrixは変数名で、作成した行列を格納します。
vector::Full関数によるベクトルの作成
vector full_vector = vector::Full(5, 5); は、vector::Full関数を使用して5つの要素からなるベクトルを作成し、変数full_vectorに格納しています。
- vector::Full(5, 5); はvector::Full関数の呼び出しで、要素数5のベクトルを作成し、そのすべての要素に「5」を設定します。
- vectorはベクトルデータを扱うためのデータ型です。full_vectorは変数名で、作成したベクトルを格納します。
エキスパートログへの出力
Print関数は、エキスパートログにメッセージを出力するための関数です。
- Print(“full_matrix = \n”, full_matrix); では、エキスパートログに「full_matrix = 」というテキストとともにfull_matrixの内容(3行4列の行列)を出力します。
- 同様に、Print(“full_vector = \n”, full_vector); で「full_vector = 」というテキストとともにfull_vectorの内容(要素5のベクトル)を出力します。
このコードにより、指定されたサイズと値で初期化された行列やベクトルが作成され、それぞれの内容がエキスパートログに出力されます。Print関数のようなログ出力を使うと、計算の過程や結果を確認でき、デバッグに役立ちます。
Full関数を使ってEAを作る際のアイディア
Full関数は、特定の値で初期化された行列やベクトルを作成するための便利な関数で、EA(エキスパートアドバイザー)での活用方法が多く考えられます。以下にいくつかのアイディアを紹介します
リスク管理用の閾値行列の作成
Full関数を使って、リスク管理に用いる閾値行列を作成し、取引ごとにその行列を参照してリスクを管理するEAを作成できます。たとえば、通貨ペアごとやポジションサイズごとに異なる閾値を行列に設定しておき、それを基に損失を抑えるロジックを構築できます。これにより、複数のポジションを効率的に管理し、リスクをコントロールすることが可能です。
取引条件に基づいたフィルタ行列の作成
特定の条件に基づいて取引をフィルタリングする行列を作成し、それを取引ロジックに組み込むことができます。たとえば、特定の時間帯や市場の状況に応じて取引の有無を決めるための条件を行列に格納し、その行列を使って取引を制御するEAを構築することが可能です。
バックテストのシミュレーションパラメータ設定
バックテストを行う際、Full関数を使用してシミュレーション用のパラメータ行列を作成し、異なるパラメータ設定での取引パフォーマンスを確認することができます。
たとえば、異なる損切り幅や利益確定幅を行列として管理し、パラメータを変更しながら取引をシミュレーションすることで、最適な設定を見つけるEAを作成できます。
異なる通貨ペアのデータをまとめた行列の作成
Full関数を使用して、異なる通貨ペアのインジケータ値や過去の価格データをまとめて行列に格納することで、複数の通貨ペアを同時に監視するEAを作成できます。各行に通貨ペア、各列にインジケータや条件を設定しておけば、通貨ごとに異なるロジックで取引を行う複数掴ペア対応のEAを効率的に実装できます。
マルチタイムフレームのデータ管理
Full関数を用いて、異なる時間足のデータを行列として管理することで、複数の時間足を使った分析を行うEAを作成することができます。例えば、5分足、15分足、1時間足のデータを行列に格納し、それぞれの時間足のトレンドやシグナルを一括で参照することで、マルチタイムフレームの戦略に基づく取引が可能です。
取引パフォーマンスの記録と分析
Full関数を使用して、取引ごとのパフォーマンスを記録する行列を作成し、トレードのパフォーマンス分析に役立てるEAを構築できます。行列の各行に個別の取引の利益や損失を、各列に評価指標(勝率、利益率など)を格納し、取引結果を分析することで、戦略の改善や最適化に役立てられます。
Full関数を使ってデータ構造を整えることで、複雑な取引戦略やリスク管理のロジックを効果的に実装でき、EAのパフォーマンス向上に貢献できます。