FC2ブログ

a# Median-Average Adaptive Filter
# 引数 $Threshold 値 ($Threshold, $Price)
# 戻り値 Median-AverageAdaptiveFilter (@maaf)
sub MAAF{
my ($Threshold, $Price) = @_;
my @maaf = ();
my $count = @$Price - 41;

# $Thresholdと配列数の確認
if((0.2 < $Threshold) || (($count - 1) < 0)){
return 0;
}

# 計算
my $value2_ = ($$Price[$count] + (2 * $$Price[$count + 1]) + (2 * $$Price[$count + 2]) + $$Price[$count + 3]) / 6;
$maaf[$count] = ($$Price[$count] + (2 * $$Price[$count + 1]) + (2 * $$Price[$count + 2]) + $$Price[$count + 3]) / 6;
for(my $i = $count - 1; $i >=0; $i--){
my @smooth = ();
my $length = 39;
my @value1 = ();
my $value2 = 0;
my $value3 = 0.2;
my $alpha = 0;

# 中央値で使用する値
for(my $j = 0; $j < $length; $j++){
$smooth[$j] = ($$Price[$i + $j] + (2 * $$Price[$i + $j + 1]) + (2 * $$Price[$i + $j + 2]) + $$Price[$i + $j + 3]) / 6;
}

# $alphaで使用する$lengthを作成
while($value3 > $Threshold){
my $k = 2;
$alpha = (2 / ($length + 1));
@value1 = &MEDIAN($length, \@smooth);
$value2 = ($alpha * $smooth[0]) + ((1 - $alpha) * $value2_);

if($value1[0] != 0){
$value3 = abs($value1[0] - $value2) / $value1[0];
}
$length = $length - $k;

# 末尾から2つ要素を取り除く
while($k > 0){
pop(@smooth);
$k--;
}
if($length <= 1){
last;
}
}
# 一つ前の値
$value2_ = $value2;

if($length < 3){
$length = 3;
}
$alpha = (2 / ($length + 1));
# Median-Average Adaptive Filter
$maaf[$i] = ($alpha * $smooth[0]) + ((1 - $alpha) * $maaf[$i + 1]);
}

return @maaf;
}


参考URL
perlでテクニカル分析 25 中央値 (Median: MEDIAN)
What's the Difference?

一言
Easylanguageを読むことが出来ないので計算式どうりに書けているか不明
それにしても読みづらい
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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