def spd_ratiovol_by_product(products, start_d, end_d, periods=12, tenor='-1m'): cont_mth, exch = dbaccess.prod_main_cont_exch(products) contlist = contract_range(products, exch, cont_mth, start_d, end_d) exp_dates = [get_opt_expiry(cont, inst2contmth(cont)) for cont in contlist] data = { 'is_dtime': True, 'data_column': 'close', 'data_freq': '30min', 'xs': [0.5, 0.25, 0.75], 'xs_names': ['atm', 'v25', 'v75'], 'xs_func': 'bs_delta_to_strike', 'rehedge_period': 1, 'term_tenor': tenor, 'database': 'hist_data' } option_input = { 'otype': True, 'ir': 0.0, 'end_vol': 0.0, 'ref_vol': 0.5, 'pricer_func': 'bsopt.BSOpt', 'delta_func': 'bsopt.BSDelta', 'is_dtime': data['is_dtime'], } freq = data['data_freq'] for cont, expiry in zip(contlist, exp_dates): expiry_d = expiry.date() if expiry_d > end_d: break p_str = '-' + str(int(tenor[1:-1]) * periods) + tenor[-1] d_start = day_shift(expiry_d, p_str) cnx = dbaccess.connect(**dbaccess.dbconfig) if freq == 'd': df = dbaccess.load_daily_data_to_df(cnx, 'fut_daily', cont, d_start, expiry_d, index_col=None) else: mdf = dbaccess.load_min_data_to_df(cnx, 'fut_min', cont, d_start, expiry_d, minid_start=300, minid_end=2115, index_col=None) mdf = cleanup_mindata(mdf, products, index_col=None) mdf['bar_id'] = dh.bar_conv_func2(mdf['min_id']) df = dh.conv_ohlc_freq(mdf, freq, bar_func=dh.bar_conv_func2, extra_cols=['bar_id'], index_col=None) cnx.close() option_input['expiry'] = expiry data['dataframe'] = df vol_df = realized_termstruct(option_input, data) print cont, expiry_d, vol_df
def hist_cso_by_product(prodcode, start_d, end_d, periods = 24, tenor = '-1w', max_spd = 2, writeDB = False, mode = 'n'): cont_mth, exch = dbaccess.prod_main_cont_exch(prodcode) contlist, _ = contract_range(prodcode, exch, cont_mth, start_d, end_d) exp_dates = [get_opt_expiry(cont, inst2contmth(cont)) for cont in contlist] if mode == 'n': xs_func = 'bachelier_delta_to_strike' pricer_func = 'bsopt.BSFwdNormal' delta_func = 'bsopt.BSFwdNormalDelta' else: xs_func = 'bs_delta_to_strike' pricer_func = 'bsopt.BSOpt' delta_func = 'bsopt.BSDelta' data = {'is_dtime': True, 'data_column': 'close', 'data_freq': '30min', 'xs': [0.5, 0.25, 0.75], 'xs_names': ['atm', 'v25', 'v75'], 'xs_func': xs_func, 'rehedge_period': 1, 'term_tenor': tenor, 'database': 'hist_data' } option_input = {'otype': True, 'ir': 0.0, 'end_vol': 0.0, 'ref_vol': 0.5, 'pricer_func': pricer_func, 'delta_func': delta_func, 'is_dtime': data['is_dtime'], } freq = data['data_freq'] dbconfig = copy.deepcopy(**dbaccess.hist_dbconfig) dbconfig['database'] = data['database'] cnx = dbaccess.connect(**dbconfig) for cont, expiry in zip(contlist, exp_dates): expiry_d = expiry.date() if expiry_d > end_d: break p_str = '-' + str(int(tenor[1:-1]) * periods) + tenor[-1] d_start = day_shift(expiry_d, p_str) if freq == 'd': df = dbaccess.load_daily_data_to_df(cnx, 'fut_daily', cont, d_start, expiry_d, index_col = None) else: mdf = dbaccess.load_min_data_to_df(cnx, 'fut_min', cont, d_start, expiry_d, minid_start=300, minid_end=2115, index_col = None) mdf = cleanup_mindata(mdf, prodcode, index_col = None) mdf['bar_id'] = dh.bar_conv_func2(mdf['min_id']) df = dh.conv_ohlc_freq(mdf, freq, bar_func=dh.bar_conv_func2, extra_cols=['bar_id'], index_col = None) cnx.close() option_input['expiry'] = expiry data['dataframe'] = df vol_df = realized_termstruct(option_input, data) print cont, expiry_d, vol_df
def conv_bar_id(self, min_id, inst): #trading_hrs = trading_hours(self.instruments[inst].product, self.instruments[inst].exchange) #if prod in night_session_markets: return data_handler.bar_conv_func2(min_id)