Beispiel #1
0
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
Beispiel #2
0
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
Beispiel #3
0
 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)