FC2ブログ

# Signal to Noise Ratio
# 引数 期間 値 高値 安値 ($Price, $High, $Low)
# 戻り値 SignaltoNoiseRatio (%snr)
sub SNR{
my ($Price, $High, $Low) = @_;
my @snr = ();
my $count = @$Price - 8;

my @Value1 = (0, 0, 0, 0, 0, 0, 0, 0);
my @Value2 = (0, 0);
my @Range = (0, 0);
my @InPhase = (0, 0, 0, 0);
my @Quadrature = (0, 0, 0);
my $Imult = 0.635;
my $Qmult = 0.338;
my @Amplitude = (0, 0);
my $Log_10 = log(10);

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

# 計算
for(my $i = $count; $i >= 0; $i--){
# 配列の要素を1つ後ろに動かす
for(my $j = 7; $j >= 1; $j--){
$Value1[$j] = $Value1[$j - 1];
}
for(my $j = 3; $j >= 1; $j--){
$InPhase[$j] = $InPhase[$j - 1];
}
for(my $j = 2; $j >= 1; $j--){
$Quadrature[$j] = $Quadrature[$j - 1];
}
$Value2[1] = $Value2[0];
$Range[1] = $Range[0];
$Amplitude[1] = $Amplitude[0];

$Value1[0] = $$Price[$i] - $$Price[$i + 7];
$Range[0] = (0.2 * ($$High[$i] - $$Low[$i])) + (0.8 * $Range[1]);
$InPhase[0] = (1.25 * ($Value1[4] - ($Imult * $Value1[2]))) + ($Imult * $InPhase[3]);
$Quadrature[0] = $Value1[2] - ($Qmult * $Value1[0]) + ($Qmult * $Quadrature[2]);

$Value2[0] = (0.2 * (($InPhase[0] * $InPhase[0]) + ($Quadrature[0] * $Quadrature[0]))) + (0.8 * $Value2[1]);
$Value2[0] = 0.001 if($Value2[0] < 0.001);

if($Range[0] > 0){
$Amplitude[0] = (0.25 * (10 * (log($Value2[0] / ($Range[0] * $Range[0])) / $Log_10) + 1.9)) + (0.75 * $Amplitude[1]);
}

# Signal to Noise Ratio
$snr[$i] = $Amplitude[0];

}

return @snr;
}


参考URL
SNR (Signal-to-Noise Ratio) 考案者:ジョン・F・エーラース (John F. Ehlers)
オンライン コンパイラ/インタプリタ
テクニカル分析
プロフィール

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

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

検索フォーム


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