🫑Python和MATLAB及C++资产价格看涨看跌对冲模型和微积分

关键词

Python | MATLAB | C++ | 资产 | 价格 | 数学 | 随机 | 模型 | 布朗运动 | 几何 | 概率 | 离散 | 股票 | 预期 | 对冲 | 偏微分 | 方程 | 期权 | 衍生品 | 看涨 | 看跌 | 价格 | 波动 | 隐含 | 曲面 | 敏感度 | 参数 | 跳跃 | 扩散 | 二维 | 三维 | 汇率 | 方差 | 局部 | 傅里叶 | 风险 | 中性措施 | 算法 | 泊松过程 | 默顿模型

🏈page指点迷津 | Brief

🎯要点

  1. 🎯资产价格动态数学随机模型:🖊价格几何布朗运动过程积分 | 🖊布朗运动和几何布朗运动随时间概率密度 | 🖊几何布朗运动离散过程 | 🖊电动车历史股票价值及预期。

  2. 🎯金融衍生品估值偏微分方程:🖊期权合约 | 🖊计算看涨期权期权面,显示对冲参数及预期价格 | 🖊计算看跌期权的期权面 | 🖊对冲看涨期权投资组合 | 🖊再平衡频率对投资组合方差的影响。

  3. 🎯期权价格与隐含概率密度函数关系模型:🖊看涨期权隐含波动率 | 🖊看涨期权敏感度值曲面 | 🖊隐含波动率曲面 | 🖊看涨期权价值函数偏微分变化趋势 | 🖊看涨期权价格执行价格对比 | 🖊哈根隐含波动率参数化下的不同隐含波动率形状 | 🖊外汇市场报价数据插值 | 🖊局部波动模型模拟。

  4. 🎯价格泊松过程中偏积分微分方程:🖊价格跳跃扩散的蒙特卡罗路径和补偿泊松过程 | 🖊默顿模型,跳跃扩散过程 | 🖊跳跃扩散过程概率密度三维分布和二维动态 | 🖊默顿跳跃扩散模型对隐含波动率影响 | 🖊对冲看涨期权价格波动 | 🖊不同对冲频率对损益方差的影响。

  5. 🎯傅立叶余弦级数和风险中性估值期权定价方法 | 🎯多维期权定价和风险中性措施

  6. 🎯C++和Python计算金融数学方程算法模型

🍇Python风险中性资产定价

β=1/(1+ρ)\beta=1 /(1+\rho) 为跨期贴现因子,其中 ρ\rho 是主体对未来贴现的利率。为一单位除息资产定价的基本风险中性资产定价方程为

pt=βEt[dt+1+pt+1]p_t=\beta E _t\left[d_{t+1}+p_{t+1}\right]

这里 Et[y]E _t[y] 表示 yy 的最佳预测,以时间 t 可用的信息为条件。

最简单的情况是恒定、非随机股息流的风险中性价格 dt=d>0d_t=d>0。从上式中删除期望并向前迭代得出,

pt=β(d+pt+1)=β(d+β(d+pt+2))=β(d+βd+β2d++βk2d+βk1pt+k)\begin{aligned} p_t & =\beta\left(d+p_{t+1}\right) \\ & =\beta\left(d+\beta\left(d+p_{t+2}\right)\right) \\ & \vdots \\ & =\beta\left(d+\beta d+\beta^2 d+\cdots+\beta^{k-2} d+\beta^{k-1} p_{t+k}\right) \end{aligned}

如果 limk+βk1pt+k=0\lim _{k \rightarrow+\infty} \beta^{k-1} p_{t+k}=0,该序列收敛为

pˉ:=βd1β\bar{p}:=\frac{\beta d}{1-\beta}

这是股息不变情况下的均衡价格。

考虑一个增长的非随机股息过程dt+1=gdtd_{t+1}=g d_t,其中<gβ<1<g \beta<1。虽然当股息随着时间的推移而增长时,价格通常不会保持不变,但价格股息率却可以。

如果我们猜到这一点,将 vt=vv_t=v 代入下式以及我们的其他假设,我们得到 v=βg(1+v)v=\beta g(1+v)​

vt=Et[mt+1dt+1dt(1+vt+1)]v_t= E _t\left[m_{t+1} \frac{d_{t+1}}{d_t}\left(1+v_{t+1}\right)\right]

由于 βg<1\beta g<1,我们有唯一的正解:

v=βg1βgv=\frac{\beta g}{1-\beta g}

价格为:

pt=βg1βgdtp_t=\frac{\beta g}{1-\beta g} d_t

在这个例子中,如果我们采用 g=1+κg=1+\kappa 并让 ρ:=1/β1\rho:=1 / \beta-1,那么价格就变成

pt=1+κρκdtp_t=\frac{1+\kappa}{\rho-\kappa} d_t

这就是所谓的戈登公式。

代码实现一个著名的定价模型:

 class PricingModel:
  
     def __init__(self, β=0.96, mc=None, γ=2.0, g=np.exp):
         self.β, self.γ = β, γ
         self.g = g
 ​
         # A default process for the Markov chain
         if mc is None:
             self.ρ = 0.9
             self.σ = 0.02
             self.mc = qe.tauchen(n, self.ρ, self.σ)
         else:
             self.mc = mc
 ​
         self.n = self.mc.P.shape[0]
 ​
     def test_stability(self, Q):
     
         sr = np.max(np.abs(eigvals(Q)))
         if not sr < 1 / self.β:
             msg = f"Spectral radius condition failed with radius = {sr}"
             raise ValueError(msg)
 ​
 ​
 def tree_price(ap):
     # Simplify names, set up matrices
     β, γ, P, y = ap.β, ap.γ, ap.mc.P, ap.mc.state_values
     J = P * ap.g(y)**(1 - γ)
 ​
     # Make sure that a unique solution exists
     ap.test_stability(J)
 ​
     # Compute v
     I = np.identity(ap.n)
     Ones = np.ones(ap.n)
     v = solve(I - β * J, β * J @ Ones)
 ​
     return v

这是 vv 作为 γ\gamma 几个值的状态函数的图,具有正相关的马尔可夫过程和 g(x)=exp(x)g(x)=\exp (x)

 γs = [1.2, 1.4, 1.6, 1.8, 2.0]
 ap = AssetPriceModel()
 states = ap.mc.state_values
 ​
 fig, ax = plt.subplots()
 ​
 for γ in γs:
     ap.γ = γ
     v = tree_price(ap)
     ax.plot(states, v, lw=2, alpha=0.6, label=rf"$\gamma = {γ}$")
 ​
 ax.set_title('Price-dividend ratio as a function of the state')
 ax.set_ylabel("price-dividend ratio")
 ax.set_xlabel("state")
 ax.legend(loc='upper right')
 plt.show()

Last updated