基礎から学ぶシステムトレード
シストレブログ人気ランキング  

シストレ徹底攻略シストレマスターへの道ワールド・トレーディング・エッジ基礎から学ぶシステムトレードシストレニュースシストレツールシストレナビTOPへ

 

2011年10月18日(火)

[MQL4]サーバー時間のズレに対応したテクニカル指標(6) [MQL4]



今回は、週明けの開始時刻を基準にした1日の範囲の中での最高値と最安値を求めるプログラムを追加していきます。

まずは、1日の高値と安値を指標値として表示させるために、BufHigh[]とBufLow[]という指標バッファを追加します。以下に初期化関数init()までの部分を示します。

#property indicator_separate_window
#property
indicator_buffers 3
#property indicator_color1 Green
#property indicator_color2 Blue
#property indicator_color3 Red

// 指標バッファ
double BufClose[];
double BufHigh[];
double BufLow[];

// 月曜0時に対する開始時間のズレ
extern int StartHour = 0;

// 初期化関数
int init()
{
// 指標バッファの割り当て
SetIndexBuffer(0, BufClose);
SetIndexBuffer(1, BufHigh);
SetIndexBuffer(2, BufLow);

// 指標ラベルの設定
SetIndexLabel(0, "Close");
SetIndexLabel(1, "High");
SetIndexLabel(2, "Low");

return(0);
}

注意する点は、表示させる指標値が3個なので、

#property indicator_buffers 3

とすることです。あとは、BufHigh、BufLow用SetIndexBuffer()SetIndexLabel()がそれぞれ追加されています。

これで、BufHigh[]、BufLow[]に値を代入すればチャートに表示されるようになりました。

では、次に最高値、最安値を求める方法ですが、ここでは配列の要素の中の最大値と最小値を求めるMQL4の関数を使ってみます。

その前に1時間足の高値、安値のデータを配列に代入しておきます。これはArrayCopySeries()という関数を使います。引数には、配列名、4本値の種類、通貨ペア名、タイムフレームを取ります。

BufHighH1[]、BufLowH1[]という配列に1時間足の高値、安値をそれぞれコピーするプログラムは下のようになります。

double BufHighH1[], BufLowH1[];
ArrayCopySeries(BufHighH1, MODE_HIGH, NULL, PERIOD_H1);
ArrayCopySeries(BufLowH1, MODE_LOW, NULL, PERIOD_H1);

ここで、BufHighH1[]、BufLowH1[]は、最新のバーがBufHighH1[0]、1本前のバーがBufHighH1[1]に対応する時系列配列です。High[]やLow[]と同じように扱うことができます。

配列の最大値、最小値を求める関数としてArrayMaximum()ArrayMimimum()を使います。

これらの関数は、配列名、データの個数、データの最初のインデックスという3つ引数を取り、その中のデータの最大値、あるいは最小値のインデックスを返します。

まずは、最新のバーにおける高値、安値ですが、shiftが前日の終値の位置なので、0から始まってshift-1までのshift個のデータの中から最大値、最小値を求めます。

BufHigh[0] = BufHighH1[ArrayMaximum(BufHighH1, shift, 0)];
BufLow[0] = BufLowH1[ArrayMinimum(BufLowH1, shift, 0)];

次に過去のバーにおける高値、安値を求めます。これはfor文中の記述になるので、shiftの値に注意する必要があります。

shiftの値はfor文に入った時点では、その日の終値の位置になっています。そしてfor文の最後では、shift += 24 - missing_hours; としてその前の日の終値の位置になります。

高値、安値を求める際には、この最初のshift最後のshiftの両方の値が必要となります。そこで、最初のshiftを別の変数、ここでは int shift0 = shift; として記憶させておきます。

そして、for文の最後で、shift0からshift-shift0-1までのshift-shift0個のデータの中から最大値と最小値を求めます。

BufHigh[i] = BufHighH1[ArrayMaximum(BufHighH1, shift-shift0, shift0)];
BufLow[i] = BufLowH1[ArrayMinimum(BufLowH1, shift-shift0, shift0)];

全体のプログラムは次回紹介します。今回出てきた関数をどこに追加すればよいか考えてみてください。


>>“基礎から学ぶシステムトレード”全記事バックナンバーはこちらから




Posted at 17時06分


ページのトップへ ページのトップへ

Sponsor AD

2011/10

            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          

プロフィール

豊嶋久道

2003年よりFX取引を始め、システムトレードの道へ。最近ではFXオプション取引も含めたトレーディングシステムの研究を行っている。システムトレードを基礎から正しく理解するための情報を発信する予定。

PHOTO

ランダムウォークとランダムトレード(5)

ランダムウォークとランダムトレード(5)

カテゴリーリスト

最近の記事

検索


当サイトコメントについて

当コメントは情報提供のみを目的として作成されたものであり、投資に関してはご自身でご判断くださいますようお願い致します。また、当資料は著作物であり著作権法により保護されております。無断で全文または一部を転載することはできません。

RSS1.0

[Login]


powered by a-blog
Copyright (C) 2008 PhiConcept,Inc. All rights reserved.