Clever-Excel-Forum

Normale Version: Solver mit Variablen für 80 Scenarien
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo Liebe Leute,

Erstmal zum technischen Problem. Es geht darum, die implizite Volatilität aus Optionen zu schätzen. Gegeben sind einige Variablen, die man als bekannt erachtet. Der Preis der Option ist also sozusagen eine Funktion der Volatilität (Sigma). Es ist also ein iterativer Prozess indem man so lange die Volatilität einsetzen muss bis man den gegebenen Preis bekommt.

Da ich aber 80 verschiedene Optionen mit zufälligen fiktiven Preisen habe würde ich gerne eine VBA Code haben in dem ich den Solver ausführe. Ich habe es jetzt für nur eine Option geschafft, dass er mir die implizite Volatilität ausrechnet:

Sub SolverMakro()


ActiveWindow.ScrollWorkbookTabs Sheets:=1
Sheets("Estimating Implied Volatility").Select
Range("F19").Select

solverok setcell:="$c$17", maxminval:=3, valueof:="1,95821719", bychange:="$f$17"
solversolve

End Sub

Wie schaffe ich es nun, dass ich sozusagen das Setcell, valueof und bychange variable halte. Das "Valueof" muss sich auf eine Zelle beziehen und zwar auf die Zelle des gegebenen Preises. Wie kriege ich sozusagen eine Schleife hin für 80 Szenarien?

Kann mir dahingehend einer helfen?

Muchas Gracias!
buenas noches,

wo stehen denn die 80 verschiedenen Daten? Kannst Du denn eine Beispieldatei hier mal hochladen.

Ansonsten stochern wir hier im nebel herum ...
Hallo

über Range().Select arbeiten Programmier fast nie. Für fortlaufende Zellen eignet sich eine For Next Schleife und Cells() oder Range mit Offset. s. unten

Man kann die For Next Schleife von 1-80 aufbauen, oder von Zeile 19 bis Zeile 79 bei Cells. Die 2. Angabe bei Cells ist die Spalte als Buchstabe Cells(j,"C") oder als Zahl Cells(j,3). Beides klappt. Der Wert J kann durch +/- geaendert werden: Cells(j+2, 3).  J ist dabei der aktuelle Wert der For Next Schleife. 
Einfach mal ein wenig experimentieren. Ich hoffe ich konnte helfen.

mfg  Gast 123

Code:
Sub SolverMakro()
ActiveWindow.ScrollWorkbookTabs Sheets:=1
Sheets("Estimating Implied Volatility").Select

For j = 19 To 99
'solverok setcell:="$c$17", maxminval:=3, valueof:=Cells(j, "F"), bychange:="$f$17"
solverok setcell:=Cells(j - 2, "C"), maxminval:=3, valueof:=Cells(j, "F"), bychange:=Cells(j - 2, "F")
solversolve
Next j
End Sub


Sub SolverMakro_2()
ActiveWindow.ScrollWorkbookTabs Sheets:=1
Sheets("Estimating Implied Volatility").Select

For j = 1 To 80
'solverok setcell:="$c$17", maxminval:=3, valueof:=Cells(j, "F"), bychange:="$f$17"
solverok setcell:="$c$" & 16 + j, maxminval:=3, valueof:=Range("xx").Offset(0, j), bychange:="$f$" & 16 + j
solversolve
Next j
End Sub
So. Endlich sind die Prüfungen vorüber und ich kann mich dem nächsten Thema widmen.

Ich denke, dass es mit dem Solver zu erledigen ist wie mit einem Panzer auf Mäuse schießen. Ich denke mit der Zielwertsuche bin ich besser dran.

Aus einem anderen Forum habe ich folgenden Code kopiert und angepasst:

Public Sub Zielwert()
'------------------------------------------------------'
'CONSTANTS
'------------------------------------------------------'
Const iMaxIterations = 10 'Anzahl der zu durchlaufenden Iterationen
Const strStartRng = "c72" 'erster Zellbezug, ab welcher gearbeitet wird
Const strGoalRng = "B72" 'erster Zellbezug des Goal-Wertes
Const strChngRng = "F72" ' erster Zellbezug des ChangingCell-Wertes
'------------------------------------------------------'
'VARIABLES
'------------------------------------------------------'
Dim i As Integer
Dim rStartCell As Range
Dim rGoalCell As Range
Dim rChngCell As Range
'------------------------------------------------------'
'DEFINIERE RANGES
'------------------------------------------------------'
Set rStartCell = Range(strStartRng)
Set rGoalCell = Range(strGoalRng)
Set rChngCell = Range(strChngRng)
'------------------------------------------------------'
'SCHLEIFE
'------------------------------------------------------'
For i = 1 To iMaxIterations
        'teste auf Abbruchbedingung VOR Ausführung des Codes
        If rStartCell.Offset(i - 1, 0).Value = "" Then Exit For
        'Starte GoalSeeker
rStartCell.Offset(i - 1, 0).GoalSeek Goal:=rGoalCell.Offset(i - 1, 0), ChangingCell:=rChngCell.Offset(i - 1, 0)
Next i
End Sub


Die Zellbezüge 72 habe ich nur gewählt weil es dort eine Lösung gibt. Für die anderen gibt es auch über die manuelle Suche keine Lösung.

So das Problem ist. Für die Zeile 72 findet er eine lösung, aber springt nicht zur nächsten Zeile. Er sagt, dass es dort ein Bezugsproblem gibt und ich weiß nicht woran es liegt.

Kann mir dahingehend jemand helfen?
(13.12.2017, 18:24)Der Steuerfuzzi schrieb: [ -> ]buenas noches,

wo stehen denn die 80 verschiedenen Daten? Kannst Du denn eine Beispieldatei hier mal hochladen.

Ansonsten stochern wir hier im nebel herum ...

HAbe die Datei angehängt.

Es gilt, dass C=B bei Änderung von F