Mr. AEX schreef op 5 oktober 2014 23:22:
Hey Sarah,
Sorry voor de late reactie. Hieronder het antwoord. Het script is als volgt:
------------------------------------------------------------------------------
Option Explicit
Sub Simulation()
Application.ScreenUpdating = False
'Dimension variables and worksheets
Dim strike, delta, gamma, theta, vega, rho, val_T_min_1, val_T As Range
Dim main_nd, main_wd, sim As Worksheet
Dim start_vola, pos_value As Double
'Defines worksheet names
Set main_nd = Workbooks(ThisWorkbook.Name).Worksheets("main_no_dividend")
Set main_wd = Workbooks(ThisWorkbook.Name).Worksheets("main_with_dividend")
Set sim = Workbooks(ThisWorkbook.Name).Worksheets("simulation")
'Determine val_T_min_1
sim.Activate
Range(sim.Cells(3, 4), sim.Cells(103, 4)).ClearContents
pos_value = Range(main_nd.Cells(17, 8), main_nd.Cells(17, 8)).Value
start_vola = Range(main_nd.Cells(14, 12), main_nd.Cells(14, 12)).Value
Range(sim.Cells(2, 1), sim.Cells(2, 1)) = pos_value
'Simulate portfolio value, delta, gamma, vega, theta and rho for all strikes in range
For Each strike In Range(sim.Cells(3, 2), sim.Cells(103, 2))
Range(main_nd.Cells(3, 4), main_nd.Cells(3, 4)).Value = strike.Value
Range(main_nd.Cells(14, 12), main_nd.Cells(14, 12)).Value = strike.Offset(, 25).Value
strike.Offset(, 2).Value = Range(main_nd.Cells(17, 8), main_nd.Cells(17, 8)).Value
strike.Offset(, 5).Value = Range(main_nd.Cells(16, 3), main_nd.Cells(16, 3)).Value
strike.Offset(, 6).Value = Range(main_nd.Cells(16, 4), main_nd.Cells(16, 4)).Value
strike.Offset(, 7).Value = Range(main_nd.Cells(16, 5), main_nd.Cells(16, 5)).Value
strike.Offset(, 8).Value = Range(main_nd.Cells(16, 6), main_nd.Cells(16, 6)).Value
strike.Offset(, 9).Value = Range(main_nd.Cells(16, 7), main_nd.Cells(16, 7)).Value
Range(main_nd.Cells(14, 12), main_nd.Cells(14, 12)).Value = start_vola
Next
Range("C3:F103").Select
Selection.NumberFormat = "0"
Range("G3:K103").Select
Selection.NumberFormat = "0.0"
Range(main_nd.Cells(3, 4), main_nd.Cells(3, 4)).Value = Range(main_nd.Cells(4, 4), main_nd.Cells(4, 4)).Value
Range(main_nd.Cells(14, 12), main_nd.Cells(14, 12)).Value = start_vola
Range(sim.Cells(1, 1), sim.Cells(1, 1)).Select
Application.ScreenUpdating = True
End Sub
------------------------------------------------------------------------------------
Tegen het eind zie je deze regel:
Range(main_nd.Cells(3, 4), main_nd.Cells(3, 4)).Value = Range(main_nd.Cells(4, 4), main_nd.Cells(4, 4)).Value
Hier staat in principe....Geef D3 de waarde van D4. Ik heb deze regel erbij gezet, anders zou D3 de waarde van de laatste strike in de simulatie geven.
Om dit aan te passen kan je het volgende doen. Ergens bovenaan (laat zeggen, onder de regels van 'Defines worksheet names) zet je het volgende neer:
start_waarde = Range(main_nd.Cells(3, 4), main_nd.Cells(3, 4)).Value
Onder het kopje 'Dimension variables and worksheets zet je:
Dim start_waarde As double
Daarna verander je de regel onderin (die nu zegt, D3 = D4) >
Range(main_nd.Cells(3, 4), main_nd.Cells(3, 4)).Value = start_waarde
Dan zet je de beginwaarde weer terug in D3.
Gaat het goed verder? Erg rustig hier, ook van mijn kant. Door de drukte omtrent verkoop boek is er veel ander werk blijven liggen. Daar had ik even een inhaalslag nodig. Boek komt binnenkort online, maar nog niet bij bol.etc (omdat die gasten 42% van de verkoopprijs vragen, wat het boek te duur maakt naar mijn mening).
Het komt dus eerst op de website van de drukkerij. Dus ik kom hier de komende tijd weer adverteren ;-)
Hoe gaat de handel verder?
Groet.