具体的なプログラムを見る前に、MQLに特有なデータ構造についてお話しておきます。
チャート画面には、時間足に対応したローソク足やバーが表示されていると思います。
「M1」の設定であれば1分ごとの4本値、「H1」であれば1時間ごとの4本値です。
MQLでは、これらの4本値のデータを「配列」というもので取り扱います。
「配列」というと、
プログラミングに全く馴染みのない方にはちょっととっつきにくいかもしれませんが、
いくつか連なった箱のようなものを想像してみてください。
その箱全体には「A」という名前が付けられていて、
始めの箱から順番に、0,1,2,3...というように番号が振られているようなものです。
(多くのプログラミング言語では、配列は通常「0」から始まります。MQLも例外ではありません)
そしてその箱の中に、4本値の、例えば「高値」のデータが格納されているのです。
ですから、「A」という配列において、3番目のデータ(番号は「2」)は何かというと、
チャートに表示されているローソク足(またはバー)の、
新しいものから数えて3番目の高値のデータということになります。
(MQLでは、最も新しい足から順番に番号が割り振られます)
このように、4本値のデータは「配列」の構造で扱われている、ということを覚えておいてください。
チャート画面には、時間足に対応したローソク足やバーが表示されていると思います。
「M1」の設定であれば1分ごとの4本値、「H1」であれば1時間ごとの4本値です。
MQLでは、これらの4本値のデータを「配列」というもので取り扱います。
「配列」というと、
プログラミングに全く馴染みのない方にはちょっととっつきにくいかもしれませんが、
いくつか連なった箱のようなものを想像してみてください。
その箱全体には「A」という名前が付けられていて、
始めの箱から順番に、0,1,2,3...というように番号が振られているようなものです。
(多くのプログラミング言語では、配列は通常「0」から始まります。MQLも例外ではありません)
そしてその箱の中に、4本値の、例えば「高値」のデータが格納されているのです。
ですから、「A」という配列において、3番目のデータ(番号は「2」)は何かというと、
チャートに表示されているローソク足(またはバー)の、
新しいものから数えて3番目の高値のデータということになります。
(MQLでは、最も新しい足から順番に番号が割り振られます)
このように、4本値のデータは「配列」の構造で扱われている、ということを覚えておいてください。
前回までで、プログラムの大枠を説明しました。
そしてプログラムには、「init」「deinit」「start」という関数が含まれていました。
さて今回は、それぞれの関数について、どんな働きをするのかを説明していきましょう。
まずは、「init」からです。
この「init」関数は、このプログラムが動作する際に、最初に実行されるものとなります。
ですから、最初に何か一回だけ処理をしたいものがある場合には、この関数の中に記述します。
次は、「start」です。
この関数は、MQLで最も利用されるものと言っていいでしょう。
処理のほとんどはこの中に書かれることとなります。
この関数が実行されるのは、チャート上のレートが変化するたびです。
ですから、何らかの計算処理、チャート画面への描画処理などが記述されることになります。
さて最後は、「deinit」です。
この関数は、チャートに適用されたインジケーターが、そのチャートから取り除かれる際に実行されるものです。
多くの場合は、このタイミングで実行するべき処理というものは無いので、省かれることが多いものです。
そしてプログラムには、「init」「deinit」「start」という関数が含まれていました。
さて今回は、それぞれの関数について、どんな働きをするのかを説明していきましょう。
まずは、「init」からです。
この「init」関数は、このプログラムが動作する際に、最初に実行されるものとなります。
ですから、最初に何か一回だけ処理をしたいものがある場合には、この関数の中に記述します。
次は、「start」です。
この関数は、MQLで最も利用されるものと言っていいでしょう。
処理のほとんどはこの中に書かれることとなります。
この関数が実行されるのは、チャート上のレートが変化するたびです。
ですから、何らかの計算処理、チャート画面への描画処理などが記述されることになります。
さて最後は、「deinit」です。
この関数は、チャートに適用されたインジケーターが、そのチャートから取り除かれる際に実行されるものです。
多くの場合は、このタイミングで実行するべき処理というものは無いので、省かれることが多いものです。
さて、以下の枠組みを少しずつ見ていくことにしましょう。

コメント行
まず目にするのが、2本のスラッシュ(//)です。
これはMQLに限ったことではありませんが、見ての通り、プログラムというものは複雑なものです。
したがって、ここはこんな処理をしている、といったメモのようなものをプログラム内に記述することができれば便利です。
そこで、この2本のスラッシュを使います。
この2本のスラッシュがあると、それ以降の文字は、プログラムの命令として認識されません。
したがって、この部分に注意書きや処理の方法、覚書のようなものを書いておけるのです。
これをコメントアウトと言います。
また別の利用方法として、プログラムで一時的に処理を行わせたくない行がある場合にも、その行を削除するのではなくコメントアウトしておけば、後で復帰するのが簡単です。
プロパティー
次の行を見てください。
#property ●●
と書かれています。
最初に「#」から始まるものは、プリプロセッサ命令と呼ばれ、みなさんがこれから作成するプログラムが実行される前に処理される命令です。
「#property ●●」は、そのプリプロセッサ命令のひとつで、プログラム全体の設定を意味します。
ウィンドウズでも、アイコンなどの上で右クリックすると「プロパティ」というメニューが出てきますね。
そのプロパティを見ると、ファイルの容量とか、更新日を確認することができます。
プロパティとは、そういったものの特性とか特徴といった意味です。
ここでは、著作権を表す「copyright」、著作者のサイトへのリンク「link」、チャートウィンドウに指標を表示させるという「indicator_chart_window」が設定されています。
関数
その次にあるのが、
int init(){...return(0);}
int deinit(){...return(0);}
int start(){...return(0);}
の3つの関数です。
関数と言うと、学校の数学を思い出す人もいるかもしれませんが、入り口と出口のある箱のようなものと思ってください。
入口から何かを入れる(入力)すると、その箱の中で何かの処理がされて、出口から出てくる(出力)ようなものです。
世の中のいくつかのプログラミング言語は、この関数の考え方を基本としています。
MQLとよく比較されるのがC言語というプログラミング言語ですが、このC言語もその例に漏れません。
さて一般的には、関数の記述は次のようになります。
関数の型 関数名(入力値){ 関数の中での処理...return(出力値)}
これを、メタエディターでの最初の関数に当てはめてみると、
関数の型:int
関数名:init
入力値:なし
関数の中での処理:未記述
出力値:0
となります。
次の2つの関数に関しても同様で、関数名がそれぞれ、「deinit」「start」となるわけです。
さて、これらの関数、「init」「deinit」「start」はそれぞれどんな働きをするのでしょうか?
次回ではその点を解説します。

コメント行
まず目にするのが、2本のスラッシュ(//)です。
これはMQLに限ったことではありませんが、見ての通り、プログラムというものは複雑なものです。
したがって、ここはこんな処理をしている、といったメモのようなものをプログラム内に記述することができれば便利です。
そこで、この2本のスラッシュを使います。
この2本のスラッシュがあると、それ以降の文字は、プログラムの命令として認識されません。
したがって、この部分に注意書きや処理の方法、覚書のようなものを書いておけるのです。
これをコメントアウトと言います。
また別の利用方法として、プログラムで一時的に処理を行わせたくない行がある場合にも、その行を削除するのではなくコメントアウトしておけば、後で復帰するのが簡単です。
プロパティー
次の行を見てください。
#property ●●
と書かれています。
最初に「#」から始まるものは、プリプロセッサ命令と呼ばれ、みなさんがこれから作成するプログラムが実行される前に処理される命令です。
「#property ●●」は、そのプリプロセッサ命令のひとつで、プログラム全体の設定を意味します。
ウィンドウズでも、アイコンなどの上で右クリックすると「プロパティ」というメニューが出てきますね。
そのプロパティを見ると、ファイルの容量とか、更新日を確認することができます。
プロパティとは、そういったものの特性とか特徴といった意味です。
ここでは、著作権を表す「copyright」、著作者のサイトへのリンク「link」、チャートウィンドウに指標を表示させるという「indicator_chart_window」が設定されています。
関数
その次にあるのが、
int init(){...return(0);}
int deinit(){...return(0);}
int start(){...return(0);}
の3つの関数です。
関数と言うと、学校の数学を思い出す人もいるかもしれませんが、入り口と出口のある箱のようなものと思ってください。
入口から何かを入れる(入力)すると、その箱の中で何かの処理がされて、出口から出てくる(出力)ようなものです。
世の中のいくつかのプログラミング言語は、この関数の考え方を基本としています。
MQLとよく比較されるのがC言語というプログラミング言語ですが、このC言語もその例に漏れません。
さて一般的には、関数の記述は次のようになります。
関数の型 関数名(入力値){ 関数の中での処理...return(出力値)}
これを、メタエディターでの最初の関数に当てはめてみると、
関数の型:int
関数名:init
入力値:なし
関数の中での処理:未記述
出力値:0
となります。
次の2つの関数に関しても同様で、関数名がそれぞれ、「deinit」「start」となるわけです。
さて、これらの関数、「init」「deinit」「start」はそれぞれどんな働きをするのでしょうか?
次回ではその点を解説します。
- メタトレーダー対応業者
【ご注意ください】
当サイトの提供しているコンテンツの投資対象や投資手法は元本や利益を保証するものではなく、相場の変動や金利差により損失が生じる場合がございます。 投資対象や取引の仕組およびリスクについて十分ご理解の上、お客様ご自身の判断と責任においてお取引いただきますようお願い申し上げます。 信用取引、外国為替証拠金取引、株価指数先物取引、株価指数オプション取引、商品先物取引などの保証金・証拠金設定のある投資対象については、お客様がお預けになった保証金・証拠金額以上のお取引額で取引を行うため、保証金・証拠金以上の損失が出る可能性がございます。 また外国為替証拠金取引の取引レートには売値と買値に差が生じます。 (※外国為替証拠金取引の取引レートには通貨毎に売付価格と買付価格に差額(スプレッド)があります)
【免責事項】
当サイトで提供しているコンテンツは、作成時点で得られる情報を元に、細心の注意を払って作成しておりますが、その内容の正確性および安全性を保証するものではありません。 また、投資知識の学習のための参考となる情報の提供を目的としたもので、特定の銘柄や投資対象について、特定の投資行動や運用手法を推奨するものではありません。投資に関する最終決定はお客様ご自身の判断でお願いします。 なお、投資によって発生する損益は、すべて投資家の皆様へ帰属します。当該情報に基づいて被ったいかなる損害についても、情報提供者及び当社(エンジュク株式会社)は一切の責任を負うことはありませんので、ご了承下さい。 また、当コンテンツのすべての情報について当社(エンジュク株式会社)の許可なく転載・掲載することを禁じます。


