English Русский 中文 Español Deutsch Português
preview
最強のML搭載取引プラットフォームが生まれるまで:アーカイブ、フォーラム、リリースからたどるMQLとMetaTraderの進化

最強のML搭載取引プラットフォームが生まれるまで:アーカイブ、フォーラム、リリースからたどるMQLとMetaTraderの進化

MetaTrader 5インタビュー |
27 11
MetaQuotes
MetaQuotes

最初のエキスパートアドバイザーからエージェント型AIアシスタント、MCP、OpenBLASに至るまで、MQLエコシステムはどのような道のりを歩んできたのでしょうか。

MQLの歴史は、取引戦略を記述するためのシンプルな言語から、包括的な開発・分析環境へと進化してきた歴史です。現在のエコシステムは、MetaEditor、MQL5、Python、ONNX、エージェント型AIアシスタント、Model Context Protocol (MCP)、OpenBLAS、そしてGit基盤を備えたAlgo Forgeを組み合わせています。

最も強力な機械学習搭載の取引プラットフォームが生まれるまで:MetaTrader 5


EAのための言語からIDEへ

最近では、MetaEditorを単なるコードエディタとして考えるのは難しくなっています。MetaEditorには、ドキュメント、コンパイラ、デバッガ、プロファイラ、プロジェクト管理、MQL5.COMとの統合、ソースコードの集中管理、Python統合、ONNXサポート、エージェント型AIアシスタント、SQLiteデータベースのサポート、さらにはCSVファイルを編集可能なテーブルとして扱う機能まで含まれています。しかし、この進化は一夜にして起こったものではありません。

プラットフォームの最初期から、MetaQuotesは一貫して同じ方向に進んできました。それは、トレーダーにチャートと取引ボタンだけを提供するのではなく、取引のアイデアをコードで記述し、過去のデータでテストし、人間の介入なしに実際の取引で稼働させる機能を提供することでした。MQLの歴史とは、EAのためのシンプルな言語が、やがて本格的な開発環境へと進化していった物語なのです。

インターネットには、すべての情報が保存されているわけではありません。古いページの中には完全に消失したものもあれば、Internet Archive Wayback Machineにしか残っていないものもあります。また、古いフォーラムのアーカイブやニュース記事から見つかるものもあります。それでも、ここまでの進化の道筋をたどるのに十分な資料は残されています。

Fx Charts → MetaQuotes → MetaTrader → MetaTrader 4 → MetaTrader 5

この区別は重要になります。アーカイブには、さまざまなビルド番号や内部バージョン表記、古いフォーラムスレッドのタイトルが残されています。しかし、プラットフォームの歴史を理解するには、バージョン番号の羅列としてではなく、製品とアイデアが発展してきた過程として捉えるほうが適切です。この物語の中心にあるのは、ソフトウェアのリリースそのものではありません。取引ターミナルが、少しずつ開発者のための作業環境へと姿を変えていった、その過程です。

言語より先にEAが存在した

MetaQuotesのWebサイトに関する最も古いアーカイブ上の記録は、2001年2月まで遡ります。MetaQuotes Software Corp.は2000年11月27日に正式に設立されましたが、将来のプラットフォームや取引の自動化についての議論は、それよりも前から始まっていました。アーカイブには、会社が正式に登録される4日前である2000年11月23日付のフォーラム投稿も残っています。


こうした初期の資料が興味深いのは、Webサイトの外観や技術的な細部だけではありません。重要なのは、当時まだMQLが存在していなかった一方で、EAというアイデアはすでに存在していたことです。当初から焦点が当てられていたのは、単なるチャートやクォートではありません。取引システムそのものをプログラムすることでした。

これが、その後のすべての方向性を決定づけることになります。MetaQuotesは当初から、ターミナルを市場を受動的に監視するためのウィンドウではなく、戦略を形式化し、その実行をソフトウェアに委ねるための環境として捉えていました。

MetaQuotesとMQLの最初のバージョン

MQLが初めて注目すべき形で公に登場したのは、2001年11月のことです。このときリリースされたのがMetaQuotesバージョン1.78で、プラットフォーム内部のMetaQuotes Languageを使って、独自の取引戦略、すなわちEAを作成できるようになりました。

当時の発表には、すでにプラットフォームの長期的な構想も示されていました。EAが売買ロジックを定義し、過去のデータを使ってテストを行い、口座上の取引を自動的に実行し、さらに人の介入なしに保有ポジションを管理するという構想です。

今日の基準からすると、最初のMQLは驚くほどシンプルなものでした。その仕様全体が1ページのHTMLに収まるほどでした。ループや配列はなく、本格的なプログラムに見られるような一般的な構造もありませんでした。計算には、あらかじめ定義された少数の浮動小数点変数が使われていました。

しかし、この節目を単に言語の構文だけで評価するのは誤りでしょう。本当のブレークスルーは、言語そのものの表現力ではなく、プラットフォームとの統合にありました。EAは無料のクライアントターミナル内で直接実行され、時系列データやテクニカル指標にアクセスし、市場を分析し、サーバーへ取引注文を送信することができました。

ここから、後にMQLエコシステム全体の標準となる原則が生まれました。それは、取引戦略をターミナルに手動で取り込まなければならない外部シグナルとして扱うのではなく、取引プラットフォーム内で実行されるプログラムとして扱うという考え方です。


MetaTrader:新たなプラットフォーム、新たなスケール

2002年5月、新しいMetaTraderプラットフォームの一般向けテストが始まりました。これは単なる外観上のアップデートではなく、サーバーおよびマネージャーコンポーネントを大幅に再設計したものでした。当時の発表では、FX、CFD、先物、株式市場などを含む数百の銘柄への対応、新しい通信プロトコル、そして数千人のオンラインユーザーにサービスを提供する能力が示されていました。

この段階は、MQLの歴史において2つの理由から重要です。

第一に、ターミナルがより包括的なエコシステムの一部になったことです。自動売買はもはや単独で動作するアプリケーションを前提とするものではなく、サーバー、管理ツール、大規模なユーザーベース、そしてさまざまな金融商品を備えた統合システムを前提とするようになりました。

第二に、それまでの言語では不十分であることが明確になったことです。ユーザーがあらかじめ作られたEAを実行するだけでなく、自ら売買ロジックを記述するのであれば、言語もまた、より汎用的なプログラミング言語へと進化する必要がありました。

MQL II:言語が本格的なプログラミング言語へ近づく

2002年秋、MetaTraderバージョン2.03で、新しい言語バージョンであるMQL IIが導入されました。


MQL IIは、もはやEAを構築するための単なる数式の集合ではなくなりました。MQL IIのドキュメントは初代MQLの約3倍の長さになりましたが、それでも1ページのHTMLに収まる規模でした。言語には、real型、string型、Boolean型の変数、配列、forループとwhileループ、そして拡充された組み込み関数が導入されました。組み込み関数には、Abs、Ceil、Cos、Exp、Floor、Log、Mod、Pow、Round、Sin、Sqrt、Tanなどの数学関数が含まれていました。

これは大きな前進でした。ユーザーは依然として比較的厳格な枠組みの中で開発していました。各ソースファイルは基本的に1つの実行可能な関数を定義し、金融商品のティックが到着すると、その関数が実行される仕組みでした。しかし、この枠組みの中でも、より複雑なロジックを実装し、条件分岐、ループ、配列、数学的な計算を利用できるようになっていました。

その後、外部でコンパイルされたファイルを呼び出せるようになり、1つのソースファイル内で独自の関数を定義できないという問題も部分的に解消されました。一方、内部の実装は、将来のMQL4やMQL5とはまだ大きく異なっていました。コードは逆ポーランド記法を中心としたスタックベースのマシン上で実行されていました。しかし、ユーザーにとって最も重要なのはそこではありませんでした。重要だったのは、取引戦略が単なる条件の集合から、徐々に本格的なプログラムへと変わっていったことです。

構文の面では、MQL IIはPascalに似ていました。これも意図的なものでした。当時、Pascalはプログラミングを学ぶための言語として非常に取り組みやすいものと考えられており、それは当時のMetaQuotesの理念と完全に一致していました。つまり、取引ターミナルを利用するすべてのユーザーが、自分の取引戦略を開発できるようにする、という考え方です。

カスタムインジケータ:MQLがEAの枠を超える

2003年春、MQLの開発はさらに重要な一歩を踏み出しました。3月には、ターミナルに新しい組み込みインジケータとファイル関連の関数が追加されました。FileOpen、FileClose、FileDelete、FileSize、FileTell、FileSeek、FileWrite、FileReadNumber、FileReadStringなどです。

しかし、大きな転換点となったのは2003年4月でした。MetaTraderバージョン3.10で、MQLによるカスタムインジケータと関数のサポートが導入されたのです。


これによって、MQLの役割はさらに広がりました。それまでMQLは主にEAと結び付けられていました。ユーザーが取引戦略を記述し、ターミナルがティックごとにそれを実行するという使い方です。カスタムインジケータによって、異なる用途にも使えるようになりました。トレーダーは、取引判断だけでなく、市場を分析するための独自の手法もプログラムできるようになったのです。

こうしてMQLは、トレーダーの業務における2つの側面、すなわち取引判断と分析ツールの構築の両方を担うようになりました。やがてこの組み合わせはMetaTrader 4の標準的な構成となり、EA、インジケータ、スクリプト、ライブラリが、1つの環境内で異なる種類のプログラムとして扱われるようになります。

過渡期:シンプルな言語から本格的な言語へ

2003年半ばまでには、次世代のプラットフォームを既存のアーキテクチャの単純な拡張として開発することはできないと、明らかになっていました。新しい製品、新しい言語、そして新しい環境が必要だったのです。

開発の過程では、公開インターネット上には、ほとんど記録が残っていない過渡期の仕組みも存在しました。しかし、進むべき方向は明確でした。開発者たちは、「1つのソースファイル=1つの関数」というモデルやスタックベースの実行方式、そして過度に教育的な構文から離れることを決めました。次世代の言語はC系の言語に近いものとなり、より複雑なプログラム構造をサポートするとともに、単純なEAだけでなく、高度な売買システムも構築できるようになることが想定されていました。

これは、開発思想そのものの変化でもありました。当初は、おおむね「すべてのトレーダーが自分自身の戦略をプログラムできるようにする」という思想でした。MQL4の開発が進む頃には、この思想はより明確なものになっていました。つまり、十分なスキルを持つユーザーであれば、ターミナルを離れることなく、どのような複雑さの取引戦略でもプログラムできるようにする、ということです。

同時に、シンプルさも引き続き重要視されました。単純な戦略は、これまでどおりシンプルに記述できる必要がありました。一方で、扱えるプログラムの複雑さには、大幅な引き上げが必要でした。

MetaTrader 4とMQL4:ターミナルがIDEになる

MetaTrader 4の開発は2003年夏に始まりました。当時の議論では、開発者たちが将来搭載される機能を徐々に明らかにしていました。より高度なテスト機能、異なる銘柄や時間足の時系列データへのアクセス、拡張された取引機能、スクリプト、多数のインジケータバッファを備えたカスタムインジケータ、そしてDLLから外部関数を呼び出す機能などです。2004年2月5日には、開発者が検証できるよう、MQL4プログラムのサンプルソースコードも公開されました。

2004年初頭までには、これが単なる小規模なアップデートではないことが明らかになっていました。システムは実質的にゼロから書き直されていたのです。開発には当初の想定以上の時間がかかりましたが、まさにそれが理由となって、MetaTrader 4は最終的に単なる機能改善ではなく、新しいプラットフォームとなりました。

2004年11月18日、MetaQuotesはMetaTrader 4ベータ版のリリースを発表しました。この発表が重要だったのは、取引機能や分析機能だけが理由ではありません。初めて1つの製品の中に、幅広いユーザー層を対象にしたアルゴリズム取引を実現するための仕組みがまとめられました。ターミナル、プログラミング言語MetaQuotes Language 4、IDEであるMetaEditor 4、EA、カスタムインジケータ、そしてスクリプトです。


この時点から、MetaTraderは単に自動化機能を備えた取引ターミナルではなくなりました。MetaTrader 4は、開発者向けの専用開発環境を備えたプラットフォームへと進化したのです。

MetaQuotesのWebサイトに掲載されていたMQL4のドキュメントは、驚くほどコンパクトでした。データ型、演算と式、ステートメント、関数、変数、プリプロセッサ、そして後に言語構文がまとめられていました。しかし、完全なリファレンスドキュメントはMetaEditorに組み込まれていました。これは重要な設計判断でした。開発者は、ドキュメントを確認するたびにブラウザへ移動する必要がなくなりました。リファレンス、ソースコード、コンパイルツールがすべて1か所に揃えられていました。


MQL4は、すでに本格的な手続き型プログラミング言語になっていました。ユーザー定義関数、より一般的なプログラム構造、1回限りの実行に使うスクリプト、EX4ファイル形式のライブラリ、そして外部DLLの関数を呼び出す機能が導入されました。

MetaEditorは単なるテキストエディタを超えた存在になりました。ヘルプのナビゲーション、シンタックスハイライト、コンパイル、さまざまなMQLプログラムタイプへの対応、そして組み込みドキュメントを備えていました。この段階で、MetaTrader 4をアルゴリズム取引で広く利用されるプラットフォームへと成長させる仕組みが確立されました。

ターミナル + 言語 + エディタ + ヘルプ + テスト + コミュニティ

2005年7月1日、長期にわたる開発を経て、MetaTrader 4が完全な取引プラットフォームとしてリリースされました。この時点から、その物語は単なるプログラミング言語の進化ではなく、エコシステムそのものが生まれていく過程へと広がっていきました。開発者向けの専用Webサイト、コードベース、記事、自動売買ロボットの選手権、そして膨大な数のMQL4ユーザーによるコミュニティが、次第に形成されていきました。

これが、次のパートのテーマです。


MQL4.COM:言語にコミュニティが生まれる

MetaTrader 4のリリース後、プラットフォームだけでは十分ではないことが明らかになりました。ユーザーがEA、インジケータ、スクリプト、ライブラリを作成できるのであれば、ドキュメント、サンプル、議論、記事、そしてコードを共有する場も必要でした。

2005年11月8日、MQL4開発者向けの専用Webサイト、MQL4.COMが開設されました。

これは重要な一歩でした。MQL4はもはや、取引ターミナルに組み込まれた単なる言語ではありませんでした。独立した開発者エコシステムの中心へと発展し始めたのです。Webサイトには、フォーラム、ドキュメント、コードベース、記事が設けられました。その後、コンテンツはロシア語と英語だけでなく、中国語でも公開されるようになりました。

コードベースには、すぐに利用できるプログラムが次々と登録されました。開設から1か月も経たないうちに、コードベースにはすでに50を超えるEA、約200のインジケータ、35のスクリプト、17のライブラリが登録されていました。EA、インジケータ、スクリプト、ライブラリの存在によって、MQL4は「一部の詳しいユーザー向け」の言語から、幅広く利用できる実用的なツールへと変わっていきました。ユーザーはプログラムをゼロから書くだけでなく、他のユーザーのコードを学び、既存のソリューションを変更し、その作者に質問しながら、徐々にソフトウェア開発の世界へ入っていくことができました。

興味深いことに、2006年にはコミュニティの記事の1つで、人工知能を利用したEA、つまり単層ニューラルネットワークを使ったEAが紹介されていました。当時、これはまだ一般的なものではありませんでした。現在のようなAIや機械学習をめぐるブームもありませんでした。それでも、その発想自体はすでにコミュニティの中に存在していました。取引戦略は、ルールやインジケータだけでなく、学習可能なモデルを基盤として構築することもできるという考え方です。

この出来事は、その後のMQLの進化がPython、ONNX、エージェント型AIアシスタント、OpenBLASへと自然につながっていった理由を理解するうえでも重要です。機械学習への関心は、突然生まれたものではありませんでした。プラットフォーム、言語、そして計算能力が、それを支えるために必要な水準へ到達するまでに時間がかかっただけなのです。

自動売買選手権:EAが主役の舞台へ

次の大きな節目となったのが、「自動売買選手権(Automated Trading Championship)」です。MQL4で書かれた売買システムを対象とする最初の選手権が、2006年後半に開催されました。これは賞金を競うだけのコンテストではありませんでした。この選手権は、MetaTrader 4の中核となるコンセプトを公開の場で実証する役割を果たしました。EAが自律的に取引を行い、そのパフォーマンスをリアルタイムで確認できることを示したのです。

2006年の選手権には合計258人の開発者が参加しました。賞金総額は8万ドルで、12週間にわたって競技が行われました。当時としては、これは強いメッセージでした。自動売買は、もはや一部のプログラマーだけに限られたものではありませんでした。トレーダー、ブローカー、開発者がその行方を追う、注目すべき存在になったのです。

しかし、賞金でさえ最も重要な部分ではありませんでした。選手権は、インフラ全体にとってのストレステストとしても機能しました。運営側は専用のサーバーハードウェアを準備し、多数のターミナルを稼働させ、EAが同一の条件で動作できるように環境を統一し、さらに視聴者がオンラインで結果を確認できるようにしました。

この取り組みから、後にMetaTraderエコシステムで役立つことになる多くのアイデアが生まれました。EAの自動チェック、ソフトウェア保護、VPSホスティング、軽量クライアントターミナル、Webターミナル、売買シグナル、そして最終的にはアプリケーションマーケットプレイスへとつながっていきます。

2007年には参加者が603人に増え、2008年には705人に達しました。これはもはや一度限りのイベントではなく、コミュニティが到達した規模を示すものでした。人々は自動売買ロボットを開発し、アルゴリズムについて議論し、さまざまなアプローチを比較し、他の参加者へのインタビューを読み、なぜあるシステムは実際の取引環境で生き残れる一方、別のシステムは最初の数週間で破綻するのかを研究していました。

また、選手権ではニューラルネットワークも引き続き登場していました。2007年の優勝者であるAlexander Topchiloは、EAにニューラルネットワークを利用するアプローチを採用しました。まずC++でシステムを開発・テストし、その後MQL4へ移植したものです(Alexander Topchilo (Better)のインタビュー

2008年には、Leonid VelichkovskyがNeuroShellで学習させたニューラルネットワークを利用するEAを発表しましたLeonid Velichkovsky (LeoV)のインタビュー

これは、本記事全体にとって重要な点です。MQLの歴史は、単にその構文の歴史ではありません。トレーダーたちが、ますます複雑になるアイデアをターミナルに持ち込もうとしてきた歴史でもあります。単純なインジケータに基づくルールから、統計、最適化、ニューラルネットワーク、そして機械学習へと発展してきた歴史です。

選手権は2009年には開催されませんでした。MetaQuotesが次の主要プラットフォームとなるMetaTrader 5と、新しいMQL5言語の開発を最終段階まで進めていたためです。

MQL5:新しいプラットフォームは言語から始まる

MQL5の将来についての議論は、MetaTrader 5が一般公開されるずっと前から始まっていました。2007年にはすでに、MQL4.COMのユーザーが新しい言語に何を求めるのかを活発に議論していました。2007年10月にMQL4.COMで「MQL5」を検索すると、フォーラムの投稿へのリンクが15ページ以上表示されました。ユーザーからは、より高速な処理、より構造化された設計、新しいテスト機能、より容易なデータ処理、そしてより現代的なプログラミングモデルを求める声が上がっていました。

開発内部では、方向性はさらに大きく変わろうとしていました。新しい言語では、MQL4に特徴的だった中間表現から離れ、代わりにネイティブコードを生成する設計が採用されました。これは、パフォーマンスをまったく異なるレベルへ引き上げると同時に、言語そのものにも異なるレベルのアーキテクチャ要件を求めるものでした。

MQL5.COMドメインについて、アーカイブで確認できる最初の言及は2007年11月にさかのぼります。独立したドメインが登場したという事実そのものが、これは単なる新しい構文の話ではなく、将来のエコシステムを見据えた取り組みであることを示していました。


2008年3月31日、新しいMQL5言語が、次期言語の機能を紹介するインタビューの中で正式に発表されました。インタビュー自体は公開アーカイブに残っていませんが、その日付は重要です。MetaTrader 5がリリースされる前から、開発者たちは新しいプログラミングモデルに向けてコミュニティの準備を始めていたのです。

2009年夏までには、MQL5.COMのWebサイト上ですでに、間もなく公開されることが明確に告知されていました。


2009年10月12日、MetaTrader 5のベータテストが始まりました。その1か月後の11月18日には、MQL5開発者向けの新しいWebサイト、MQL5.communityのベータ版が公開されました。

MQL5.community:単なるフォーラムではなく、インフラへ

MQL5.communityは、最初から一般的なフォーラムとして作られたものではありませんでした。立ち上げ当初から、より広範なエコシステムを構成することを前提として設計されていました。ドキュメント、フォーラム、コード、記事、学習コンテンツ、そしてプラットフォームの進化に合わせて追加できる新しいサービスが、その構成要素となっていました。

開発者たちは、MQL4.COMですでに機能していたものを引き継ぐことにも力を入れました。議論の場、コード、記事、そして知識を共有するという従来のモデルです。しかし、新しいWebサイトはそれよりも幅広い役割を担うことが想定されていました。MQL5はより複雑になり、MetaTrader 5はより大きな構想を持つプラットフォームとなったため、コミュニティにもより堅牢なインフラが必要だったのです。

重要な取り組みの1つが、MQL4.COMからのアカウント移行でした。ユーザーは最初からやり直す必要がなく、既存のアカウントを使って新しいサイトにログインできました。これは2つの時代をつなぐ役割を果たしました。同時に、MQL5がMQL4で蓄積された経験を切り捨てるのではなく、それを土台として新たなレベルへ発展させていくことを示すものでもありました。

こうして新たなハブが形成されました。言語、ドキュメント、記事、コード、フォーラム、そして将来追加されるサービスが、1か所に集約されたのです。MQL5.communityはもはやターミナルに付随するサービスではなく、プラットフォームそのものの一部となりました。

MetaTrader 5とMQL5:言語が開発ツールになる

2010年6月1日、MetaTrader 5の取引プラットフォームがリリースされました。前世代のプラットフォームとは異なり、Forexだけでなく、取引所市場での取引にも対応するよう設計されていました。そのため、変更が必要だったのはターミナルだけではなく、言語そのものも同様でした。

MQL5は、MQL4から大きく進化しました。すでにC++に近いオブジェクト指向プログラミング言語となっていました。MQL5のプログラムはネイティブのx86またはx64コードにコンパイルされ、新たなレベルのパフォーマンスを実現しました。一方で、MQLの基本的な考え方は変わっていませんでした。ユーザーがシンプルなプログラムから高度な取引システムまで、どちらも構築できるようにするという考え方です。

取引モデルもより複雑になりました。MetaTrader 5では、注文、約定、ポジションがそれぞれ独立したエンティティとして導入されました。取引操作は取引所インフラの実態により近いものになりましたが、開発者にとっては管理すべき要素が増えたことを意味します。そのため、言語と並行して標準ライブラリも開発され、一般的なユースケースを扱いやすくするための取引クラスなどが提供されました。

リリース時点で、MQL5には約400の組み込み関数があり、当時のMQL4とおおむね同じ数でした。しかし、最も重要だったのは関数の数ではありませんでした。重要だったのは、開発の方向性です。MQL5は、大規模なシステムを構築するための言語として設計されていました。クラス、イベント処理、標準ライブラリ、テスト、最適化、そしてプラットフォームを中心に将来追加されるサービスを備えることが想定されていたのです。

MQL4ユーザー向けには、MQL5への移行方法を説明する専用のドキュメントセクションも設けられました。これは必要なものでした。新しい言語はより強力になった一方で、異なる考え方が求められたからです。MQL4がアルゴリズム取引を幅広いユーザーに身近なものにしたとすれば、MQL5はそれをより開発指向のものへと発展させることを目指していました。

MQL5選手権:新しいプラットフォームが一般向けテストに臨む

2010年に、自動売買選手権が復活しました。今回はMQL5のEAを対象とする大会です。これは自然な流れでした。新しいプラットフォームには公開の場でその実力を示す機会が必要であり、開発者にとっても、ドキュメントのサンプルだけではなく、自動売買ロボットによる3か月間の実戦形式のレースを通じて、MQL5がどのような性能を発揮するのかを確認する必要がありました。

2010年の選手権には314人が参加しました。2011年には395人、2012には451人に増えました。これらの選手権は、MQL4時代の選手権を引き継ぐだけのものではありませんでした。より高いパフォーマンス、新しいストラテジーテスター、より高度な取引モデル、そして大規模なEAを開発するための機能など、新しいプラットフォームの優位性を示す場でもありました。

選手権は、今回も複数の役割を果たしました。トレーダーにとっては、アルゴリズム取引が実際に動く様子を見ることができるエンターテインメントであり、同時に自動売買を体験する機会でもありました。開発者にとっては、アイデアを実際に検証するための実践的なテストの場でした。MetaQuotesにとっては、言語、ターミナル、ストラテジーテスター、インフラ、そして実際の環境下におけるプログラムの動作についてフィードバックを得る機会となりました。そしてもちろん、MQL5言語の普及にもつながりました。

新MQL4:MQL5からの逆方向の影響

MetaTrader 5のリリース後、MQL4の開発は徐々に後回しになるように思えたかもしれません。しかし、実際には逆の展開となりました。MetaTrader 4には膨大なユーザーベースがあり、長年にわたって蓄積された大量のコードも存在していました。そのため、必要だったのは開発を止めることではなく、慎重にアップデートすることでした。

2013年7月、MetaTrader 4とMQL4に対する大規模な変更が発表されました。その発想はユニークなものでした。すべてのユーザーにMQL4からMQL5へのコード移植を求めるのではなく、新しい技術基盤が持つ機能を可能な限りMQL4にも取り込むというものです。

これにより、MQL4とMQL5で共通のコンパイラ、共通のMetaEditor、新しい開発ツールへの対応、EX4/EX5ファイルに対するより強固な保護、そしてMetaTrader 4でアプリケーション向けマーケットを利用する機能が実現しました。

これはエコシステム全体にとって重要な決定でした。MQL4は「旧世代の言語」のまま残されたわけではありません。クラス、構造体、新しいデータ型、イベントハンドラー、より厳格なコンパイルモデル、リソース対応、新しいグラフィックス機能、そしてMQL5と共通の開発ツールセットが導入されたのです。

わずか1か月後には、新しいMQL4コンパイラとエディタを含むMetaTrader 4 IDEのベータ版がリリースされました。2013年末には、新しいMQL4とアプリケーション向けMarketを備えた更新版MetaTrader 4の一般向けテストが始まりました。そして2014年2月3日、MetaTrader 4クライアントターミナルBuild 600がリリースされました。

このリリースによって、MQL4の歴史は事実上2つの時代に分かれました。旧MQL4は、EAやインジケータに適したシンプルなC系言語でした。新しいMQL4はMQL5に大きく近づき、オブジェクト指向プログラミング、統合されたMetaEditor、新しいコンパイラ、そしてより複雑なアプリケーションを作成するための機能を備えるようになりました。

同時に、MetaTrader 4は最大の強みを維持しました。それは、膨大な既存のユーザー、プログラム、そして知識の蓄積です。それらを廃棄するのではなく、既存のエコシステムに新しい技術基盤が与えられました。

こうして、MQL4とMQL5はもはや完全に異なる2つの世界には見えなくなりました。一方は広く普及した自動売買の実践から発展し、もう一方は、より厳格で強力な開発プラットフォームを構築する取り組みから生まれました。Build 600以降、両者の間には共通のレイヤーが形成されました。MetaEditor、コンパイラ、開発スタイル、プログラム保護、そしてMQL5.communityのサービスです。

この頃には、MQLの歴史はすでに「EAのための言語」という段階を大きく超えていました。その周囲には、ターミナル、エディタ、ドキュメント、コードベース、記事、選手権、マーケット、シグナル、VPS、そして巨大なコミュニティからなる、1つのエコシステムが形成されていました。しかし、次の発展段階にはさらに多くのものが求められるようになります。外部データ、分散コンピューティング、機械学習、行列、ニューラルネットワーク、そして高度な線形代数です。

これが、次のパートのテーマです。


MQL5の進化:言語が成熟する

MetaTrader 5のリリース後、MQL5の開発は複数の方向に並行して進みました。1つ目は言語そのものです。MQL5はC++にさらに近づき、大規模なプロジェクトに適した言語へと進化していきました。2つ目は実行環境です。MQL5のプログラムは、チャート上で動作するEAやインジケータだけに限定されなくなりました。3つ目は計算能力です。ストラテジーテスター、クラウド最適化、OpenCL、行列、Python、ONNXなどが段階的に加わり、プラットフォーム上から実行できる処理の範囲が広がっていきました。

これらのアップデートを個別に見ると、長いリリース一覧のように見えるかもしれません。しかし、すべてを合わせて見ると、より重要な変化が浮かび上がります。MQL5は、自動売買ロボットのための言語から、開発、計算、データ分析、そして外部テクノロジーとの統合のための汎用的な環境へと進化していったのです。

言語がC++に近づく

当初、MQL5はMQL4をより厳格かつ高速にした後継言語として開発されました。しかし、最初の数年間で、基本的なオブジェクト指向構文だけでは不十分であることが明らかになりました。開発者には、より大規模なプロジェクトに対応するためのツールが必要でした。コードの再利用、汎用アルゴリズム、安全性の高い継承、名前空間、そして複雑なデータ型への対応です。

2011年1月19日、MetaTrader 5クライアントターミナルBuild 384リソースが導入されました。これにより、画像、データ、その他の補助ファイルをプログラムに直接組み込めるようになりました。これにより、画像、データ、その他の補助ファイルをプログラムに直接組み込めるようになりました。その後、リソース変数も導入されました。OpenCLコード、バイナリデータ、テキストなどをMQL5プログラムの一部として組み込めるため、プロジェクトが外部依存ファイルの集合になることを避けられるようになりました。

2012年11月16日、MetaTrader 5取引ターミナルBuild 722で、関数テンプレートが導入されました。

2015年10月23日にMetaTrader 5 Build 1200:ティック履歴とサービスの直接決済クラステンプレートが導入されました。これはジェネリックプログラミングに向けた重要な一歩でした。同じコードを異なるデータ型に対して利用できるようになり、アルゴリズムを手作業で書き直す必要がなくなりました。

2016年には、C++開発者にはなじみのある機能がいくつか言語に追加されました。

2016年4月1日、MetaTrader 5 Build 1295抽象クラスが導入されました。

2016年6月には、dynamic_castによる動的な型変換が導入されました。

2016年8月15日には、Interfaceが導入されました。

2016年9月16日には、MetaTrader 5プラットフォーム Build 1430:露出タブの更新finalおよびoverride修飾子が追加されました。

これらの変更はいずれも、単なる見た目上の機能追加ではありませんでした。より厳密で安全なクラス階層を構築し、開発者の意図を明示的に定義し、特定の種類のエラーをコンパイル時に検出することが可能になりました。

2019年10月5日、MetaTrader 5 Build 2170:MQL5スコープ、グローバルストラテジーテスター、内蔵仮想ホスティングアップデート名前空間が導入されました。これは大規模なプロジェクトやサードパーティ製ライブラリにとって特に重要です。クラス、関数、変数の名前が互いに衝突することを防ぎながら、コードをより明確にモジュール化できるようになりました。

2021年5月21日、MetaTrader 5 Build 2940:ワークスペースでのMQL5サービスショーケースの配置とデザインの更新名前空間が導入されました。これはもはやEA向けの機能ではなく、開発や科学技術計算へ向かう一歩でした。複素数は、スペクトル解析、線形代数、信号処理、そしてさまざまな数値計算法で利用されています。

2022年1月28日、MetaTrader 5 Build 3180:MQL5におけるベクトルと行列、および使いやすさの向上matrixおよびvectorデータ型が追加されました。これによって、開発や科学技術計算への道がさらに広がり、ONNXとの統合や、後に導入されるOpenBLASライブラリの利用に向けた基盤が整えられました。

2024年9月27日には、 MetaTrader 5 Build 4570:MQL5におけるWeb版の機能強化とOpenBLAS統合にcomplexf、vectorcf、matrixcfデータ型が追加されました。

MQL5はこうして徐々に、売買ロジックを記述するだけでなく、大規模なライブラリ、計算モジュール、モデルラッパー、そしてインフラ関連コードを構築するのにも適した言語へと進化していきました。


計算環境としてのストラテジーテスター

もう1つの発展の軸となったのが、ストラテジーテスターです。ストラテジーテスターはMetaTraderにおいて常に重要な役割を担ってきました。過去データによるテストがなければ、自動売買は単なる当て推量になってしまうからです。しかしMQL5では、ストラテジーテスターは単にEAをテストするための機能を超えて発展し始めました。

2012年には、OnTesterInit、OnTesterDeinit、OnTesterPassのイベントハンドラに加えて、データフレームを扱うためのFrameAdd、FrameFirst、FrameNext、FrameInputsなどの関数が導入されました。これにより、テストエージェントは最終的な結果を1つだけターミナルに返すのではなく、任意のデータを送信できるようになりました。

このアップデートの重要性は、過小評価されがちです。実際には、これによって最適化はより柔軟な計算処理へと変わりました。EAは最適化基準だけを返すのではなく、中間結果、統計情報、独自の指標、さらには後続の分析に利用するデータセットまで渡せるようになったのです。

これがMQL5クラウドネットワークと組み合わさることで、分散コンピューティングへの道が開かれました。形式上は、すべてが依然としてストラテジーテスターのインフラ内にあります。しかし実際には、MQL5はタスクを並列処理するための仕組みを手に入れました。しかも、その用途は必ずしも自動売買ロボットの従来型のパラメータ最適化に限定されるものではありませんでした。

これは、より大きな流れを示すもう1つの例です。もともとアルゴリズム取引のために作られたツールが、次第に、より幅広い計算処理のシナリオにも有用であることが明らかになっていったのです。


MQL5はチャートの枠を超えて

従来のMQLプログラムは、チャートと結び付いたモデルを基本としていました。EAは特定の銘柄上で動作し、インジケータはウィンドウに表示され、スクリプトは1回限りの処理を実行します。MQL5は、こうしたモデルを徐々に拡張していきました。

2012年2月3日、MetaTrader 5取引ターミナルBuild 581OpenCLサポートが追加されました。これにより、利用可能なデバイス上で並列計算を実行し、大量のデータ処理に適したタスクを高速化できるようになりました。

2017年12月20日には、MetaTrader 5 Build 1730:MetaEditorでのプロジェクトと合成銘柄カスタム銘柄を扱うための関数が追加されました。開発者は独自の銘柄を作成し、そこに過去データを登録したり、ティックを更新したり、合成銘柄を構築したりできるようになりました。これは研究用途にとって重要な機能でした。標準的なブローカーのデータだけでなく、独自の時系列データ、集約した銘柄、特殊な気配値セットなどを使ってアイデアを検証できるようになったからです。

2018年10月26日には、MetaTrader 5 Build 1930:MQL5におけるフローティングチャートウィンドウと.NETライブラリで.NETライブラリがネイティブにサポートされました。MetaEditorが関数インポートの一部を担うようになり、開発者は複雑なラッパーを手作業で記述することなく、外部コードをより簡単に利用できるようになりました。

2019年2月21日には、MetaTrader 5 Build 2005:経済カレンダー、MQL5プログラム(サービスとしての提供)、およびR言語用APIで、新しいタイプのMQL5プログラムであるService(どのチャートにも紐付かないプログラム)が導入されました。Serviceはバックグラウンドで実行でき、ターミナルの起動と同時に開始し、インフラ関連の処理を担うことができます。これによってMQLプログラムの概念は大きく変わりました。MQLプログラムはもはや、EA、インジケータ、スクリプトのいずれかである必要はなくなったのです。。

同じく2019年2月21日のMetaTrader 5 Build 2005では、TCP接続を確立するためのネットワーク関数も追加されました。MQL5プログラムは、ターミナルの設定で対象アドレスが明示的に許可されていることを条件に、ソケットを介して外部システムとデータをやり取りできるようになりました。これにより、独自データソース、ローカルサービス、外部分析システム、アプリケーション間のデータ交換など、統合の可能性が広がりました。

2019年12月6日に MetaTrader 5 Build 2265:MQL5の3D視覚化とストラテジーテスターの銘柄設定のためのDirectX関数データベースサポートDirectXサポートが追加されました。これらのアップデートは一見すると、互いに関連性のない機能追加に見えるかもしれません。しかし、そこには共通する考え方があります。MQL5はもはや、取引関連の関数呼び出しやインジケータバッファだけに限定されるものではなくなりました。データの保存、可視化、外部システムとの統合、バックグラウンド処理のためのツールを備えるようになったのです。


Python:データ分析と機械学習への橋渡し

2019年6月14日、MetaTrader 5にPython連携機能が追加されました。これは、MetaTrader 5 Build 2085におけるPython連携、Wine(Linux/macOS)でのマーケットとシグナルのサポート、そしてストラテジーテスターの大幅な最適化を含むアップデートでした。これは、取引プラットフォームと、より広いデータ分析の世界をつなぐ重要な架け橋の一つとなりました。

この時点までに、Pythonはすでに機械学習、統計、データ処理、可視化のための標準的なツールとなっていました。Pythonのサポートにより、MetaTrader 5からデータを取得し、それを外部の研究環境で利用できるようになりました。モデルの構築、仮説の検証、データセットの作成、結果の分析を行い、その知見を再び取引プラットフォームへ戻すことが可能になったのです。

ここでも、同じ開発思想を見ることができます。MetaTraderは、外部の世界全体を置き換えようとしているわけではありません。むしろ、開発者に「橋」を提供しています。データと取引のインフラはターミナル内に残し、研究や機械学習のワークフローは、それらに適した豊富なライブラリが存在する環境で実行できるようにしています。

ONNX:機械学習モデルがMQL5へ

次の段階では、機械学習がさらにプラットフォームに近づきました。2023年3月10日、MetaTrader 5 Build 3620:Webターミナルの改善、ONNXサポート、MQL5の高速行列乗算ONNXのサポートが追加されました。ONNXは、機械学習モデルを交換するためのオープンフォーマットです。

ONNXの考え方は、MetaTraderのようなプラットフォームに非常によく適しています。たとえば、Pythonと使い慣れたライブラリを利用してターミナルの外部でモデルを学習し、そのモデルをONNX形式にエクスポートして、MQL5プログラム内で利用できます。これにより、モデルの「学習」と、それを取引ロジックで「適用する」という2つの作業を分離できます。

これは開発者にとって大きな簡素化です。ニューラルネットワークをMQL5で手作業により書き直したり、ターミナル内に学習のためのインフラ全体を構築したりする必要がありません。外部ツールを使ってモデルを準備し、MQL5はそのモデルをEA、インジケータ、あるいは研究用アプリケーションに統合することに集中できます。

このように、MQLコミュニティが長年にわたって関心を寄せてきたニューラルネットワークは、より成熟した技術的な形を取るようになりました。2006~2008年にニューラルネットワークを利用したEAが一部の愛好家による個別の実験だったのに対し、ONNXによって、開発者は学習済みモデルをMQL5に統合するための標準的な方法を手に入れました。

AIアシスタント:プロンプトから本格的なエージェントへ

AIアシスタントの最初のバージョンは、2023年6月14日にMetaEditorへ登場しました。最初の段階から、質問からコードに至るまでの道のりを短縮していました。開発者はコードの一部を選択して説明を求めたり、関数の実装や修正を依頼したりすることができ、その結果を手作業でプログラムに組み込むことができました。これは便利な機能でしたが、仕組みとしては依然として従来のチャット形式の延長線上にありました。つまり、質問し、テキストによる回答を受け取り、それをコピーし、検証するという流れです。

2026年7月24日、MetaTrader 5 Build 6060において、プラットフォームは異なるモデルへと移行しました。ターミナルとMetaEditorに、Model Context Protocol (MCP)とエージェント型人工知能の組み込みサポートが追加されました。AIアシスタントは、もはやテキストを生成するだけの存在ではありません。複数の作業からなる手順を計画し、プラットフォームが提供するツールを呼び出すことができます。データの読み取り、ファイルの検索や変更、プロジェクトのビルド、取引環境の分析などを実行し、その結果を構造化された形で返すことが可能です。

開発者は、この違いを明確に説明しています。時代遅れになりつつある「質問→回答→コピー」という方式から、複雑なタスクを実行できる本格的なエージェントへと移行したのです。これは、規模の面でも大きな変化です。AIアシスタントはもはや、MQL5のコードスニペットを生成するだけのツールではありません。開発者やトレーダーのワークフローそのものに参加する存在へと進化しつつあります。

MetaTrader 5におけるAIアシスタントとMCPの設定


MCP:AIとMetaTraderをつなぐ標準的な架け橋

Model Context Protocol (MCP)は、AIエージェントがアプリケーションのデータや機能に接続するためのオープン標準です。MetaTraderにとって、これはターミナルやMetaEditorが単にチャット画面を開くためのウィンドウではなく、専門的なツールを提供する環境になることを意味します。モデルはプラットフォームについて抽象的な説明を受け取るのではなく、特定の操作を実行するための、制御されたプログラムインターフェースを利用できるようになります。

MetaEditorでは、エージェントはワークスペースに関する情報を取得し、ファイルやテキストを検索し、ソースコードを読み取って編集し、新しいプログラムを作成し、構文をチェックし、個別のファイルをコンパイルし、プロジェクトをビルドすることができます。ターミナルでは、市場データ、開いているチャート、口座パラメータ、ポジション、注文、取引履歴などにアクセスできます。個別のMCPサーバーを追加することで、公開されている価格情報、ニュース、その他の分析用データなど、外部の情報源も利用できます。

このアーキテクチャは双方向に機能します。組み込みのAIアシスタントはMetaTraderとMetaEditorのMCPツールを利用しますが、同じサーバーを、OpenAI Codex、Claude Code、その他のプロトコル互換のソリューションを含む外部のエージェント型システムに接続することもできます。そのため、ユーザーは単一のインターフェースやモデルに縛られることはありません。プラットフォームがツールを提供し、ユーザーはその時々のタスクに応じてエージェントを選択できます。

このシステムでは、OpenAI、Anthropic、Gemini、DeepSeek、Ollamaなど、その他の互換プロバイダーの独自APIキーを利用できます。MQL5.communityアカウントでログインしたユーザーには、無料のMQL5 Liteプランが自動的に有効になります。AIアシスタントの設定は、ターミナルとMetaEditorの間で同期されます。

取引ターミナルのAIアシスタント

MetaTrader 5に組み込まれたアシスタントは、ターミナルそのもののコンテキスト内で動作します。特定の銘柄について現在の状況を説明したり、過去の価格データを調べたり、気配値表示から銘柄を確認したり、保有中のポジションや取引履歴を分析したり、リスクの高い操作を特定したり、レポートを作成したりできます。

AIアシスタントがMetaTrader 5の取引履歴を分析する


ネットワークツールを接続すると、エージェントはターミナル内部のデータと外部情報を組み合わせることができます。発表で紹介されたシナリオの一つでは、アシスタントがある銘柄に関する最新ニュースを取得し、その内容を段階的に調べたうえで、価格データと比較するという処理を行っています。これは、単に情報源に対して一つの質問をするだけではありません。エージェント自身が必要なコンテキストを収集しながら進める、複数ステップの分析です。

取引操作については、別途制御機能が用意されています。設定では、取引操作を完全に無効にすることも、許可することも、手動確認を必須にすることもできます。ネットワークへのリクエストやコマンドライン操作についても、それぞれ個別に制御できます。アシスタントによる推奨はあくまで情報提供を目的としたものであり、最終的な判断と取引に対する責任はユーザーにあります。

MetaEditorのAIアシスタント

MetaEditorでは、エージェントは自然言語による説明から新しいMQL5プログラムを作成したり、既存のプロジェクトを分析したり、エラーを見つけたり、修正方法を提案したり、コードをリファクタリングしたり、コードの可読性を向上させたり、複雑なアルゴリズムを説明したりできます。初期バージョンとの最大の違いは、結果が必ずしもチャット内のテキストだけに限定されないことです。エージェントはファイルを作成または変更し、コンパイルを実行し、その結果を確認することまでできます。

AIアシスタントはMetaEditorでMQL5プログラムを作成およびコンパイルする


大規模なコードベースでは、これは特に重要です。アシスタントは複数のファイルにまたがって識別子の定義や使用箇所を検索し、関連するincludeモジュールを読み取り、プロジェクトの構造を考慮したうえで、一連の操作としてタスクを実行できます。リクエストの履歴はナビゲータの[チャット]に保存されるため、エージェントとの作業は一度きりのコード提案ではなく、プロジェクトの一部となります。

Build 6060では、エディタ自体も改善されています。コードブロックを折りたたむことができるようになり、選択した識別子のすべての使用箇所がハイライト表示されるようになりました。これらの機能はAIに直接関係するものではありませんが、大規模なプロジェクトの分析や保守という、同じ利用シナリオをさらに強化するものです。

コードの記述から「開発・テスト・改善」のサイクルへ

開発において最も重要な領域の一つは、ストラテジーテスターに関するものです。一般向けテストスレッドでの議論では、目標とする自動化ワークフローが次のように説明されています。

  1. トレーダーの要件に基づいて戦略を開発する。
  2. テストを実行し、パラメータを最適化する。
  3. レポートを分析し、コードまたは設定を変更して、再度テストを実行する。
  4. 失敗した場合、または許容できる結果が得られた場合に停止する。
  5. 最終版とレポートをユーザーに提示する。

ここでは、「AIが利益の出る戦略を見つけてくれる」という約束とは明確に区別する必要があります。エージェントは開発のサイクルを自動化し、より多くの仮説をテストできるようにします。しかし、過学習、元データの誤り、市場環境の変化、そして独立した検証の必要性をなくすことはできません。この点におけるMCPの価値は別のところにあります。テスター、コンパイラ、プロジェクトファイル、最適化結果を、一つの管理された一連のアクションとして連携できることです。

ベータテストの期間中、このワークフローは段階的に拡張され、個々の高レベルなストラテジーテスターツールも順次追加・設定されていきました。そのため、ここで説明している完全自律型のサイクルは、エージェント型システムが目指している方向性として捉えるべきであり、現在すでに複雑なタスクをすべてユーザーの介入なしに実行できることを保証するものではありません。

セキュリティ:エージェントに無制限のコンピューターアクセスではなく、ツールを与える

エージェントが実行できる操作が増えるほど、明確な境界を設けることが重要になります。アクセスは、明示的な権限設定を基本としています。MQL5の作業ディレクトリはソースファイルの操作に利用できます。一方、テスターやログのディレクトリについては、読み取り専用に制限することができます。ユーザープロファイルへのアクセスも、個別に有効化できます。さらに、取引、ネットワークアクセス、コマンドラインについても、それぞれ個別の設定によって制御されます。

PowerShell、Python、その他の外部プロセスなどのコマンドライン操作は、特に強力であり、潜在的な危険性もあるため、インターフェース上で明確に区別されています。また、これらの操作は個別に無効化することもできます。このモードを利用すると、アシスタントを汎用的なエージェントとして動作させることができますが、その一方で、潜在的な攻撃対象領域も広がります。

フォーラムでトレーダーと交わされた議論では、開発者たちもバックアップとバージョン管理の重要性を強調しています。エージェントを活用した開発において、Gitは単なる便利なツールではなく、変更内容を確認・比較でき、必要に応じて元に戻せるようにするための、基本的なセキュリティ対策となっています。今回の新しいAIアーキテクチャは、MQL5 Algo Forgeともシームレスに統合されています。

プロジェクトの指示とスキル

プロジェクトの指示とスキルエージェントがファイルを参照できるだけでは十分ではありません。対象となるコードベース固有のルールも理解する必要があります。そのため、MetaEditorとMetaTrader向けの指示ファイルが、MQL5\Profiles\Agentsディレクトリに用意されています。

ユーザーはデフォルトの指示を独自の内容に置き換え、コーディングスタイル、命名規則、検証手順、その他の継続的に適用する要件を定義できます。これらのファイルはMQL5の領域内にあるため、Algo Forgeのプロジェクトと一緒に保存できます。

これにより、リポジトリにはソースコードやREADMEだけでなく、AI向けの指示も含めることができます。たとえば、プロジェクトのビルド方法、変更してはいけないファイル、実行すべきテスト、結果をどのような形式で提示するかといったルールを記述できます。フォーラムでの議論では、開発者たちは個々のプロジェクト向けのローカル指示に加えて、エージェントが再利用できる専門的な手順であるスキルについても紹介しています。

これは、システムが一般的なチャットから、プラットフォームのツールと特定のチームのルールを理解した、カスタマイズ可能なデジタルプロジェクトメンバーへと進化していることを示しています。行列とベクトル:

MQL5を本格的な線形代数に対応させる機械学習、統計、数値計算の分野では、クラスやテンプレート、外部連携だけでは十分ではありません。

ベクトルや行列を扱い、基本的な線形代数演算を実行するための使いやすい仕組みも不可欠です。2022年1月28日、MQL5に行列とベクトルの型が導入されました。これは単なる構文上の変更にとどまらない重要なアップデートでした。

行列とベクトルは通常の配列としてではなく、それぞれ固有のプロパティとメソッドを持つオブジェクトとして設計されました。ベクトルにはサイズが、行列には行数と列数が備わり、それらを扱うための専用メソッドも整備されていきました。

これにより開発者は、行列の生成、転置、乗算、分解、連立方程式の求解、ノルムやランクなどの数値的特性の計算といった処理を、より自然な形でコードに記述できるようになりました。この段階になると、MQL5は、かつてティックごとにシンプルなEAのロジックを実行するところから始まった言語とは、すでに明らかに異なるものになっていました。

言語には数学モデルを扱うための構造が備わり、プラットフォームにはPython、ONNX、OpenCL、クラウド最適化との連携機能も用意されていました。しかし、本格的な数値計算の基盤には、使いやすい行列型だけでは不十分です。複雑な手法を実装する際に信頼して利用できる、実績のある線形代数ライブラリも必要でした。

そこで次の大きなステップとなったのが、OpenBLASの統合です。


なぜOpenBLASなのか?

なぜOpenBLASなのか?

MQL5に行列、ベクトル、複素数、ONNX、機械学習のシナリオが登場すると、次にどのような数学的基盤を整備すべきかという問いが避けられなくなりました。個々のメソッドを手作業で実装することはできます。高速な行列演算をいくつか追加することもできます。乗算、分解、連立方程式の求解に対象を限定することも可能です。

しかし、この方法ではすぐに、互いに統一されていない関数の集合となり、開発、テスト、保守が難しくなります。MetaTrader 5のようなプラットフォームに必要なのは、「もう一つの高速ライブラリ」だけではありません。

幅広い用途に対応し、実績があり、移植性に優れ、MQL5の機能を段階的に拡張していくための基盤として利用できる、線形代数の標準的な基盤が必要です。OpenBLASを選定する前に、ALGLIB、LIBXSMM、Eigen、oneMKLなど、他の選択肢についても検討されました。

それぞれに強みがありますが、MQL5が目指していたのは、単一の演算を高速化したり、特定のアルゴリズムだけをカバーしたりすることではありませんでした。ALGLIBは、最適化、近似、線形代数、統計、その他のアルゴリズムを幅広くカバーする、汎用性の高い数値計算ツールキットとして知られています。

しかし、プラットフォーム内部の基盤レイヤーとして利用する場合、機能の充実度だけでなく、ライセンスモデル、ライブラリのエディション、配布条件、統合時の予測可能性、長期的なサポートなども重要になります。LIBXSMMは、特に小規模な行列やディープラーニングのプリミティブを扱う問題において、密行列および疎行列の演算に強みを持っています。そのため有用なツールではあるものの、対象となる範囲はより限定されています。

特定の種類の演算から最大限の性能を引き出す必要がある場面では優れていますが、幅広い線形代数手法をカバーするLAPACK指向の基盤を置き換えるものではありません。Eigenは、行列、ベクトル、数値ソルバー、関連アルゴリズムを扱う優れたC++テンプレートライブラリです。しかし、Eigenは本質的にC++を前提としたアプローチです。ヘッダーのみのライブラリ、テンプレート、式テンプレート、そしてC++コードとの密接な統合を特徴としています。

MQL5プラットフォーム内部に統合するには、異なる方向性が必要でした。求められたのは、matrix、matrixf、matrixc、matrixcfの各クラスにメソッドを実装するための、安定した計算基盤です。oneMKLも検討対象となりました。長い歴史を持ち、高度な最適化と幅広い機能を備えた強力な数学ライブラリです。しかし、プラットフォーム製品において重要なのは速度だけではありません。

移植性、特定ベンダーへの依存度、配布条件、統合に対するコントロール、そしてユーザーごとに異なる環境でも動作を予測できることなどが重要な要素となります。OpenBLASは、これらを総合的に考慮した上で、最も適した選択肢となりました。OpenBLASはオープンソースの最適化BLASライブラリであり、基本的な線形代数演算で高い性能を発揮するとともに、より複雑なメソッドを実装するための基盤となります。

MQL5にとって特に重要だったのは、LAPACKの処理を幅広くカバーしている点です。単一の演算を高速化するだけでなく、SVD、固有値計算、連立一次方程式の求解、最小二乗問題、各種行列分解、解の精密化など、幅広い線形代数手法を支える基盤として利用できます。つまり、OpenBLASの採用は、単なる付加的な機能ではなく、明確な開発上の判断でした。

MQL5の数学的手法を体系的に発展させるための基盤を確立することが目的でした。基本的な行列演算から、より高度な数値アルゴリズムまで、段階的に機能を拡張できる基盤を構築することが、その狙いでした。MQL5のOpenBLAS:

行列処理から本格的な数値計算基盤へ2024年9月27日、MetaTrader 5 Build 4570で、ネイティブのOpenBLAS統合が導入されました。

  • 同時にMQL5には、float型のデータを使用した複素数計算をサポートする新しいデータ型も追加されました。
  • complexf:float型のデータを使用する複素数
  • vectorcf:complexf型の要素を格納するベクトル

matrixcf:complexf型の要素を格納する行列一見すると、これは単なる技術的な細部に見えるかもしれません。しかし実際には、MQL5の数学機能の今後を支える重要な基盤の一つです。MQL5にはすでにmatrix、vector、complex、および各種の行列メソッドが存在していました。

しかし、OpenBLASを統合するには、実数と複素数、doubleとfloat、さらにそれぞれに対応する行列とベクトルという、より完全な型の体系が必要でした。これによりMQL5に追加されたのは、単なる「SVDメソッド」や「固有値メソッド」ではありません。

異なるデータ型やさまざまな数値計算上の問題に対応するアルゴリズム群を構築できる、基盤そのものが整備されたのです。MQL5で最初に導入されたOpenBLASのメソッドは、特異値分解(SVD)と固有値の計算に関するものでした。これは自然な出発点でした。

SVDについては、分割統治法、QR法、ピボット付きQR法、二分法、高水準ヤコビ法、低水準ヤコビ法、二重対角行列向けの手法など、複数のアルゴリズムが追加されました。これは重要な意味を持ちます。数値計算の手法には、あらゆる状況に対して単一の「最適な方法」が存在するわけではないからです。高速な手法でも悪条件のデータでは精度が低下する場合があり、一方で、より安定した手法は計算コストが高くなることがあります。プラットフォームは、開発者が状況に応じて手法を選択できるようにする必要があります。

固有値計算のメソッドは、異なる種類の問題に対応します。正方行列、対称行列、エルミート行列の解析、システムの安定性やスペクトル特性の評価、さらに統計、最適化、モデリングで利用されるさまざまな計算処理に使用されます。

その後も、MQL5のOpenBLAS関連ドキュメントは継続的に拡充されてきました。ここは重要なポイントです。OpenBLASの統合は一度きりのリリースではなく、継続的な開発の一環として進められています。matrix、matrixf、matrixc、matrixcfといった異なる行列型に対応するため、行列とベクトルのメソッドには段階的にさまざまな機能が追加されています。

次の論理的なステップとなるのは、解の精密化、誤差推定、数値安定性の向上、さらなる行列分解などのメソッドです。確かな数学的基盤は、「何もない状態」から一気に「すべて」を実現することで構築されるものではありません。標準的なLAPACKの問題を一つずつカバーし、対応範囲を段階的に広げていくことで、着実に構築されていくのです。

MQL開発者にとって、なぜ重要なのか

一般のトレーダーにとって、OpenBLASは数学者やエンジニアが使う科学技術計算ライブラリで、どこか縁遠い存在に思えるかもしれません。しかし、MQLエコシステムにおいてOpenBLASが導入されたことには、非常に実用的な意味があります。

開発者は、より複雑なモデルをMQL5上で直接構築できるようになりました。単にインジケータを呼び出し、2つの値を比較して注文を送信するだけでなく、データを配列、ベクトル、行列として扱えるようになります。さらに、行列分解や連立方程式の求解、安定性の評価など、これまでPython、C++、あるいはサードパーティ製ライブラリに移す必要があった処理も利用できるようになります。

これは、Python、ONNX、その他の外部ツールが不要になるという意味ではありません。むしろ、これらのツールは互いに、より効果的に補完し合うようになってきました。Pythonは、リサーチ、モデルの学習、データの前処理に適しています。ONNXは、学習済みモデルをターミナルに取り込むのに便利です。そしてOpenBLASは、プラットフォーム内部で計算を実行する必要がある場合に、MQL5に堅牢な数値計算基盤を提供します。

その結果、MetaTrader 5は、単に取引を行ったりEAをテストしたりするだけでなく、次のような一連の計算ワークフローを構築できる環境へと、徐々に進化してきました。

  • 市場データを取得する
  • 特徴量と行列を準備する
  • ONNXモデルを使用する
  • 行列・ベクトルを使用して数値計算を実行する
  • ストラテジーテスターでアイデアをテストする
  • 最適化を並列化する
  • その結果をEA、インジケータ、またはサービスに組み込む

このため、OpenBLASは単独で捉えるのではなく、これまでに導入されてきたMQL5、MetaEditor、Python、ONNX、行列、ベクトル、AIアシスタントといった要素と一体として考えるべきです。

エージェント型AIアシスタント、MCP、OpenBLAS:一つの開発環境を支える3つのレイヤー

一見すると、エージェント型AIアシスタント、MCP、OpenBLASは、プラットフォームの異なる領域に属しているように見えます。AIアシスタントはユーザーの意図を処理し、MCPはモデルとツールを接続し、OpenBLASは数値計算アルゴリズムを実行します。しかし、これらを組み合わせることで、一貫した計算ワークフローが形成されます。

AIアシスタントは、タスクの定義と分解を担います。つまり、ユーザーの要求を理解し、計画を立て、実行すべき操作を選択し、結果を解釈します。MCPは、ターミナル、MetaEditor、プロジェクト、市場データ、取引履歴、外部データなどへの制御されたアクセスをエージェントに提供します。OpenBLAS、行列・ベクトル演算、ONNXなどのテクノロジーは、モデルそのものを実装するために必要な計算能力をMQL5プログラムに提供します。

これまで開発者は、エディタ、ヘルプドキュメント、フォーラム、ストラテジーテスター、Pythonのノートブック、外部ライブラリなどを個別に使い分ける必要がありました。現在では、こうした複数の作業を一つのタスクとしてまとめて指示できるようになりつつあります。たとえば、プロジェクトを調査し、コードを変更し、プログラムをコンパイルし、データを準備し、分析を実行し、レポートを作成するといった一連の作業です。エージェントはコンパイラやストラテジーテスター、数学ライブラリに取って代わるのではなく、それらをつなぐ役割を果たします。

だからこそ、MCPは言語モデルそのものと同じくらい重要です。専用のツールがなければ、どれほど強力なモデルでも会話相手にとどまります。MCPによって、エージェントはユーザーが設定した権限の範囲内で、プラットフォーム上の実際の作業を実行できるようになります。

Algo Forge:コードをプロジェクトへ

現代の開発環境には、もう一つ、本格的な開発に欠かせないレイヤーがあります。それは、バージョン管理、変更履歴、コラボレーション、そしてプロジェクトを継続的に発展させながら公開・管理するための仕組みです。MQLエコシステムでは、MQL5 Algo Forgeがその役割を担うようになってきました。

Algo Forgeの前身は、MetaEditorに組み込まれたMQL4/MQL5ソースコード用のオンラインリポジトリ、MQL5 Storageでした。MQL5 Storageは、開発者がコードを安全なリポジトリに保存し、変更履歴を確認したり、以前のバージョンに戻したり、エディタから直接チームプロジェクトで作業したりできる重要な仕組みでした。

しかし、従来のリポジトリはSubversionをベースとしており、時代遅れになっていました。ソースコードの保存や同期には適していましたが、現代の開発にはさらに多くの機能が求められます。ローカルでの履歴管理、高速な操作、実験用のブランチ、変更のマージ、オフライン作業、そして一つのプロジェクトを複数の開発者が透明性を保ちながら共同で開発するための仕組みです。

2025年6月6日、MetaTrader 5 Build 5100で、ソースコードリポジトリが全面的に刷新されました。MQL5 StorageはSubversionからGitへ移行し、同時にオンラインでプロジェクトを管理するための新しいポータル、MQL5 Algo Forgeが開始されました。

これは重要な転換点です。コードベースが「すぐに利用できるサンプルをどこで見つけられるか」という問いに答えるものであるのに対し、Algo Forgeは「発展していくプロジェクトをどのように管理するか」という別の問いに答えます。複雑なEAやライブラリは、もはや一つのMQ5ファイルだけではありません。インクルードファイル、テスト設定、パラメータセット、モデル、ドキュメント、README、補助スクリプト、実験の履歴、複数の開発ブランチなどを含む場合があります。

Gitによって、コードの扱い方も変わります。開発者は新しいアイデアのために別のブランチを作成し、ストラテジーテスターでテストし、変更内容を比較し、以前の状態に戻し、成功した実験をメインバージョンにマージし、その結果をクラウドリポジトリにプッシュできます。プロジェクトの履歴は、作者の記憶や「final_new_2」のような名前のフォルダに頼るのではなく、IDEそのものの一部になります。

Algo Forgeは、ここにソーシャルなレイヤーを加えます。開発者は公開プロジェクトを探したり、作者をフォローしたり、チームを作成したり、プロジェクトをフォークしたり、リポジトリをクローンしたりできます。また、ファイル、コミット、ブランチを確認し、ドキュメントを整備して、プロジェクトをオンラインで共有することもできます。MQLエコシステムにとって、これは個々のソースコードファイルを共有する段階から、本格的な共同開発の文化へ移行することを意味します。

これは、記事や教育用コンテンツにとっても特に重要です。記事のコードを、単なるアーカイブや添付ファイルとして残しておく必要はありません。Algo Forge上でプロジェクトとして構成し、明確なディレクトリ構成とREADME.mdを用意し、変更履歴を保持することで、読者にテキストだけでなく、実際に動かせる開発の出発点を提供できます。記事がコンセプトを説明し、リポジトリがその具体例を示します。

このように、MetaEditorはその役割をさらに広げています。MetaEditorは当初、コードを記述してコンパイルするための場所でした。その後、ドキュメント、プロジェクト、デバッグ、プロファイリング、AIアシスタント、各種連携機能が加わりました。そして現在では、Gitによる本格的な開発ワークフローもその一部となっています。履歴、ブランチ、コミット、同期、コラボレーションまでを含む環境です。

この流れから見ると、Algo Forgeは独立した「付随サービス」ではなく、それまでの開発の流れをさらに発展させたものです。MQLプログラムは、単一のチャート上で動作するシンプルなEAから、バージョン管理、議論、チーム開発、公開、そして長期的な保守まで可能なエンジニアリングプロジェクトへと発展しています。

EAから開発環境へ

ここまでの歴史を振り返ると、MQLの進化には驚くほど一貫した流れがあります。

まず、まだ本格的なプログラミング言語が存在する以前に、EAが登場しました。その後、最初のMQLが登場し、短いドキュメントページ、いくつかの変数、そしてターミナル上で取引戦略を直接実行する機能が提供されました。続くMQL IIでは、ループ、配列、データ型、数学関数などが導入されました。カスタムインジケータによって、言語の用途はEAだけにとどまらなくなりました。

MetaTrader 4は、これらを大衆向けの環境として一つにまとめました。ターミナル、MQL4、MetaEditor、ドキュメント、EA、インジケータ、スクリプト、ライブラリ、テスト環境が統合されたのです。MQL4.COMは、コミュニティ、コードベース、記事を加えました。選手権によって、自動売買は公開性と競争性を備えた、大規模な取り組みになり得ることも示されました。

MetaTrader 5とMQL5は、複雑さの上限をさらに引き上げました。オブジェクト指向プログラミング、ネイティブコード、標準ライブラリ、新しい取引モデル、高度化されたストラテジーテスター、クラウド最適化、MQL5.communityによって、MQLはより本格的な開発ツールへと進化しました。

その後、MQL5の進化はMQL4にも影響を与えました。統合コンパイラ、統合されたMetaEditor、新しい言語仕様、プログラム保護、アプリケーション向けMarketが導入され、広く普及した製品に新しい技術基盤がもたらされました。

MQL5はさらに、従来のEAの枠を超えていきました。OpenCL、カスタムシンボル、.NET、サービス、ネットワーク機能、SQLite、DirectX、Python、ONNX、行列、ベクトルなどが加わり、MQLプログラムが担える役割は徐々に広がっていきました。

エージェント型AIアシスタント、Model Context Protocol(MCP)、OpenBLASは、この流れの中にある偶然の追加機能ではありません。これらは、その流れの自然な延長線上にあります。なぜなら、これらも2001年の時点ですでに示されていた、「プラットフォーム上でユーザーにより大きな自律性を与える」という原則に基づいているからです。

当時、自律性とは、EAを記述し、人間の介入なしに取引操作を実行できることを意味していました。現在では、その意味はさらに広がっています。自然言語でエージェントにタスクを与え、MCPを介して必要なツールへのアクセスを許可し、コードを記述・ビルドしたり、外部の機械学習モデルを利用したり、数値線形代数を実行したり、過去のデータでシステムをテストしたり、MetaTraderのインフラ上で稼働させたりすることまで可能になっています。

バージョンの歴史ではなく、一つの思想の歴史

MQLの歴史を、日付、ビルド番号、関数名の長い一覧にまとめることは簡単です。しかし、それでは本質を見失ってしまいます。

これは、ある構文が別の構文に置き換わったという話ではありません。また、ターミナルにメニュー項目が少しずつ追加されていったという話でもありません。

これは、取引プラットフォームが、開発者の仕事をより多くプラットフォームの中で完結できるようにしてきた歴史です。最初にEAの実行環境があり、次に言語、エディタ、そしてドキュメント、テスト、コードベース、記事、選手権、マーケット、クラウド最適化、外部連携、機械学習、AIアシスタント、数値線形代数、Algo Forgeによるプロジェクト管理が加わりました。

この意味で、現在のMetaEditorは、単なるEA編集ウィンドウの後継ではありません。言語、ドキュメント、プロジェクト、デバッグ、プロファイリング、モデル、数値計算、エージェント型アシスタンス、そして共同開発のためのGitインフラを含む、MQLエコシステム全体の統合拠点です。

だからこそ、最初のEAからエージェント型AIアシスタント、MCP、OpenBLASに至る道のりは、個別の出来事の寄せ集めではなく、一続きの発展として捉えることができます。MetaQuotesは当初から、市場を監視するだけのターミナルではなく、取引のアイデアをプログラムにし、さらにそのプログラムを管理可能なエンジニアリングプロセスへと発展させていける環境を構築してきました。

この考え方が、現在もMQLの進化を支えています。

MetaQuotes Ltdによってロシア語から翻訳されました。
元の記事: https://www.mql5.com/ru/articles/22768

最後のコメント | ディスカッションに移動 (11)
Ryan L Johnson
Ryan L Johnson | 10 8月 2026 において 21:29
fxsaber #:
でも、一体なぜ2001年版のMarketwatchにはタイムゾーンが表示されているのでしょうか?!
おそらく、ほとんどのタイムゾーン変換は(夏時間の影響で)最終的にはGMTに紐づくためであり、あらかじめ2つの明確なタイムゾーンを知らないまま時間を変換するのは、人によっては難しいからでしょう。
Aleksandr Slavskii
Aleksandr Slavskii | 11 8月 2026 において 02:21
文章がうまく書かれていて、読みやすく、興味深かった。
Wanateki Solutions LTD
Kelvin Muturi Muigua | 14 8月 2026 において 14:53
とても刺激的な記事ですね。MetaQuotesの創設者やチーム、そしてMQLコミュニティとその開発者たちによる長い道のり、ビジョン、そして賢明な取り組みが、今もなお、実に素晴らしいものを生み出し続けています。MQL万歳!
Vladimir Perervenko
Vladimir Perervenko | 14 8月 2026 において 18:35

そうですね。思い出すと興味深いですね。人間の記憶というのは不思議なものです。良いことはすぐに忘れてしまいますが、悪いことは長く記憶に残ります。実資金を賭けてのバージョン600への移行は、ストレスがたまり、長く記憶に残っています。 それに、当時のR言語の統合に関する期待が叶わなかったことも、正直なところ、残念でした。もちろん、今となっては時間が経ったこともあり、コミュニティやターミナル、言語自体の発展に比べれば、それは些細なことのように思えます。

導入されたAIに対する最初の反応や質問を見ると、奇妙な印象を受けます。提案された機能は、現在のニーズを大幅に先取りしているようです。

頑張ってください

Zhan Jin Yin
Zhan Jin Yin | 14 8月 2026 において 20:46
確かに、いつまでも心に残る思い出だ。あの頃、よく夜遅くまで残業していた私の、数々の思い出が、まるで 目の前を駆け抜けていくようだ。
EAのサンプル EAのサンプル
一般的なMACDを使ったEAを例として、MQL4開発の原則を紹介します。
初級から中級まで:MetaTrader 5のサンドボックスにおけるファイル操作 初級から中級まで:MetaTrader 5のサンドボックスにおけるファイル操作
サンドボックスとは何かご存じでしょうか。また、サンドボックスをどのように扱うのかご存じでしょうか。もし、これらの質問のいずれかに「いいえ」と答えるのであれば、サンドボックスの基本的な動作原理を理解するために、この記事を読んでください。また、MetaTrader 5が内部データの整合性を保護するためにサンドボックスを使用している理由についても理解できるでしょう。ここで紹介する内容は、純粋に教育目的です。いかなる場合においても、本稿で扱うアプリケーションを、ここで説明する概念を学習すること以外の目的を持つ完成品として扱わないでください。
エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法 エラー 146 (「トレードコンテキスト ビジー」) と、その対処方法
この記事では、MT4において複数のEAの衝突をさける方法を扱います。ターミナルの操作、MQL4の基本的な使い方がわかる人にとって、役に立つでしょう。
競争学習アルゴリズム(CLA) 競争学習アルゴリズム(CLA)
教育プロセスのシミュレーションに基づく新しいメタヒューリスティック最適化手法である競争学習アルゴリズム(CLA)を紹介します。このアルゴリズムでは、解の集団を生徒と教師からなるクラスに編成し、エージェントが3つのメカニズムを通じて学習します。それは、クラス内で最も優れた生徒に従うこと、個人的な経験を活用すること、そしてクラス間で知識を共有することです。