EA、インジケータの作り方講座 第3回 プログラムの仕組み

プログラムの仕組み

そろそろ、実際にプログラムを記述していきたいのですが、その前にプログラムの仕組みについて説明をします。

先ほど作成したHelloMT4.mq4のプログラムからコメント部分(//で始まる行)をすべて削除し、改行も調整して見やすくします。皆様はそのままでも結構です。

見やすくなりましたね。

プログラムには関数と呼ばれるものがあり、呪文のようなものと言えばわかりやすいかもしれません。

現在のHelloMT4には7~10行目のOnInit()と12~24行目のOnCalculate(…)の2つの関数があります。

MT4は、チャートにインジを挿入した時点でOnInit()の呪文を唱えます。

そして、チャート上で現在価格が変わる(ローソク足が動く)たびにOnCalculate(…)の呪文を唱えます。

呪文が唱えられると{  }内に記述した処理が実行されるわけです。

変数の宣言

さあ、OnInit()関数にプログラムを記述していきます。

9行目~17行目を追加しました。

プログラムでは、数値や文字を扱って処理するのですが、その数値や文字を格納する箱を用意する必要があります。

数値や文字の種類によって使用できる箱の形が異なります。

そのため「こんな形の箱を使いますよ~」というのをあらかじめ宣言しておかなければなりません。

これを「変数の宣言」と言います。

8行目に空行がありますが、プログラムに影響は与えませんので問題はありません。

9行目の開始位置が7行目よりも半角3マスずれていますが、これは{ } の中の処理ということが分かりやすいように、あえて開始位置をずらしています。

何マスでも良いですが全角はダメで、スペースは必ず半角で入力します。

プログラムを見やすくするように一般的に行われる方法なので、必ず覚えておいてください。

各行の最後の「; (セミコロン)」は、文の終わりを意味しますので、必ず記述するようにします。

それでは、変数の宣言部分の説明です。

行番号 データ型 変数の名前(任意) 格納できるもの
9 int a 整数値、マイナスもOK
10 double b 小数点部分をもつ数値、マイナスもOK
11 string c 文字列

変数の宣言の方法は

データ型 変数の名前;

です。

「データ型」と「変数の名前」の間に「半角スペース」を入れて、最後は「セミコロン」で終わります。

データ型(変数の箱の形)は他にもありますが、ここでは使用頻度の高い3種類のみの説明とします。

変数の名前はa~z、A~Z、_(下線)、数字が使用できますが、数字から始めることはできません。

13行目~15行目では、変数に値を入れる処理を行っています。

値を入れるときは、「変数の名前 = 値」というように行います。

a~cには、それぞれのデータ型(変数の箱の形)に応じた値を入れています。

cに文字列を入れる際には、「(ダブルコーテーション)」で文字列を挟んであげる必要があります。

プログラムでは、ダブルコーテーションで挟んだ値は、文字列として認識されますので覚えておきましょう。

例えば、13行目の-777は数字ですが、

String a = “-777”;

とすれば、数字ではなく文字列として認識されますので、足し算や引き算に使うことができなくなるわけです。

コメントの表示

17行目では、Comment(…)関数を使って、変数の中身をチャート画面上に表示させる処理を行っています。

Comment(…)関数はMT4であらかじめ準備されている関数で、チャート画面上の決まった位置にコメントを表示することができます。

(プログラム内で // で記述するコメントとは関係ありません)

Comment(…)関数は( )の中に、画面表示させたい変数や文字列を引数として渡してあげる必要があります。

引数とは、その関数が処理を行うのに必要な情報のことを言います。

Comment(…)関数は、何を画面表示させるのかという情報が必要ですので引数として渡します。

Comment(a, b, c)というように、渡す引数(変数)は「,(コロン)」で区切ってあげます。

コロンと変数名の間のスペースはなくても問題ありません。

Comment(“あいうえお”);

というように、直接文字列を引数として渡しても画面に表示することができます。

引数(ひきすう)として渡す」という表現は、今後も使いますので覚えておきましょう。

19行目は関数の戻り値といって、関数を使用したプログラムにその関数の処理結果などを返します。

ここでは、処理が最後まで正常に終了しましたという結果を戻り値として返しています。

戻り値はreturnを使用して返すということだけ、今は覚えておきましょう。

それでは、例と同じように、ご自身のプログラムにも処理を記述しましょう。

記述が終わりましたら、コンパイルを実行し、成功したことを確認します。

MT4のチャートで下図のように、変数の内容が画面に表示されていればインジは動作しています。

現在挿入されているインジの確認・パラメータの変更・削除方法

インジが挿入されているチャート上で右クリック、「表示中のインディケータ」をクリックします。

インジを選択し、パラメータの変更やインジの削除を行うことができます。

コンパイルエラー

コンパイルは、mq4ファイルからex4ファイルへ変換するのですが、変換時にエラーが発生することがあります。

プログラミングには記述ルールがあり、そのルールに反していると変換することができず、コンパイルエラーとして中断されます。

試しにコンパイルエラーを意図的に発生させてみましょう。

HelloMT4プログラムのどの行でもよいので、「;(セミコロン)」を削除して、コンパイルしてください。

「ツールボックス」の「エラー」タブで「1error(s)」となっています(エラー箇所によっては、複数のエラーが発生します)。

赤枠の部分をダブルクリックしてみてください。

エラーの該当行にマークが表示されます。

しかし、この行が直接のエラー原因になっているとは限りませんのでご注意を。

実際は、15行目のセミコロンが抜けているのが原因です。

最初は、エラーを見つけるのが難しいかもしれませんが、慣れてくると大体見当はつくようになってきます。