単純移動平均 (SMA: Simple Moving Average)を用いた金融データ(為替レート)の分析を体験しよう.

単純移動平均は,時系列データの傾向を調べる際しばしば用いられる指標であり, 形式的には,$T$日分の観測値からなる時系列データ$x_1, x_2, …, x_T$に対して,日付$t$における,$N$日の単純移動平均は次式で定義される. 簡単に言えば,時系列データの各時点$t$における「(当日も含めた)直近$N$日の平均」のことである.

ここでは,5日単純移動平均と20日単純移動平均を求めるプログラムを作成しよう.

※ 投資では,短期移動平均線(例えば${\rm SMA}^{(5)}$)が長期移動平均線(例えば${\rm SMA}^{(20)}$)を下から上に突き抜けた時をゴールデンクロスと呼び,買い(上昇トレンド)のシグナルとして用いられる.逆に,短期移動平均線が長期移動平均線を上から下に突き抜けた時をデッドクロスと呼び,売り(下降トレンド)のシグナルとして用いられる.


問題


標準入力から$100$個の観測値からなる時系列データ$x_1, x_2, …, x_{100}$を読み込み, 5日単純移動平均,20日単純移動平均を計算し, 各日付$t=20, 21, …, 100$に対して,標準出力に$t$, $x_t$, ${\rm SMA}^{(5)}_t$, ${\rm SMA}^{(20)}_t$を半角スペース区切りで書き出せ.

ただし,入力される実数値は1行1観測値の形式で,$t=1$から$100$までのちょうど$100$個の観測値が順に与えられると仮定してよい. プログラムは以下の仕様を満たすこと.

  1. $x_t$, ${\rm SMA}^{(5)}_t$, ${\rm SMA}^{(20)}_t$はそれぞれprintf関数のフォーマット指定子を用い,小数点以下2位までを出力すること
  2. 各行の末尾には改行文字\nを付けること

実行例


#は標準入力,>は標準出力を表す.

# 83.78 82.92 82.61 83.62 83.98 83.82 83.95 83.56 83.87 84.25 84.06 84.09 83.74 122.15 110.54 100.84 122.04 120.39 83.83 83.19 82.97 82.72 82.33 81.44 81.84 92.04 93.39 93.36 92.91 93.32 93.12 82.81 82.93 82.77 82.64 82.17 83.05 82.72 82.63 82.24 82.11 82.77 82.93 82.77 81.84 100.96 121.70 112.27 100.15 121.23 91.06 21.09 83.74 83.83 93.19 82.97 82.72 92.33 81.44 91.21 100.65 121.92 100.54 100.52 121.79 122.22 102.27 120.15 121.23 111.11 82.04 83.38 83.36 82.91 83.32 83.12 82.81 82.93 82.77 82.64 102.27 120.15 121.23 111.11 84.06 84.09 83.74 83.83 83.19 82.97 82.72 82.33 81.44 81.84 100.65 121.92 100.54 100.52 121.79 122.22

> 20 83.19 102.06 91.56
> 21 82.97 98.48 91.52
> 22 82.72 90.62 91.51
> 23 82.33 83.01 91.50
> 24 81.44 82.53 91.39
> 25 81.84 82.26 91.28
> 26 92.04 84.07 91.69
> 27 93.39 86.21 92.16
> 28 93.36 88.41 92.65
> 29 92.91 90.71 93.11
> 30 93.32 93.00 93.56
> 31 93.12 93.22 94.01
> 32 82.81 91.10 93.95
> 33 82.93 89.02 93.91
> 34 82.77 86.99 91.94
> 35 82.64 84.85 90.54
> 36 82.17 82.66 89.61
> 37 83.05 82.71 87.66
> 38 82.72 82.67 85.78
> 39 82.63 82.64 85.72
> 40 82.24 82.56 85.67
> 41 82.11 82.55 85.63
> 42 82.77 82.49 85.63
> 43 82.93 82.54 85.66
> 44 82.77 82.56 85.73
> 45 81.84 82.48 85.73
> 46 100.96 86.25 86.17
> 47 121.70 94.04 87.59
> 48 112.27 99.91 88.53
> 49 100.15 103.38 88.89
> 50 121.23 111.26 90.29
> 51 91.06 109.28 90.19
> 52 21.09 89.16 87.10
> 53 83.74 83.45 87.14
> 54 83.83 80.19 87.20
> 55 93.19 74.58 87.72
> 56 82.97 72.96 87.76
> 57 82.72 85.29 87.75
> 58 92.33 87.01 88.23
> 59 81.44 86.53 88.17
> 60 91.21 86.13 88.62
> 61 100.65 89.67 89.54
> 62 121.92 97.51 91.50
> 63 100.54 99.15 92.38
> 64 100.52 102.97 93.27
> 65 121.79 109.08 95.27
> 66 122.22 113.40 96.33
> 67 102.27 109.47 95.36
> 68 120.15 113.39 95.75
> 69 121.23 117.53 96.80
> 70 111.11 115.40 96.30
> 71 82.04 107.36 95.85
> 72 83.38 103.58 98.96
> 73 83.36 96.22 98.94
> 74 82.91 88.56 98.90
> 75 83.32 83.00 98.40
> 76 83.12 83.22 98.41
> 77 82.81 83.10 98.42
> 78 82.93 83.02 97.95
> 79 82.77 82.99 98.01
> 80 82.64 82.85 97.58
> 81 102.27 86.68 97.66
> 82 120.15 94.15 97.58
> 83 121.23 101.81 98.61
> 84 111.11 107.48 99.14
> 85 84.06 107.76 97.25
> 86 84.09 104.13 95.35
> 87 83.74 96.85 94.42
> 88 83.83 89.37 92.60
> 89 83.19 83.78 90.70
> 90 82.97 83.56 89.30
> 91 82.72 83.29 89.33
> 92 82.33 83.01 89.28
> 93 81.44 82.53 89.18
> 94 81.84 82.26 89.13
> 95 100.65 85.80 89.99
> 96 121.92 93.64 91.93
> 97 100.54 97.28 92.82
> 98 100.52 101.09 93.70
> 99 121.79 109.08 95.65
> 100 122.22 113.40 97.63

手順例



ヒント



余談


移動平均の応用は,信号処理全般にわたって広がっている.画像処理では,画像のノイズを除去して滑らかにするために移動平均が用いられる.音声処理では,移動平均は有限インパルス応答(FIR)フィルタの特殊形であり,ローパスフィルタ(LPF)として用いることができる.