aboutsummaryrefslogtreecommitdiffstats
path: root/python/adj_index_price.py
blob: 3dfe57d78561f9baa32a3d4d6a4e8f882b7fe68e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
from sqlalchemy import create_engine, MetaData, Table, bindparam
import pandas as pd

index='HY'
#series=[10, 11, 13, 15, 17, 19, 21, 23]
series = [9]
# index='IG'
# series= [9, 11, 13, 15, 17, 19, 21, 23]
engine = create_engine('postgresql://serenitas_user:Serenitas1@debian/serenitasdb')
metadata = MetaData(bind=engine)
index_quotes= Table('index_quotes', metadata, autoload=True)

for s in series:
    factors = pd.read_sql_query("select lastdate, indexfactor, cumulativeloss from index_version " \
                                "where index=%s and series=%s", engine, params = (index, s),
                                parse_dates = ['lastdate'], index_col='lastdate')
    factors.sort_index(inplace=True)
    factors['recovery'] = 1+factors.cumulativeloss.diff(-1)
    for t in ['3yr', '5yr', '7yr']:
        df = pd.read_sql_query("select date as b_date, version, closeprice, modelprice from index_quotes " \
                               "where index=%s and series=%s and tenor=%s",
                               engine, params = (index, s, t), parse_dates =['b_date'])
        df.sort_index(inplace=True)
        df['adjcloseprice'] = df['closeprice']
        df['adjmodelprice'] = df['modelprice']

        for i in range(factors.shape[0]-1):
            r = factors.ix[i].indexfactor/factors.ix[i+1].indexfactor
            df.ix[df.version<=i+1,['adjcloseprice', 'adjmodelprice']] *= r
            df.ix[df.version<=i+1,['adjcloseprice', 'adjmodelprice']] -= (r-1) * factors.ix[i].recovery * 100

        del df['closeprice']
        del df['modelprice']
        stmt = index_quotes.update().where((index_quotes.c.date==bindparam('b_date')) &
                                          (index_quotes.c.index==index) &
                                           (index_quotes.c.series==s) &
                                           (index_quotes.c.tenor==t))
        engine.execute(stmt, df.to_dict(orient='record'))