FC2ブログ

# Laguerre Moving Average Laguerre Filter
# 引数 ガンマ値 値 ($Gamma, $Price)
# 戻り値 hash {'fir'} {'filter'} (%lma)
sub LMA{
my ($Gamma, $Price) = @_;
my %lma = ();
my $count = @$Price - 4;

# ガンマ値と配列数の確認
if(($Gamma < 0) || (1 < $Gamma) || ($count < 0)){
return 0;
}

# 計算
my @l = ($$Price[$count + 1],$$Price[$count + 1],$$Price[$count + 1],$$Price[$count + 1]);
for(my $i = $count; $i >= 0; $i--){
# Finite Impulse Response
$lma{'fir'}->[$i] = ($$Price[$i] + (2 * $$Price[$i + 1]) + (2 * $$Price[$i + 2]) + $$Price[$i + 3]) / 6;

# Filter
my @tmp = @l;
for(my $j = 0; $j < 4; $j++){
# $l 最新 $tmp 一つ前
if($j == 0){
$l[$j] = ($Gamma * $$Price[$i]) + ((1 - $Gamma) * $tmp[$j]);
}else {
$l[$j] = -((1 - $Gamma) * $l[$j - 1]) + $tmp[$j - 1] +((1 - $Gamma) * $tmp[$j]);
}
}
# Laguerre Filter
$lma{'filter'}->[$i] = ($l[0] + (2 * $l[1]) + (2 * $l[2]) + $l[3]) / 6;
}

return %lma;
}


参考URL
「移動平均線を骨までしゃぶる」(13)
「移動平均線を骨までしゃぶる」(14)
http://www.mesasoftware.com/technicalpapers.htm
のTime Warp Without Space Travel

一言

hashの受け取り
my %re = &LMA($Gamma, \@Price);
要素数の取得
my $count = @{$re{'fir'}}; or @{$re{'filter'}};
配列のコピー
my @array = @{$re{'fir'}}; or @{$re{'filter'}};
foreachで表示
foreach(@{$re{'fir'}}){
print $_."\n";
}
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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