zoukankan      html  css  js  c++  java
  • python数据可视化分析速成笔记_2-2_布朗运动/几何布朗运动(伊藤过程)实现的demo

    第二天/第三天

    目标_不分先后:

     实践部分:   

      实际上如果是熟悉matlab操作的大神们应该改会发现这些包和matlab里面的是相通的

      python 大杂烩实锤

    • 重点
      实现问题训练:
      • 简单的方程求解曲线参数,模拟图像
      • 最小二乘法拟合,回归模型,

       了解微分方程模拟

      • 解常微分方程,模拟图像
      • 解偏微分方程,模拟图像

        时间关系,看看实现例子,然后自己写

      • 布朗运动
      • 维纳过程
      • 几何布朗运动(ito模拟)
    • 运用以上模型直接模拟归奥价格走势

      理论部分:  

    • 复习,推导,理解,几何布朗运动模型,伊藤引理(如果时间不够,跳过这一步)
      1. 期权与股票的性质—
      2. 期权的交易策略
      3. 期权二叉树(BSM模型原理的基础和推导就是基于期权二叉树模拟的随机游走过程

                  知乎专栏——AI和金融模型——第一篇文章开始

        重点:

      1. 维纳过程和伊藤引理
      2. BSM,几何布朗运动与布朗运动

    时间:24h

     反馈:

    • 总体任务完成情况:
      • 大致完成了基本过程,还剩下一个ito没有实现推导,理论没有完全看完,
    • 难点:
      • 主要是函数用起来不熟练,而且对函数的目的不了解
      • 微积分不熟,对公式的本质,推导过程理解很浅薄。

    一开始不知道用函数怎么实现,还以为布朗运动模拟运动的模拟要积分,实际上运用的是正态分布+时间函数求和,

    因为时间点是离散的,用定义法求积分,

    dx = a*dt  + b*dz,∑a*dt = T,dz=e*sqrt(dt),e~(0,1),∑dz=(sqrt(dt))*∑ e

    伊藤引理也是这样,只是它的积分式是微分方程,由公式:dS/S=u* dt+e* o* sqrt(dt),求 S ,需要用微分方程来推导

    最后会得到几何布朗运动的基本公式

    • 收获与反思:
      • 现在可以实现布朗运动/几何布朗运动模拟股市图像,数据还没有找
      • 更加深刻地理解了公式地推导过程
      • 加深了对正态分布的理解,复习了微分方程
      • 实践带动理解
      • 背函数啥的不如直接看大佬们的代码,一行一行理解,反正用的多的就那几个

    代码实现:

     1 # -*- coding: utf-8 -*-
     2 """
     3 Created on Mon May  4 20:43:06 2020
     4 
     5 @author: 10913
     6 """
     7 
     8 
     9 import numpy as np
    10 import matplotlib.pyplot as plt
    11 
    12 
    13 
    14 '''
    15 
    16 
    17 几何布朗运动:
    18     St=S0*exp(ut)
    19     St=S0*exp(u t+o e sqrt(dt))
    20     
    21     St=S0*exp(a t+b z)
    22 
    23 
    24 '''
    25 D=250   #250个交易日
    26 T=1.0   #总时间1年
    27 dt=T/D   #单位时间
    28 
    29 '''
    30 另一种写法
    31 S=np.zeros((M+1,I))
    32 
    33 S[0]=S0 #定义S[0]=S0
    34 
    35 for t in range(1,M+1):
    36 
    37     S[t]=S[t-1]*np.exp(mean*dt+sigma*np.sqrt(dt)*np.random.standard_normal(I))
    38 
    39 '''
    40 s0=100   #初始价格
    41 i=4
    42 st=np.zeros((i,D))
    43 st[0]=s0
    44 a=0.15
    45 b=0.3
    46 n=round(T/dt)#dimension
    47 plt.subplot(212)
    48 for g in range(1, i):
    49     t=np.linspace(0,T,n)
    50     e=np.random.standard_normal(size=n)
    51     z=np.cumsum(e)*np.sqrt(dt)
    52     x=a*t+b*z;
    53     st[g]=st[0]*np.exp(z)
    54     
    55     plt.plot(t,st[g],label='st'+str(g))
    56     
    57 
    58 plt.legend()
    59 plt.show()
    View Code

    执行结果:

    老实一点,可爱多了
  • 相关阅读:
    find实现特殊功能示例
    shell脚本之流程控制语句
    批量kill java进程方法-引出子shell和反引用
    一些shell默认的变量
    打印脚本执行进度条
    设置shell脚本静默方式输入密码方法
    shell监控之列出1小时内cpu占用最多的10个进程
    shell之使用paste命令按列拼接多个文件
    shell技巧之以逆序形式打印行
    shell之使用cut切割文本文件
  • 原文地址:https://www.cnblogs.com/KID-yln/p/12823748.html
Copyright © 2011-2022 走看看