Python和GPU加速期权估值
包括二叉树,蒙特卡洛法,有限差分法
嘉诩
今年想写书,有路子的联系我
展开
-
Cuda协作组和期权的有限差分法估值
但是cuda的syncthreads只能同步同一block中所有线程,如果问题规模比较大,跨越了block,那么彼此之间的同步就无法进行了。使用的是CK法,本质上是求解线性方程,作者采用的是LU分解法,我们改为用矩阵的逆相乘,在核函数中的处理就简单很多了。Numba支持Cuda协作组 (Cooperative Groups),这样我们就可以实现所有线程的同步。使用该方法可以大大加速有限差分法的速度,但是该方法不支持stream。Python金融数据分析。》中的向下敲出期权的例子。原创 2024-02-21 08:40:32 · 157 阅读 · 0 评论 -
蒙特卡洛法批量计算期权希腊值
一般计算期权的希腊值会用中心差分的办法,比如Delta就需要分别计算标的涨跌1%的估值。再加上其他希腊值,我们就需要运行多次蒙特卡洛,时间效率不高。我们可以定义第一个维度是价格路径,第二个维度是估值的类型。以回望期权计算Delta和Gamma为例,核函数可以写成。由于cuda最多支持3个维度,而且随机数矩阵通常都是不变的,所以我们可以利用这一特点一次性把这些值都算出来。同样的,这个方法也可以用来计算多个期权的估值。这样就可以一次性把所有希腊值计算出来。原创 2024-02-20 09:00:50 · 291 阅读 · 0 评论 -
Numba原子操作和期权蒙特卡洛估值
numba支持核函数中生成随机数,也支持cuda原子操作,所以在核函数中有可能实现所有步骤。经测试,随着路径增多,atomic.add加出来的结果和cupy.mean有细微的误差。1,生成许多标的价格路径,这一步是通用的,对所有的期权都是一样的。2,根据价格路径计算到期日期权的价值,这一步根据期权类型的不同。3,求所有路径下期权价值贴现的期望。期权蒙特卡洛法的一般步骤是。原创 2024-02-19 11:19:05 · 399 阅读 · 0 评论 -
Python调用cuRandSobol生成Sobol
我们可以用c++编写共享库,然后通过Python的Ctypes方式调用。scipy下面的qmc模块在cupy中没有对应。首先编写一个gen_sobol.cu文件。cuRand提供了sobol生成器,卡洛估值中非常有用。,但是速度比普通的伪随机数要慢。JoeKuoD6,支持的最大。Python下想使用。原创 2024-02-07 10:17:45 · 246 阅读 · 0 评论 -
期权二叉树估值与图计算
传统期权二叉树的算法都是基于数组的,对于没有编程基础的人来说非常不直观。二叉树是一种特殊的图,可以用python networkx这个图算法库实现,这个库不仅包含常用的图算法,还包含简单的绘图功能,非常适合研究分析使用。我们注意到,对于中间的节点,其实有一些是相等的,因为对于一支标的价格,S*u*d=S*d*u,所以我们可以将这些节点合并,这就是网格模式。直接用二叉树空间复杂度为。原创 2023-12-31 16:18:30 · 693 阅读 · 0 评论