!"! "$% $ %$ " $&' ( ' $) * ' $* +( ' ) * & & ' *, $-- " " $(. $ /% &%$ & $ &$
$ %% &" ( 1. 00 $ 0 1 $"%$ " 2$ 2. ) " 3 $ * 4* 05 0 $ &'(&%%$ '67 7) 2) 7) 2)7 ' " - - 7) 2 0 $$ 0 '$ " $ 08$$ )2! & &
7) 2+ 9 7) 23 & 7) 2)5 7) 2:+ 7) 2:+ 9 ;. " $ & 1 < ' <7) 2=
7) 2= " $ 7 ' $! % 7) 2'% >
'7 $ "" $"$ $ % ) (&*+, 7 '6 < 7+ 1< <')'/ ')' $$ -, 1 7) 2? & $ $ 7) 2? 7$) @ 7 0 0 )A =AFRUND(B16*EKSP((GrMean-0,5*GrStdev^2)+GrStdev*NORMINV(SLUMP();0;1));2) $ 3/1/0 B4+ 5 $9;<1+93@C1,35D D)5 0 )?
7!7 0+7 0 7)? ( =HVIS(OG(C14<0;C15<0;C16<0);MIN(AFRUND(BuyPct3*D16;0);HELTAL(H16/B16));HVIS(OG(C15 <0;C16<0);MIN(AFRUND(BuyPct2*D16;0);HELTAL(H16/B16));0)) ",0:",0*) *088? + 7 $ $ * E $ 3 $ 2 5' ) *$ '$!@ $ $ & $ 70 @?( =(J265+K265)-(InitCash+InitShares*InitPrice) +F++,00 =!A+ 9 $=B 7 0? A =L265 =MIN(B16:B265) $ $$ %, 9 $ " $ " $ &< 7) 2A < $ < < $$,&, (,!!, ' 7) 2A ' 0 )
* 0 4* 0 7) 2A< B + ' G 7 7) 2B ': /%. $ F 7) 2B% $ 0 ' $
$. 0 C HI ( Option Explicit Private Sub Workbook_Open() Dim ws As Object Worksheets("Forklaring").Activate Range("G4").Select For Each ws In ActiveWorkbook.Sheets If ws.name <> "Forklaring" Then ws.visible = False Next End Sub 7 $/!"$ 11351 $ < 0 $)B 7 2 $/$ %! (-"0'"',1 Option Explicit NReps er antallet af replikationer der ønskes gennemført Dim NReps As Integer $/$ - Sub Main() Dim i As Integer Dim svar ' Få antallet af replikationer, som ikke må overstige 1000. Do svar = InputBox("Hvor mange replikationer skal simulationen udføre?" _ & " (Indtast en heltalsværdi <= 1000.)", "Antallet af replikationer") If svar = "" Then MsgBox "Du har klikket Cancel" Exit Sub ElseIf CInt(svar) > 1000 Then MsgBox "Antallet af replikationer skal være < 1000.", _ vbexclamation, "For mange replikationer" End If Loop Until NReps <= 1000 NReps = CInt(svar) ' Ryd forrige resultater. With Worksheets("Replikationer").Range("A3") Range(.Offset(1, 0),.Offset(0, 5).End(xlDown)).ClearContents ' Indtast tæller ting på første ark.
Worksheets("Forklaring").Activate Range("D18") = " Simulations iteration" Range("G18") = "af" Range("H18") = NReps ' Kør simulationen og opfang statistik. Call RunSim Call CollectStats ' Slet replikationstæller på første ark. Range("D18:H18").ClearContents ' Updater histogram data. Call UpdateHistograms ' Vis resultater. With Worksheets("Resultater").Visible = True.Activate.Range("A2").Select End Sub $/$ "! < < F0" 0 &'JK' $> $ <F0 $"; >! ' $!60 1 : +F0 " 747& )BB : > Sub RunSim() Dim i As Integer ' Loop over replicationerne. For i = 1 To NReps ' Vis nuværende replikationsnummer på første ark. Range("RepNumber") = i ' Tving en rekalkulation igennem. Application.Calculate ' Optag outputs på Replikations arket. With Worksheets("Replikationer").Range("A3").Offset(i, 0) = i.offset(i, 1) = Range("EndCash").Offset(i, 2) = Range("EndStockVal").Offset(i, 3) = Range("CumGainLoss").Offset(i, 4) = Range("MinPrice") :/7%+
.Offset(i, 5) = Range("MaxPrice") Next End Sub $/$. 2+ F0 7 7 00< <& < '!60 " < 7!60 < <Application.Average(RepRange) Sub CollectStats() Dim i As Integer, RepRange As Range ' Loop over output størrelserne. For i = 1 To 5 ' RepRange er ranget på Replikationsarket som skal summeres. With Worksheets("Replikationer").Range("A3") Set RepRange = Range(.Offset(1, i),.offset(nreps, i)) ' Anvend Excel's funktioner til at udregne statistik, ' og smid dem på Resultater arket. With Worksheets("Resultater").Range("A3").Offset(1, i) = Application.Min(RepRange).Offset(2, i) = Application.Max(RepRange).Offset(3, i) = Application.Average(RepRange).Offset(4, i) = Application.StDev(RepRange).Offset(5, i) = Application.Median(RepRange).Offset(6, i) = Application.Percentile(RepRange, 0.05).Offset(7, i) = Application.Percentile(RepRange, 0.95) Next End Sub $/$/ %3 (,! C ' K 7 ' $ 7L0"!60 7L0" " 9 "F22!7 $ 00 7" H $D 00 < <" 7 $
& ' Sub UpdateHistograms() Dim i As Integer, j As Integer, Pct5 As Single, Pct95 As Single, _ Increment As Single, RepRange As Range, BinRange As Range ' Loop output størrelserne. For i = 1 To 5 ' Histogrammerne har hver 10 "bins". Laveste "løber" op til 5 percentilen, ' og den sodste "løber" over 95 percentilen, og de resterende er imellem disse. Pct5 = Worksheets("Resultater").Range("A9").Offset(0, i) Pct95 = Worksheets("Resultater").Range("A10").Offset(0, i) Increment = (Pct95 - Pct5) / 8 ' RepRange indeholder data for histogrammerne. With Worksheets("Replikationer").Range("A3") Set RepRange = Range(.Offset(1, i),.offset(nreps, i)) ' De skjulte DataHist ark indeholder data til histogrammerne. ' Kolonne A indeholder bin'ene, kolonne B ' har labels for den horisontale akse, og kol C har frekvenserne. With Worksheets("DataHist" & i).range("a3").offset(1, 0) = Round(Pct5, 0).Offset(1, 1) = "<=" &.Offset(1, 0) For j = 2 To 9.Offset(j, 0) = Round(Pct5 + (j - 1) * Increment, 0).Offset(j, 1) = Round(.Offset(j - 1, 0), 0) & "-" _ & Round(.Offset(j, 0), 0) Next.Offset(10, 1) = ">" & Round(.Offset(9, 0), 0) Set BinRange = Range(.Offset(1, 0),.Offset(9, 0)) ' Excel's Frequency funktion er en array formel, så den rigtige egenskab er ' FormulaArray egenskaben. Range(.Offset(1, 2),.Offset(10, 2)).FormulaArray = _ "=Frequency(Replikationer!" & RepRange.Address & "," _ & BinRange.Address & ")" Next End Sub $/$4 5 2(%" JF+ + $ $ $" Sub ViewChangeInputs() ' Unhides og activerer Inputarket så bruger kan se og ændre. With Worksheets("Inputark").Visible = True.Activate End Sub
$4 %! ( 0 $ 7 0 +F0!60"$< $ G 00!60 1 ; ) @ *"! $'8; " @ 00$$$ $$ $ $$3)5 @