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

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

 

2011年10月11日(火)

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



前回の続きです。

週末のバーと週明けのバーの間に欠けたバーがある場合の処理についてです。

具体例を考えてみましょう。

StartHour=6の場合、週末のバーの時間が5であれば問題ありません。問題となるのは、4以下の場合です。

週末のバーの時間が4であれば、1本バーが欠けているということで、missing_hours=1週末のバーの時間が3であれば、2本欠けているのでmissing_hours=2となればいいわけです。

週末のバーの時間はTimeHour(iTime(NULL, PERIOD_H1, shift))で取得できるので、これをlast_hourとすると、missing_hours = StartHour-last_hour-1となります。

以上を条件文として記述すると、

int missing_hours = 0;
int last_hour = TimeHour(iTime(NULL, PERIOD_H1, shift));
if(last_hour < StartHour-1) missing_hours = StartHour-last_hour-1;

と書けます。

但し、この記述は、StartHour>0の場合はうまくいきますが、StartHour<0の場合、ちょっと問題があります。

例えば、StartHour=-3、last_hour=19の場合、条件式が19<-4となり、成立しないため、欠けたバーの数はカウントされません。

この場合、別の条件式を書いてもいいのですが、よーく考えると、逆に簡単に書けたりもします。

int last_hour = TimeHour(iTime(NULL, PERIOD_H1, shift));
int missing_hours = MathMod(StartHour - last_hour + 23, 24);

上の式でMathMod(x,y)という関数は、xをyで割った余りを返します。

例えば、StartHour=6, last_hour=4の場合、MathMod(6-4+23, 24)=1となりますし、StartHour=-3, last_hour=19の場合も、MathMod(-3-19+23, 24)=1となります。

ここまでの全体のプログラムは以下のように書けます。

#property indicator_separate_window
#property
indicator_buffers 1
#property indicator_color1 Green

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

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

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

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

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;

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

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

return(0);
}

以上のプログラムが、サーバー時間のズレに対応させるための骨格にあたる部分です。プログラムも骨格をしっかり作っておけば、その肉付けは比較的簡単にできるようになります。

次回は今回のプログラムで定めた1日の範囲の中での最高値と最安値を求めるプログラムを追加していきます。


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




Posted at 15時23分


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

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

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

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

カテゴリーリスト

最近の記事

検索


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

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

RSS1.0

[Login]


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