Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 5 additions & 4 deletions examples/option_valuation.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,13 +22,14 @@
"""
from quantlib.settings import Settings
from quantlib.compounding import Simple
from quantlib.cashflows.dividend import DividendSchedule
from quantlib.instruments.dividendschedule import DividendSchedule
from quantlib.currency.api import USDCurrency
from quantlib.indexes.api import Libor
from quantlib.indexes.swap_index import SwapIndex
from quantlib.instruments.exercise import EuropeanExercise, AmericanExercise
from quantlib.instruments.option import VanillaOption, VanillaOption, OptionType
from quantlib.instruments.payoffs import PlainVanillaPayoff
from quantlib.exercise import EuropeanExercise, AmericanExercise
from quantlib.instruments.vanillaoption import VanillaOption
from quantlib.option import OptionType
from quantlib.payoffs import PlainVanillaPayoff
from quantlib.math.interpolation import Linear
from quantlib.pricingengines.api import AnalyticDividendEuropeanEngine
from quantlib.pricingengines.api import FdBlackScholesVanillaEngine
Expand Down
9 changes: 5 additions & 4 deletions examples/traits_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,11 @@
from traits.api import HasTraits, Enum, Float, Date, Property, Range
from traitsui.api import View, Item, HGroup, EnumEditor

from quantlib.instruments.option import Put, Call, EuropeanExercise
from quantlib.instruments.payoffs import PlainVanillaPayoff
from quantlib.instruments.option import VanillaOption
from quantlib.pricingengines.vanilla import AnalyticEuropeanEngine
from quantlib.option import OptionType
from quantlib.exercise import EuropeanExercise
from quantlib.payoffs import PlainVanillaPayoff
from quantlib.instruments.vanillaoption import VanillaOption
from quantlib.pricingengines.api import AnalyticEuropeanEngine
from quantlib.processes.black_scholes_process import BlackScholesMertonProcess
from quantlib.quotes import SimpleQuote
from quantlib.settings import Settings
Expand Down
File renamed without changes.
11 changes: 11 additions & 0 deletions quantlib/_option.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
from ._instrument cimport Instrument
from ._exercise cimport Exercise
from ._payoffs cimport Payoff
from quantlib.handle cimport shared_ptr


cdef extern from 'ql/option.hpp' namespace 'QuantLib' nogil:

cdef cppclass Option(Instrument):
shared_ptr[Payoff] payoff()
shared_ptr[Exercise] exercise()
File renamed without changes.
10 changes: 9 additions & 1 deletion quantlib/instruments/exercise.pxd → quantlib/exercise.pxd
Original file line number Diff line number Diff line change
@@ -1,8 +1,16 @@
from quantlib.handle cimport shared_ptr
cimport quantlib.instruments._exercise as _exercise
from . cimport _exercise

cdef extern from 'ql/exercise.hpp' namespace 'QuantLib::Exercise' nogil:
cpdef enum class Type:
"""Exercise types

Attributes
----------
American
Bermudan
European
"""
American
Bermudan
European
Expand Down
48 changes: 35 additions & 13 deletions quantlib/instruments/exercise.pyx → quantlib/exercise.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,15 @@ from quantlib.time.date cimport Date, _pydate_from_qldate
from quantlib.time._date cimport Date as QlDate

cdef class Exercise:
"""Base exercise class

Attributes
----------
American
Bermudan
European
"""


American = Type.American
Bermudan = Type.Bermudan
Expand All @@ -19,6 +28,7 @@ cdef class Exercise:
return _pydate_from_qldate(self._thisptr.get().lastDate())

def dates(self):
""" all exercise dates"""
cdef vector[QlDate].const_iterator it = self._thisptr.get().dates().const_begin()
cdef list r = []
while it != self._thisptr.get().dates().end():
Expand All @@ -30,6 +40,10 @@ cdef class Exercise:
return self._thisptr.get().type()

cdef class EuropeanExercise(Exercise):
"""European exercise

A European option can only be exercised at one (expiry) date.
"""

def __init__(self, Date exercise_date not None):
self._thisptr.reset(
Expand All @@ -39,14 +53,21 @@ cdef class EuropeanExercise(Exercise):
)

cdef class AmericanExercise(Exercise):
"""American exercise

def __init__(self, Date latest_exercise_date, Date earliest_exercise_date=None):
""" Creates an AmericanExercise.
An American option can be exercised at any time between to
predefined dates; the first date might be amitted, in which
case the option can be exercied at any time before the expiry.

:param latest_exercise_date: Latest exercise date for the option
:param earliest_exercise_date: Earliest exercise date for the option (default to None)
Parameters
----------
latest_exercise_date : :class:`~quantlib.time.date.Date`
Latest exercise date for the option
earliest_exercise_date : :class:`~quantlib.time.date.Date` | None
Earliest exercise date for the option
"""

"""
def __init__(self, Date latest_exercise_date, Date earliest_exercise_date=None):
if earliest_exercise_date is not None:
self._thisptr = shared_ptr[_exercise.Exercise]( \
new _exercise.AmericanExercise(
Expand All @@ -63,16 +84,17 @@ cdef class AmericanExercise(Exercise):


cdef class BermudanExercise(Exercise):
def __init__(self, list dates, bool payoff_at_expiry=False):
""" Bermudan exercise
""" Bermudan exercise

A Bermudan option can only be exercised at a set of fixed dates.
A Bermudan option can only be exercised at a set of fixed dates.

Parameters
----------
dates : list of exercise dates
payoff_at_expiry : bool
"""
Parameters
----------
dates : list of exercise dates
payoff_at_expiry : bool
"""

def __init__(self, list dates, bool payoff_at_expiry=False):
cdef vector[QlDate] c_dates
for d in dates:
c_dates.push_back((<Date?>d)._thisptr)
Expand Down
6 changes: 3 additions & 3 deletions quantlib/instruments/_asian_options.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@ from libcpp.vector cimport vector
from quantlib.handle cimport shared_ptr
from quantlib.time._date cimport Date

from quantlib.instruments._exercise cimport Exercise
from quantlib.instruments._option cimport OneAssetOption
from quantlib.instruments._payoffs cimport StrikedTypePayoff
from quantlib._exercise cimport Exercise
from ._oneassetoption cimport OneAssetOption
from quantlib._payoffs cimport StrikedTypePayoff

from .asian_options cimport AverageType

Expand Down
12 changes: 12 additions & 0 deletions quantlib/instruments/_europeanoption.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
from .._payoffs cimport Payoff, StrikedTypePayoff
from ._vanillaoption cimport VanillaOption
from .._exercise cimport Exercise
from quantlib.handle cimport shared_ptr

cdef extern from 'ql/instruments/europeanoption.hpp' namespace 'QuantLib' nogil:

cdef cppclass EuropeanOption(VanillaOption):
EuropeanOption(
shared_ptr[StrikedTypePayoff]& payoff,
shared_ptr[Exercise]& exercise
)
27 changes: 27 additions & 0 deletions quantlib/instruments/_oneassetoption.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
from quantlib.types cimport Real
from .._option cimport Option
from quantlib.handle cimport shared_ptr
from .._exercise cimport Exercise
from .._payoffs cimport StrikedTypePayoff
from quantlib.pricingengines._pricing_engine cimport PricingEngine

cdef extern from 'ql/instruments/oneassetoption.hpp' namespace 'QuantLib' nogil:

cdef cppclass OneAssetOption(Option):
cppclass engine(PricingEngine):
pass
OneAssetOption(
shared_ptr[StrikedTypePayoff]& payoff,
shared_ptr[Exercise]& exercise
)
Real delta() except +
Real deltaForward() except +
Real elasticity() except +
Real gamma() except +
Real theta() except +
Real thetaPerDay() except +
Real vega() except +
Real rho() except +
Real dividendRho() except +
Real strikeSensitivity() except +
Real itmCashProbability() except +
76 changes: 0 additions & 76 deletions quantlib/instruments/_option.pxd

This file was deleted.

4 changes: 2 additions & 2 deletions quantlib/instruments/_swaption.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ include '../types.pxi'
from quantlib.handle cimport shared_ptr, optional
from ._fixedvsfloatingswap cimport FixedVsFloatingSwap
from ._overnightindexedswap cimport OvernightIndexedSwap
from ._option cimport Option
from ._exercise cimport Exercise
from .._option cimport Option
from .._exercise cimport Exercise
from .swap cimport Type as SwapType
from quantlib.termstructures._yield_term_structure cimport YieldTermStructure
from quantlib.termstructures.volatility.volatilitytype cimport VolatilityType
Expand Down
33 changes: 33 additions & 0 deletions quantlib/instruments/_vanillaoption.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
from quantlib.types cimport Real, Size, Volatility
from ._oneassetoption cimport OneAssetOption
from ._dividendschedule cimport DividendSchedule
from .._payoffs cimport StrikedTypePayoff
from .._exercise cimport Exercise

from quantlib.processes._black_scholes_process cimport GeneralizedBlackScholesProcess
from quantlib.handle cimport shared_ptr

cdef extern from 'ql/instruments/vanillaoption.hpp' namespace 'QuantLib' nogil:

cdef cppclass VanillaOption(OneAssetOption):
VanillaOption(
shared_ptr[StrikedTypePayoff]& payoff,
shared_ptr[Exercise]& exercise
)
Volatility impliedVolatility(
Real price,
shared_ptr[GeneralizedBlackScholesProcess]& process,
Real accuracy, # 1.0e-4
Size maxEvaluations, #100
Volatility minVol, # 1.0e-7
Volatility maxVol # 4.0
) except +
Volatility impliedVolatility(
Real price,
shared_ptr[GeneralizedBlackScholesProcess]& process,
DividendSchedule dividends,
Real accuracy, # 1.0e-4
Size maxEvaluations, #100
Volatility minVol, # 1.0e-7
Volatility maxVol # 4.0
) except +
8 changes: 5 additions & 3 deletions quantlib/instruments/api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,11 @@
from .bondforward import BondForward
from .credit_default_swap import CreditDefaultSwap, PricingModel
from ..default import Protection
from .exercise import EuropeanExercise, AmericanExercise
from .option import VanillaOption, EuropeanOption, OptionType
from .payoffs import PlainVanillaPayoff
from ..exercise import EuropeanExercise, AmericanExercise
from ..option import OptionType
from .vanillaoption import VanillaOption
from .europeanoption import EuropeanOption
from ..payoffs import PlainVanillaPayoff
from .swap import Swap
from .vanillaswap import VanillaSwap
from .make_vanilla_swap import MakeVanillaSwap
Expand Down
2 changes: 1 addition & 1 deletion quantlib/instruments/asian_options.pxd
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from quantlib.instruments.option cimport OneAssetOption
from .oneassetoption cimport OneAssetOption

cdef extern from 'ql/instruments/averagetype.hpp' namespace 'QuantLib::Average':
cpdef enum class AverageType "QuantLib::Average::Type":
Expand Down
8 changes: 4 additions & 4 deletions quantlib/instruments/asian_options.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ from libcpp.vector cimport vector
from quantlib.handle cimport shared_ptr, static_pointer_cast
cimport quantlib.time._date as _date
from quantlib.time.date cimport Date
from quantlib.instruments.payoffs cimport StrikedTypePayoff
from quantlib.payoffs cimport StrikedTypePayoff

from .option cimport OneAssetOption
from .exercise cimport Exercise
from . cimport _payoffs
from .oneassetoption cimport OneAssetOption
from ..exercise cimport Exercise
from .. cimport _payoffs
from .._instrument cimport Instrument as _Instrument
from ._asian_options cimport (
ContinuousAveragingAsianOption as _ContinuousAveragingAsianOption,
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from libcpp.vector cimport vector
from ._dividend cimport Dividend
from quantlib.cashflows._dividend cimport Dividend
from quantlib.handle cimport shared_ptr

cdef class DividendSchedule:
Expand Down
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from quantlib.time.date cimport _qldate_from_pydate, _pydate_from_qldate
from quantlib.time._date cimport Date
from quantlib.types cimport Real
from ._dividend cimport DividendVector, Dividend
from quantlib.cashflows._dividend cimport DividendVector, Dividend

cdef class DividendSchedule:
def __init__(self, list dividend_dates, vector[Real] dividends):
Expand Down
4 changes: 4 additions & 0 deletions quantlib/instruments/europeanoption.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
from .vanillaoption cimport VanillaOption

cdef class EuropeanOption(VanillaOption):
pass
Loading