2015年12月28日月曜日

[MQL超入門] その006 とりあえずやってみよう!簡単インジケータ作成2

http://mt4program.blogspot.jp/2015/12/mql-005.html

前回からの続きです。
価格チャートだけ表示するインジケータの枠だけ作成されました。

ここから、プログラムを書くことで、いろんなチャートを描くことができます。

早速やってみましょう。

前回の記事で作成したHeikinインジケータの下の部分に注目です。
OnCalculateと書いてある部分があります。そこに赤字の部分を入力して実行してみてください。

//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   for( int i = rates_total - 1; i >= 0; i = i - 1 )
   {
      Label1Buffer[i] = (high[i] + low[i]) / 2;
   }
   
//--- return value of prev_calculated for next call
   return(rates_total - 1);
  }
//+------------------------------------------------------------------+

前回と違い、今回は赤い線がチャートに表示されていると思います。

・図006.01 高値安値の中間を描画する。

初めての(?)インジケータ作成成功です。
高値安値の中間値を線でつなぐインジケータが完成しました。

修正箇所は4行ほどですが、インジケータ作成に大切な要素が含まれています。
一つずつ説明したいと思います。

■繰り返し制御文 for
   for( int i = rates_total - 1; i >= 0; i = i - 1 )
   {
      Label1Buffer[i] = (high[i] + low[i]) / 2;
   }

ある一定回数、同じ処理を行うときに使用します。

for( 初期化条件; 繰り返し条件; 再初期化式)
{
   繰り返し行う処理
}

といった形になっています。
・初期化条件 [ int i = rates_total -1 ]
 変数宣言と、初期化を行います。
 今回は、[i]という名前の変数を宣言したのち、[rates_total-1]の値に初期化しました。

・繰り返し条件 [ i >= 0 ]
 変数[i]の中身が0より大きい間、繰り返しを行います。

・再初期化式  [ i = i - 1 ]
 再初期化式は、一回の処理が終わるたびに呼び出される処理です。
 今回は、一回の処理が呼び出し終わるたびに、iの値を一つ減らします。

for文の下に{ } で囲われた部分があります。これをブロックと呼びます。for文の下の {}で囲われた部分を条件に従って繰り返し実行します。
図で書くと、このような流れになります。

 ・図006.02 繰り返し制御文 for の処理の流れ

ほとんどのインジケータでは、for文を使用します。


■配列操作
      Label1Buffer[i] = (high[i] + low[i]) / 2;

[ ] で閉じた中にiと指定されて、計算式が書かれています。
この[]で数字を指定して、中身を見たり書いたりできる変数のことを配列と呼びます。

この配列もインジケータ作成時にはとても重要です。

配列は、変数の箱が、たくさん横に並んだ物と考えてください。

上記の式では、
Label1Bufferのi番目の箱に、highとlowのi番目の箱の内容を足して2で割った物を入れています。

 ・図006.03 配列操作

インジケータでは、この配列操作と、繰り返し制御文を使いながら様々なチャートを描画します。

次回は、変数についてもう少し掘り下げたいと思います。

今まで説明を省略していましたが、int i; って書いてある、[int]ってなに?というあたりを予定しています。

また、今年のブログ更新は、これが最後です。皆様、よいお年を^^

次の回へ


ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ

2015年12月25日金曜日

[MQL超入門] その005 とりあえずやってみよう!簡単インジケータ作成1

プログラムを覚える基本は、とりあえずやってみることです。
作ってみて失敗して、また作るといった繰り返しができることがソフトウェアの良いところです。

※余談
リアル口座を運用しているMT4を使用する場合、ソフトウェアの作成に失敗すると、取引に影響が出ます。
そこで、プログラム開発用にMT4のデモ口座を作ることをお勧めします。

[雑記]MT4のデモ口座はどこがいい?
http://mt4program.blogspot.jp/2015/12/mt4.html
などから、プログラム開発用のデモ口座を開き、プログラムはデモ口座が動いているMT4上で作ることをお勧めします。

説明の記事が2回続きましたので、足りていないところは後回しにして、とりあえず、インジケータを作成してみましょう。

メタエディター上で下記の通りに操作してみてください。


ナビゲータ上で、[Indicators]を一度クリックして青反転表示になった所で、マウスの右クリックから[新規ファイル(N)]を選択します。

・図005.01 インジケータ 新規作成



MQL4ウィザードにて[カスタムインディケータ」を選択した状態で、[次へ(N)]をクリックします。
 ・図005.02 MQLウィザード インジケータ 選択

名前の箇所に[Indicators\heikin]と入力して[次へ(N)]を押します。
※heikinの箇所は半角英数字であれば好きな名前で問題ありません。またブラウザの環境によってIndicatorsとheikin間の記号が¥マークではなく、バックスラッシュ(/の反対)に表示されてしまっているかもしれません。Indicatorとheikinの間は¥マークです。
 ・図005.03 MQLウィザード 名前の決定

[次へ(N)]をクリックします。
 ・図005.04 MQLウィザード カスタムイベントハンドラの選択


インジケータに描画する変数を追加します。[追加]をクリックします。
 ・図005.05 MQLウィザード プロットの追加

最後に[完了]をクリックして終了です。
 ・図005.06 MQLウィザード プロットの追加 後


とりあえず、やってみようですので、細かい説明は次の機会ということにして、これでインジケータが出来上がりました。

[MQL超入門] その002 最初の一歩。Hello world!
を参考に、実行してみてください。

MT4でインジケータを表示するときに出てくる、いつもの初期画面をOKすると、価格情報以外何もないチャートが表示されているかと思います。

プログラムを止めてみましょう。メタエディタ上で赤い停止ボタンをクリックしてください。
・図005.07 停止
MT4でチャートが消えたかと思います。

インジケータの作成~実行~停止まで、一通り行うことができました。何も表示されないインジケータでは楽しくないため、早速プログラムを作ってみましょう。

少し長くなりましたので、次回に続きます。

次の回へ


ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ

2015年12月24日木曜日

[MQL超入門] その004 コメントと、定数 変数 計算式 代入式

実際のプログラムに入る前に、最低限必要な知識として

コメントと、定数 変数 計算式 代入式

を説明したいと思います。

■コメント

これは、プログラム上何もしない文字列です。

・・・・?なぜ、こんなものがあるのかというと、作っているときは覚えているのですが、あとから見たときにわからなくならないよう、自由な文字列を入力できるようになっています。

コメントがきれいに書かれているプログラムは、後から見直したときに、なぜ、こんな処理をしたのかを思い出しやすくなります。

MQL上、コメントは、次の二つの書き方があります。

// 1行コメント

/*
ブロックコメント
*/

スラッシュを二つ続けて記入すると、その後ろの文字列は、改行が入るまで、コメントとして扱われます。

また、/* */で囲った範囲も同じようにコメントとして扱われます。

コメントは、プログラム上何もしない文字列ですので、言語に関係なく自由に記載することができます。

■定数 変数 計算式 代入式
定数から、代入式までは、一度に説明したいと思います。

定数とは、1や10など値そのものを指します。
変数は、中の値を変更できる箱と思ってください。
計算式は、+-など四則演算を含む様々な計算をしている式です。
代入式は、変数の中身を変える式です。

さて、一度に説明しましたが、中学数学の方程式を思い出すと、イメージが付きやすいかと思います。具体的なコード例とイメージ図です。

// 変数の宣言
int x;
int y;

// 変数へ、定数の1を代入する。
x=1;

// 1が設定されているxに2を足すため、yは3になる。
y=x + 2;

// yには3が入っていて、3を足すので、yは6になる。
y=y + 3;

図004.01 定数 変数 計算式 代入式

次の回へ


ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログへ