まずはファイル拡張子を理解しよう
上記は同じ『tester』というファイルですが、拡張子が異なっています
ex4とmq4の解説に入る前に、まず拡張子についてお話します。
ファイル拡張子とは、ファイル名の後ろの『.』(ピリオド)以降の部分で、Windowsでファイルの種類や形式を識別、使用するソフトと紐づける目印として使用されます。
例えば画像ファイルでは「.jpg」や「.png」などの拡張子が用いられ、MT4においては、『.ex4』と『.mq4』の拡張子が使われています。
拡張子が表示されていない時は・・
Window10以降の場合、初期設定だと拡張子が表示されていない場合があります。
その場合はエクスプローラー上部メニューの【表示】をクリックして、右側の【ファイル名拡張子】にチェックを入れれば、各ファイル名に拡張子が表示されるようになります。
MT4で使用される拡張子:mq4とex4の概要
それでは『.mq4』と『.ex4』という二つのファイル拡張子の特徴を解説していきます。
mq4ファイル:プログラムが書かれたオープンフォーマット
拡張子mq4ファイルだとこのようにコードを見ることができます
mq4ファイルは、インジケーターやEAのソースコードが書かれているファイルです。
これらのファイルはテキストエディターや専用のプログラミングソフトで編集・閲覧が可能であり、開発者が自由にコードを修正したり他の開発者と共有したりできます。また、ex4ファイルへの変換も簡単に行なえます。
MT4の海外フォーラムなどを覗くと、このmq4ファイルでソースコードを公開することで、バグやロジックの修正を有志が行い、短い時間と少ないコストでコードがより良く改変されたりします。
また、インジケーター制作業者にツールの改造や修正をお願いする場合などには、このmq4ファイルが必須になります。
ex4ファイル:保護されたMT4専用フォーマット
ex4ファイルは、mq4ファイルがコンパイルされた後の形式で、MT4プラットフォーム専用の実行ファイルです。
コンパイルされたex4ファイルはプログラムのコードが保護されており、通常は中身を閲覧・編集することができません。
これにより開発者は自分のプログラムを他人に公開する際に、コードの不正使用やコピーや改ざんを防ぐことができます。
一般で有料配布されているサインツールの9割はこのex4ファイルです。
コンパイルとデコンパイル
コンパイルをもう少し詳しく説明しますと、人間が読めるプログラムのソースコード(mq4ファイル)を、機械が読める実行可能な形式(ex4ファイル)に変換するプロセスのことです。
.mq4ファイル → .ex4ファイル へ変換
ほとんどのプログラミング言語でこのコンパイルの行為は採用されています。
MT4の場合はプラットフォームを起動する際に、自動的にmq4ファイルがコンパイルされてex4ファイルが生成され、インジケーターやEAとして動作させています。
次にデコンパイルですが、これはコンパイルとは逆に、機械が実行可能な形式(ex4ファイル)からソースコード(mq4ファイル)へと戻すプロセスのことを指します。
.ex4ファイル → .mq4ファイル へ変換
デコンパイル自体は一般的ではなく、古いバージョン(Build 610以前)のMT4で作成されたex4ファイルはある程度デコンパイルすることができますが、現在のバージョンで完全なデコンパイルとなると難しく、一部コードが欠損した状態での再現となります。
現在のMT4ではデコンパイルは不可能
新しいバージョン(Build 610以降)のMT4で作成されたex4ファイルにいたってはデコンパイルが困難であり、専門的な知識や技術を使っても完全には再現不可能です。
たまに個人の開発者がBuild610以降のファイルもデコンパイル可能ですと言っていますが残念ながらこれはありえない話で、技術云々の話ではなく、ex4ファイルへのコンパイル時にmq4ファイルにあった情報が一部なくなりますので、その無くなった情報はどうやっても復元ができないという構造上の問題です。
なお、デコンパイルはプログラムの著作権を侵害する可能性があるため、Build610以前のプログラムであっても、正当な理由がない限り他人のex4ファイルをデコンパイルすることは避けるべきです。