MQL5-基本関数と"Hello, World!" 2


 はじめに

この記事は以下リンクのYoutubeビデオを翻訳したものになります。よければそちらもご覧ください。

https://www.youtube.com/watch?v=zYdt_HnGaFY&list=PLV8YK-9p3TcOmgAFIjntw-GxOJoHp9xwc&index=3

前回記事 は以下です。

https://qiita.com/James_KW/items/575eb6cfc6d64180f003
本記事の内容はこの記事の続きになります。

 追加された関数の説明

前回記事にてテンプレートで追加された関数について説明する。関数って何というプログラミング初心者は、「文字を表示する」とか「買い注文を入れる」とか何かするための物と思ってください。

int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }

ちなみに//とするとコメントになり、//以降は読み込まれない。好きにメモを残しましょう。

さてこのOnInitはこのエキスパートアドバイザをチャートに適用した時に一度だけ実行される。
一行目の冒頭部分にある

int OnInit()

のintの部分は変数としてint型(整数型)を返すという意味である。

次の関数にうつる。

void OnDeinit(const int reason)
  {
//---

  }

この関数はこのエキスパートアドバイザが閉じられるときに一度だけ実行される。ここはエキスパートアドバイザをとじてクリーンアップするのに便利である。
一行目頭の"void"はどの値も返さないという意味である。

void OnTick()
  {
//---

  }

この関数は、チャート上で値段が変わったときに実行される。上記の2つと違って複数回実行される。

Hello, world! 今何時?

ではここから実際にコーディングを進めていく。今回は以下のような内容のコードを書く。

・チャート上に"Hello, world"と出力する。
・Hello, worldの隣に現在の時刻を出力する。

まず、OnTick関数だけを残して、それより上の関数をすべて消してしまう。今回は使わないので問題はない。チャート上に文字を出力するために今回はcomment関数を使う

Comment("内容")

この関数はチャートの左上にユーザー指定の内容を出力するというものである。ではHello,worldと出力するために、OnTick関数の中に以下のように書く。

void OnTick()
  {
   Comment("Hello, world");
  }

この状態まで行ったら、コンパイルしてストラテジーテスターで実際に実行してみる。

コンパイルは上図の[コンパイル]のボタン。ストラテジーテスターでの実行は、上図の緑色の再生ボタンのようなもの。実はそのすぐ隣の青色再生ボタンもストラテジーテスターによる実行になるのだが、細かい違いはそのうち。。。

もし、この二つの再生ボタンがグレーアウトしていて押せない場合は、一番最初のテンプレートを作成する際に、名前を変更するときに、"Expart¥"を消してしまっていないか確認しよう。

ここまでうまくいっていると、チャートが新しく表示されて、エキスパートアドバイザの適用するかどうか問われて[OK]を押すと、チャート左上にComment関数で表示させた内容、ここでは"Hello,world"と表示されるはずである。さてこの次に、このHello,worldの隣に現在時刻を表示させる。以下のようにOnTick関数の中身を変更しよう。

void OnTick()
  {
   Comment("Hello, world",TimeLocal());
  }

変更したら、ここからさらに同様にコンパイルして実行しよう。

うまくいけば、上図のように現在時刻も表示されるはずである。