かんたんプログラミング③
前々回から「かんたんプログラミング」と題して、誰でもカスタム指標が作成できることをゴールとして5回程度の内容で進めています。
前回の復習
まず、前回の復習を簡単にまとめます。
- プログラム内の文字の色
色によって使い方が決まっている。 - 記号
セミコロン(;)は行末を、カッコ(()と{})はひとくくりを示す。 - #property
#propertyはカスタム指標の大枠を決める。
「かんたんプログラミング」の学習に使うテンプレート(ソースコード)は以下からダウンロードしてください。
http://www.ascendant.jp/mt4/HLB.zip
カスタム指標表示の準備
前回はカスタム指標の大枠をどのように決めるかを見ましたが、今回はカスタム指標をどのように表示するかを決定する部分を見て行きます。ソースコードでは、25行目から59行目までとなります。
(1)カスタム指標のパラメータを指定
HiLoBandsの計算期間とシフト表示期間を決めています。コメントで示している通りですが、26行目がバンドの計算期間、27行目がシフト期間です。
26行目 extern int BandsPeriod=20; //バンドの計算期間 |
27行目 extern int Shift=0; //バンドをシフトする期間 |
ここでは、初期値としてそれぞれ20期間とシフトしない(期間0)を設定していますが、行頭のexternは変数(あとからパラメータを変更可能な数字)であることを示しています。これはカスタム指標の「パラメータの入力」タブで確認できます。
ちなみに、パラメータが整数であればintを、小数点が付く実数であればdoubleをexternの後に示し、その後に「パラメータの入力」タブで変数欄に表示される変数名と初期値を=イコール)でつなぎます。
(2)指標名とバッファを指定
30行目 string indName=“HiLoBands_mod“; //表示する指標名 |
カスタム指標の「バージョン情報」で表示されるカスタム指標名を決めます。引用符の間の青緑色の文字の部分がカスタム指標名です。
31行目 double ExtMapBuffer0[]; //ライン1のバッファ宣言 |
バッファというのはプログラムで一時的にデータを記憶させる場所のことです。
前回19行目の#propertyでカスタム指標に3本の線を表示すると決めましたので、その3本の線の計算データを入れておく場所を3つ用意してあげます。31行目を見るとExtMapBuffer0[]とありますが、1本目は0、2本目は1、3本目は2と最初の数字は0から始めます。32~33行目を見るとわかりますね。
仮に線が4本であれば19行目で4として、33行目の後にdouble ExtMapBuffer3[];という行を追加してあげればよいわけです。この後にも同じように0,1,2という番号を振った行が出てきますが、そこでも同じように「3」の行を追加してあげることになります。「//以下同じように増やしていく」というコメントがあるのでわかりますね。
36行目 int FixZeroD=0; //変更しないこと |
後半の指標表示の前段階で変数として使っているのですが、ここは変更せずにおまじないと思って無視してください。
(3)カスタム指標の各線を初期化
39行目 int init() |
カスタム指標の初期化をするよという定型文です。その初期化の範囲は40行目の{から始まって、59行目の}で終わるまでとなります。ここもおまじないです。
41行目 SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1); //ライン1の線種 |
41行目~43行目は各ラインの線種(線の太さとスタイル)を指定します。ここで最初に表示させる線種を決められますが、カスタム指標の「色の設定」タブで線の太さも線のスタイルも後から自由に変えられますので、ここはいじらずにそのままにしておきましょう。つまり、変える部分は0,1,2という部分だけで、他は変える必要はありません。
46行目 SetIndexBuffer(0,ExtMapBuffer0); //ライン1のバッファ |
46~48行目では、31~33行目で用意したバッファを改めて初期化しています。31~33行目の本数分だけ46~48行目で初期化とだけ覚えておけば大丈夫です。同様に変える部分は0,1,2という部分だけで、他は変える必要はありません。
51行目 SetIndexShift(0,Shift); //ライン1のシフト表示 |
シフト表示(先行、遅行)させる場合、この部分で表示させる線の分だけ指定してあげます。同様に変える部分は0,1,2という部分だけで、他は変える必要はありません。
41行目~、46行目~、51行目~と全てセットで0,1,2となっています。またSetIndexという文字の後に、Style、Buffer、Shiftといったような定型で示してありますが、現状では細かなことは考えず、線種、バッファ、シフトを表示する準備の部分とだけ知っていれば十分です。
56行目 IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)); |
カスタム指標の桁表示を通貨の桁と同じにするという意味です。おまじないです。58行目と59行目もおまじないです。
今回のまとめ
カスタム指標のパラメータの初期設定、各線を表示するための0から始まるバッファとそれに対応する設定内容が今回のポイントです。「おまじない」という言葉も多く出てきましたが、今後もこの言葉が出てきたらその行には触れないと覚えておきましょう。
MT4のソースコードは実はC言語と呼ばれるプログラミング言語の方言です。C言語にMT4操作に関係する機能を拡張したのが、MT4で使う言語MQL(MetaQuotes Language)です。
◆本稿は筆者の個人的見解に基づき、執筆されたものです。あくまでも個人ユーザー向けのコラムとして提供された参考記事であり、FXTFの見解、分析ではございません。