# Tag Info

10

I've been using QuantLib for quite a while. Let me share some experience: QuantLib is a highly sophisticated quantitative framework. It can do much and much more than a simple pricing of European option. For example, in your example, you could have changed the payoff to binary payoff or giving a monte-carlo pricing engine (rather than ...

6

And don't forget that there are wrappers as eq RQuantLib which I use on the command-line here: edd@max:~$r -l RQuantLib -e 'print(EuropeanOption("call", 47, 40, 0.05, 0.0, 4/12, 0.2))' Concise summary of valuation for EuropeanOption value delta gamma vega theta rho divRho 6.4728 0.8899 0.0307 4.5139 0.7372 ... 5 It is a simple root finder, and if you give it impossible starting values... well then it fails. Here, you can play with the values and it seems bounded at USD 5 whereas you start from USD 2.7: R> AmericanOption(type="put", underlying = 55, strike = 60, + dividendYield = 0.02, riskFreeRate = 0.03, + maturity = 0.02, ... 5 To add to Student T's answer, which I second: the complex setup starts making sense (and its cost gets amortized) once you start keeping the instruments around instead of throwing them away after the pricing. For instance, once the option above is built, you can change the market price of the underlying (or its volatility, or the risk free rate) by just ... 4 The Strata project is the new pure Java market risk quant library from OpenGamma. For more information, see the documentation and GitHub. It is Apache v2 licensed. Strata takes the experience of the OG-Platform codebase referenced in the question and turns it into a library - no need for databases, servers or similar. Ease of use is a big focus and there ... 4 At this time, there's no specific documentation for QuantLib-Python, except for a series of screencasts that I started a while ago (you can find them on YouTube at https://www.youtube.com/playlist?list=PLu_PrO8j6XAvOAlZND9WUPwTHY_GYhJVr) but which is far from exhaustive; there's just a few of them for now, and there's no definite learning path. However, the ... 4 The QuantLib you installed is just a C++ library. If you were on a Windows machine, you'd need the QuantLibXL addin to use it in Excel (http://quantlib.org/quantlibxl/). But on a Mac, you've no such luck. As far as I know, Excel for Mac only allows addins written in VBA, so QuantLibXL can't be built for it. 4 In the call to Bisection.solve, the question mark must be the Python function whose zero you want to find. In your case, it should be something reproducing the logic of IRRSolver::operator() in Mick Hittesdorf's code, i.e., something like this (which I haven't tested): cashflows = fixedRateBond.cashflows() npv = fixedRateBond.NPV() def ... 4 The installation process should be the same as on Linux. Once you have the C++ QuantLib library installed (instructions for that are on the QuantLib site, at http://quantlib.org/install/macosx.shtml) you can download the latest QuantLib-SWIG release, uncompress it and run: ./configure make -C Python sudo make -C Python install Note that the above work ... 4 Do you really need to do this yourself? The absolute state of the art is Peter Jaeckel's work, where he makes an implied vol function as good as exp, cos, and log special functions. And he pulished source code and algorithm details with careful numerical analysis of errors and convergence. This is a wheel you don't have to reinvent, any more than you ... 4 It is always better to use some closed form approximation first to get initial guess. Corrado and Miller (1996) produced a solution that is quite accurate across a range of moneyness ( though it can be applied to BS model only and can’t be used for plain vanilla options or exotic options). The formula for implied volatility$\sigma$is :$\sigma = ...

3

The 0.01 from your provider is likely wrong, or it could be some kind of default value that gets displayed when the option expires. According to the data you posted, you're just 9 days from expiration, and your underlying price is just about 3/4 of the strike price; that is, you're pretty out of the money. You're going to need a lot of volatility to get a ...

3

Sigh. I'm not sure that there's a best way to do multi-threaded MC in QuantLib. I'm afraid that you're underestimating the amount of development you'd need for option 2. You're not going to get away with some OpenMP code as you suggest, because calculations on different paths are not trivially parallel: the RNGs we have are not parallel, and even if you ...

3

No, I don't think the raw solution you sketch is going to work. First and foremost, by extracting the cash flows from the bond you're discarding the dynamics of their rate under the Hull/White model you're using. You should both forecast and discount them on the tree; the way to do it correctly is implemented, e.g., in the DiscretizedSwap class (and ...

3

fixedLegBPS is the basis-point sensitivity of the fixed leg, that is, how much its NPV changes when the fixed rate changes by one basis point: it's calculated as the NPV corresponding to a fixed rate of 1 bps. Since the NPV of the fixed leg is linearly proportional to the fixed rate, you can write the equation targetNPV : fixedRate = BPS : 1 basis point ...

3

You're not the first to trip on this, and unfortunately the fact that the provided example is from a different era doesn't help. Quite simply, you're not writing rates correctly. The 5-years swap rate, 0.3523%, must be written in decimal form as 0.003523. The same goes for the deposit rates. As your code is now, you're writing that the 4-years rate is ...

3

Yes, your solution is correct, given the implementation of McSimulation and the interface of SequenceStatistics. We should probably have defined SequenceStatistics as returning instances of Array... As you might have seen, trying to return std::vector<Real> from the path pricer wouldn't work; the result type needs to define arithmetic operations such ...

2

At first sight, I'd say it's ok. You'll have to let the constructor of your process class take the maturity time, so you can create different instances with different $T$.

2

It is all in the code:: Rcpp::List rl = Rcpp::List::create(Rcpp::Named("value") = opt.NPV(), Rcpp::Named("delta") = opt.delta(), Rcpp::Named("gamma") = opt.gamma(), Rcpp::Named("vega") = (excType=="european") ? opt.vega() : R_NaN, ...

2

You will find a tutorial of QuantLib using python with simple examples here: http://gouthamanbalaraman.com/blog/quantlib-python-tutorials-with-examples.html I have been writing these as a means to be instructive to others going through the process of learning and working with QuantLib. If you have suggestions on what topics you would like to read, please ...

2

FRARateHelper takes a number of constructors. You should take a look at the ones that take Period. The definition for Period is: class Period { public: Period() : length_(0), units_(Days) {} Period(Integer n, TimeUnit units) : length_(n), units_(units) {} explicit Period(Frequency f); Integer length() const { return length_; } ...

2

QSTK is nice and open source , it is the QuantSciTookKit and it has some good functionality if you are interested in python programming. Here is the link: http://wiki.quantsoftware.org/index.php?title=QuantSoftware_ToolKit

2

While @Baruch Youssin answers correctly in the general sense, the first part of his answer isn't what happened in the example code. While QLNet is a port of QuantLib, it's not a direct port. Your quoted example doesn't show up in QLNet. The example in QuantLib was written in a very complicated way, in fact it's a simple example. discountingTermStructure is ...

2

I do not yet know QuantLib but one question is general and easy to answer: My first question is why do they use different yield curve? These two curves differ by risk levels inherent in them - the credit spreads over the risk-free yield curve (e.g., the OIS curve). The discounting curve, discountingTermStructure, embeds the risk that this particular ...

2

Touch option is simply a barrier option in QuantLib. You could create one like a down-in barrier type. You can also set the payoff to a binary payoff. The payoff is represented by the StrikePayOff class. A comprehensible example is available on github here.

2

As you saw, the default behavior is to consider the option expired at the exercise date, so the NPV is null. You can override this behavior by executing Settings::instance().includeReferenceDateEvents() = true; After the above, the option will be considered alive at exercise date. I'm not sure that all pricing engines will manage the case $T=0$ correctly ...

1

Probably the easiest way to get it is through MacPorts, which will take care of the Python dependencies, et cetera, for you. If you have not already done so, you can get started with MacPorts using these instructions. After MacPorts is installed, you can simply invoke sudo port install QuantLib which pretty much just follows the official recommendations ...

1

1. When you are using not-so-easily-converging method for convergence : Using simplest case of ATMF option , we can assume that S = X * exp(-rT) This gives a closed form solution for implied volatility as follows, which can be safely used as your initial estimator ImpliedVol = (C/S) * sqrt ( 2*pi / T) C = Market price of option S = Spot price ...

1

Without a lot more information, it's difficult to say. Some explanations include (but are not limited to): debugging symbols are not present; your system might be missing the libquant-dbg (or similar) package. If you compile your own libquant, enable debugging symbols by adding -g to your CFLAGS. Eclipse is not configured correctly; this is a rather large ...

1

It's kind of complicated. I'm afraid QuantLib doesn't have a "right" way to do this. The short answer is that the way you sketched (inheriting from VanillaOptionFuture::engine) should work. You might not even need a dynamic_cast; if you're passing the engine to a VanillaOptionFuture, it will set the futureExpiry data member, whereas if you're passing the ...

Only top voted, non community-wiki answers of a minimum length are eligible