DMelt:Finance/Financial Computations
From HandWiki
Member
Financial computations
DataMelt can be used for financial computations. It provides several mathematical and statistical tools needed for the valuation of shares, options, futures, swaps, and other financial instruments, also providing tools related to risk management and money management.
Equity option values
In this section we calculate equity option values with a number of methods, such as Black-Scholes, Barone-Adesi/Whaley, Bjerksund/Stensland, Ju Quadratic.
This code is based on the package "org.jquantlib" which is included by default in DataMelt. Look at the API of jquantlib project.
# @see http://quantlib.org/reference/_equity_option_8cpp-example.html
# @author Richard Gomes & S. Chekanov
from org.jquantlib import *
from org.jquantlib.exercise import EuropeanExercise,AmericanExercise
from org.jquantlib.instruments import Option,PlainVanillaPayoff,VanillaOption,EuropeanOption
from org.jquantlib.pricingengines.vanilla import BjerksundStenslandApproximationEngine,BaroneAdesiWhaleyApproximationEngine,BaroneAdesiWhaleyApproximationEngine
from org.jquantlib.methods.lattices import *
from org.jquantlib.pricingengines import *
from org.jquantlib.time import Month,Date
from org.jquantlib.time.calendars import Target
from org.jquantlib.daycounters import Actual365Fixed
from org.jquantlib.quotes import SimpleQuote,Handle
from org.jquantlib.termstructures.yieldcurves import FlatForward
from org.jquantlib.termstructures.volatilities import *
from org.jquantlib.processes import *
from org.jquantlib.pricingengines.vanilla import JuQuadraticApproximationEngine
# setup dates
calendar =Target()
todaysDate = Date(15, Month.May, 1998)
settlementDate = Date(17, Month.May, 1998)
Settings().setEvaluationDate(todaysDate)
# options
type=Option.Type.Put
strike = 40
underlying = 36
riskFreeRate = 0.06
volatility = 0.2
dividendYield = 0
maturity = Date(17, Month.May, 1999)
dayCounter = Actual365Fixed()
# Define exercise for European Options and setEvaluationDate(todaysDate);
europeanExercise =EuropeanExercise(maturity)
americanExercise = AmericanExercise(settlementDate, maturity);
payoff = PlainVanillaPayoff(type, strike)
underlyingH = Handle(SimpleQuote(underlying))
flatDividendTS =Handle(FlatForward(settlementDate, dividendYield, dayCounter))
flatTermStructure =Handle(FlatForward(settlementDate, riskFreeRate, dayCounter))
flatVolTS = Handle(BlackConstantVol(settlementDate, calendar, volatility, dayCounter))
bsmProcess = BlackScholesMertonProcess(underlyingH, flatDividendTS, flatTermStructure, flatVolTS)
# Black-Scholes for European
europeanOption = EuropeanOption(payoff, europeanExercise)
method = "Black-Scholes"
europeanOption.setPricingEngine(AnalyticEuropeanEngine(bsmProcess))
print method, europeanOption.NPV()