FC2ブログ

# Fractal Adaptive Moving Average
# 引数 期間 値 高値 安値 ($Period, $Price, $High, $Low)
# 戻り値 FractalAdaptiveMovingAverage (@frama)
sub FRAMA{
my ($Period, $Price, $High, $Low) = @_;
my @frama = ();
my $multiplier = 4.6;
if(($Period % 2) == 1){
$Period = $Period - 1;
}
my $count = @$High - ($Period + 1);

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

# 高値・安値の取得
my @Hi1 = &HIGHEST(($Period / 2), $High);
my @Lo1 = &LOWEST(($Period / 2), $Low);
my @Hi3 = &HIGHEST($Period, $High);
my @Lo3 = &LOWEST($Period, $Low);

# 計算
$frama[$count + 1] = $$Price[$count + 1];
my $log_2 = log(2);
for(my $i = $count; $i >= 0; $i--){
my $Hi2 = $Hi1[$i + ($Period / 2)];
my $Lo2 = $Lo1[$i + ($Period / 2)];
my $N1 = ($Hi1[$i] - $Lo1[$i]) / ($Period / 2);
my $N2 = ($Hi2 - $Lo2 ) / ($Period / 2);
my $N3 = ($Hi3[$i] - $Lo3[$i]) / $Period;

my $dimen = (log($N1 + $N2) - log($N3)) / $log_2;
my $alpha = exp(-$multiplier * ($dimen - 1));

if($alpha < 0.01){
$alpha = 0.01;
}
if($alpha > 1){
$alpha = 1;
}

# Fractal Adaptive Moving Average
$frama[$i] = ($alpha * $$Price[$i]) + ((1 - $alpha) * $frama[$i + 1]);
}

return @frama;
}


参考URL
perlでテクニカル分析 29 最高値 (Highest: HIGHEST)
perlでテクニカル分析 30 最安値 (Lowest: LOWEST)
http://www.mesasoftware.com/technicalpapers.htm
のFRactal Adaptive Moving Average
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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