Hot answers tagged

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 AnalyticEuropeanEngine)...


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 11....


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 ...


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

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

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

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 = \frac{1}{...


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

1: Follow the calculations in The Complete Guide to Option Pricing Formulas. The book has many formulas, sample values and outputs. Highly recommended for validating your results. Apparently, this is one of most popular books used by real-world quants (simple and fast). 2: You can still use QuantLib to price with year fractions. I have an example: ...


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

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 ...


3

You don't need all the discount factors. You just need the currency basis swap market, which exists precisely for this purpose. For example if the 5 yr eur/usd currency basis is -25, it means that you can exchange a euribor-25 liability for a usd libor flat liability. These swaps also have an exchange of principal amounts at the start and end to convert ...


3

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 ...


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 ...


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 23....


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

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, Rcpp::Named("...


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

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

This Quandl Page provides you the informations you need: a lot of programming languages and other tools are linked to Quandl.


1

two things I would try...and this is really off the top of my head... is 1). to use put-call parity to check that your work makes financial sense. Call = Spot + Put - (strike price)/(1+risk_free_rate)^Time 2). see if you can recreate anything close to present/past market (Yahoo finance?) data prices, i.e. testing your model against reality. good luck


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