今回はブレイクアウトシステムの作り方です。
サンプルプログラムはこちらです。Zip圧縮していますので解凍してご利用ください。
サンプルプログラムの使い方は、以下の記事で説明しています。
ブレイクアウトシステムの作り方
ブレイクアウトというのは、過去n時間足の高値を更新すると買い、過去n時間足の安値を更新すると売りという手法です。
手仕舞いは、仕掛けの時のnの数を減らして、逆のルールで決済します。
買いなら、過去n時間足の安値を更新すると手仕舞いです。
例を出すと、過去40日間の高値を更新すると買い、過去20日間の安値を更新すると買いポジションを決済、過去40日間の安値を更新すると売り、過去20日間の高値を更新すると売りポジションを決済するという風になります。
プログラムにすると次のようになります。
/*---------------------------------------------------------------------------
変数名 TBreak
引数 count 何本文の時間足を調べるか?
概要
過去n本文の時間足の最高値、もしくは最安値が更新したら条件成立。
戻り値 1なら買いの条件 2なら売りの条件 0は条件不成立
---------------------------------------------------------------------------*/
int TBreak(int count)
{
int i;
double max,min;
//変数maxに一つ前の時間足の高値のデータ入れる
max = High[1];
//変数minに一つ前の時間足の底値のデータ入れる
min = Low[1];
//引数に入れた数だけループする
for(i=1;i<count;i++)
{
//もし変数maxに入っているレートより、i本文前の時間足の高値のほうが高かったら
if(max < High[i])
{
//変数maxにi本文前の時間足の高値のレートを入れる
max = High[i];
}
//もし変数minに入っているレートより、i本文前の時間足の底値のほうが低かったら
if(min > Low[i] )
{
//変数minにi本文前の時間足の底値のレートを入れる
min = Low[i];
}
}
//もし過去n本文の時間足の高値より、現在の終値の方が高かったら
if(max < Close[0]) return( 1 );
//もし過去n本文の時間足の底値より、現在の終値の方が低かったら
if(min > Close[0]) return( 2 );
return( 0 );
}
このコードはサンプルプログラムの中で使っているブレイクアウトを判定するオリジナル関数の中身です。
まず、変数maxに一つ前の時間足の高値、もう一つの変数minに一つ前の時間足の安値を入れます。
次に、For文でn回分ループさせます。
この時、iの値がループする度に変わりますので、ループが終了するまでi時間前の時間足の高値と変数maxのレートを比べて、i時間前の時間足のほうが高かったら、変数maxにi時間前の時間足の高値を入れます。
変数minも逆のルールで同じことをします。
ループが終わると、変数maxに過去n本文の時間足の中で(ただし、現在の足は含めない)一番高いレートが入っています。
変数minには、過去n本文の時間足の中で(ただし、現在の足は含めない)一番低いレートが入っています。
そして最後に、変数maxと現在の終値の足を比べて、現在の終値の方が高ければ買い条件が成立しますので、return(1)を戻り値として返します。
変数minと現在の終値の足を比べて、現在の終値の方が低ければ売り条件が成立しますので、return(2)を戻り値として返します。
両方成立しなければ、条件不成立ですので、return(0)を戻り値として返します。
これで、ブレイクアウトシステムの判定は完成です。
後はいつも通り判定を使って仕掛けと手仕舞いを作るだけです。
ブレイクアウトのシステムの説明はおそらく少し分かり辛かったと思います。
簡単にこのシステムを説明すると、数日間の高値を調べて現在の終値の方が高ければ買い、数日間の安値を調べて現在の終値の方が安ければ売りというシステムです。
今回はこれで終了です。