#!/usr/bin/perl my @p; my @price; my $old = 0; my $num = 0; my $plsum = 0; my $ki = 0; while (<>) { my @row = split(/[\t\ \,]+/); next unless $row[0] eq "RTSI"; $ki++; # next unless 5*int($ki/5) eq $ki; my $price = $row[2]; if ( not $old eq 0 ) { $num++; my $lotn = log($price/$old); $p[$num] = $lotn; $plsum+=$lotn; $price[$num] = $price; # print "$old $price $lotn\n"; } $old = $price; } my $trend = $plsum/$num; for my $j ( 1 .. $num ) { $p[$j] = $p[$j] - $trend; } for my $m ( 3 .. 10 ) { my @vil; for my $i ( 1 .. int($num/$m) + 1 ) { my @x; for my $mi ( 1 .. $m) { push @x, $p[$m*$i+$mi-1]; } $vil[$i]=vilkoksen($m,@x); } my $ssum = 0; for my $i ( 1 .. int($num/$m) + 1 ) { $ssum+=$vil[$i]; } my $sa = $ssum/(int($num/$m) + 1); my $dsum = 0; for my $i ( 1 .. int($num/$m) + 1 ) { $dsum+=($vil[$i]-$sa)*($vil[$i]-$sa); } my $disp = $dsum/(int($num/$m) + 1); my $so = sqrt($disp); my $so_avr = sqrt($dsum)/(int($num/$m) + 1); my $sa_t = $m*($m+1)/4; my $disp_t = $m*($m+1)*(2*$m+1)/24; my $so_t = sqrt($disp_t); my $so_avr_t = $so_t/sqrt(int($num/$m) + 1); my $otkl = ($sa_t-$sa)/$so_avr_t; print "\tm $m sa $sa sa_t $sa_t disp $disp disp_t $disp_t so $so so_avr $so_avr so_avr_t $so_avr_t \nm $m $otkl otkl[(sa_t-sa)/so_avr_t]\n"; } sub vilkoksen { my $m = shift; my @x; for my $n ( 1 .. $m ) { $x[$n] = shift; } my $sum = 0; for my $i ( 1 .. $m ) { for my $j ( $i .. $m ) { $sum+=ufun($x[$i]+$x[$j]); } } return $sum; } sub ufun { my $x = shift; return 0 if ($x<0); return 0.5 if ($x eq 0); return 1 if ($x>0); }