こんばんは!キリンです。
最近ピグによく顔を出しています。
よければ遊びに来てくださいね。
ではでは、本日の講義です。
っとまずは前回の宿題からですね。
最新のローソク足から3本前のクローズ値を得たい場合には、 どうすればいいでしょうか? |
配列とMQL定義済みの変数を理解していただいていれば、
まったく難しくないと思います。
正解は、 Close[3];
ですね。
※日本語の問題をご指摘いただいたjunkyさん、りあるさんありがとうございます。
第7回の動画で「ざーっ」と説明してしまったのですが、
非常に雑なため、ご理解いただけない点が多かったと思います。
反省を踏まえ、細かく説明していきます。
今日から本格的にプログラミングによる「もの」を作っていこうと思います!
ぜひぜひ付いてきてくださいね!
※この講座の当初の目標が、「移動平均線のプログラムを作成する」
ということにしています。プログラム全体の中身は第1回をご覧ください。
■「 // 」の意味
■#propertyによる定義
■extern関数・グローバル変数の定義
■ini()の{}の中での動作
■「 // 」の意味
久しぶりにインディケータープログラムを呼び出してみました。
今日は、インディケーターの定義する部位について細かく説明していこうと思います。
//| MA Kirin.mq4 |
//| Copyright Kirin 2010, Forex Trading Laboratory. |
//| http://ameblo.jp/ftlabo-kirin/ |
//+------------------------------------------------------------------+
「 // 」を入れると、それ以降の場所にメモ書きができます。
プログラムの動作にはまったく関係がないのですが、
内容を分かりやすくするために記入をします。
この場合は、プログラム作者の紹介ですね。
「 // 」の後ろの内容は動作に関係ないということを、
とりあえず理解していただければ問題ないと思います。
■#propertyによる定義
#property link “http://ameblo.jp/ftlabo-kirin/”
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Red
「#property」で定義する内容は、プログラムの根本的な部分です。
特にインディケーターの場合は非常に重要な点になりますので、
良く理解してくださいね。
・#property copyright
著作権の表記です。
・#property link
作者のHPです。
・#property indicator_chart_window
ローソク足を表示している場所にインディケーターを表示するという意味です。
サブウインドウに表示させる場合は、
#property indicator_seperate_window
になります。
・#property indicator_buffers 1
インディケーターで表示させるグラフの本数を指定します。
この場合は、 「 1 」ですね。
最大で8本まで表示することができます。
常に「8」としていても問題ないのですが、
プログラムを軽くするために必要すうだけ設定するのが良いです。
・#property indicator_color1 Red
インディケーターの色を指定します。
color1をcolor2にすれば2本目のインディケーターの色の変更ができます。
Red は 他にも Blue や Green などに変更できます。
■extern関数・グローバル変数の定義
double Buf[];
// 外部パラメータ
extern int MAPeriod = 13;
・グローバル変数 double Buf[];
プログラムの前後で値を保持することのできる変数です。
詳細については、回を設けて説明させていただく予定です。
グローバル変数は、{}で囲まれていない場所に定義します。
重要難点ですので、これは今の段階で理解していただければと思います。
言い換えれば、一番外に定義するとグローバル変数になります。
・extern変数 extern int MAPeriod = 13;
extern変数は必然的にグローバル変数になります。
externで定義した変数は、インディケーター導入時の
「パラメーターの設定」に表示され、
簡単に変更ができるようになります。
extern [変数の定義] [変数名];
の順番になります。
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//—- indicators
// 指標バッファの割り当て
SetIndexBuffer(0, Buf);
// 指標ラベルの設定
string label = “MA(“+MAPeriod+”)”;
IndicatorShortName(label);
SetIndexLabel(0, label);
return(0);
//—-
return(0);
}
・ini()
この部分は、インディケーター導入時にのみ動作する部分になります。
「インディケーターの初期設定を行う」ための部分だと理解していただいて問題ありません。
・ SetIndexBuffer(0, Buf);
配列 Buf にインディケーターバッファの0を割り当てる・・・と言っても理解しにくいですよね。
グラフの1本めは、Bufを基準に作りますよっていう意味です。
これで、Bufに値を入れていけばグラフが表示されるようになります。
ここで大事なのは、Bufが配列だということです。
Close[i]のときと同じように、Buf[i]とすれば、i本目のローソク足のBufの値を抽出できます。
・string label = “MA(“+MAPeriod+”)”;
おなじみ、文字変数の定義とそれに値を入れています。
変数labelの中身が、”MA(“+MAPeriod+”)”になりました。
MAPeriodという変数は、グローバル変数で定義済みなので、
“MA(“+MAPeriod+”)”の結果は、
“MA(13)”となります。
・IndicatorShortName(label);
表示するインディケーターの線の名前を入力します。
今回は変数labelがインディケーターの名前になります。
ここで設定した名前が、mt4の「データウィンドウ」に表示されます。
・SetIndexLabel(0, label);
表示させるインディケーターの名称を定義します。
0というのが、グラフの1本目のものに対し名前を設定しますよという意味で、
変数labelを割り当てています。
2本目のグラフに対して設定をするならば、
SetIndexLabel(1, label);
となります。
(今回は、
#property indicator_buffers 1
にしているので、グラフの2本目はありません。)
以上が、インディケーターの定義部になります。
最初はとっつきにくいと思いますが、この当たりは慣れが重要です。
とりあえず「どういう働きをするか」を理解していただければと思います。
最後までお読みいただきましてありがとうございます!
ちょっと今日は宿題にできそうな内容がないので、
次回は発展内容の問題を出すことで許していただければと・・・。
ではでは~
コメント
SECRET: 0
PASS:
SetIndexBuffer(0, Buf);
IndicatorShortName(label);
SetIndexLabel(0, label);
この大文字から始まる3つって、変数ですよね?
真ん中を除いた2つが(0,***)と2つの要素を入れるっていう概念が急にでてくるもので、とっつきにくいんだと思います。
あと、これらはintとかが定義されてないのも???です。
SECRET: 0
PASS:
>junkyさん
素晴らしい理解度ですね!
これは、MQL定義済み関数になります。
ちょっと内容が複雑なので、
しっかりと回を設けて・・・
と思っていましたが、
できるだけ早いほうがよさそうですね。
()があるかないかが変数と関数の違いです。
コメントありがとうございます!^^
次の回はこれにしますね!