FC2ブログ
最初
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/CandleStick1.txt

修正1
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/CandleStick2.txt

修正2 4/16

# ローソク足 あだ名のある応用型 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] 陰の寄付坊主 [-6] カラカサ・首つり
if($LowerShadow < $RealBody){
# [-2] 陰の寄付坊主
$Flag = -2;
}else {
# [-6] カラカサ・首つり
$Flag = -6;
}
}else {
# [-3] 陰の大引坊主 [-5] トンカチ・かなづち
if($UpperShadow < $RealBody){
# [-3] 陰の大引坊主
$Flag = -3;
}else {
# [-5] トンカチ・かなづち
$Flag = -5;
}
}
}
}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;
}


参考URL
ローソク足の応用形
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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