ハンドルとは?
ハンドルとは、プログラミングにおいて、リソースやオブジェクトを参照するための識別子です。MQL5の文脈で言うと、ハンドルは通常、インジケータやデータ系列などの特定のリソースにアクセスするために内部的に使用される整数値です。
たとえば、iATR関数の戻り値として得られるハンドルは、計算されたATR指標のデータを参照するために使用されます。
このハンドルを使用して、CopyBuffer関数などを通じてATRの実際の値を取得することができます。ハンドルを使うことで、プログラムは指定された指標のデータに直接アクセスすることなく、必要な情報を効率的に取得することが可能になります。
MQL5では何故ハンドルシステムを採用しているのか?
MQL4からMQL5へ移行する際に、MQL5初学者が戸惑う点の1つにインジケータ系関数の扱いにこのハンドルという概念が絡んでくるところではないでしょうか?
MQL4では、インジケータ系関数の計算結果は単一の値として直接返されることが一般的でしたが、MQL5のインジケータ系関数は、戻り値としてハンドル値をまず取得し、取得したハンドルを通じて各種インジケータのデータにアクセスできるようなシステムに変更されています。
「なぜそんな面倒なことになったの?直接値を返してよ」
と思う方も多いと思います(私もプログラミング経験なしでMQL5を触ったクチなので、最初はそう思いました)
ただ、システム内部的な事で言うと、MQL5のハンドルシステムを採用することには、以下のような利点があります
MQL5がハンドルシステムを採用する事の利点
1:パフォーマンスの最適化: ハンドルシステムにより、必要なデータのみを選択的に読み込んで処理することが可能になりました。この事により、大量のデータをより効率的に扱えるようになりました。
2:マルチスレッド処理: MQL5はマルチスレッド処理をサポートしており、ハンドルを用いることで同時に複数のデータストリームを扱うことが可能になり、処理速度が向上します。
前バージョンのMQL4は主にシングルスレッド処理に基づいて構築されており、一度に一つのタスクしか処理できませんでした。
この為、ある関数が実行されている間、他のどの処理も待機状態になり、、複雑な戦略や複数の通貨ペアを同時に監視するプログラムを作る際には、処理速度がボトルネック(=進行の妨げ)になる可能性がありました。
マルチスレッド処理とは?
「マルチスレッド処理」とは、コンピュータのCPUが複数の処理を同時にまたは並行して行う能力のことです。具体的には、プログラムの実行中に複数の「スレッド」と呼ばれる「処理の流れの単位」が作成され、これらが並行して実行されます。
コンピュータが複数のコア(=CPU内部にある計算処理の中心部分)を持っている場合、それぞれのコアが異なるスレッドを処理することができ、結果として全体の処理速度が向上します。
例えば、リアルタイムでの金融データ分析や、複数のトレード戦略を同時にテストするような場合、マルチスレッド処理が非常に有効です。
MQL5では、このマルチスレッド処理が可能であり、スクリプトやエキスパートアドバイザー(自動取引システム)がより効率的に動作することを可能にしています。これにより、トレーダーは高速で複雑な取引アルゴリズムをリアルタイムで実行することができるようになりました。
3:柔軟性の向上: インジケータの値をハンドルとして返すことで、同じインジケータに対して複数の異なる設定を持たせることができます。
これにより、異なる期間や異なる価格に基づく複数のインジケータを同時に計算し、それらを個別に管理することが可能になりました。
コメント