読者です 読者をやめる 読者になる 読者になる
無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

最小二乗法で配列内の値の傾きを得る関数

最小二乗法で配列内の値の傾きを得る関数です。このサイトを参考に実装しています。

#===最小二乗法で、配列内の値の傾きを得る。
#datas::  値の配列
#戻り値:: 傾き。0より大きければ上向き。小さければ下向き。
def vector( datas )
  # 最小二乗法を使う。
  total = {:x=>0.0,:y=>0.0,:xx=>0.0,:xy=>0.0,:yy=>0.0}
  datas.each_index {|i|
    total[:x] += i
    total[:y] += datas[i]
    total[:xx] += i*i
    total[:xy] += i*datas[i]
    total[:yy] += datas[i] * datas[i]
  }
  n = datas.length
  d = total[:xy]
  c = total[:y]
  e = total[:x]
  b = total[:xx]
  return (n*d - c*e) / (n*b - e*e)
end

サンプル。

p  vector( [1,2,3,4,5 ] )
p  vector( [2,3,2,4,5 ] )
p  vector( [2,2,2,2,2 ] )
p  vector( [5,4,2,3,2 ] )
p  vector( [5,4,3,2,1 ] )

実行結果です。明らかにサンプル数が足りないけど、一応期待通り動作している感触。

1.0
0.7
0.0
-0.7
-1.0