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

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

 

2010年04月06日(火)

MT4によるトレードシステム開発(2) [MetaTrader4]



前回の週明けのレンジを表示させる指標ですが、メタトレーダー4のカスタム指標プログラムはこのように書けます。

#property indicator_chart_window
#property indicator_buffers 2
#property indicator_color1 Blue
#property indicator_color2 Red

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

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

// スタート関数
int start()
{
int limit = Bars-IndicatorCounted();

for(int i=limit-1; i>=0; i--)
{
if(TimeDayOfWeek(Time[i]) == 1 && TimeHour(Time[i]) == 19)
{
BufHigh[i] = High[iHighest(NULL, 0, MODE_HIGH, 14, i+1)];
BufLow[i] = Low[iLowest(NULL, 0, MODE_LOW, 14, i+1)];
}
else
{
BufHigh[i] = BufHigh[i+1];
BufLow[i] = BufLow[i+1];
}
}
return(0);
}
この指標は、1時間足のチャートに挿入することを前提にしています。

ここでは、プログラムの基本的な部分の説明は省略しますが、ポイントは、月曜日の19時の時刻のバーと、その他の時刻のバーを区別するということです。

TimeDayOfWeek(Time[i]) == 1」が月曜日を表し、「TimeHour(Time[i]) == 19」 が19時を表しています。

この条件を満たすバーに対して
BufHigh[i] = High[iHighest(NULL, 0, MODE_HIGH, 14, i+1)];
BufLow[i] = Low[iLowest(NULL, 0, MODE_LOW, 14, i+1)];
として過去14時間の高値、安値を算出します。

オープンレンジとして必要な値はこれだけなのですが、このままでは何も表示されないので、その他の時刻のバーで、
BufHigh[i] = BufHigh[i+1];
BufLow[i] = BufLow[i+1];
として、1本前のバーの指標値をそのまま代入するようにします。

すると、月曜日の19時のバーでレンジが更新され、そのラインが、次の週の月曜日の19時まで続くような形になります。

これでトレードの基本となる週明けのオープンレンジがわかったのですが、このシステムでは、このレンジからさらに離れたラインをブレイクすることでエントリーするようになっています。またエントリー後に利食いのポイントも必要です。

これらのレベルも指標として表示させておくと便利です。

買いエントリー、売りエントリーと各利食いターゲットの計4本のラインを追加した指標プログラムは次のように書けます。

このプログラムを、「WeeklyOpenRange.mq4」という名前で作成しておきます。

#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 Blue
#property indicator_color2 Red

// 指標バッファ
double BufHigh[];
double BufLow[];
double BufHighEnt[];
double BufLowEnt[];
double BufHighTgt[];
double BufLowTgt[];

extern double MultBreakout = 1.0;
extern double MultTarget = 0.8;

// 初期化関数
int init()
{
// 指標バッファの割り当て
SetIndexBuffer(0, BufHigh);
SetIndexBuffer(1, BufLow);
SetIndexBuffer(2, BufHighEnt);
SetIndexBuffer(3, BufLowEnt);
SetIndexBuffer(4, BufHighTgt);
SetIndexBuffer(5, BufLowTgt);

return(0);
}

// スタート関数
int start()
{
int limit = Bars-IndicatorCounted();

for(int i=limit-1; i>=0; i--)
{
if(TimeDayOfWeek(Time[i]) == 1 && TimeHour(Time[i]) == 19)
{
BufHigh[i] = High[iHighest(NULL, 0, MODE_HIGH, 14, i+1)];
BufLow[i] = Low[iLowest(NULL, 0, MODE_LOW, 14, i+1)];
}
else
{
BufHigh[i] = BufHigh[i+1];
BufLow[i] = BufLow[i+1];
}
double range = BufHigh[i] - BufLow[i];
BufHighEnt[i] = BufHigh[i] + MultBreakout*range;
BufLowEnt[i] = BufLow[i] - MultBreakout*range;
BufHighTgt[i] = BufHighEnt[i] + MultTarget*range;
BufLowTgt[i] = BufLowEnt[i] - MultTarget*range;
}

return(0);
}
ここで、MultBreakoutMultTarget という変数を extern を付けた外部変数として宣言しています。

MultBreakout は、ボックスサイズの何倍離れたところをエントリーポイントとするかを決める倍率、MultTarget は、エントリーからターゲットまでの幅をボックスサイズの何倍とするかの倍率を表します。

これらの変数は、指標プログラムをチャートに挿入する時に変更できるだけでなく、他のプログラムから呼び出す場合にも変更することができます。

EAのプログラムの作成やパラメーターの最適化を行うときに利用します。

次回からこの指標プログラムを使ったEAの作り方について説明していきます。


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




Posted at 19時09分


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

Sponsor AD

2010/4

        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  

プロフィール

豊嶋久道

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

PHOTO

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

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

カテゴリーリスト

最近の記事

検索


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

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

RSS1.0

[Login]


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