今日、自分のソフトウェアでテストを実行していたところ、生成された値の一部が正しくないことがわかりました。
コードをステップ実行することにしましたが、割り当てられたテキストボックスにカーソルを合わせると、ユーザーが入力した値が表示されたにもかかわらず、ユーザーフォームのテキストボックスの値に割り当てた変数が空であることに気付きました。
例えば、
n = BiTimeSteps_TextBox.Value
ホバーしたとき
n = empty
それでも
BiTimeSteps_TextBox.Value = 2
ホバーしたとき。
だから、その直後に数式があるとしましょう
d = n*2 ,
n にカーソルを合わせると空になり、d が 0 になってはならないときに 0 になります。
誰かが私に言った
BiTimeSteps_TextBox.Value = n
認識されるはずですが、まだ認識されていません。
これを引き起こしている可能性があるのは何ですか?
以下の完全なコードを参照してください: (二項ツリーの価格設定方法を使用してオプションの価格を設定することを目的としています)
S = BiCurrentStockPrice_TextBox.Value
X = BiStrikePrice_TextBox.Value
r = BiRisk_Free_Rate_TextBox.Value
T = BiexpTime_TextBox.Value
Sigma = BiVolatility_TextBox.Value
n = BiTimeSteps_TextBox.Value
Dim i, j, k As Integer
Dim p, V, u, d, dt As Double
dt = T / n ' This finds the value of dt
u = Exp(Sigma * Sqr(dt)) 'formula for the up factor
d = 1 - u 'formula for the down factor
'V value of option
'array having the values
Dim bin() As Double 'is a binomial arrays, it stores the value of each node, there is a loop
'work out the risk free probability
p = (1 + r - d) / (u - d)
'probability of going up
ReDim bin(n + 1) As Double
'it redims the array, and n+1 is used because it starts from zero
'------------------------------------------------------------------------------------------------------------------------------
''European Call
If BiCall_CheckBox = True Then
For i = 0 To n 'payoffs = value of option at final time
bin(i + 1) = Application.WorksheetFunction.Max(0, (u ^ (n - i)) * (d ^ i) * S - X)
'It takes the max payoff or 0
Cells(i + 20, n + 2) = bin(i + 1) 'to view payoffs on the isolated column on the right
Next i
End If
'european put
If BiPut_CheckBox = True Then
For i = 0 To n 'payoffs = value of option at final time
bin(i + 1) = Application.WorksheetFunction.Max(0, X - (S * (u * (n - i)) * (d * i)))
' European Put- It takes the max payoff or 0
Cells(i + 20, n + 2) = bin(i + 1) 'to view payoffs on the isolated column on the right
Next i
End If
For k = 1 To n 'backward column loop
For j = 1 To (n - k + 1) 'loop down the column loop
bin(j) = (p * bin(j) + (1 - p) * bin(j + 1)) / (1 + r)
Cells(j + 19, n - k + 2) = bin(j)
'' print the values along the column, view of tree
Next j
Next k
Worksheets("Binomial").Cells(17, 2) = bin(1) ' print of the value V
BiOptionPrice_TextBox = bin(1)