Package: qtk
# Quant Python ToolKitThis package is intended to be a layer above QuantLib Python and a few other quantitative librariesto be more accessible for quantitative finance calculations.## Minimal ExampleHere is a minimal example for valuing a bond using a provided zero rates.from qtk import Controller, Field as F, Template as Tdata = [{'Compounding': 'Compounded','CompoundingFrequency': 'Annual','Currency': 'USD','DiscountBasis': '30/360','DiscountCalendar': 'UnitedStates','ListOfDate': ['1/15/2015', '7/15/2015', '1/15/2016'],'ListOfZeroRate': [0.0, 0.005, 0.007],'ObjectId': 'USD.Zero.Curve','Template': 'TermStructure.Yield.ZeroCurve'},{'DiscountCurve': '->USD.Zero.Curve','ObjectId': 'BondEngine','Template': 'Engine.Bond.Discounting'},{'AccrualCalendar': 'UnitedStates','AccrualDayConvention': 'Unadjusted','AsOfDate': '2016-01-15','Coupon': 0.06,'CouponFrequency': 'Semiannual','Currency': 'USD','DateGeneration': 'Backward','EndOfMonth': False,'IssueDate': '2015-01-15','MaturityDate': '2016-01-15','ObjectId': 'USD.TBond','PaymentBasis': '30/360','PricingEngine': '->BondEngine','Template': 'Instrument.Bond.TreasuryBond'}]res = Controller(data)asof_date = "1/15/2015"ret = res.process(asof_date)tbond = res.object("USD.TBond")print tbond.NPV()The basic idea here is that once you have the data prepared, the `Controller` can be invoked to do the calculations.A few points that are worth noting here.- All the data is textual and rather intuitive. For instance, the couponfrequency is just stated as `Annual` or `Semiannual`. The same is true for a lot of other fields. For dates,the `dateutil` package is used to parse and covers a wide variety of formats.- The `data` is essentially a `list` of `dict` with each `dict` corresponding to a specific `object` as determinedby the value to the key `Template` in each `dict`. Each `object` here has a name as specified by the value of thekey `ObjectId`- One of the values can refer to another object described by a `dict` by using the `reference` syntax. For instance,the first `dict` in the `data` list (with `ObjectId` given as *USD.Zero.Curve* ) variable refers to an interestrate term structure of zero rates. The next object is a discounting bond engine, and require an yield curve asinput for the discount curve. Here the yield curve is refered by using the prefix `->` along with the name of theobject we are referring to.- Here, the `Controller` parses the data, and figures out the dependency and processes the object in the correct orderand fulfills the dependencies behind the scenes.## IntrospectionThere are a few convenience methods that provide help on how to construct the data packet. For example,the `help` method in the template prints out the summary and list of fields on how to constructthe data packet for the template.> T.TS_YIELD_BOND.help()**Description**A template for creating yield curve by stripping bond quotes.**Required Fields**- `Template` [*Template*]: 'TermStructure.Yield.BondCurve'- `InstrumentCollection` [*List*]: Collection of instruments- `AsOfDate` [*Date*]: Reference date or as of date- `Country` [*String*]: Country- `Currency` [*String*]: Currency**Optional Fields**- `ObjectId` [*String*]: A unique name or identifier to refer to this dictionary data- `InterpolationMethod` [*String*]: The interpolation method can be one of the following choices: LinearZero, CubicZero, FlatForward, LinearForward,LogCubicDiscount.- `DiscountBasis` [*DayCount*]: Discount Basis- `SettlementDays` [*Integer*]: Settlement days- `DiscountCalendar` [*Calendar*]: Discount CalendarThe `help` method prints the description in `info` method in Markdown format. While using IPython/Jupyter notebooks, the descriptionprints in a nice looking format. One can start with a sample data packet to fill out the input fields using the `sample_data` method.> T.TS_YIELD_BOND.sample_data(){'AsOfDate': 'Required (Date)','Country': 'Required (String)','Currency': 'Required (String)','DiscountBasis': 'Optional (DayCount)','DiscountCalendar': 'Optional (Calendar)','InstrumentCollection': 'Required (List)','InterpolationMethod': 'Optional (String)','ObjectId': 'Optional (String)','SettlementDays': 'Optional (Integer)','Template': 'TermStructure.Yield.BondCurve'}## InstallationYou can install qtk using `pip` or `easy_install`pip install qtkoreasy_install qtk`qtk` has a dependency on `QuantLib-Python` which needs to be installed as well.