Java版本欧式期权计算器

  • 使用Java编写欧式期权计算器
    • 先看一下欧式期权计算公式
    • 完整Java代码

使用Java编写欧式期权计算器

目前公司一个小程序项目需要用到欧式期权器,计算看涨期权与看跌期权理论价格,鉴于网上也没有Java版本的。所以本人打算亲自写一个,使用java编写,解决这一个小知识点的同时,也希望能帮到大家,欢迎转载

先看一下欧式期权计算公式

这里直接引入欧式期权理论价格计算公式

参数说明:
C:看涨期权初始合理价格 P:看跌期权初始合理价格
X:执行价格 S:期货价格 T:期权有效期
r:无风险利率 b:持有持本,默认取0
σ2:年度化方差 N():正态分布变量的累积概率分布函数
其中正太分布函数excel中可以通过normsdist函数求出,这里直接用java编写

完整Java代码

// 包名需要自行引入/*** @author TaoZhiQun 武汉量投网络科技有限公司* @version v1.0* @desc 欧式看涨看跌期权计算器* @date 2019/12/11 11:47*/
public final class EuropeanOptionCalculate {private EuropeanOptionCalculate() {}/*** 年取365天*/private static double yearDays = 365L;/*** 正态分布函数* 化解定积分,取5阶导数** @param a d1 d2的值* @return double*/private static double n(double a) {double p = 0.2316419;double b1 = 0.31938153;double b2 = -0.356563782;double b3 = 1.781477937;double b4 = -1.821255978;double b5 = 1.330274429;double x = Math.abs(a);double t = 1 / (1 + p * x);double val = 1 - (1 / (Math.sqrt(2 * Math.PI)) * Math.exp(-1 * Math.pow(a, 2) / 2)) * (b1 * t + b2 * Math.pow(t, 2) + b3 * Math.pow(t, 3) + b4 * Math.pow(t, 4) + b5 * Math.pow(t, 5));if (a < 0) {val = 1 - val;}return val;}/*** 获取看涨期权价格,持有成本b取0* 期货价格 S,执行价格X,有效天数T 即相隔天数,r无风险利率 ,sigma年度波动率* 若传入两个日期,先计算两个日期出相隔天数*/public static double getCallPrice(double s, double x, int t, double r, double sigma) {final double powER = Math.pow(Math.E, -r * (t / yearDays));double d1 = getD1(s, x, t, sigma);return s * powER * n(d1) - x * powER * n(getD2(d1, t, sigma));}/*** 获取看跌期权价格,持有成本b取0* 期货价格 S,执行价格X,有效天数T 即相隔天数,r无风险利率 ,sigma年度波动率* 若传入两个日期,先调用DateUtil getBetweenDays计算出相隔天数*/public static double getPutPrice(double s, double x, int t, double r, double sigma){final double powER = Math.pow(Math.E, -r * (t / yearDays));double d1 = getD1(s, x, t, sigma);return x*powER*n(-getD2(d1,t,sigma))-s*powER*n(-d1);}/*** 获取d1** @param s     :期货价格* @param x     :执行价格* @param t     :有效天数* @param sigma :年度波动率* @return d1*/private static double getD1(double s, double x, int t, double sigma) {return (Math.log(s / x) + 0.5 * Math.pow(sigma, 2) * (t / yearDays)) / (sigma * Math.sqrt((t / yearDays)));}/*** 获取d2* @param d1 :计算的d1值* @param t:相隔天数* @param sigma :年度波动率* @return :d2*/private static double getD2(double d1, int t, double sigma) {return d1 - sigma * (Math.sqrt((t / yearDays)));}public static void main(String[] args) {// 期货价格double s = 5500L;// 执行价格double x = 6000L;// 相隔天数int t = 365;// 无风险利率double r =0.06;// 年度波动率double sigma = 0.12;final double callPrice = getCallPrice(s, x, t, r, sigma);final double putPrice = getPutPrice(s,x,t,r,sigma);System.out.println("看涨期权理论价格"+callPrice);System.out.println("看跌期权理论价格"+putPrice);}}
  • 有任何问题欢迎及时指正,不胜感激

使用Java编写欧式期权理论理论计算公式相关推荐

  1. 美式期权、欧式期权比较分析——定价与风险管理

    一.美式期权.欧式期权定义 期权是一种金融合约,这一合约赋予其持有人在约定的时间以约定的价格买入或卖出标的资产的权利.期权的执行方式主要有美式和欧式.美式期权指期权的买方在合约到期日之前任意交易日都可 ...

  2. 圆弧周长公式_钢板和钢管的理论重量计算公式居然不一样?

    工业制造机械.数控.制造原理 各类钢材理论重量计算公式大全,欢迎收藏哦!1.钢板重量计算公式 公式:7.85×长度(m)×宽度(m)×厚度(mm) 例:钢板6m(长)×1.51m(宽)×9.75mm( ...

  3. C++:实现一些简单的方法来 布莱克-斯科尔斯期权估值理论(附完整源码)

    C++:实现一些简单的方法来 布莱克-斯科尔斯期权估值理论 test.hpp test.cpp test.hpp # include <string> using namespace st ...

  4. 钢材理论重量计算公式大全

    各类钢材理论重量计算公式大全,欢迎收藏哦! 1.钢板重量计算公式 公式:7.85×长度(m)×宽度(m)×厚度(mm) 例:钢板6m(长)×1.51m(宽)×9.75mm(厚) 计算:7.85×6×1 ...

  5. java编写代码用什么_如何学习用Java编写代码:为什么要学习以及从哪里开始

    java编写代码用什么 by John Selawsky 约翰·塞劳斯基(John Selawsky) 如何学习用Java编写代码:为什么要学习以及从哪里开始 (How to learn to cod ...

  6. 欧式期权matlab编码蒙特卡罗方法,基于MATLAB的金融工程方法与实践第七章 基于蒙特卡洛方法的期权定价.ppt...

    蒙特卡洛的优缺点 MCMC方法的优点 分布假设更一般,描述市场因素可能变化的统计分布既可以是正态.对数正态的,也可以是带跳的扩散分布.t分布等. 随机生成风险因素的各种各样的未来假想情景,可在模型中融 ...

  7. 使用Java编写自己的区块链

    使用Java编写自己的区块链 准备工作 开发环境 开始开发 Transaction类 Block类 BlockChain类 实现交易功能 实现创建新块功能 工作量证明 Blockchain作为API接 ...

  8. java编写的atm机项目结题报告_java编写的atm机项目结题报告.docx

    java编写的atm机项目结题报告 java编写的atm机项目结题报告 篇一:java自动取款机模拟程序报告含源代码 合肥学院 计算机科学与技术系 课程设计报告 XX-XX学年第一学期 课学学专指 业 ...

  9. 蒙特卡洛 欧式期权 matlab,大家好,问大家一个蒙特卡洛期权定价的matlab程序,谢谢大家...

    欧式期权是对的,美式期权定出的价格差距就很大,不知道哪里问题,是理论出问题了吗?谢谢大家 if AoE  %欧式期权 P(1,:)=exp(-r*T)*P(N+1,:); else if type P ...

最新文章

  1. 冒泡排序讲的明白 也有代码的
  2. pytest架构 python_Pytest+Allure接口自动化
  3. Android 打印log 在logcat 看不到
  4. ISIS建立邻居的条件
  5. mysql5.7 启动报发生系统错误2
  6. php输出数据过大,PHPExcel导出数据量过大处理
  7. 基于Socket的UDP和TCP编程介绍-转
  8. HDU4268 2012ACM长春赛区网络赛 Alice and Bob
  9. 括号匹配问题(九度教程第 26 题)
  10. python 闭包,装饰器,random,os,sys,shutil,shelve,ConfigParser,hashlib模块
  11. (转)Dinkelbach算法(01二分规划更优解法)
  12. PrestaShop加速11招立刻加速PrestaShop外贸电子商务网站无额外插件
  13. 时间序列学习(5):ARMA模型定阶(AIC、BIC准则、Ljung-Box检验)
  14. 用户注册的邮箱激活模块的设计与实现
  15. 通过className属性给一个元素追加新class(addClass函数)
  16. 前端---HTML制作百度首页
  17. 重庆金域 :新系统成功上线!重庆金域第一份新系统的报告单2017年9月21日13:00正式发出
  18. oracle 如何查看监听,[转载]查看oracle监听器的状态及打开监听器服务
  19. Springboot实现手机短信服务
  20. 普通话智能测试系统软件,普通话智能学习软件(普通话水平测试仿真系统) iso光盘版...

热门文章

  1. Golang 等比例调整图片分辨率且用黑色补齐多余部分
  2. 【正点原子FPGA连载】第十九章IP核之双端口RAM实验 -摘自【正点原子】新起点之FPGA开发指南_V2.1
  3. sklearn的SVM的decision_function_shape的ovo和ovr
  4. OSWE 尾篇 考试的方法论
  5. Linux下实现苹果AirPlay音频服务器
  6. 传奇单机架设登录器配置教程
  7. mysql jdbc驱动 批量更新_jdbc-批量插入、批量删除、批量更新
  8. JavaScriptES5新方法
  9. 去中心化云存储的前世今生 | 存储技术分享活动回顾
  10. Virtualbox源码分析4:VMM虚拟化实现源码分析1