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

修正1 3/22

# かぎ足 値幅足 Kagi Ashi Nehaba Ashi
# 引数 値幅 値 ($PriceRange, \@Price)
# 戻り値 hash {'high'} {'middle'} {'low'} {'count'} (%kagi)
sub KAGI{
my ($PriceRange, $Price) = @_;
my %kagi = ();
my %TempKagi = ();
my $TempHigh = 0;
my $TempLow = 0;
my $PrevTempHigh = 0;
my $PrevTempLow = 0;
my $Up = 1;
my $Down = 1;
my $Check = 0;
my $Number = 0;
my $count = @$Price - 1;

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

# 計算
$TempHigh = $PrevTempHigh = int($$Price[$count] / $PriceRange) * $PriceRange;
$TempLow = $PrevTempLow = int($$Price[$count] / $PriceRange) * $PriceRange;
for(my $i = $count - 1; $i >= 0; $i--){
if($Up == 1){
if(($TempHigh - $PriceRange) >= $$Price[$i]){
# トレンドの変化 陰転
$PrevTempLow = $TempLow;
$TempLow = $$Price[$i];
# Flag
$Check = 1;
}else {
# 高値更新
$TempHigh = $$Price[$i] if($TempHigh < $$Price[$i]);
}
}else {
if($Down == 1){
if(($TempLow + $PriceRange) <= $$Price[$i]){
# トレンドの変化 陽転
$PrevTempHigh = $TempHigh;
$TempHigh = $$Price[$i];
# Flag
$Check = 1;
}else {
# 安値更新
$TempLow = $$Price[$i] if($TempLow > $$Price[$i]);
}
}
}

# 非時系列
if(($Check == 1) || ($i == 0)){
# かぎ足 値幅足 Kagi Ashi Nehaba Ashi
if($Up == 1){
$TempKagi{'high'}->[$Number] = $TempHigh;
$TempKagi{'middle'}->[$Number] = ($TempHigh + $PrevTempLow) / 2;
$TempKagi{'low'}->[$Number] = ($i != 0 ? $PrevTempLow : $TempLow);
# 下降トレンドに転換
# Flag
$Up = 0;
$Down = 1;
}else {
if($Down == 1){
$TempKagi{'high'}->[$Number] = ($i != 0 ? $PrevTempHigh : $TempHigh);
$TempKagi{'middle'}->[$Number] = ($PrevTempHigh + $TempLow) / 2;
$TempKagi{'low'}->[$Number] = $TempLow;
# 上昇トレンドに転換
# Flag
$Up = 1;
$Down = 0;
}
}

$Number++;
$Check = 0;
}
}

# 先頭を最新にする
$kagi{'count'} = $Number - 1;
for(my $i = 0; $i < $Number; $i++){
$kagi{'high'}->[$i] = $TempKagi{'high'}->[$Number - ($i + 1)];
$kagi{'middle'}->[$i] = $TempKagi{'middle'}->[$Number - ($i + 1)];
$kagi{'low'}->[$i] = $TempKagi{'low'}->[$Number - ($i + 1)];
}

return %kagi;
}

時系列

# かぎ足 値幅足 Kagi Ashi Nehaba Ashi
# 引数 値幅 値 ($PriceRange, \@Price)
# 戻り値 hash {'kagi'} {'high'} {'middle'} {'low'} {'count'} (%kagi)
sub KAGI{
my ($PriceRange, $Price) = @_;
my %kagi = ();
my $TempPrice = 0;
my $TempHigh = 0;
my $TempLow = 0;
my $PrevTempHigh = 0;
my $PrevTempLow = 0;
my $Up = 1;
my $Down = 1;
my $Check = 0;
my $X = 0;
my $count = @$Price - 1;

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

# 計算
$TempPrice = int($$Price[$count] / $PriceRange) * $PriceRange;
$TempHigh = $PrevTempHigh = $TempPrice;
$TempLow = $PrevTempLow = $TempPrice;
$X = $count;
for(my $i = $count - 1; $i >= 0; $i--){
if($Up == 1){
if(($TempHigh - $PriceRange) >= $$Price[$i]){
# トレンドの変化 陰転
$PrevTempLow = $TempLow;
$TempPrice = $TempLow = $$Price[$i];
# Flag
$Up = 0;
$Down = 1;
$Check = 1;
}else {
# 高値更新
$TempPrice = $TempHigh = $$Price[$i] if($TempHigh < $$Price[$i]);
}
}else {
if($Down == 1){
if(($TempLow + $PriceRange) <= $$Price[$i]){
# トレンドの変化 陽転
$PrevTempHigh = $TempHigh;
$TempPrice = $TempHigh = $$Price[$i];
# Flag
$Up = 1;
$Down = 0;
$Check = 1;
}else {
# 安値更新
$TempPrice = $TempLow = $$Price[$i] if($TempLow > $$Price[$i]);
}
}
}

# 時系列
# かぎ足 値幅足 Kagi Ashi Nehaba Ashi
$kagi{'kagi'}->[$i] = $TempPrice;
if(($Check == 1) || ($i == 0)){
my $h = 0;
my $m = 0;
my $l = 0;

if($Check == 1){
if($Up == 1){
# 下降トレンドからの転換
$h = $PrevTempHigh;
$m = ($PrevTempHigh + $TempLow) / 2;
$l = $TempLow;
}else {
if($Down == 1){
# 上昇トレンドからの転換
$h = $TempHigh;
$m = ($TempHigh + $PrevTempLow) / 2;
$l = $PrevTempLow;
}
}
}else {
$h = $TempHigh;
$m = ($TempHigh + $TempLow) / 2;
$l = $TempLow;
}

while($X >= $i){
$kagi{'high'}->[$X] = $h;
$kagi{'middle'}->[$X] = $m;
$kagi{'low'}->[$X] = $l;

$X--;
}

# 転換点
$X = $i - 1;
# Flag
$Check = 0;
}
}

return %kagi;
}


参考URL
かぎ足[かぎあし]
18カギ足
鉤足(かぎ足) - ねこの森から-fx memo Wiki*

修正1
非時系列での反転フラグを立てる位置を変えた
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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