MQL5でJSON -サンプルコードとモジュールダウンロード方法-

2021/06/18

検証
mql5でjsonを実装する方法

はじめに

MQL5でJSON形式を扱う方法を説明します。

必要なモジュールをダウンロードし、インクルードすることで、JSONのシリアライズ/デシリアライズができるようになります。

まずはモジュールのインポートから確認しましょう。

モジュールのダウンロード

モジュールは下記のリンクから取得できます。

JSONシリアライズとデシリアライズ(ネイティブMQL) – MetaTrader 5のためのライブラリ

『ZIPとしてダウンロード』を選択しましょう。

mql5でのJSONモジュールダウンロード

ダウンロードしたZIPファイルを解凍しましょう。

モジュールは下記のような構造となっています。

ExpertsとScript

mql5のJSONモジュール構造

Scriptにはサンプルプログラムが入っています。
このファイルはScriptフォルダに入れなくても実行(コンパイル)できます。

一方Includeにはモジュールの本体である『JAson.mqh』が入っています。
『.mqh』ファイルはインクルードファイルと呼ばれ、これを呼び出すことで定義された変数や関数を使うことができます。
このファイルは必ずIncludeファイルに入れましょう。それにより他のファイルから正しくインポートできるようになります。

サンプルプログラムである『jason_test.mq5』はなくても問題ないファイルですが、『JAson.mqh』は必ず必要となります。

JAson.mqh

このファイルにはclass CJAValが定義されています。このCJAValクラスを使ってJSON形式を扱います。

またJSON文字列化、辞書(連想配列)化をそれぞれ行うシリアライズ、デシリアライズ関数もここで定義されています。

実際にシリアライズ、デシリアライズするサンプルを下で説明します。

jason_test.mq5

こちらはサンプルコードになっています。

モジュールが正しくIncludeファイルに保存されているか確認するためにもこのコードをコンパイルしてみましょう。

コンパイルエラーが発生する場合は正しい場所に保存されていない可能性があります。

mql5でのJSONサンプルコード

コンパイルされた『jason_testex5』ファイルをMT5上で実行してみると、エキスパートタブにこのように表示されるはずです。

mt5でのjsonサンプル実行結果

ただ、このサンプルは少しわかりにくいので下記にサンプルコードを添付します。

サンプルコード -デシリアライズ編-

これはテキストをjson形式にデシリアライズするサンプルです。

#include <JAson.mqh> でjsonモジュールをインクルードするとこから始めます。

#include <JAson.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   string text = "{\"name\":\"Tom\",\"age\":25,\"lotSize\":382.67,\"active\":true}";
   CJAVal jsonData;
   jsonData.Deserialize(text);
   printf(jsonData["name"].ToStr());
   printf(jsonData["age"].ToInt());
   printf(jsonData["lotSize"].ToDbl());
   printf(jsonData["active"].ToBool());
  }
//+------------------------------------------------------------------+

ポイントは

  • CJAValでjsonを格納する変数を定義
  • jsonData.Deserialize(text)でデシリアライズ
  • 格納されたデータを取り出す時は .ToStr()/.ToInt()/.ToDbl()/.ToBool()でそれぞれデータタイプを指定

つまりString型、Int型、Double型、Bool型を扱うことができます。
実行すると下記のようにコンソールに表示されるはずです。

Tom
25
382.67
true

サンプルコード -シリアライズ編-

これは辞書データを文字列化(シリアライズ)するサンプルです。

#include <JAson.mqh> でjsonモジュールをインクルードする点や、CJAValでjsonを格納する変数を定義する点は変わりません。

#include <JAson.mqh>
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   CJAVal jsonData;
   jsonData["name"] = "Ken";
   jsonData["age"] = 30;
   jsonData["lotSize"] = 12.5;
   jsonData["active"] = false;
   string serializedText = jsonData.Serialize();
   printf(serializedText);
  }
//+------------------------------------------------------------------+

jsonData[キー] = 値
で格納できます。格納するデータタイプは前述の通り、String型、Int型、Double型、Bool型となります。

最後にjsonData.Serialize()を実行することでserializedTextにシリアライズされた文字列が格納されます。
実行すると下記のようにコンソールに表示されるはずです。

{"name":"Ken","age":30,"lotSize":12.50000000,"active":false}

まとめ

MQL5でJSON形式を実装する方法をまとめました。

デシリアライズを使ってwebRequestでデータを受け取ったり、逆に計算したデータをシリアライズしてJSON形式で出力することもできます。

MQL5の書き方はC++に似ていますが難しい部分も多いと思います。
ContraではEAをアプリ上で作成、変換するサービスを展開しています。
無料でアプリのダウンロードができます。ぜひご利用ください。

strのプロフィール画像

str