⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 function.asp

📁 可转换债券原代码
💻 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 + -