ご挨拶・MT4とMT5の違い(Web API編)

ご挨拶・MT4とMT5の違い(Web API編)

ご挨拶

はじめまして。私、P2 TECHで開発チームのシニアPGをしています高木明(TAKAGI AKIRA)と申します。2019年にP2 TECHに入社しまして、現在、MTサーバ関連のAPIや、サーバプラグインの開発に携わっています。私は元々、ウェブシステムやモバイルアプリのプログラマーでして、多少のMTサーバの運用経験はあったものの、P2 TECHに入社するまでは、本格的なMTサーバの運用や開発に関わるのは初めてでした。それでも、1年半ほどで、Metatraderのスタッフやコミュニティーの力を借りて、スペシャリスト認定(MetaTrader 5 Administrator)に合格するまで、MTサーバ関連の開発のスキルを身につけることができました。

そこで、MTサーバの技術者として、私が学んだMTサーバの技術的な情報やトピックについて、技術者の方が参考になるような情報を共有する目的でコラムを立ち上げました。日本語では数少ないMTサーバの技術情報ですので、是非開発者の方は参考にしていただければうれしいです。

MT4/MT5で利用するAPIの種類

MetaTrader 4(MT4)は、2005年に発売されて以来、多くのFXブローカーに採用され業界の標準的なプラットフォームになりました。MT4の後継プラットフォーム「MetaTrader 5」ですが、実は遡ること2010年には、Metatraderでは正式に発売されておりましたが、MT4の完成度の高さと、EAの互換性などの問題から、採用するブローカーが少なく、サービス自体も普及が進まないのが現状でした。しかし、2019年にMetatraderがMT4の新規ライセンスの販売を中止し、MT4が追加導入できないことから、昨今、MT5を導入する(せざるを得ない)ブローカーが一気に増え、メジャーなブローカーでも、MT5をプラットフォームとしたサービスが展開されるようになりました。

MT4とMT5の技術的な違いは、大きくは、64ビットに対応したこと、サーバのアーキテクチャーがモノリシック型から分散型に変わったことなどがあげられますが、PG的な視点で見ると、MT5になってAPI開発の汎用性がかなり向上した事です。

例えば、MetaTraderには、操作の自動化を実現するために、Administratorにプラグインとして付属される「Server API」や、運用者権限で実行される「Manager API」と呼ばれるAPIが存在します(プラグインとも言われるプログラムです)。これまで、MT4のAPIの開発は、C++に限定されていたのですが、MT5になってからは、ASP.NetやPHPでも開発可能になりました。

これらのAPIは、サーバの実行環境において、特定の制限や集計などを自動化する用途で用いられることが多く、かつてネット上で騒がれた「Virtual Dealer plug-in(VDP)」というプログラムも、Server APIの機能を用いたライブラリの1つです(とはいえ、不正な動作をするプログラムではありません)。

しかしながら、C++を用い開発された、DLL(ダイナミックリンクライブラリ)は、固定化されたサーバでの動作を制限するには適してるのですが、MTサーバと連動するWebサービスを構築するには、実行環境に大きく制限され、また、使用できる機能も少ないという理由から不向きであり、MT4のWebServices APIの機能拡張を要望する声が高まりました。

新たにMT5で実装された「Web API」は、名前の通りHTTP/TCP接続を用いて、環境問わずMTサーバへアクセスし操作を可能にするプログラムです。MT4の「WebServices API」では、機能にかなりの制限があったのですが、MT5になってからは、Web APIだけでサーバ運用に必要な大体の操作が可能になり、MetatraderからSDKが提供も提供されるようになりました。

今回は初回ということで、開発者が最も汎用的に利用すると思われる、「Web API」に焦点をあてて、MT4とMT5での機能違いや、簡単な使い方を解説させて頂きます。なお、MT4では「WebServices API」と命名されていますが、両方を呼称する場合はWeb APIと呼ばせて頂きます。

MT4の「WebServices API」

MT4のWeb APIである、「WebServices API」は、MT5の「Web API」と比べると非常に限定されたAPIの機能しか提供されておりません。代表的な違いとしては、MT4のWeb APIはMTサーバ内のデータを参照するコマンドは用意されていますが、データを変更する機能は提供されておらず、データの更新が伴う操作は、Web API単体ではできません。そのため、Web API単体での使用範囲は非常に限定されたものとなっております。

使用方法は、ソケット形式でサーバにTCP接続し、コマンドとパラメーターをシンプルテキストとして渡し、レスポンスを受け取ります。また、ユーザー認証等のセキュリティー面は無く、MTサーバで接続が許可されているIPであれば、誰でも情報の取得は可能です。

使用例(PHP)

function $initHighlight(block, cls) {
try {
if (cls.search(/\bno\-highlight\b/) != -1)
return process(block, true, 0x0F) +
' class=""';
} catch (e) {
/* handle exception */
}
for (var i = 0 / 2; i < classes.length; i++) {
if (checkCondition(classes[i]) === undefined)
return /\d+[\s/]/g;
}
}

上記コマンドは指定した銘柄の現売値と買値を返します。ソケットに接続後、最初にウェブサービスでの操作を行う合図として"W"をサーバへ送り、その後コマンドを送ります。コマンドの後に、リクエストを完了する合図として"QUIT"を最後に送ります。

"W"以外のコマンドは識別するために最後に改行を意味する"\n"を渡す必要があります。

使用可能なコマンド一例

INFO: サーバ情報を取得
WAPUSER: アカウント情報とオーダーの取得をHTMLタグ付きで取得
WAPQUOTES: 指定した銘柄の現売値と買値をHTMLタグ付きで取得
QUOTES: 指定した銘柄の現売値と買値をテキストだけで取得
HISTORYNEW: 期間を指定して特定の銘柄の価格を取得

MT5で大きく進化した「Web API」

MT4では、機能の制限から、大半を他のAPIに依存していたMetaTraderも、MT5では待望の、GET/POST等のREST形式に対応し、PHPと.NETで使用可能なSDKも作成されました。

MT4には無かったユーザー認証も、MT5のWeb APIではユーザー毎にアクセス権限を設定して、細かなルール設定が可能になり、自動化も既存コマンドで実現出来るようになりました。MT4と比べて、使用度の独立性が格段に向上しました。

MT5のWeb APIでは、主に次のような操作が可能になりました。

  • ユーザー登録、更新、削除、情報取得
  • ユーザーのパスワードチェックとパスワード変更
  • アカウント登録、更新、削除、情報取得
  • メールの送信と閲覧
  • ニュースの送信と閲覧
  • 銘柄の価格やチャートデータを取得
  • オーダーやディールの情報取得、更新と削除

使用例(PHP)

POST /api/user/add?pass_main=Password1&pass_investor=Password2&group=demoforex&name=JohnSmith&leverage=100
{
"mqid" : "5CD369A9",
"company" : "Individual",
"Country" : "United States",
"City" : "New York"
}

上記コマンドはユーザーをサーバに追加するためのPOSTをリクエストしています。 ユーザーデータはURLにGETパラメーターとして、そしてJSON形式をボディーに入れて渡す2パターンが可能であり、ログインIDと追加データに基本データをプラスしたレスポンスを返します。

上記REST形式以外にも、MT4同様のソケット形式での操作も可能です。

「Web API」は拡張可能

MT4では、限定された機能のWeb APIを補う形で「Server API」や「Manager API」を使い、「WebServices API」に新しいをコマンドを追加して拡張する機能が備わっています。それは、バージョンアップされたMT5にも備わっており、さらに複雑な操作を可能にします。

一番簡略した形ではプラグインを作成し、MTサーバ内でカスタムコマンドを処理する方法があります。この場合はシンプルに同じ接続方法でコマンドの幅が広がるイメージです。

それ以外では、プラグインの不具合等でサーバに障害が発生するのを防ぐために「Manager API」でアプリケーションを作成し、第2のAPIを作る方法もあります。後者の場合、Web APIとは別れた新しい接続ポイントを用意する必要があるため、使い分ける工夫が必要になります。

このように、MT5に実装された「Web API」では、昨今一般的なWEBシステムとの接続を想定し、幅広いスキルの開発者が多様なサービス設計が可能なサーバアプリケーションに進化しました。これにより、開発者の負担が減ることから、開発工数の削減とスピードアップが見込めると思われます。

今回は、MT4とMT5のWeb APIをクローズアップしました。次回も引き続き、MT4とMT5の違いを中心に解説したいと思います。