- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我的理解是,为了推进这一天,你会做这样的事情:
ql.Settings.instance().evaluation_date = calculation_date + 1
但是,当我执行以下代码时,我得到相同的选项值:
import QuantLib as ql
# option data
maturity_date = ql.Date(15, 1, 2016)
spot_price = 127.62
strike_price = 130
volatility = 0.20 # the historical vols for a year
dividend_rate = 0.0163
option_type = ql.Option.Call
risk_free_rate = 0.001
day_count = ql.Actual365Fixed()
#calendar = ql.UnitedStates()
calendar = ql.TARGET()
calculation_date = ql.Date(8, 5, 2015)
ql.Settings.instance().evaluationDate = calculation_date
# construct the European Option
payoff = ql.PlainVanillaPayoff(option_type, strike_price)
exercise = ql.EuropeanExercise(maturity_date)
european_option = ql.VanillaOption(payoff, exercise)
spot_handle = ql.QuoteHandle(
ql.SimpleQuote(spot_price)
)
flat_ts = ql.YieldTermStructureHandle(
ql.FlatForward(calculation_date, risk_free_rate, day_count)
)
dividend_yield = ql.YieldTermStructureHandle(
ql.FlatForward(calculation_date, dividend_rate, day_count)
)
flat_vol_ts = ql.BlackVolTermStructureHandle(
ql.BlackConstantVol(calculation_date, calendar, volatility, day_count)
)
bsm_process = ql.BlackScholesMertonProcess(spot_handle,
dividend_yield,
flat_ts,
flat_vol_ts)
european_option.setPricingEngine(ql.AnalyticEuropeanEngine(bsm_process))
bs_price = european_option.NPV()
print "The theoretical European price is ", bs_price
payoff = ql.PlainVanillaPayoff(option_type, strike_price)
settlement = calculation_date
am_exercise = ql.AmericanExercise(settlement, maturity_date)
american_option = ql.VanillaOption(payoff, am_exercise)
#Once you have the american option object you can value them using the binomial tree method:
binomial_engine = ql.BinomialVanillaEngine(bsm_process, "crr", 100)
american_option.setPricingEngine(binomial_engine)
print "The theoretical American price is ", american_option.NPV()
ql.Settings.instance().evaluation_date = calculation_date + 1
print "The theoretical European price is ", european_option.NPV()
print "The theoretical American price is ", american_option.NPV()
[idf@node3 python]$ python european_option.py
The theoretical European price is 6.74927181246
The theoretical American price is 6.85858045945
The theoretical European price is 6.74927181246
The theoretical American price is 6.85858045945
[idf@node3 python]$
编辑
按照下面的建议更改了代码,但日期更改对计算没有影响。
[idf@node3 python]$ python advance_day.py
The theoretical European price is 6.74927181246
The theoretical American price is 6.85858045945
The theoretical European price is 6.74927181246
The theoretical American price is 6.85858045945
[idf@node3 python]$
以下是根据建议进行的代码更改。
import QuantLib as ql
# option data
maturity_date = ql.Date(15, 1, 2016)
spot_price = 127.62
strike_price = 130
volatility = 0.20 # the historical vols for a year
dividend_rate = 0.0163
option_type = ql.Option.Call
risk_free_rate = 0.001
day_count = ql.Actual365Fixed()
#calendar = ql.UnitedStates()
calendar = ql.TARGET()
calculation_date = ql.Date(8, 5, 2015)
ql.Settings.instance().evaluationDate = calculation_date
# construct the European Option
payoff = ql.PlainVanillaPayoff(option_type, strike_price)
exercise = ql.EuropeanExercise(maturity_date)
european_option = ql.VanillaOption(payoff, exercise)
spot_handle = ql.QuoteHandle(
ql.SimpleQuote(spot_price)
)
flat_ts = ql.YieldTermStructureHandle(
ql.FlatForward(0, calendar, risk_free_rate, day_count)
)
dividend_yield = ql.YieldTermStructureHandle(
ql.FlatForward(0, calendar, dividend_rate, day_count)
)
flat_vol_ts = ql.BlackVolTermStructureHandle(
ql.BlackConstantVol(0, calendar, volatility, day_count)
)
bsm_process = ql.BlackScholesMertonProcess(spot_handle,
dividend_yield,
flat_ts,
flat_vol_ts)
european_option.setPricingEngine(ql.AnalyticEuropeanEngine(bsm_process))
bs_price = european_option.NPV()
print "The theoretical European price is ", bs_price
payoff = ql.PlainVanillaPayoff(option_type, strike_price)
settlement = calculation_date
am_exercise = ql.AmericanExercise(settlement, maturity_date)
american_option = ql.VanillaOption(payoff, am_exercise)
#Once you have the american option object you can value them using the binomial tree method:
binomial_engine = ql.BinomialVanillaEngine(bsm_process, "crr", 100)
american_option.setPricingEngine(binomial_engine)
print "The theoretical American price is ", american_option.NPV()
ql.Settings.instance().evaluation_date = calculation_date + 1
# Also tried calendar.advance(calculation_date,1,ql.Days)
print "The theoretical European price is ", european_option.NPV()
print "The theoretical American price is ", american_option.NPV()
最佳答案
计算日期并不是全部。您正在设置曲线,以便它们的引用日期是固定的(也就是说,您正在调用采用日期的构造函数;有关详细信息,请参阅 this post ;有关示例,请参阅 this video)。
如果您指定引用日期,则该引用日期的使用独立于计算日期;这是因为它们不一定相同(例如,您可能希望利率曲线基于现货日期而不是今天的日期)。因此,即使您更改计算日期,从曲线返回的波动率和汇率仍将相对于其引用日期,而引用日期并未发生变化。
要获得您想要的效果,您可以创建曲线,使其随评估日期移动;例如,而不是
ql.FlatForward(calculation_date, risk_free_rate, day_count)
你可以使用
ql.FlatForward(0, calendar, risk_free_rate, day_count)
这意味着引用日期被指定为“计算日期后的0个工作日”,或者换句话说,作为计算日期。波动率曲线有类似的构造函数。
关于python - 如何在 Quantlib 中提前一天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41471675/
我正在尝试在 ubuntu 13.04 中使用 quantlib-swig (1.2) 学习 quantlib (1.3) 和 python 绑定(bind)。作为初学者,我尝试使用 30/360 欧
我有一个以 quantlib 的日期格式定义的日期列表。我怎样才能将这些转换成日期时间格式。我问的原因是,我想绘制它,但收到以下错误: TypeError: float() argument must
普通欧洲 EURUSD 看涨期权的 Quantlib 价格与彭博 OVML 价格不匹配。 例如对于以下选项 Quantlib 值 =4.60991,BBG 值 =4.6137,错误 =0.0038(虽
普通欧洲 EURUSD 看涨期权的 Quantlib 价格与彭博 OVML 价格不匹配。 例如对于以下选项 Quantlib 值 =4.60991,BBG 值 =4.6137,错误 =0.0038(虽
我试图让 QL 在 Debian 上运行,但在最后一步失败了。我已经下载了源代码,构建并安装了库(“make”、“make install”),没有任何错误,但是我使用 QuantLib 库的应用程序
我已经在 visual studio 2010 中从他们的网站下载并构建了 QuantLib(在谷歌上搜索 quantlib 并检查安装链接)。但是因为我对 C++ 的了解很少,所以我想使用 SWIG
我在 ubuntu16.04 上通过 apt-get install 从官方源安装了 boost。然后按照 QuantLib 的安装指南进行操作 然后我复制一个 quantlib 示例 (Exampl
我已经通过二进制文件安装了 boost 库 v1.57.0 (x64),它在我的 VS2010Pro 下可以正常工作。 但是,当我尝试编译最新版本 (v1.5) 的 QuantLib 时,通过打开 Q
我从 github 下载了 Quantlib-SWIG 1.12.x 和 Quantlib 1.12.x。 Quantlib 编译时没有问题。这些示例正常运行。但是,当运行 python setup.
我检查这个slides但仍然没有得到: 1) what problem does Handle sovled? 2) what is the benefit to add the Handle cla
我正在一个项目中使用 Quantlib 来执行一些债券计算,例如 yield 和久期。插入上市日期到期日、面值、日历、天数惯例等并得出 yield 和持续时间值相当简单。 看起来给定发行日期、到期日期
当我使用 Quantlib 为普通利率掉期定价时,每笔现金流的支付日期始终与应计期结束日期相同。这是我通常用来设置普通交换的方式: Schedule fixedSchedule(previousRes
我正在尝试学习 QuantLib,这是我的第一个程序,我打算用它来检查我的环境是否正常并且我能够链接到 quantlib: #include using namespace QuantLib; in
我正在尝试构建 QuantLib 但是,在运行构建过程时,它返回 18 次成功和 1 次失败(解决方案中的 19 个项目)。失败的应该是 testsuite。我正在根据其网站说明构建一个 x64 版本
我正在使用 QuantLib 1.7.1 并尝试运行这些代码: Date begin(30, September, 2009), end(15, Jun, 2012); Calendar myCal
我正在学习如何使用 quantlib 为衍生品定价。将一些 Quantlib 特定类输出到控制台窗口的最佳方法是什么?例如 shared_ptr forwardCurve(new Interpolat
下面是我使用 Quantlib blackvariance 曲面的代码。但它提示。你能建议吗?在这个函数中,我用 6 个变量调用 Blackvariance 函数 from QuantLib impo
在 quantlib ( http://quantlib.org ) 上有好的入门文档吗?这些示例没有很好的记录,帮助也没有提供太多见解。 最佳答案 还有 数百个单元测试, 一打或更多的例子 超过 1
我开始使用 C++ 中的 Quantlib 并尝试运行示例代码。我一直在关注 中的教程 https://www.youtube.com/watch?v=Wn_D19c2ABU&t=569s 当他在 5
我也在 Wilmott 上发布了这个,不确定哪个会得到更多的回应。 我对 Quantlib(和 C++ ......)的世界还比较陌生,所以也许这是很明显的。我试图弄清楚 Quantlib 是否可以为
我是一名优秀的程序员,十分优秀!