MQLのプログラムコードを読んでみよう

メタトレーダー(MT4)

プログラミングをやったことがない人にとっては、大変そうなイメージしかないかもしれませんが、思っているほど難しくもありません。

小さな部分から、徐々にできることを増やしていくことがコツです。

今回はプログラムを組む前に、大まかな処理の流れを確認しておきましょう。

「プログラムはどこからスタートして、どのような経路を辿って終了するのか」という部分です。

処理の全体像を把握しておくと理解が進みますね。

MQLプログラムのテンプレートを読んでみよう

以下のプログラムは、MQL4ウィザードから作成したテンプレートです。

はじめからコードが記述されていていて意味がわからないかと思いますが、やっていることは図中に記載した通りです。

実行しても何もしないプログラムなので何も起きませんが、コンパイルもできますし、プログラム単体としては完成したものとなっています。

MQLテンプレートプログラム全体像

4つのブロックで構成されていることがわかるかと思います。プログラムの主な役割と処理の流れとしては以下のようになっています。

  1. チャート全体に関する設定と外部変数の定義
  2. OnInit関数:実行前に準備しておきたいことを設定する初期化処理
  3. OnDeinit関数:終了時に実行されます。主に後始末をする場所
  4. OnTick関数:プログラムメイン部分。レートが変動するたびに実行

関数の動作タイミング

大まかな処理の流れが把握できたところで、各関数の動作する条件をみておきましょう。

「OnInit()」「OnDeinit()」「OnTick()」関数は、それぞれ動作を開始するタイミングが決まっています。

  • OnInit関数:プログラムをチャートに挿入したときに実行
  • OnTick関数:OnInit実行後にOnTick関数が実行開始。価格が変動するたびにOnTck関数が実行される
  • OnDeinit関数:プログラムをチャートから削除したときに実行

初期化(OnInit)→実行(OnTick)→終了(OnDeinit)

それでは各ブロックの詳細を順にみてみましょう。

チャート全体に関する設定と外部変数の定義

チャート設定と外部変数の定義

「//」で始まるグレーの色になっている行(1〜5行)は「コメント」とされるコメント行です。

コメント行はプログラムの実行に影響がないので、どんな処理を行っているのかが分かるようにメモ書きや説明を記述しておきます。

次に「#」で始まる文があります。プリプロセッサ命令と言い、プログラム全体に関する設定が行えます。

MQLウィザードで作成したテンプレートでは、作成者、URL、バージョン情報などが自動で記述された状態になっています。

この場所では主に、以下を指定する目的で使用します。

  • チャートをウィンドウとサブウィンドウどちらに表示させるか
  • プログラム中で共通に使いたい変数
  • プログラム全体で統一したいスタイルや色

OnInit関数で実行前の準備をする

初期化する必要がないので何も書かれていません。必要に応じて記述します。

プログラム実行前に、あらかじめ設定しておきたいことがあれば初期化の段階で指定しておくとよいでしょう。

OnTick関数がプログラムの本体

プログラムの本体部分に相当する場所です。プログラムが終了させるまで、このOnTick関数がループするようなイメージですね。

この場所に、移動平均線を表示させるコードを書くことでチャートウィンドウへ表示させることができます。

また、「ゴールデンクロスで買い、デッドクロスで売る」といったロジックを書いていくことで自動売買プログラムを作っていきます。

テンプレートでは何も書かれていません。つまり何もしないプログラムです。

実行してもチャート画面上では何の変化もありませんが、何もしないプログラムがしっかりと動いていることになります。

OnDeinit関数で後始末を行ってプログラム終了

プログラム終了時に実行されます。後始末をしてプログラムを終了するような場所ですね。

テンプレートのように、何も処理することがなければ記述しません。

おわりに

MQLウィザードで作成した、EAプログラムのテンプレートを解説してみましたがいかがだったでしょうか。

何もしないプログラムなのに複雑かと感じたかもしれませんが、EAプログラムは4つのブロックで構成されるということがわかれば十分かと思います。

初期化と終了時の処理は、プログラムによっては必要ないこともあります。そういった場合は中身を書くこともないので、OnTick関数だけをメインにコーディングしていくことになります。

プログラミングは文法よりも、処理の流れを追うことに慣れることが大切かと思います。どんどんMQLコードを読んでみてください。

コメント