FC2ブログ

# ジグザグ ZIGZAG
# 引数 値幅 値 ($PriceRange, \@Price)
# 戻り値 ジグザグ (@zigzag)
sub ZIGZAG{
my ($PriceRange, $Price) = @_;
my @zigzag = ();
my $Highest = 0;
my $Lowest = 0;
my $X1 = 0;
my $X2 = 0;
my $Up = 1;
my $Down = 1;
my $Check = 0;
my $count = @$Price - 1;

# 値幅と配列数の確認
if(($PriceRange <= 0) || ($count < 0)){
return 0;
}

# 計算
$Highest = $$Price[$count];
$Lowest = $$Price[$count];
$X2 = $count;
$X1 = $X2 - 1;
for(my $i = $count - 1; $i >= 0; $i--){
if($Up == 1){
if(($Highest - $PriceRange) >= $$Price[$i]){
# 連続してトレンドが変化した場合
$X1 = $i if(($i == ($X2 - 1)) && ($X1 == $X2));

# Flag
$Up = 0;
$Down = 1;
$Check = 1;
}else {
# 高値更新
if($Highest <= $$Price[$i]){
$Highest = $$Price[$i];
$X1 = $i;
}
}
}else {
if($Down == 1){
if(($Lowest + $PriceRange) <= $$Price[$i]){
# 連続してトレンドが変化した場合
$X1 = $i if(($i == ($X2 - 1)) && ($X1 == $X2));
# Flag
$Up = 1;
$Down = 0;
$Check = 1;
}else {
# 安値更新
if($Lowest >= $$Price[$i]){
$Lowest = $$Price[$i];
$X1 = $i;
}
}
}
}

if($Check == 1){
my @Line = ();

if($Up == 1){
# 下降トレンドからの転換
my $Y1 = $Lowest;
my $Y2 = $Highest;

@Line = &LINE($X1, $X2, $Y1, $Y2);
# 上昇トレンドへ
$Highest = $$Price[$i];
}else {
if($Down == 1){
# 上昇トレンドからの転換
my $Y1 = $Highest;
my $Y2 = $Lowest;

@Line = &LINE($X1, $X2, $Y1, $Y2);
# 下降トレンドへ
$Lowest = $$Price[$i];
}
}

for(my $j = 0; $j < @Line; $j++){
# ジグザグ ZIGZAG
$zigzag[$X1 + $j] = $Line[$j];
}

# 最高値・最安値の位置
$X2 = $X1;
$X1 = $i;
# Flag
$Check = 0;
}
}

# 残り
my @Line = ();
if($Up == 1){
# 上昇中
@Line = &LINE(0, $X2, $$Price[0], $Lowest);
}else {
if($Down == 1){
# 下降中
@Line = &LINE(0, $X2, $$Price[0], $Highest);
}
}
for(my $i = 0; $i < @Line; $i++){
# ジグザグ ZIGZAG
$zigzag[$i] = $Line[$i];
}

return @zigzag;
}



# 直線
# 引数 値幅 値 ($X1, $X2, $Y1, $Y2)
# 戻り値 直線 (@line)
sub LINE {
my ($X1, $X2, $Y1, $Y2) = @_;
my @line = ();
my $m = ($Y2 - $Y1) / ($X2 - $X1);
my $diff = $X2 - $X1;

for(my $x = 0; $x < $diff; $x++){
$line[$x] = ($m * $x) + $Y1;
}

return @line;
}


最初 High Low ZigZag
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/HighLowZIGZAG.txt

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

追記 4/20
High Low ZigZag + 押し目・戻り
http://blog-imgs-36.fc2.com/a/m/a/amamiyaprog/HighLowZIGZAG3.txt

追記
後でジグザグの高値・安値同士を結んだ直線も書こ

修正1
ソースコードの無駄と思われる個所を修正と置き換え

追記 4/20
三尊と逆三尊を判定させるために使用 (未完成)
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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