FC2ブログ

# Average Directional Movement Rating
# 引数 期間 高値 安値 ($Period, $High, $Low, $Close)
# 戻り値 AverageDirectionalMovementRating (@adxr)
sub ADXR{
my ($Period, $High, $Low, $Close) = @_;
my @dmi = ();
my @adx = ();
my @adxr = ();
my $count = @$High - ($Period + 1);

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

# 計算
for(my $i = $count; $i >= 0; $i--){
my $pdi = 0;
my $mdi = 0;
my $tr = 0;

for(my $j = 0; $j < $Period; $j++){
# Directional Indicator
my $DiifHigh = $$High[$i + $j] - $$High[$i + ($j + 1)];
my $DiifLow = $$Low[$i + ($j + 1)] - $$Low[$i + $j];

if($DiifHigh != $DiifLow){
$pdi += $DiifHigh if(($DiifHigh > $DiifLow) && ($DiifHigh > 0));
$mdi += $DiifLow if(($DiifHigh < $DiifLow) && ($DiifLow > 0));
}

# 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;
}

$pdi = ($pdi / $tr) * 100;
$mdi = ($mdi / $tr) * 100;

# Directional Movement Index
$dmi[$i] = (abs($pdi - $mdi) / ($pdi + $mdi)) * 100;

# Average Directional Movement Index (ADX)
if($i <= ($count - $Period)){
my $avg = 0;
for(my $j = 0; $j < $Period; $j++){
$avg += $dmi[$i + $j];
}
$avg = $avg / $Period;

# Average Directional Movement Index
$adx[$i] = $avg;
}

# Average Directional Movement Rating (ADXR)
if($i <= ($count - ($Period * 2))){
my $avg = 0;
for(my $j = 0; $j < $Period; $j++){
$avg += $adx[$i + $j];
}
$avg = $avg / $Period;

# Average Directional Movement Rating
$adxr[$i] = $avg;
}
}

return @adxr;
}
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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