プログラミング未経験者向けのページを読み終わったら、
実際にソースコードを作成してプログラミングしてみましょう。
メタエディターを起動する
まずはMT4を起動して、メタエディターを起動します。
MT4のツールバーにメタエディター起動ボタンがあるのでこれをクリックします。
ツールバーにこのボタンが見つからない場合、ツールバーが非表示になっている可能性があります。
MT4のメニュー ⇒ 表示 ⇒ ツールバー ⇒ 標準
にチェックが入っているか確認して下さい。
インジケータファイル作成
メタエディターを起動したら、新規作成ボタンをクリックします。
MQLウィザードウインドウが開かれたら、カスタムインジケータを選択して、次へをクリックします。
・名前の欄にはインジケータ名を入力します。
TestCloseLineという名称のインジケータを作成するので、「TestCloseLine」と入力します。
・著作者の欄には自分の名前やニックネームを入力します。
空白でも可能です。後でソースコード上で変更・追加する事も可能です。
・リンクの欄には自分のブログやサイトのURLを入力します。
空白でも可能です。後でソースコード上で変更・追加する事も可能です。
・パラメータ欄はインジケータのパラメータを追加する事が出来ますが、
これも後でソースコード上で変更・追加が可能です。
今回は使用しないので追加しません。
イベントハンドラはOnCalculateが選択された状態で次へを押します。
OnTimerやOnChartEventも後でソースコード上で変更・追加が可能です。
インジケータの描画プロパティも何も変更せずに完了を押します。
このプロパティも後でソースコード上で変更・追加が可能です。
メタエディターのナビゲーターを確認すると、Indicatorsフォルダの下にTestCloseLine.mq4というファイルが追加されました。
このmq4ファイルがソースコードファイルになります。
このソースコードファイルにプログラムコードを書く事になります。
メタエディターでTsetCloseLine.mq4ファイルを開いた状態でコンパイルボタンをクリックします。
まだ何も手を付けていないソースコードファイルなので、問題無くコンパイル完了する筈です。
MT4のナビゲーターのインジケータフォルダの下にTestCloseLine.ex4という実行ファイルが追加され、エラー検出されずコンパイル完了している場合使用可能になります。
実行ファイルは適用したいチャートにドラッグ&ドロップします。
中身の無いプログラムなのでチャート上に何も表示されないので、インジケータが適用されたか分かりませんね。
チャート上で右クリックして"表示中のインジケータ"をクリックします。
現在適用中のインジケータ一覧が表示されます。
mq4ファイルとex4ファイル
上記説明で突如出てきたmq4ファイルとex4ファイルですが、簡単に説明すると、
◆mq4ファイルはソースコードファイル
◆ex4ファイルは実行ファイル
です。
プログラミング経験のある人なら直ぐに理解出来たと思いますが、プログラミング経験の無い人には理解不能だと思います。
プログラミング経験の無い人に説明しても「よく理解できません」とよく言われてしまいます。
ソースコードとはプログラムコードを書くファイルで、人間が読める内容のファイルです。
人間が読める内容のファイルなので、mq4ファイルはテキストエディタで閲覧する事が可能です。
このようにメタエディターでは無く、外部のテキストエディタで開いて編集する事も可能です。
しかしmq4ファイルのように人間が読めるようなデータはコンピュータでは処理する事が出来ません。
人間には読めるけど、コンピュータには人間の言葉を読む事が出来ません。
何故ならコンピュータは0と1しか使わない機械語しか読めないからです、その為人間が読めるソースコードをコンピュータが読める機械語に翻訳する必要があります。
コンピュータが読めるように機械語翻訳されたデータがex4ファイルです。
.ex4ファイルはバイナリエディター等のバイナリ形式のファイルが閲覧出来るソフトが無いと中身を確認する事が出来ません。
16進数で表示していますが、人間が読める内容では無いですよね?
図でまとめると、こんな感じです。
実際にMT4で動作しているのは、mq4ファイルでは無くex4ファイルが実行されて動作しています。
mq4ファイルとex4ファイルは連動しているわけで無い為、
mq4ファイルをコンパイルするまでex4ファイルは更新されません。
正確にはコンパイル開始時にex4ファイルは削除され、コンパイル完了時に新しいex4ファイルが作成されます。
つまりコンパイルエラーになった場合、ex4ファイルは消えたままになります。
なお、MT4でex4ファイルを実行中にコンパイルエラーになった場合、MT4上のex4ファイルはDRAMメモリにコピーされたものが動作しているので動作継続しますが、
ストレージ上のex4ファイルは削除されているので、一度アンロードしてメモリ上からex4ファイルが消えるとコンパイルエラーを解消するまで動作させる事は出来ません。
基本的にコンピュータはストレージからDRAMメモリにデータをコピー(ロード)して、DRAMメモリ上にあるデータを使います(正確にはDRAMメモリから更にCPUキャッシュメモリへコピーして、そのキャッシュのデータを処理します)。
ストレージのデータにダイレクトアクセスして処理している訳では無いので注意して下さい。このコンピューターの基本的な仕組みを理解していない人が結構います。
ゲーム(任天堂が大好きなカートリッジタイプを除く)をやった事がある人なら分かると思いますが、
ゲームが始まる前や場面が切り替わる時に「ロード中」という画面で待たされた経験があると思います。
最近のオープンワールドのゲームでは
レベルストリーミング(外部リンク)
が使われてゲーム中にバックグラウンドでロードされているので気が付きにくいかもしれませんが、それでも最初にゲームを始める時はロードで待たされると思います。
そしてストレージをHDDからSSDに変えるとこのロード時間がとても短くなりますよね?
このロードも同様にメモリへのロードを意味しています。
そしてこれを知っている人はもう少ないかもしれませんが初代PlayStationではゲーム中にディスクを抜いてもゲームを続ける事が出来ます。
ゲーム中のデータはメモリにロードされたデータを処理しているので、ディスクを抜き取っても次の場面に切り替わるまではゲームを続ける事が出来ます。
ただしムービー再生中はディスクから動画データを再生しているので無理ですけどね。
ちなみにソースコードファイルを一括翻訳して、翻訳されたファイルを実行するのをコンパイラ言語といいます。
ソースコードを1行づつ逐次翻訳して実行するのをインタプリタ言語といいます。
だいたいネット等で配布されているインジケータやEAは実行ファイルのex4ファイルだけしか配布していないと思います。
多分、有料販売しているのはex4ファイルだけしか配布していないと思います。
ソースコードは飯の種ですから、有料販売している場合はソースコードを晒すような事はしない筈です。
ex4ファイルしか公開されていない場合、当然ソースコードを見る事が出来ないのでアルゴリズムを調べる事は出来ません。
致命的な不具合があっても自分で修正する事も出来ません。
ex4ファイルからmq4ファイルを生成するデコンパイルツールもありますが、今はセキュリティ対策されてデコンパイルし難くなった筈です。
それでもデコンパイルする人はいますから、どうしてもアルゴリズムを知られたくないけど実行ファイルを公開配布したい人は、
重要なプログラム部分だけをdllにする等の対策が必要になります。
dllのデコンパイルの方がex4のデコンパイルより遥かに難しくなるので、初心者クラッカーにデコンパイルされる確率が減ると思います。
dllはベテラン向けなので、ネット公開しない人は意識しないで大丈夫です。