In [1]:
import requests
import json
import pandas as pd
url = 'http://192.168.5.9:10000/index/getIndexLevels'
body = """-"""
body = json.loads(body)
res = requests.post(url, json=body)
In [2]:
print(res)
data = res.json()['ITALIAN_SME']['LAST']
# print(data)
df = pd.DataFrame.from_dict(data, orient='index')[0]
# print(df.head())
df.index = pd.to_datetime(df.index, unit='s')
df = df.sort_index()
print(df.tail())
print('Save data....')
df.to_csv('ItalianBasket.csv')
In [3]:
# Test data @ 2018-03-15
# Basis price
preIndexLevel = 999.0
lastPrices = {'IB_tick_IP': 26.22, 'IB_tick_IF': 40.77, 'IB_tick_AST': 2.12, 'IB_tick_AMP': 12.84, 'IB_tick_IMA': 67.8, 'IB_tick_MTV': 6.38, 'IB_tick_ELN': 26.03, 'IB_tick_REY': 46.17, 'IB_tick_FKR': 2.17, 'IB_tick_GIMA': 16.61, 'IB_tick_SO': 4.01, 'IB_tick_BSS': 42.3, 'IB_tick_IGD': 9.64, 'IB_tick_DAL': 30.82, 'IB_tick_CEM': 7.55, 'IB_tick_MARR': 21.52, 'IB_tick_PRT': 4.116, 'IB_tick_LD': 16.39, 'IB_tick_TIP': 5.555, 'IB_tick_MN': 2.082, 'IB_tick_PRI': 33.8, 'IB_tick_EIT': 53.5, 'IB_tick_STS': 12.0, 'IB_tick_UNIR': 14.24, 'IB_tick_CAI': 3.71}
# trading price at 2018-03-15
targetPrices = {"IB_tick_IP": 28.8, "IB_tick_IF": 31.58, "IB_tick_MTV": 5.1, "IB_tick_REY": 50.0, "IB_tick_AST": 2.456,
"IB_tick_ELN": 30.48, "IB_tick_AMP": 14.15, "IB_tick_IMA": 77.35, "IB_tick_BSS": 50.75, "IB_tick_SO": 3.064,
"IB_tick_FKR": 2.275, "IB_tick_GIMA": 17.065, "IB_tick_IGD": 7.346, "IB_tick_DAL": 32.15, "IB_tick_CEM": 7.21,
"IB_tick_LD": 13.5, "IB_tick_MARR": 23.86, "IB_tick_PRT": 4.2, "IB_tick_TIP": 6.21, "IB_tick_MN": 1.828,
"IB_tick_CAI": 3.4, "IB_tick_EIT": 45.45, "IB_tick_STS": 12.46, "IB_tick_PRI": 40.0, "IB_tick_UNIR": 11.96}
# download
tickerList = lastPrices.keys()
start = 1520985600
end = 1521072000
for ticker in tickerList:
bbgTicker = '%s IM Equity' % ticker.split('_')[-1]
url = """http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/%s/[TOT_RETURN_INDEX_NET_DVDS,PX_LAST]/%s/%s/EUR""" % (bbgTicker, start, end)
res = requests.get(url).json()
# check
data = res[bbgTicker]['TOT_RETURN_INDEX_NET_DVDS']['%s' % end]
assert data == targetPrices[ticker] # check bloomberg data with IB last trading data
print('All check passed!')
In [11]:
#### New PIR index conpenent and index calculate
tickers = ['FKR IM Equity',
'MTV IM Equity',
'SO IM Equity',
'PRT IM Equity',
'CAI IM Equity',
'BST IM Equity',
'AST IM Equity',
'IGD IM Equity',
'MN IM Equity',
'TIP IM Equity',
'RM IM Equity',
'LR IM Equity',
'DIB IM Equity',
'DIS IM Equity',
'AMP IM Equity',
'GIMA IM Equity',
'UNIR IM Equity',
'ELN IM Equity',
'ELC IM Equity',
'IP IM Equity',
'LD IM Equity',
'XPR IM Equity',
'IF IM Equity',
'DEA IM Equity',
'ASC IM Equity']
# generate data server requests
for t in tickers:
u = """"%s":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/%s/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521590400/EUR"}},""" % (t, t)
print(u)
In [ ]:
body = """{"percentageReturns": true,
"indexStart":1000.00,
"isRatesIndex": false,
"isCashIndex":true,
"beVerbose": true,
"totalReturn": true,
"indexDataIsComplex": true,
"indexName": "ITALIAN_SME",
"annualFee": 0.007,
"annualFeeBasis": 360,
"rebalancingFee": 0.001,
"startDate": 1514419200,
"endDate": 1521763200,
"indexCurrency": "EUR",
"rebalanceOffset": 1,
"rebalanceFrequency":
"Annually",
"dataServer":{
"FKR IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/FKR IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"MTV IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/MTV IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"SO IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/SO IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"PRT IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/PRT IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"CAI IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/CAI IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"BST IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/BST IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"AST IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/AST IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"IGD IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/IGD IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"MN IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/MN IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"TIP IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/TIP IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"RM IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/RM IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"LR IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/LR IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"DIB IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/DIB IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"DIS IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/DIS IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"AMP IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/AMP IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"GIMA IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/GIMA IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"UNIR IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/UNIR IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"ELN IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/ELN IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"ELC IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/ELC IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"IP IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/IP IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"LD IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/LD IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"XPR IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/XPR IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"IF IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/IF IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"DEA IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/DEA IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}},
"ASC IM Equity":{"GET":{"url":"http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/ASC IM Equity/TOT_RETURN_INDEX_NET_DVDS/1514419200/1521763200/EUR"}}
},
"datesServer":{"POST":{"url": "http://192.168.5.9:9999/dates/fromMarket/1514419200/1521676800/1/Annually"}},
"weightsServer":{"POST":{"url": "http://192.168.5.9:9998/weights/getWeights/1514419200/1521676800/Weights.WeightsServerEquallyWeighted.WeightsServerEquallyWeighted"}}
}"""
url = 'http://192.168.5.9:10000/index/getIndexLevels'
body = json.loads(body)
res = requests.post(url, json=body)
print(res)
data = res.json()['ITALIAN_SME']['LAST']
# print(data)
df = pd.DataFrame.from_dict(data, orient='index')[0]
# print(df.head())
df.index = pd.to_datetime(df.index, unit='s')
df = df.sort_index()
print(df.tail())
print('Save data....')
df.to_csv('ItalianBasketNewComponent.csv')
In [ ]:
# Generate underly tickers
underlys = []
for t in tickers:
tt = 'IB_tick_%s' % t.split(' ')[0]
underlys.append(tt)
print(json.dumps(underlys))
# Get current weight
wei = {}
for ticker in underlys:
wei[ticker] = 0.04
print(json.dumps(wei))
# Check bloomberg ticker list
api_ = [
"FKR IM Equity",
"MTV IM Equity",
"SO IM Equity",
"PRT IM Equity",
"CAI IM Equity",
"BST IM Equity",
"AST IM Equity",
"IGD IM Equity",
"MN IM Equity",
"TIP IM Equity",
"RM IM Equity",
"LR IM Equity",
"RM IM Equity",
"DIS IM Equity",
"AMP IM Equity",
"GIMA IM Equity",
"UNIR IM Equity",
"ELN IM Equity",
"ELC IM Equity",
"IP IM Equity",
"LD IM Equity",
"XPR IM Equity",
"IF IM Equity",
"DEA IM Equity",
"ASC IM Equity",
"DIB IM Equity"
]
print(len(api_))
assert api_ == tickers
In [13]:
# Get last prices
ur = 'http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/[%s]/[PX_LAST]/1514505600/1514505600/EUR'
print(tickers)
res = {}
for t in tickers:
_res = requests.get(ur % t)
data = _res.json()
tt = 'IB_tick_%s' % t.split(' ')[0]
price = data[t]['PX_LAST']['1514505600']
res[tt] = price
print(json.dumps(res))
In [ ]:
import datetime
import requests
import time
def getReturnFile():
""""""
end = datetime.datetime.now()
end = end.replace(hour=0, minute=0, second=0, microsecond=0)
endStr = int(time.mktime(end.timetuple()))
print('End date: %s %s' % (end, endStr))
url = 'http://192.168.5.9:10000/index/getIndexLevels'
body = """-""".replace('{endStr}', str(endStr))
body = json.loads(body)
res = requests.post(url, json=body)
# print(json.dumps(body))
data = res.json()['ITALIAN_SME']['LAST']
# print(data)
df = pd.DataFrame.from_dict(data, orient='index')[0]
# print(df.head())
df.index = pd.to_datetime(df.index, unit='s')
df = df.sort_index()
# print(df.tail())
# print('Save data....')
# df.to_csv('ItalianBasket.csv')
ret = df.pct_change().iloc[:].fillna(0.0)
mean = ret.mean() * 252**0.5
std = ret.std() * 252**0.5
print('Mean: ', mean)
print('Vol: ', std)
statics = pd.DataFrame([mean, std], ['Annual return', 'Annual volatility'])
print(statics)
df.append(statics)
print(df)
ret.to_csv('./%s_ret.csv' % end)
df.to_csv('./%s_pnl.csv' % end)
return ret
In [ ]:
ret = getReturnFile()
In [ ]:
## Reconcile @ 2018-04-03
ib_data = {
"IB_tick_FKR": 2.06,
"IB_tick_SO": 2.936,
"IB_tick_MTV": 5,
"IB_tick_IGD": 7.75,
"IB_tick_AST": 2.21,
"IB_tick_PRT": 4.325,
"IB_tick_CAI": 3.68,
"IB_tick_BST": 2.255,
"IB_tick_TIP": 6.1,
"IB_tick_RM": 0.783,
"IB_tick_MN": 1.704,
"IB_tick_LR": 1.486,
"IB_tick_DIB": 9.58,
"IB_tick_DIS": 0.2115,
"IB_tick_AMP": 14.49,
"IB_tick_GIMA": 17.125,
"IB_tick_ELN": 31.94,
"IB_tick_UNIR": 12.85,
"IB_tick_IP": 27.36,
"IB_tick_IF": 31.24,
"IB_tick_XPR": 1.394,
"IB_tick_LD": 12.82,
"IB_tick_ELC": 2.21,
"IB_tick_DEA": 1.472,
"IB_tick_ASC": 3.25
}
ib_basis_prices = {
"IB_tick_FKR": 2.17,
"IB_tick_MTV": 6.38,
"IB_tick_SO": 4.01,
"IB_tick_PRT": 4.116,
"IB_tick_CAI": 3.71,
"IB_tick_BST": 2.268,
"IB_tick_AST": 2.12,
"IB_tick_IGD": 9.64,
"IB_tick_MN": 2.082,
"IB_tick_TIP": 5.555,
"IB_tick_RM": 0.5055,
"IB_tick_LR": 1.57,
"IB_tick_DIB": 10.82,
"IB_tick_DIS": 0.2585,
"IB_tick_AMP": 12.84,
"IB_tick_GIMA": 16.61,
"IB_tick_UNIR": 14.24,
"IB_tick_ELN": 26.03,
"IB_tick_ELC": 2.422,
"IB_tick_IP": 26.22,
"IB_tick_LD": 16.39,
"IB_tick_XPR": 1.505,
"IB_tick_IF": 40.77,
"IB_tick_DEA": 1.349,
"IB_tick_ASC": 3.546
}
ib_level = 964.8432848736414
cal_level = 967.2744038879
bloomberg_data = {}
# date
test_date = datetime.datetime(2018, 4, 3, hour=0, minute=0, second=0, microsecond=0)
print(test_date)
test_date_int = int(time.mktime(test_date.timetuple()))
# get bloomberg data
url = 'http://192.168.5.9:9997/data/bbg/getAssetsHistoryStartEnd/[%s]/[TOT_RETURN_INDEX_NET_DVDS]/1514764800/1522713600/EUR'
for ticker in api_:
_res = requests.get(url % (ticker))
data = _res.json()
tt = 'IB_tick_%s' % ticker.split(' ')[0]
price = data[ticker]['TOT_RETURN_INDEX_NET_DVDS']['1522713600']
bloomberg_data[tt] = price
print(bloomberg_data)
In [ ]:
## asset bloomberg data and IB
print('**** Reconcile IB last price and bloomberg last prices:')
for ticker, value in ib_data.items():
assert value==bloomberg_data[ticker]
print('**** Reconciled!!!')
In [10]:
##
import pandas as pd
import requests
url = 'http://192.168.5.4:8808/bdh/"SPXT Index"/["TOT_RETURN_INDEX_NET_DVDS"]/20000101/20180706/{"currency":"USD"}'
res = requests.get(url).json()
df = pd.DataFrame.from_dict(json.loads(res))
df.index = pd.to_datetime(df.index, unit='s')
print(df)
df.to_csv('./SPXT.csv')
In [ ]: