PCガジェットはいつでも安いAmazonで!

ポートフォリオ最適化時の共分散とリスクを自動計算

現在のAmazon情報

[コールマン] シールド35 メンズ レディース ユニセックス リュック バックパック バッグ 35L 通勤 通学 部活 ビジネス 大容量 軽量 防水 撥水。

35L入るので色々運べる。

15インチまでのノートパソコンが入り防水。

Amazon評価数1774件で5段階評価で4.4獲得(2025年5月20日時点)


参考価格: ¥12,980

只今セール中で-38%(2025年5月21日時点)

現在価格: ¥8,068円 税込(2025年5月21日のAmazon価格)

以前農作物のポートフォリオ最適化でリスクの計算を共分散を使って求めました。

このとき共分散はエクセルの関数を、リスクは数式直接で求めていました。

しかし作物数が増えたら手入力だと限界があると感じました。

そこで共分散とリスクの計算を自動で求めるべく、VBAを使って計算するようにしました。

こんなエクセルを作ります。

それでは共分散を求めてみましょう。

作成したVBAは以下。

Sub co()
    Dim i, j As Long
    Dim year As Long
    Dim item As Long
    year = 3
    item = 3
    For i = 1 To item
        For j = 1 To item
            Set a = Range(Cells(i + 2, 2), Cells(i + 2, 1 + year))
            Set b = Range(Cells(j + 2, 2), Cells(j + 2, 1 + year))
            Cells(i + 2, j + 9) = Application.WorksheetFunction.Covariance_P(a, b)
        Next j
    Next i
End Sub

なんということはない、VBAでエクセルの関数を呼び出して指定したセルで計算させているだけです。

リスクを求めるためのユーザー定義関数が以下。

Function Func1(arg As Range, arg2 As Range)
    Dim re As Double
    Dim i, j As Long
    Dim v As Variant
    Dim v2 As Variant
    Dim n1 As Long
    v = arg.Value
    v2 = arg2.Value
    n1 = UBound(v, 1)
    re = 0
    For i = 1 To n1
        For j = 1 To n1
            re = re + v(i, j) * v2(1, i) * v2(1, j)
        Next j
    Next i
    Func1 = re
End Function

リスクの式自体は簡単なものなので、コードも簡単です。

むしろ手入力より間違いが少なくなると思います。

G14=Func1(J3:L5,B14:D14)

とします。

ソルバーも普通に動きました。

こういうちょっとしたところにVBAが使えると便利ですね。

ポートフォリオ最適化で計算できる例題を見つけたらまた記事にするかもしれません。

\マウスコンピューターのセール!/

目次