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

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

 

2011年10月25日(火)

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



まずは、前回説明した週明けの開始時刻を基準にした日足データの終値、高値、安値を表示させるプログラムです。

#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);
}

// スタート関数
int start()
{
// 指標を表示させるバーの数
int limit = 100;

// 1日の開始時刻
datetime start_time = StrToTime(TimeToStr(TimeCurrent(), TIME_DATE))
+ StartHour * 3600;
if(StartHour > 0 && Hour() < StartHour) start_time -= 86400;
if(StartHour < 0 && Hour() >= StartHour+24) start_time += 86400;

// 前日の最後のバーの位置
int shift = iBarShift(NULL, PERIOD_H1, start_time) + 1;

// 1時間足の高値、安値配列
double BufHighH1[], BufLowH1[];
ArrayCopySeries(BufHighH1, MODE_HIGH, NULL, PERIOD_H1);
ArrayCopySeries(BufLowH1, MODE_LOW, NULL, PERIOD_H1);

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

for(int i=1; i<limit; i++)
{
BufClose[i] = iClose(NULL, PERIOD_H1, shift);

// 1日の最後のバーの位置
int shift0 = shift;

// 欠けたバーの数
int last_hour = TimeHour(iTime(NULL, PERIOD_H1, shift));
int missing_hours = MathMod(StartHour - last_hour + 23, 24);
shift += 24 - missing_hours;

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

return(0);
}

これをチャートに挿入すると、以下のようになります。

画像(450x257)・拡大画像(800x457)

このチャートだけでは、プログラムが正しいかどうかよくわからないと思うので、データウィンドウに各指標値を表示させて、1時間足のデータと見比べながら確認してみてください。

これで新しい日足データの4本値のうち、始値以外のデータが算出できました。

今回は、ついでに始値も求めてみましょう。

始値はどうすればよいかということですが、直前の終値に注目します。for文中に1日前以前の終値が求められているので、その1バー後の始値を1日の始値とすればOKです。

具体的には次の行をBufClose[i]を求める行の前に書くだけです。

BufOpen[i-1] = iOpen(NULL, PERIOD_H1, shift-1);

shiftの位置が1時間足チャートにおける1日の終わりのバーの位置なので、その一つ後(shift-1)が次の日(i-1)の始めのバーの位置となります。iOpen()を使って始値を求め、それをBufOpen[i-1]に代入します。

なお、BufOpen[]の配列は、BufClose[]などと同じように宣言してあるもとのします。

これで、新しい日足チャートの4本値が得られました。これを使うと、サーバー時間がズレていてもだいたい同じ日足データが得られるので、同じようなテクニカル指標を計算することができます。

次回はその応用例としてATRのプログラムを作成してみます。


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




Posted at 15時34分


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

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

値動きのヒストグラムからわかること

値動きのヒストグラムからわかること

カテゴリーリスト

最近の記事

検索


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

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

RSS1.0

[Login]


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