# fin-tools

## Overview

Common tools used in finance - risk, pricing, etc

pypi registry - https://pypi.python.org/pypi/fin-tools

## Installation

```
pip install fin-tools
```

## Dependencies

fin-tools requires:

numpy==1.12.1 or later

pandas==0.19.2 or later

## API

### Pricing

#### class cds(num_periods: int, discount_factors: List[float], default_probabilities: float, recovery_rate: float, notional: float, coupon_frequency: float, issue_premium: float)

cds.get_price()

returns price of CDS using probability tree model. if a list length 1 is passed for discount_factors and default_probabilities, price is computed using these values as the fixed discount factor and default probability for each period up to num_periods. Otherwise, these parameters should be lists of length num_periods

### Risk

#### vol(returns) -> float

standard deviation of returns

#### beta(returns, market) -> float

beta of returns

#### var(returns, alpha) -> float

historical var of returns (takes t historical returns, orders them, and takes the loss at the point in the list which corresponds to alpha)

#### cvar(returns, alpha) -> float

conditional var of returns

#### lower_partial_moment(returns, threshold, order) -> float

measures of risk-adjusted return based on vol treat all deviations from the mean as risk, whereas measures of risk-adjusted return based on lower partial moments consider only deviations below some predefined minimum return threshold, t as risk

#### higher_partial_moment(returns, threshold, order) -> float

#### drawdown(returns, tau) -> float

maximum decrease in the value of the portfolio over a specific period of time

#### max_drawdown(returns) -> float

#### average_drawdown(returns, periods) -> float

#### average_drawdown_squared(returns, periods) -> float

#### treynor_ratio(er, returns, market, rf) -> float

excess returns generated by a portfolio, discounted by portfolio beta

#### sharpe_ratio(er, returns, rf) -> float

discounts expected excess returns by vol

#### information_ratio(returns, benchmark) -> float

extension of Sharpe ratio - replaces risk-free rate of return with the scalar expected return of a benchmark portfolio E(rb)

#### modigliani_ratio(er, returns, benchmark, rf) -> float

combination of the Sharpe and information ratios: adjusts the expected excess returns of the portfolio above the risk free rate by the expected excess returns of a benchmark portfolio, above the risk free rate

#### excess_var(er, returns, rf, alpha) -> float

excess return on value at risk discounts the excess return of the portfolio above the risk-free rate by the value at risk of the portfolio

#### conditional_sharpe_ratio(er, returns, rf, alpha) -> float

discounts the excess return of the portfolio above the risk-free rate by the conditional VaR of the portfolio

#### omega_ratio(er, returns, rf, target=0) -> float

discounts the excess returns of a portfolio above the target threshold (usually risk-free rate), by the first-order lower partial moment of the returns. first-order lower partial moment corresponds to the average expeceted loss aka downside risk

#### sortino_ratio(er, returns, rf, target=0) -> float

modification of sharpe - only uses downside vol (delta)

#### kappa_three_ratio(er, returns, rf, target=0) -> float

generalization of omega and sortino ratios if j = 1, kappa is omega, j = 2, kappa is sortino

#### gain_loss_ratio(returns, target=0) -> float

discounts first order higher partial moment of a portfolio's returns, upside potential, by the first-order lower partial moment of a portfolio's returns, downside risk

#### upside_potential_ratio(returns, target=0) -> float

discounts first order higher partial moment of a portfolio's returns, upside potential, by the second-order lower partial moment of a portfolio's returns, downside variation

#### calmar_ratio(er, returns, rf) -> float

discounts expected excess return of a portfolio by the worst expected maximum draw down for that portfolio

#### sterling_ratio(er, returns, rf, periods) -> float

discounts the expected excess return of a portfolio by the average of the N worst expected maximum drawdowns for that portfolio

#### burke_ratio(er, returns, rf, periods) -> float

similar to sterling, but less sensitive to outliers discounts the expected excess return of a portfolio by the square root of the average of the N worst expected maximum drawdowns for that portfolio

### Mortgage

#### amortization_table(loan_amount: float, rate: float, monthly_payment: float) -> float

takes an initial loan amount, a fixed rate, and monthly payment, and returns the amortization table for the loan, showing monthly capital and interest repayment. term is calculated based on period required to fully amortize the loan.

Assume monthly compounding, payments made at end of month i.e. interest accrues in period, followed by monthly payment to cancel interest and reduce outstanding capital.