# ローソク足 あだ名のある応用型 Candle Stick # 引数 始値 高値 安値 終値 (\@Open, \@High, \@Low, \@Close) # 戻り値 あだ名のある応用型のフラグ (@CandleStick) sub CANDLESTICK{ my ($Open, $High, $Low, $Close) = @_; my @CandleStick = (); my $RealBody = 0; my $UpperShadow = 0; my $LowerShadow = 0; my $TrueRange = 0; my $Flag = 0; my $Count = @$Close - 3; # 配列数の確認 if(($Count < 0) || (@$Close != @$Open) || (@$Close != @$High) || (@$Close != @$Low)){ return 0; } # 計算 for(my $i = $Count; $i >= 0; $i--){ # [1] 陽の丸坊主 [2] 陽の寄付坊主 [3] 陽の大引坊主 [4] 陽の極線・コマ [5] カラカサ・首つり [6] トンカチ・かなづち [7] その他 # [-1] 陰の丸坊主 [-2] 陰の寄付坊主 [-3] 陰の大引坊主 [-4] 陰の極線・コマ [-5] カラカサ・首つり [-6] トンカチ・かなづち [-7] その他 # [10] トンボ [11] トウバ・塔婆 [12] 足長同時 [13] 4値同事足 $TrueRange = &iTR($i + 1, $Close, $High, $Low); $Flag = 0; if($$Open[$i] != $$Close[$i]){ if($$Open[$i] < $$Close[$i]){ # 陽線 # [1] 陽の丸坊主 [2] 陽の寄付坊主 # [3] 陽の大引坊主 [4] 陽の極線・コマ # [5] カラカサ・首つり [6] トンカチ・かなづち $RealBody = $$Close[$i] - $$Open[$i]; $UpperShadow = $$High[$i] - $$Close[$i]; $LowerShadow = $$Open[$i] - $$Low[$i]; if(($$Low[$i] == $$Open[$i]) || ($$Close[$i] == $$High[$i])){ if(($$Low[$i] == $$Open[$i]) && ($$Close[$i] == $$High[$i])){ # [1] 陽の丸坊主 $Flag = 1; }else { if($$Low[$i] == $$Open[$i]){ # [2] 陽の寄付坊主 [5] カラカサ・首つり if($UpperShadow < $RealBody){ # [2] 陽の寄付坊主 $Flag = 2; }else { # [5] 陽の寄付坊主 $Flag = 5; } }else { # [3] 陽の大引坊主 [6] トンカチ・かなづち if($LowerShadow < $RealBody){ # [3] 陽の大引坊主 $Flag = 3; }else { # [6] トンカチ・かなづち $Flag = 6; } } } }else { # 適当 # [4] 陽の極線・コマ [5] カラカサ・首つり [6] トンカチ・かなづち [7] その他 if(($$High[$i] - $$Low[$i]) < $TrueRange){ # [4] 陽の極線・コマ $Flag = 4; }else { if(($UpperShadow < $LowerShadow) && ($RealBody < $LowerShadow)){ # [5] カラカサ・首つり $Flag = 5; }else { if(($UpperShadow < $LowerShadow) && ($RealBody < $LowerShadow)){ # [6] トンカチ・かなづち $Flag =6; }else { # [7] その他 $Flag =7; } } } } }else { # 陰線 # [-1] 陰の丸坊主 [-2] 陰の寄付坊主 # [-3] 陰の大引坊主 [-4] 陰の極線・コマ # [-5] カラカサ・首つり [-6] トンカチ・かなづち $RealBody = $$Open[$i] - $$Close[$i]; $UpperShadow = $$High[$i] - $$Open[$i]; $LowerShadow = $$Close[$i] - $$Low[$i]; if(($$Low[$i] == $$Close[$i]) || ($$Open[$i] == $$High[$i])){ if(($$Low[$i] == $$Close[$i]) && ($$Open[$i] == $$High[$i])){ # [-1] 陰の丸坊主 $Flag = -1; }else { if($$High[$i] == $$Open[$i]){ # [-2] 陰の寄付坊主 [-5] カラカサ・首つり if($LowerShadow < $RealBody){ # [-2] 陰の寄付坊主 $Flag = -2; }else { # [-5] 陽の寄付坊主 $Flag = -5; } }else { # [-3] 陰の大引坊主 [-6] トンカチ・かなづち if($UpperShadow < $RealBody){ # [-3] 陰の大引坊主 $Flag = -3; }else { # [-6] トンカチ・かなづち $Flag = -6; } } } }else { # 適当 # [-4] 陰の極線・コマ・コマ [-5] カラカサ・首つり [-6] トンカチ・かなづち [-7] その他 if(($$High[$i] - $$Low[$i]) < $TrueRange){ # [-4] 陰の極線・コマ $Flag = -4; }else { if(($UpperShadow < $LowerShadow) && ($RealBody < $LowerShadow)){ # [-5] カラカサ・首つり $Flag = -5; }else { if(($UpperShadow < $LowerShadow) && ($RealBody < $LowerShadow)){ # [-6] トンカチ・かなづち $Flag =-6; }else { # [-7] その他 $Flag =-7; } } } } } }else { # 寄引同値 # [10] トンボ [11] トウバ・塔婆 # [12] 足長同時 [13] 4値同事足 if($$Low[$i] == $$High[$i]){ # [13] 4値同事足 $Flag = 13; }else { if(($$Low[$i] != $$Close[$i]) && ($$Close[$i] != $$High[$i])){ if(($UpperShadow + $LowerShadow) > $TrueRange){ # [12] 足長同時 $Flag = 12; }else { # [10] トンボ $Flag = 10; } }else { if($$Low[$i] == $$Close[$i]){ # [11] トウバ・塔婆 $Flag = 11; }else { # [10] トンボ $Flag = 10; } } } } # ローソク足 あだ名のある応用型 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; }