Пример #1
0
    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')
Пример #2
0
        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')
Пример #3
0
"""
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'
}
Пример #4
0
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',
Пример #5
0
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
Пример #6
0
"""
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')
Пример #7
0
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",
Пример #8
0
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,