FC2ブログ

# 価格帯別出来高
# 引数 期間 値 出来高 ($Period, \@Price, \@Volume)
# 戻り値 @volumeprice[][] ([0]価格帯 [1]出来高 [2]度数 [3]相対度数) (@volumeprice)
sub VOLUMEPRICE{
my ($Period, $Price, $Volume) = @_;
my @volumeprice = ();
my $count = @$Price - $Period;

# 配列数の確認
if(($count <= 1) || (@$Price != @$Volume)){
return 0;
}

# 計算
my @p = ();
for(my $i = 0; $i < $Period - 1; $i++){
$p[$i][0] = $$Price[$count + ($i + 1)];
$p[$i][1] = $$Volume[$count + ($i + 1)];
}
$p[$Period - 1][0] = 0;
$p[$Period - 1][1] = 0;

for(my $i = $count; $i >= 0; $i--){
# 末尾の要素を削除
pop(@p);
# 配列の先頭に[0]価格と[1]出来高を追加
unshift(@p, ([$$Price[$i], $$Volume[$i]]));
my @SortPrice = @p;
# 価格で昇順ソート
@SortPrice = sort {$a->[0] <=> $b->[0]} @SortPrice;
# 階級数 適当
my $n = ($Period / 10 <= 20 ? $Period / 10 : 20);
# 範囲 浮動小数点数の問題は後回し
my $r = sprintf("%.4f",($SortPrice[$Period - 1][0] - $SortPrice[0][0]) / $n);
my $RangeLow = $SortPrice[0][0];
my $RangeHigh = $SortPrice[0][0];
my $array_number = 0;

for(my $j = 0; $j < $Period; $j++){
my $frequency = 0;
my $volume = 0;
$RangeLow = $RangeHigh;
$RangeHigh = $RangeLow + $r;

# [0] 価格 [1] 出来高
my $k = 0;
while((($j + $k) < $Period) && ($RangeLow <= $SortPrice[$j + $k][0]) && ($SortPrice[$j + $k][0] <= $RangeHigh)){
$volume += $SortPrice[$j + $k][1];
$frequency++;
$k++;
}

# 価格帯別出来高 [0]価格帯 [1]出来高 [2]度数 [3]相対度数
$volumeprice[$i][$array_number][0] = sprintf("%.2f",$RangeLow)."-".sprintf("%.2f",$RangeHigh);
$volumeprice[$i][$array_number][1] = $volume;
$volumeprice[$i][$array_number][2] = $frequency;
$volumeprice[$i][$array_number][3] = $frequency / $Period;

$j = $j + ($k - 1);
$array_number++;
}
}

return @volumeprice;
}


参考URL
「価格帯別出来高」の見方と使い方:チャートに強くなろう

一言
なんか違う気が・・・・
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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