見出し画像

データドリブンFXラボ / MetaTrader4のMQLファイルのバージョン管理方法

 本記事では、MetaTraderのMQLファイル(.mq4や.mqh)をgitでバージョン管理できるようにするための方法をお伝えします。

課題

 対象は、MQLファイルの編集はMetaEditorなどで行い、バージョン管理にgitを使う場合になります。
 
 コードを変更した後、コードの差分を確認するためにgitでdiffを表示することになると思いますが、デフォルトのgitの設定では表示できません。mq4やmqhファイルはUTF-16形式で保存されており、gitのデフォルト設定では、UTF-16形式はバイナリファイルとして扱われてしまうため、commit確認時にdiffを確認できません。

 例えば、Sourcetreeで見ると、下図のようになってしまいます。

画像2

 このままだと、何を編集したのかわからず、コード量が増えるにつれて、自分の記憶でコードを管理することになり、どんどん開発速度が落ちていきます。ときには手戻りが必要になるかもしれませんが、何を元に戻せばよいかわからなくなります。

 今回そんな不便を解消する方法を記載します。やることは2つです(git等はインストール済みを前提)

解決方法

手順1: .gitattributesファイルの作成
 対象のgitリポジトリ配下に「.gitattributes」ファイルを作成し、内容に下記を記載。これにより、.mq4, .mqhファイルのdiff時にはutf16というフィルターが実行されます(utf16のwordは任意)。utf16フィルターの定義は手順2で指定。

*.mq4 diff=utf16
*.mqh diff=utf16

ちなみに、改行コードの変換などで使われる以下ではバイナリファイルのままの認識でダメでした。

*.mq4 text


手順2:git configにフィルターを追加

該当リポジトリで、以下のコマンドを実行し、gitのconfigにフィルターを追加します。内容は、diff時にファイルの文字コードをutf-16からutf-8に変換せよというものになります。

git config diff.utf16.textconv "iconv -f utf-16 -t utf-8"

上記を実行すると、gitのconfigファイルにフィルターが追加されています

画像3

Sourcetreeに戻ると、下図のようにdiffで差分が表示されます。

画像2

以上となります。

---------------

記事やMT4に関する質問、ご意見、EA等の開発に関する要望等ありましたら遠慮なくご連絡ください。

参考

【 iconv 】コマンド――文字コードを変換する:Linux基本コマンドTips(46) - @IT
・ gitの属性


もし記事など良かったなと思いましたら、サポートよろしくお願いします。より良いコンテンツを作れるように実験や環境作りに使わさせて頂きます。