Folgendes Problem:
Ich muss eine Funktion schreiben, die aus einer Matrix bestehend aus Preisen von nA Produkten und nD Tagen (diese matrix ist auf einem worksheet vorgegeben) eine varianz/ kovarianz matrix (dimension (nA, nA) erstellt.
Dabei sei ausdrücklich erwähnt, dass der Zwischenschritt über die Renditen zwischen den jeweiligen Tagen nur virtuell erfolgen darf, die Renditen also auf keinem worksheet auftauchen dürfen.
Bis jetzt bin ich so weit gekommen, der code funktioniert jedoch nicht:
1 2 3 4 5 6 7 8 9 10 11 | Function fxCovar(mP As Range) As Variant
Dim rMat As Range
Dim covM, rM As Variant
Dim nA, nD, i, j As Integer
nA = mP.Columns.Count
nD = mP.Rows.Count
ReDim covM(nA, nA)
ReDim rM(nD-1, nA)
|
1 2 3 4 5 6 | For i = 1 To nD - 1
For j = 1 To nA
rM(i, j) = WorksheetFunction.Log(mP(i + 1, j) / mP(i, j))
Next j
Next i
|
1 2 3 4 5 6 7 | </span><span style= "font-family: Arial, Verdana, sans-serif;" >
For i = 1 To nD - 1
</span><span style= "font-family: Arial, Verdana, sans-serif;" > For j = 1 To nD
</span><span style= "font-family: Arial, Verdana, sans-serif;" > Set rMat(i, j) = rM(i, j)
</span><span style= "font-family: Arial, Verdana, sans-serif;" > Next j
</span><span style= "font-family: Arial, Verdana, sans-serif;" > Next i</span>
|
1 2 3 4 5 6 7 8 9 10 | For i = 1 To nA
For j = 1 To nA
covM(i, j) = WorksheetFunction.Covar(Range(rMat(1, i), rM(nD - 1, i)), Range(rMat(1, j), rMat(nD - 1, j)))
Next j
Next i
fxCovar = covM()
End Function
|
Es hapert jedoch schätzungsweise an der Tatsache, dass ich entweder die Range der Renditen/Matrix auf ein worksheet schreiben muss (was nicht erlaubt ist) oder die covarianzmatrix am ende aus einem variant statt range ausrechne, was in meinen augen auch unmöglich ist.
Wäre super, wenn sich jemand findet, der mir helfen kann!
Danke im Voraus!
|