def __init__(self, country, start_date, end_date): self.bbg = BBG() self.country = country self.start_date = self._assert_date_type(start_date) self.end_date = self._assert_date_type(end_date) self.generic_tickers = [self.futures_ticker_dict[country] + str(x) + ' Comdty' for x in range(1, 4)] self.df_generics = self._get_generic_future_series() self.df_uc = self._get_underlying_contracts() self.contract_list = self._get_contracts_list() self.df_fn = self._get_first_notice_dates() self.df_prices = self._get_all_prices() df_tracker = self._build_tracker() self.tr_index = df_tracker[['er_index']] self.df_roll_info = df_tracker[['contract_rolling_out', 'roll_out_date', 'holdings']].dropna(how='any')
roll_end_date = days_in_the_month[end_idx] if len(days_in_the_month) > end_idx else days_in_the_month[-1] elif roll_type == 'backward_from_month_end': roll_start_date = days_in_the_month[roll_start_bday] roll_end_date = days_in_the_month[-1] if d < roll_start_date: weight_out = 1 elif d > roll_end_date: weight_out = 0 else: weight_out = float(len([x for x in days_in_the_month if x > d and x <= roll_end_date])) / float(roll_window_size) return [weight_out, 1 - weight_out] bbg = BBG() start_date = (pd.to_datetime('2002-01-05') + BDay(1)).date() # for the data end_date = pd.to_datetime('today').date() comm_bbg_code = 'CL' roll_start_bday = 5 roll_window_size = 5 roll_schedule = ['H','K','K','N','N','U','U','X','X','F+','F+','H+'] writer = pd.ExcelWriter(r'G:\Gustavo Amarante\Aulas\df_' + comm_bbg_code + ' v2.xlsx') # all contracts contract_list = bbg.fetch_futures_list(generic_ticker=comm_bbg_code + '1 Comdty')
""" Author: Gustavo Soares Contributions: Gustavo Amarante """ import numpy as np import pandas as pd from pandas.tseries.offsets import BDay from datetime import timedelta import matplotlib.pyplot as plt from fhdataapi import BBG import time start_time = time.time() bbg = BBG() # ===== User Defined Parameters ===== currency = 'AUD' # Currency to build the tracker against the USD n_trades = 20 # Number of trackers to smooth the changes in holdings start_date = '1999-01-04' end_date = '2017-04-10' # Bloomberg tickers for the currency futures dict_tickers = { currency + ' Curncy': 'spot', currency + '1W Curncy': '1w', currency + '1M Curncy': '1m', currency + '2M Curncy': '2m' }
from fhdataapi import BBG import pandas as pd import os from datetime import date, timedelta from pandas.tseries.offsets import BDay import matplotlib.pyplot as plt import math import numpy as np bbg = BBG() #TODO add ['DKK', 'ISK', 'SKK', 'HKD', 'CNY', 'MYR', 'THB', 'ARS', 'COP', 'PEN'] to the list of currencies currencies = [ 'AUD', 'BRL', 'CAD', 'CHF', 'CLP', 'CNH', 'CZK', 'EUR', 'GBP', 'HUF', 'IDR', 'ILS', 'INR', 'JPY', 'KRW', 'MXN', 'NOK',
class BondFutureTrackerBuilder(object): futures_ticker_dict = {'US': 'TY', 'GE': 'RX', 'FR': 'OAT', 'IT': 'IK', 'JP': 'JB', 'AU': 'XM', 'UK': 'G ', 'CA': 'CN'} fx_dict = {'GE': 'EURUSD Curncy', 'UK': 'GBPUSD Curncy', 'CA': 'CADUSD Curncy', 'JP': 'JPYUSD Curncy', 'AU': 'AUDUSD Curncy', 'FR': 'EURUSD Curncy', 'IT': 'EURUSD Curncy', 'US': 'USD Curncy'} def __init__(self, country, start_date, end_date): self.bbg = BBG() self.country = country self.start_date = self._assert_date_type(start_date) self.end_date = self._assert_date_type(end_date) self.generic_tickers = [self.futures_ticker_dict[country] + str(x) + ' Comdty' for x in range(1, 4)] self.df_generics = self._get_generic_future_series() self.df_uc = self._get_underlying_contracts() self.contract_list = self._get_contracts_list() self.df_fn = self._get_first_notice_dates() self.df_prices = self._get_all_prices() df_tracker = self._build_tracker() self.tr_index = df_tracker[['er_index']] self.df_roll_info = df_tracker[['contract_rolling_out', 'roll_out_date', 'holdings']].dropna(how='any') def _get_generic_future_series(self): df = self.bbg.fetch_series(securities=self.generic_tickers, fields='PX_LAST', startdate=self.start_date, enddate=self.end_date) return df def _get_underlying_contracts(self): df = self.bbg.fetch_series(securities=self.generic_tickers, fields='FUT_CUR_GEN_TICKER', startdate=self.start_date, enddate=self.end_date) df = df.reindex(self.df_generics.index).fillna(method='ffill') return df def _get_contracts_list(self): contract_list = self.bbg.fetch_futures_list(generic_ticker=self.futures_ticker_dict[self.country] + '1 Comdty') return contract_list def _get_first_notice_dates(self): df = self.bbg.fetch_contract_parameter(securities=self.contract_list, field='FUT_NOTICE_FIRST').sort_values('FUT_NOTICE_FIRST') return df def _get_all_prices(self): tickers = self.contract_list + [self.fx_dict[self.country]] df = self.bbg.fetch_series(securities=tickers, fields='PX_LAST', startdate=self.start_date, enddate=self.end_date) df = df.reindex(self.df_generics.index).fillna(method='ffill') return df def _build_tracker(self): df_tracker = pd.DataFrame(index=self.df_generics.index, columns=['contract_rolling_out', 'er_index', 'roll_out_date', 'holdings']) # set the values for the initial date dt_ini = self.df_uc.index[0] df_tracker.loc[dt_ini, 'er_index'] = 100 contract_rolling_out = self.df_uc.loc[dt_ini, self.futures_ticker_dict[self.country] + '2 Comdty'] + ' Comdty' df_tracker.loc[dt_ini, 'contract_rolling_out'] = contract_rolling_out holdings = df_tracker.loc[dt_ini, 'er_index'] / (self.df_generics.loc[dt_ini, self.futures_ticker_dict[self.country] + '2 Comdty'] * self.df_prices[self.fx_dict[self.country]].loc[dt_ini]) df_tracker.loc[dt_ini, 'holdings'] = holdings roll_out_date = self.df_fn.loc[df_tracker.loc[dt_ini, 'contract_rolling_out'], 'FUT_NOTICE_FIRST'] - BDay(1) df_tracker.loc[dt_ini, 'roll_out_date'] = roll_out_date for d, dm1 in zip(df_tracker.index[1:], df_tracker.index[:-1]): df_tracker.loc[d, 'contract_rolling_out'] = contract_rolling_out price_dm1 = self.df_prices.loc[dm1, contract_rolling_out] price_d = self.df_prices.loc[d, contract_rolling_out] pnl = holdings * (price_d - price_dm1) * self.df_prices[self.fx_dict[self.country]].loc[d] if math.isnan(pnl): pnl = 0 df_tracker.loc[d, 'er_index'] = df_tracker.loc[dm1, 'er_index'] + pnl if d >= roll_out_date.date(): contract_rolling_out = (self.df_uc.loc[d, self.futures_ticker_dict[self.country] + '2 Comdty'] + ' Comdty') df_tracker.loc[d, 'contract_rolling_out'] = contract_rolling_out holdings = df_tracker.loc[d, 'er_index'] / (self.df_generics.loc[d, self.futures_ticker_dict[self.country] + '2 Comdty'] * self.df_prices[self.fx_dict[self.country]].loc[d]) df_tracker.loc[d, 'holdings'] = holdings roll_out_date = self.df_fn.loc[df_tracker.loc[d, 'contract_rolling_out'], 'FUT_NOTICE_FIRST'] - BDay(1) df_tracker.loc[d, 'roll_out_date'] = roll_out_date return df_tracker @staticmethod def _assert_date_type(date): if type(date) is pd.Timestamp: date = date else: date = pd.to_datetime(date) return date
""" Author: Gustavo Amarante This script is to show how a bond futures tracker is built """ from fhdataapi import BBG import pandas as pd from datetime import timedelta from pandas.tseries.offsets import BDay import matplotlib.pyplot as plt import math bbg = BBG() start_date = (pd.to_datetime('2004-01-05') + BDay(1)).date() # for the data end_date = pd.to_datetime('today').date() # value of the qoutes df_generics = bbg.fetch_series(securities=['JB1 Comdty', 'JB2 Comdty', 'JB3 Comdty'], fields='PX_LAST', startdate=start_date, enddate=end_date) # underlying contracts df_uc = bbg.fetch_series(securities=['JB1 Comdty', 'JB2 Comdty', 'JB3 Comdty'], fields='FUT_CUR_GEN_TICKER', startdate=start_date, enddate=end_date) df_uc = df_uc.reindex(df_generics.index).fillna(method='ffill')
from fhdataapi import BBG import pandas as pd from datetime import date, timedelta from pandas.tseries.offsets import BDay import matplotlib.pyplot as plt import math import numpy as np bbg = BBG() start_date = pd.to_datetime('2000-01-01').date() end_date = pd.to_datetime('today') ann_factor = 252 stocks = [ "MMM", "AXP", "AAPL", "BA", "CAT", "CVX", "CSCO", "KO", "DOW", "XOM", "GS", "HD", "IBM", "INTC", "JNJ", "JPM",
from fhdataapi import BBG import pandas as pd start_date = '30-mar-2015' end_date = pd.to_datetime('today') bbg = BBG() # Grabs tickers and fields df = bbg.fetch_series(securities=['BRL Curncy', 'DXY Index'], fields=['PX_LAST', 'VOLATILITY_90D'], startdate=start_date, enddate=end_date) print(df) # Grabs cashflow payments of corporate bonds df = bbg.fetch_cash_flow('EI1436001 Govt', pd.to_datetime('03-jul-2017')) print(df) # Grabs weights of the components of an index df = bbg.fetch_index_weights(index_name='IBOV Index', ref_date=pd.to_datetime('03-jul-2017')) print(df) print(df.sum()) # Grabs all the contracts from a generic series futures_list = bbg.fetch_futures_list(generic_ticker='TY1 Comdty') print(futures_list) # grabs the first notice date for each contract df_fn = bbg.fetch_contract_parameter(securities=futures_list,