端末
- 取引銘柄仕様における証拠金設定の表示を修正しました。以前は、フローティングレバレッジ(例:口座ポジション量に基づき計算される場合)を使用した際、契約仕様内の証拠金パラメータが誤って表示されることがありました。
- 負の価格を許可する銘柄でのオーダーブックの並び順を修正しました。正の価格、負の価格、ゼロ価格の注文が正しい順序で正確に表示されるようになりました。
- ユーザーガイドに「テスターが履歴データをダウンロードする方法」に関する新セクションを追加しました。これにより、ストラテジーテスターが取引履歴をどのように扱うかを理解するための重要ポイントがまとめられています。計算の安定性を確保するために、テスターは常に以下の「開始前履歴バッファ」を読み込みます。
- D1以下:前暦年の初めからデータを読み込みます。これにより、少なくとも1年間の履歴が提供されます(例:テスト開始日が2023年3月1日の場合、2022年1月1日からターミナルデータがダウンロードされます。これはテスト開始の14か月前に相当します)
- W1:少なくとも100本の週足(約2年)
- MN1:少なくとも100本の月足(約8年)
- ターミナルインターフェースのアイルランド語への翻訳を追加しました。
- ユーザーインターフェースの翻訳を更新しました。
利用可能な履歴が不足している場合、テスターは実際の開始日を、必要条件を満たす最も近い時点まで自動的にシフトします。
そのため、テストはユーザーが指定した日付よりも後に開始されます。テスターログには、以下のような関連メッセージが表示されます。
start time changed to 2024.03.15 00:00 to provide data at beginning
MQL5
- Matrix Balanceセクションに新たに5つのOpenBLASメソッドを追加し、正方行列の機能を拡張しました。新しい関数群では以下が可能です。
- 固有値計算の精度向上のための行列バランス調整
- 固有ベクトルの逆変換
- ヘッセンベルグ形およびシュール分解への変換(直交行列の生成を含む)
これらのメソッドにより、行列の事前準備から精密で安定したスペクトル計算まで、開発者は完全な変換サイクルを利用できるようになります。
メソッドはLAPACKアルゴリズム(GEBAL、GEBAK、GEHRD、ORGHR、HSEQR)に基づいており、高性能かつ信頼性の高い処理を保証します。
- MatrixBalance:一般的な実数または複素数行列を、行と列の順序を調整し、対角的相似変換を適用することでバランス調整します。バランス調整により行列のL1ノルムが減少し、計算される固有値や固有ベクトルの精度が向上する場合があります(LAPACK関数GEBAL)。
- EigenVectorsBackward:バランス調整された行列で計算された固有ベクトルを基に、元の一般的な実数または複素数行列の右固有ベクトルまたは左固有ベクトルを逆変換により構築します(LAPACK関数GEBAK)。
- ReduceToHessenbergBalanced:バランス調整された一般的な実数または複素数行列を、直交相似変換により上ヘッセンベルグ型に変換します(LAPACK関数GEHRD)。
- ReflectHessenbergBalancedToQ:ヘッセンベルグ型への変換で生成された次数nの基本反射(Householder reflectors)の積として定義される直交行列Qを生成します(LAPACK関数ORGHR)。
- EigenHessenbergBalancedSchurQ:ヘッセンベルグ行列の固有値およびシュール分解から行列TとZを計算します。必要に応じて、ヘッセンベルグ形に変換された入力行列のシュール分解も計算可能です(LAPACK関数HSEQR)。
- 固有値セクションに2つの新しいメソッドを追加しました。両方の関数はシュール分解の後に固有ベクトルを効率的に計算し、MQL5における線形代数ツール一式を完成させます。
- EigenVectorsTriangularZ:実シュール標準形(実上準三角行列)または複素シュール標準形(上三角行列)の固有ベクトルを計算します。分解A = Q · T · Qᴴを使用します(LAPACK関数)。高い数値精度を提供します。
- EigenVectorsTriangularZBlocked:実シュール標準形(実上準三角行列)または複素シュール標準形(上三角行列)の固有ベクトルを計算するブロック版(LAPACK関数TREVC3)。計算は高速ですが、精度はやや劣ります。
- 新しいメソッド隠蔽ルールによる継承の重要な変更
従来は、派生クラスや構造体が基底クラスと同じ名前のメソッドを定義した場合、オーバーロードがおこなわれ、基底クラスと派生クラスのすべてのバージョンが派生クラス内で利用可能でした。現在は、派生クラスで同名のメソッドを定義すると、基底クラスのメソッドは隠蔽(メソッド隠蔽)されます。
隠蔽された基底クラスのメソッドを呼び出すには、呼び出し時にスコープを明示的に指定する必要があります。class Base { public: void Print(int x) { ::Print("Base int: ", x); } void Print(double y){ ::Print("Base double: ", y); } }; class Derived : public Base { public: void Print(string s){ ::Print("Derived string: ", s); } }; void OnStart() { Derived d; d.Print("text"); // call of Derived::Print(string) d.Print(10); // ATTENTION! Calling Derived::Print(string) since Base::Print is hidden (inaccessible) d.Base::Print(10); // explicit call to hidden parent method }
一定期間、隠蔽された基底クラスのメソッドの方が、呼び出しパラメータにより適合しているにもかかわらず、派生クラスの利用可能なメソッドが選択される場合、MQL5コンパイラは警告を出します。以下は、上記コードでのd.Print(10)の呼び出しの例です。call resolves to 'void Derived::Print(string)' instead of 'void Base::Print(int)' due to new rules of method hiding
see declaration of function 'Derived::Print'
see declaration of function 'Base::Print'
implicit conversion from 'number' to 'string'
- 基底クラスのメソッドオーバーロードを復元するためのusing演算子を追加しました。
新しい動作を制御するために、MQL5にusing演算子が導入されました。これにより、クラスや構造体のスコープにおいて、基底型からあるメソッドのすべてのオーバーロードを「引き入れる」ことができます。
class Base { protected: void Print(int x) { ::Print("Base int: ", x); } void Print(double y){ ::Print("Base double: ", y); } }; class Derived : public Base { public: void Print(string s){ ::Print("Derived string: ", s); } using Base::Print; // return Print overloads from Base }; void OnStart() { Derived d; d.Print("text"); // Derived::Print(string) d.Print(42); // Base::Print(int) d.Print(3.14); // Base::Print(double) }
using Base::Print;が削除された場合、d.Print(42)とd.Print(3.14)の呼び出しは利用できなくなり、Derived::Print(string)だけが残ります。
さらに、この例では 基底クラスのprotectedメソッドが派生クラスで利用可能になる(可視性がprotectedからpublicに変わる)ことが確認できます。
これにより、開発者はクラス階層をより柔軟かつ予測可能に制御でき、どの基底クラスのメソッドオーバーロードを派生型で利用可能にするかを正確に定義できるようになります。
MetaEditor
- Algo ForgeにおけるGit操作のためのSHA-1ハッシュ計算を高速化しました。バルク処理においてパフォーマンスが40%以上向上しました。
- Git操作におけるファイル変更チェックを修正。内容が変わらず更新日時だけが変化した場合、ファイルは変更済みとみなされなくなり、誤検出を排除してリモートリポジトリとの競合を防止できます。
Algo Forge
MQL5 Algo Forgeユーザーガイドを公開しました。Gitの利点を不要な複雑さなしに解説しています。- 信頼性のあるバージョン履歴管理とブランチ運用
- 高速な試行と安全な変更マージ
- ワンクリックで自分のリポジトリ作成や他の開発者プロジェクトのフォーク
- 貢献を追跡できる透明なチームコラボレーション
- 他者から学べるオープンプロジェクトのカタログ
他の開発者のプロジェクトをクローンする
forge.mql5.ioでクローンしたいプロジェクトを開き、[Fork]をクリックします。フォークの名前と説明を入力して保存します。
MetaEditorで、同じMQL5アカウントを使用して、ナビゲータで[更新]コマンドを実行します。フォークしたプロジェクトはShared Projectsフォルダに表示されます。その後、Algo ForgeからGit Cloneでダウンロードします。これにより、プロジェクトファイルだけでなく、完全なコミット履歴とすべてのブランチも取得できます。つまり、フォーク上で作業を続けながら、クローン元プロジェクトの全履歴を保持することが可能です。
Webターミナル
- 銘柄仕様における取引およびクオートセッションの表示を修正しました。
- 銘柄仕様における証拠金設定の表示を修正しました。
- 銘柄仕様における取引およびクオートセッションの表示を修正しました。
- コンテスト口座タイプのサポートを追加しました。このような口座は青で表示され、デモ口座は緑で表示されます。
- 特定の条件下におけるフローティングレバレッジ証拠金計算の精度を改善しました。
- 新規口座開設時に、[次へ]ボタンが正しく進まない場合があった問題を修正しました。
- 取引所執行で、BidとAskの間に指値注文を置けなかった問題を修正しました。
- 注文執行価格の表示を修正しました。注文送信後、実行結果(取引成功または未実行の理由)がウィンドウに表示されます。場合によっては、実行価格が誤って「0」と表示されることがありました。
- クイックポジションクローズボタンが表示されなかった問題を修正しました。
- 口座選択ウィンドウの取引口座通貨の表示を修正しました。