FC2ブログ

# ローソク足 2本線の組み合わせ たすき線 つつみ線 はらみ線 はらみ寄せ線 Candle Stick
# 引数 始値 高値 安値 終値 (\@Open, \@High, \@Low, \@Close)
# 戻り値 たすき線 つつみ線 はらみ線 はらみ寄せ線のフラグ (@CandleStick)
sub CANDLESTICK{
my ($Open, $High, $Low, $Close) = @_;
my @CandleStick = ();
my $RealBody = 0;
my $TrueRange = 0;
my $PrevRealBody = 0;
my $PrevTrueRange = 0;
my $Flag = 0;
my $Count = @$Close - 4;

# 配列数の確認
if(($Count < 0) || (@$Close != @$Open) || (@$Close != @$High) || (@$Close != @$Low)){
return 0;
}

# 計算
for(my $i = $Count; $i >= 0; $i--){
$Flag = 0;

if($$Open[$i + 1] < $$Close[$i + 1]){
# 陽線
$RealBody = $$Close[$i] - $$Open[$i];
$TrueRange = &iTR($i + 1, $Close, $High, $Low);
$PrevRealBody = $$Close[$i + 1] - $$Open[$i + 1];
$PrevTrueRange = &iTR($i + 2, $Close, $High, $Low);

# [1] たすき線
# 前日 陽線
# 当日 始値が前日の実体内
# 終値 < 前日の安値
$Flag = 1 if(($$Open[$i] < $$Close[$i + 1]) && ($$Open[$i] > $$Open[$i + 1]) && ($$Close[$i] < $$Low[$i + 1]));

# [2] つつみ線
# 前日 陽線
# 当日 大陰線
# 実体が前日の実体を包み込む
$Flag = 2 if(($TrueRange <= $RealBody) && ($$Open[$i] > $$Close[$i + 1]) && ($$Close[$i] < $$Open[$i + 1]));

if(($PrevTrueRange <= $PrevRealBody) && ($$Open[$i] < $$Close[$i + 1]) && ($$Close[$i] > $$Open[$i + 1])){
# [3] はらみ線
# 前日 大陽線
# 当日 前日の実体内
# 当日 陰線
$Flag = 3 if($$Open[$i] > $$Close[$i]);

# [4] はらみ寄せ線
# 前日 大陽線
# 当日 前日の実体内
# 当日 同値
$Flag = 4 if($$Open[$i] == $$Close[$i]);
}
}else {
if($$Open[$i + 1] > $$Close[$i + 1]){
# 陰線
$RealBody = $$Open[$i] - $$Close[$i];
$TrueRange = &iTR($i + 1, $Close, $High, $Low);
$PrevRealBody =$$Open[$i + 1] - $$Close[$i + 1];
$PrevTrueRange = &iTR($i + 2, $Close, $High, $Low);

# [-1] 陰陽 たすき線
# 前日 陰線
# 当日 始値が前日の実体内
# 終値 > 前日の高値
$Flag = -1 if(($$Open[$i] > $$Close[$i + 1]) && ($$Open[$i] < $$Open[$i + 1]) && ($$Close[$i] > $$High[$i + 1]));

# [-2] つつみ線
# 前日 陰線
# 当日 大陽線
# 実体が前日の実体を包み込む
$Flag = -2 if(($TrueRange <= $RealBody) && ($$Close[$i] > $$Open[$i + 1]) && ($$Open[$i] < $$Close[$i + 1]));

if(($PrevTrueRange <= $PrevRealBody) && ($$Open[$i] > $$Close[$i + 1]) && ($$Close[$i] < $$Open[$i + 1])){
# [-3] はらみ線
# 前日 大陰線
# 当日 前日の実体内
# 当日 陽線
$Flag = -3 if($$Open[$i] < $$Close[$i]);

# [-4] はらみ寄せ線
# 前日 大陰線
# 当日 前日の実体内
# 当日 同値
$Flag = -4 if($$Open[$i] == $$Close[$i]);
}
}
}

# ローソク足 2本線の組み合わせ たすき線 つつみ線 はらみ線 はらみ寄せ線 Candle Stick
$CandleStick[$i] = $Flag;
}

return @CandleStick;
}

# 真の値幅 トゥルー・レンジ True Range
# 引数 位置 終値 高値 安値 ($i, $Close, $High, $Low)
# 戻り値 真の値幅 ($tr)
sub iTR{
my ($i, $Close, $High, $Low) = @_;
my $tr = 0;

# 計算
my $h_l = $$High[$i] - $$Low[$i];
my $h_c = $$High[$i] - $$Close[$i + 1];
my $c_l = $$Close[$i + 1] - $$Low[$i];
my $max = 0;

$max = ($h_l > $h_c ? $h_l : $h_c);
$max = ($max > $c_l ? $max : $c_l);

# True Range
$tr = $max;

return $tr;
}
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

Author:雨宮
Firefoxを使用しているので気づかなかったけど、IE6でソースコードを上手くコピーできない

5/3
携帯用ならIE6でもソースコードをコピーできる
携帯用

検索フォーム


あわせて読みたいブログパーツ
一寸先は闇 RSS