📄 function.asp
字号:
<%
function price(stock,sigma,x,m,r,r1,r2,r3,r4,r5,tt,n,a,u,n1,beta,b)
' stock 是当前价格
' sigma是波动率
' x是转股价
' m为回赎是股价超过转股价的白分比(万颗为130,复兴实业为120)
' r为无风险利率
' r1,r2,r3,r4,r5是弟1--5年的付息数,如果期限是3年,取r1,r2为0,r3,r4,r5为一二三年的利息
' tt 到期日时间
' n是二叉树取的步数,一般取 100--200
' a是风险指数,一般取0。14左右
' u是期望收益率,这里必须>r,否则不能用此算法
' beta 为 风险因子
' b 为 暂取0
dim d1,d2,d3,d4
dim c,f,g,p1,p2,d,h,k
dim s1(200,200),v(200,200),s2(200,200)
dim tag1
' 为矩阵s1(n+1,n+1)赋值
'=========================================
t=datediff("d",date,datevalue(tt))/365
c=sigma*sqr(t/n)
s1(1,1)=stock
for i=2 to n+1
s1(1,i)=s1(1,i-1)*exp(c)
next
for j=2 to n+1
for i = 2 to j
s1(i,j)=s1(i-1,j)*exp(-2*c)
next
next
'===========================================
d4=int(n/t)
d3=int(2*n/t)
d2=int(3*n/t) 'd1,d2,d3,d4派息日
d1=int(4*n/t)
f=exp(Log(1+r)*t/n) 'f为每个步长的1+利率
g=exp(Log(1+u)*t/n) 'g为每个步长的1+期望收益率
for j=1 to n+1
for i=1 to j
tag1 = (s1(i,j)+b*x)/(1+b)*beta*100/x
if tag1<m+5 then
s2(i,j)=tag1
else
s2(i,j)=m+5
end if
next
next
for i=1 to n+1
if s2(i,n+1)>100+r5 then
v(i,n+1)=s2(i,n+1)
else v(i,n+1)=100+r5
end if
if v(i,n+1)>m+5 then
v(i,n+1)=m+5
end if
next
p1=(g-exp(-c))/(exp(c)-exp(-c))
p2=(exp(c)-g)/(exp(c)-exp(-c))
for j=n to 1 step -1
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
if (j>int(n+1-n1/t*n)) then
'£££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££
if j=n-d4 then '计算付息日调整
for i=1 to j+1
v(i,j+1)=v(i,j+1)+r4
next
else
if j=n-d3 then
for i=1 to j+1
v(i,j+1)=v(i,j+1)+r3
next
else
if j=n-d2 then
for i=1 to j+1
v(i,j+1)=v(i,j+1)+r2
next
else
if j=n-d1 then
for i=1 to j+1
v(i,j+1)=v(i,j+1)+r1
next
end if
end if
end if
end if
'======================================================================
for i=1 to j
if (u<=r) then
d=-1
else
d=-p1*(p1/p2*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))^(-(s1(i,j+1)-f*s1(i,j))/(s1(i,j+1)-s1(i+1,j+1)))-p2*(p1/p2*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))^(-(s1(i+1,j+1)-f*s1(i,j))/(s1(i,j+1)-s1(i+1,j+1)))
end if
h=1/a/(s1(i,j+1)-s1(i+1,j+1))*Log(p1/p2*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))-(v(i,j+1)-v(i+1,j+1))/(s1(i,j+1)-s1(i+1,j+1))
if (h>0) then
k=-p1*exp(-a*v(i,j+1))*(p1*exp(-a*v(i,j+1))/p2/exp(-a*v(i+1,j+1))*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))^(-(s1(i,j+1)-f*s1(i,j))/(s1(i,j+1)-s1(i+1,j+1)))-p2*exp(-a*v(i+1,j+1))*(p1*exp(-a*v(i,j+1))/p2/exp(-a*v(i+1,j+1))*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))^(-(s1(i+1,j+1)-f*s1(i,j))/(s1(i,j+1)-s1(i+1,j+1)))
if Log(d/k)/a/f>s2(i,j) then
v(i,j)=Log(d/k)/a/f
else
v(i,j)=s2(i,j)
end if
else
if Log(d/(-p1*exp(-a*v(i,j+1))-p2*exp(-a*v(i+1,j+1))))/a/f > s2(i,j) then
v(i,j)=Log(d/(-p1*exp(-a*v(i,j+1))-p2*exp(-a*v(i+1,j+1))))/a/f
else
v(i,j)=s2(i,j)
end if
end if
next
'=================================================================================================
else
'£££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££££
for i=1 to j
if (u<=r) then
d=-1
else
d=-p1*(p1/p2*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))^(-(s1(i,j+1)-f*s1(i,j))/(s1(i,j+1)-s1(i+1,j+1)))-p2*(p1/p2*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))^(-(s1(i+1,j+1)-f*s1(i,j))/(s1(i,j+1)-s1(i+1,j+1)))
end if
h=1/a/(s1(i,j+1)-s1(i+1,j+1))*Log(p1/p2*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))-(v(i,j+1)-v(i+1,j+1))/(s1(i,j+1)-s1(i+1,j+1))
if (h>0)then
k=-p1*exp(-a*v(i,j+1))*(p1*exp(-a*v(i,j+1))/p2/exp(-a*v(i+1,j+1))*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))^(-(s1(i,j+1)-f*s1(i,j))/(s1(i,j+1)-s1(i+1,j+1)))-p2*exp(-a*v(i+1,j+1))*(p1*exp(-a*v(i,j+1))/p2/exp(-a*v(i+1,j+1))*(s1(i,j+1)-f*s1(i,j))/(f*s1(i,j)-s1(i+1,j+1)))^(-(s1(i+1,j+1)-f*s1(i,j))/(s1(i,j+1)-s1(i+1,j+1)))
v(i,j)=Log(d/k)/a/f
else
v(i,j)=Log(d/(-p1*exp(-a*v(i,j+1))-p2*exp(-a*v(i+1,j+1))))/a/f
end if
next
end if
'@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
next
price=v(1,1)
end function
%>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -