FC2ブログ

# 究極のオシレーター Ultimate Oscillator
# 引数 期間 期間 期間 高値 安値 終値 ($ShortPeriod, $MiddlePeriod, $LongPeriod, \@High, \@Low, \@Close)
# 戻り値 究極のオシレーター (@uo)
sub UO{
my ($ShortPeriod, $MiddlePeriod, $LongPeriod, $High, $Low, $Close) = @_;
($ShortPeriod, $MiddlePeriod) = ($MiddlePeriod, $ShortPeriod) if($ShortPeriod > $MiddlePeriod);
($MiddlePeriod, $LongPeriod) = ($LongPeriod, $MiddlePeriod) if($MiddlePeriod > $LongPeriod);
my @uo = ();
my $count = @$Close - ($LongPeriod + 1);

# 期間と配列数の確認
if(($ShortPeriod <= 0) || ($MiddlePeriod <= 0) || ($LongPeriod <= 0) || ($count < 0) || (@$Close != @$High) || (@$Close != @$Low)){
return 0;
}

# 計算
for(my $i = $count; $i >= 0; $i--){
my $short = 0;
my $middle = 0;
my $long = 0;
my $tr = 0;
my $bp = 0;

for(my $j = 0; $j < $LongPeriod; $j++){
# True Range
my $h_l = $$High[$i + $j] - $$Low[$i + $j];
my $h_c = $$High[$i + $j] - $$Close[$i + ($j + 1)];
my $c_l = $$Close[$i + ($j + 1)] - $$Low[$i + $j];
my $max = 0;
$max = $h_l > $h_c ? $h_l : $h_c;
$max = $max > $c_l ? $max : $c_l;
$tr += $max;

# True Low
my $truelow = ($$Close[$i + ($j + 1)] > $$Low[$i+ $j] ? $$Low[$i + $j] : $$Close[$i + ($j + 1)]);
# Buying Pressure
$bp += $$Close[$i + $j] - $truelow;

$short = 4 *($bp / $tr) if(($j + 1) == $ShortPeriod);
$middle = 2 * ($bp / $tr) if(($j + 1) == $MiddlePeriod);
$long = ($bp / $tr) if(($j + 1) == $LongPeriod);
}

# 究極のオシレーター Ultimate Oscillator
$uo[$i] = (($short + $middle + $long) / (4 + 2 + 1)) * 100;
}

return @uo;
}


参考URL
Ultimate Oscillator - Wikipedia, the free encyclopedia
アルティメット・オシレーター (Ultimate Oscillator) 考案者:ラリー・ウィリアムズ (Larry Williams) 1985年
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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