def update_options_greeks_4date(**kwargs):

    options_frame = cl.generate_liquid_options_list_dataframe(**kwargs)
    [
        update_options_greek_database_4ticker(ticker=x, **kwargs)
        for x in options_frame['ticker']
    ]
Example #2
0
def update_options_price_database_from_cme_files(**kwargs):

    if 'settle_date' in kwargs.keys():
        settle_date = kwargs['settle_date']
    else:
        settle_date = int(time.strftime('%Y%m%d'))
        kwargs['settle_date'] = settle_date

    if 'con' not in kwargs.keys():
        close_connection_before_exit = True
        con = msu.get_my_sql_connection(**kwargs)
        kwargs['con'] = con
    else:
        close_connection_before_exit = False

    if not exp.is_business_day(double_date=settle_date):
        if close_connection_before_exit:
            con.close()
        return

    data_read_out = {}
    data_read_out['commodity'] = rcf.read_cme_settle_txt_files(
        file_name='commodity', report_date=settle_date)
    data_read_out['equity'] = rcf.read_cme_settle_txt_files(
        file_name='equity', report_date=settle_date)
    data_read_out['fx'] = rcf.read_cme_settle_txt_files(
        file_name='fx', report_date=settle_date)
    data_read_out['interest_rate'] = rcf.read_cme_settle_txt_files(
        file_name='interest_rate', report_date=settle_date)

    options_frame = cl.generate_liquid_options_list_dataframe(**kwargs)

    for i in range(len(options_frame.index)):

        ticker = options_frame['ticker'].iloc[i]
        expiration_date = options_frame['expiration_date'].iloc[i]

        update_options_price_database_from_cme_files_4ticker(
            ticker=ticker,
            expiration_date=expiration_date,
            data_read_out=data_read_out,
            **kwargs)

    if close_connection_before_exit:
        con.close()
def update_options_price_database_from_cme_files(**kwargs):

    if 'settle_date' in kwargs.keys():
        settle_date = kwargs['settle_date']
    else:
        settle_date = int(time.strftime('%Y%m%d'))
        kwargs['settle_date'] = settle_date

    if 'con' not in kwargs.keys():
        close_connection_before_exit = True
        con = msu.get_my_sql_connection(**kwargs)
        kwargs['con'] = con
    else:
        close_connection_before_exit = False

    if not exp.is_business_day(double_date=settle_date):
        if close_connection_before_exit:
            con.close()
        return

    data_read_out = {}
    data_read_out['commodity'] = rcf.read_cme_settle_txt_files(file_name='commodity', report_date=settle_date)
    data_read_out['equity'] = rcf.read_cme_settle_txt_files(file_name='equity', report_date=settle_date)
    data_read_out['fx'] = rcf.read_cme_settle_txt_files(file_name='fx', report_date=settle_date)
    data_read_out['interest_rate'] = rcf.read_cme_settle_txt_files(file_name='interest_rate', report_date=settle_date)

    options_frame = cl.generate_liquid_options_list_dataframe(**kwargs)

    for i in range(len(options_frame.index)):

        ticker = options_frame['ticker'].iloc[i]
        expiration_date = options_frame['expiration_date'].iloc[i]
        print(ticker)

        update_options_price_database_from_cme_files_4ticker(ticker=ticker,
                                                             expiration_date=expiration_date,
                                                             data_read_out=data_read_out,
                                                             **kwargs)

    if close_connection_before_exit:
        con.close()
def generate_test_file_4stir_rates(**kwargs):

    output_dir = dn.get_directory_name(ext='test_data')
    full_dates = exp.get_bus_day_list(date_from=20100101, date_to=20160821)
    #full_dates = exp.get_bus_day_list(date_from=20160812,date_to=20160821)
    bus_dates_select = full_dates[0::6]
    data_frame_list = []
    #bus_dates_select = bus_dates_select[:200]

    for i in range(len(bus_dates_select)):
        #print(bus_dates_select[i])
        date_file_name = output_dir + '/' + str(bus_dates_select[i]) + '.pkl'

        if os.path.isfile(date_file_name):
            liquid_options = pd.read_pickle(date_file_name)
        else:
            liquid_options = cl.generate_liquid_options_list_dataframe(
                settle_date=bus_dates_select[i])
            liquid_options.drop_duplicates('expiration_date', inplace=True)
            liquid_options = liquid_options[['expiration_date']]
            liquid_options['settle_date'] = bus_dates_select[i]
            liquid_options['exp_date'] = liquid_options[
                'expiration_date'].apply(
                    lambda x: 10000 * x.year + 100 * x.month + x.day)
            liquid_options['int_rate'] = liquid_options.apply(
                lambda x: grfs.get_simple_rate(as_of_date=x['settle_date'],
                                               date_to=x['exp_date'])[
                                                   'rate_output'],
                axis=1)
            liquid_options.to_pickle(date_file_name)

        data_frame_list.append(liquid_options)

    merged_data = pd.concat(data_frame_list)
    merged_data.reset_index(inplace=True, drop=True)
    merged_data = merged_data[['settle_date', 'exp_date', 'int_rate']]

    writer = pd.ExcelWriter(output_dir + '/' + 'stir_option_rate_test' +
                            '.xlsx',
                            engine='xlsxwriter')
    merged_data.to_excel(writer, sheet_name='all')
def generate_test_file_4stir_rates(**kwargs):

    output_dir = dn.get_directory_name(ext="test_data")
    full_dates = exp.get_bus_day_list(date_from=20100101, date_to=20160821)
    # full_dates = exp.get_bus_day_list(date_from=20160812,date_to=20160821)
    bus_dates_select = full_dates[0::6]
    data_frame_list = []
    # bus_dates_select = bus_dates_select[:200]

    for i in range(len(bus_dates_select)):
        # print(bus_dates_select[i])
        date_file_name = output_dir + "/" + str(bus_dates_select[i]) + ".pkl"

        if os.path.isfile(date_file_name):
            liquid_options = pd.read_pickle(date_file_name)
        else:
            liquid_options = cl.generate_liquid_options_list_dataframe(settle_date=bus_dates_select[i])
            liquid_options.drop_duplicates("expiration_date", inplace=True)
            liquid_options = liquid_options[["expiration_date"]]
            liquid_options["settle_date"] = bus_dates_select[i]
            liquid_options["exp_date"] = liquid_options["expiration_date"].apply(
                lambda x: 10000 * x.year + 100 * x.month + x.day
            )
            liquid_options["int_rate"] = liquid_options.apply(
                lambda x: grfs.get_simple_rate(as_of_date=x["settle_date"], date_to=x["exp_date"])["rate_output"],
                axis=1,
            )
            liquid_options.to_pickle(date_file_name)

        data_frame_list.append(liquid_options)

    merged_data = pd.concat(data_frame_list)
    merged_data.reset_index(inplace=True, drop=True)
    merged_data = merged_data[["settle_date", "exp_date", "int_rate"]]

    writer = pd.ExcelWriter(output_dir + "/" + "stir_option_rate_test" + ".xlsx", engine="xlsxwriter")
    merged_data.to_excel(writer, sheet_name="all")
Example #6
0
def load_ticker_signals_4settle_date(**kwargs):

    if 'con' not in kwargs.keys():
        close_connection_before_exit = True
        con = msu.get_my_sql_connection(**kwargs)
        kwargs['con'] = con
    else:
        close_connection_before_exit = False
        con = kwargs['con']

    if not exp.is_business_day(double_date=kwargs['settle_date']):
        if close_connection_before_exit:
            con.close()
        return

    options_frame = cl.generate_liquid_options_list_dataframe(**kwargs)

    futures_data_dictionary = {
        x: gfp.get_futures_price_preloaded(ticker_head=x)
        for x in cmi.get_tickerhead_list('cme_futures')
    }

    real_vol_output = [
        ops.calc_realized_vol_4options_ticker(
            ticker=x,
            futures_data_dictionary=futures_data_dictionary,
            settle_date=kwargs['settle_date']) for x in options_frame['ticker']
    ]

    delta_vol_output = [
        ops.calc_delta_vol_4ticker(ticker=x,
                                   settle_date=kwargs['settle_date'],
                                   delta_target=0.5)
        for x in options_frame['ticker']
    ]

    volume_interest_output = [
        ops.calc_volume_interest_4ticker(ticker=x,
                                         settle_date=kwargs['settle_date'])
        for x in options_frame['ticker']
    ]

    atm_vol_frame = pd.concat([
        options_frame,
        pd.DataFrame(delta_vol_output),
        pd.DataFrame(volume_interest_output)
    ],
                              axis=1)
    atm_vol_frame['real_vol'] = real_vol_output

    contract_specs_output = [
        cmi.get_contract_specs(x) for x in atm_vol_frame['ticker']
    ]

    atm_vol_frame['ticker_head'] = [
        x['ticker_head'] for x in contract_specs_output
    ]
    atm_vol_frame['ticker_month'] = [
        x['ticker_month_num'] for x in contract_specs_output
    ]
    atm_vol_frame['ticker_year'] = [
        x['ticker_year'] for x in contract_specs_output
    ]

    column_names = atm_vol_frame.columns.tolist()

    ticker_indx = column_names.index('ticker')
    cal_dte_indx = column_names.index('cal_dte')
    tr_dte_indx = column_names.index('tr_dte')
    ticker_head_indx = column_names.index('ticker_head')
    ticker_month_indx = column_names.index('ticker_month')
    ticker_year_indx = column_names.index('ticker_year')
    imp_vol_indx = column_names.index('delta_vol')
    strike_indx = column_names.index('strike')
    theta_indx = column_names.index('theta')
    open_interest_indx = column_names.index('open_interest')
    volume_indx = column_names.index('volume')
    real_vol_indx = column_names.index('real_vol')

    now = dt.datetime.now()
    settle_datetime = cu.convert_doubledate_2datetime(kwargs['settle_date'])

    tuples = [
        tuple([
            x[ticker_indx], x[ticker_head_indx], x[ticker_month_indx],
            x[ticker_year_indx],
            None if np.isnan(x[cal_dte_indx]) else x[cal_dte_indx],
            None if np.isnan(x[tr_dte_indx]) else x[tr_dte_indx],
            None if np.isnan(x[imp_vol_indx]) else 100 * x[imp_vol_indx], 0.5,
            None if np.isnan(x[theta_indx]) else x[theta_indx],
            None if np.isnan(x[strike_indx]) else x[strike_indx],
            None if np.isnan(x[real_vol_indx]) else x[real_vol_indx],
            None if np.isnan(x[open_interest_indx]) else x[open_interest_indx],
            None if np.isnan(x[volume_indx]) else x[volume_indx],
            settle_datetime.date(), now, now
        ]) for x in atm_vol_frame.values
    ]

    column_str = "ticker, ticker_head, ticker_month, ticker_year, " \
                 " cal_dte, tr_dte, imp_vol, delta, theta, strike, " \
                 "close2close_vol20, open_interest, volume, price_date, created_date, last_updated_date"

    insert_str = ("%s, " * len(column_str.split(',')))[:-2]
    final_str = "REPLACE INTO option_ticker_indicators (%s) VALUES (%s)" % (
        column_str, insert_str)

    msu.sql_execute_many_wrapper(final_str=final_str, tuples=tuples, con=con)

    load_pnls_4settle_date(**kwargs)

    if close_connection_before_exit:
        con.close()
Example #7
0
def get_vcs_pairs_4date_legacy(**kwargs):

    settle_date = kwargs['settle_date']
    settle_datetime = cu.convert_doubledate_2datetime(settle_date)

    con = msu.get_my_sql_connection(**kwargs)

    liquid_options_frame = cl.generate_liquid_options_list_dataframe(settle_date=settle_date,con=con)
    contract_specs_output = [cmi.get_contract_specs(x) for x in liquid_options_frame['ticker']]
    liquid_options_frame['ticker_head'] = [x['ticker_head'] for x in contract_specs_output]
    liquid_options_frame['ticker_month'] = [x['ticker_month_num'] for x in contract_specs_output]
    liquid_options_frame['ticker_class'] = [x['ticker_class'] for x in contract_specs_output]
    liquid_options_frame['cal_dte'] = [(x-settle_datetime.date()).days for x in liquid_options_frame['expiration_date']]

    liquid_options_frame = liquid_options_frame[((liquid_options_frame['ticker_head'] == 'LN')&(liquid_options_frame['cal_dte'] <= 360))|
                                                ((liquid_options_frame['ticker_head']=='LC')&(liquid_options_frame['cal_dte']<=360)&
                                                 (liquid_options_frame['ticker_month']%2==0))|
                                                ((liquid_options_frame['ticker_head']=='LC')&(liquid_options_frame['cal_dte']<=40)&
                                                 (liquid_options_frame['ticker_month']%2==1))|
                                                ((liquid_options_frame['ticker_head']=='ES')&(liquid_options_frame['cal_dte']<=270))|
                                                ((liquid_options_frame['ticker_class']=='FX')&(liquid_options_frame['cal_dte']<=270)&
                                                 (liquid_options_frame['ticker_month']%3==0))|
                                                ((liquid_options_frame['ticker_class']=='FX')&(liquid_options_frame['cal_dte']<=70)&
                     (liquid_options_frame['ticker_month']%3!=0))|
                     ((liquid_options_frame['ticker_head']=='GC')&(liquid_options_frame['cal_dte']<=360)&
                     (liquid_options_frame['ticker_month'].isin([6,12])))|
                     ((liquid_options_frame['ticker_head']=='GC')&(liquid_options_frame['cal_dte']<=270)&
                     (liquid_options_frame['ticker_month'].isin([2,4,8,10])))|
                     ((liquid_options_frame['ticker_head']=='GC')&(liquid_options_frame['cal_dte']<=70))|
                     ((liquid_options_frame['ticker_head']=='SI')&(liquid_options_frame['cal_dte']<=360)&
                     (liquid_options_frame['ticker_month'].isin([7,12])))|
                     ((liquid_options_frame['ticker_head']=='SI')&(liquid_options_frame['cal_dte']<=270)&
                     (liquid_options_frame['ticker_month'].isin([1,3,5,9])))|
                     ((liquid_options_frame['ticker_head']=='SI')&(liquid_options_frame['cal_dte']<=70))|
                     ((liquid_options_frame['ticker_class']=='Treasury')&(liquid_options_frame['cal_dte']<=180)&
                     (liquid_options_frame['ticker_month']%3==0))|
                     ((liquid_options_frame['ticker_class']=='Treasury')&(liquid_options_frame['cal_dte']<=70)&
                     (liquid_options_frame['ticker_month']%3!=0))|
                     ((liquid_options_frame['ticker_head']=='C')&(liquid_options_frame['cal_dte']<=540)&
                     (liquid_options_frame['ticker_month']==12))|
                     ((liquid_options_frame['ticker_head']=='C')&(liquid_options_frame['cal_dte']<=360)&
                     (liquid_options_frame['ticker_month']==7))|
                     ((liquid_options_frame['ticker_head']=='C')&(liquid_options_frame['cal_dte']<=270)&
                     (liquid_options_frame['ticker_month'].isin([3,5,9])))|
                     ((liquid_options_frame['ticker_head']=='C')&(liquid_options_frame['cal_dte']<=40))|
                     ((liquid_options_frame['ticker_head']=='S')&(liquid_options_frame['cal_dte']<=540)&
                     (liquid_options_frame['ticker_month']==11))|
                     ((liquid_options_frame['ticker_head']=='S')&(liquid_options_frame['cal_dte']<=360)&
                     (liquid_options_frame['ticker_month']==7))|
                     ((liquid_options_frame['ticker_head']=='S')&(liquid_options_frame['cal_dte']<=270)&
                     (liquid_options_frame['ticker_month'].isin([1,3,5,8,9])))|
                     ((liquid_options_frame['ticker_head']=='S')&(liquid_options_frame['cal_dte']<=40))|
                     ((liquid_options_frame['ticker_head']=='SM')&(liquid_options_frame['cal_dte']<=360)&
                     (liquid_options_frame['ticker_month']==12))|
                     ((liquid_options_frame['ticker_head']=='SM')&(liquid_options_frame['cal_dte']<=270)&
                     (liquid_options_frame['ticker_month']==7))|
                     ((liquid_options_frame['ticker_head']=='SM')&(liquid_options_frame['cal_dte']<=180)&
                     (liquid_options_frame['ticker_month'].isin([1,3,5,8,9,10])))|
                     ((liquid_options_frame['ticker_head']=='SM')&(liquid_options_frame['cal_dte']<=40))|
                     ((liquid_options_frame['ticker_head']=='BO')&(liquid_options_frame['cal_dte']<=360)&
                     (liquid_options_frame['ticker_month']==12))|
                     ((liquid_options_frame['ticker_head']=='BO')&(liquid_options_frame['cal_dte']<=270)&
                     (liquid_options_frame['ticker_month']==7))|
                     ((liquid_options_frame['ticker_head']=='BO')&(liquid_options_frame['cal_dte']<=180)&
                     (liquid_options_frame['ticker_month'].isin([1,3,5,8,9,10])))|
                     ((liquid_options_frame['ticker_head']=='BO')&(liquid_options_frame['cal_dte']<=40))|
                     ((liquid_options_frame['ticker_head']=='W')&(liquid_options_frame['cal_dte']<=360)&
                     (liquid_options_frame['ticker_month']==12))|
                     ((liquid_options_frame['ticker_head']=='W')&(liquid_options_frame['cal_dte']<=270)&
                     (liquid_options_frame['ticker_month']==7))|
                     ((liquid_options_frame['ticker_head']=='W')&(liquid_options_frame['cal_dte']<=180)&
                     (liquid_options_frame['ticker_month'].isin([3,5,9])))|
                     ((liquid_options_frame['ticker_head']=='W')&(liquid_options_frame['cal_dte']<=40))|
                     ((liquid_options_frame['ticker_head']=='CL')&(liquid_options_frame['cal_dte']<=720)&
                     (liquid_options_frame['ticker_month']==12))|
                     ((liquid_options_frame['ticker_head']=='CL')&(liquid_options_frame['cal_dte']<=540)&
                     (liquid_options_frame['ticker_month']==6))|
                     ((liquid_options_frame['ticker_head']=='CL')&(liquid_options_frame['cal_dte']<=180))|
                     ((liquid_options_frame['ticker_head']=='NG')&(liquid_options_frame['cal_dte']<=360))]

    liquid_options_frame.sort(['ticker_head','cal_dte'],ascending=[True,True],inplace=True)

    liquid_options_frame['tr_dte'] = [exp.get_days2_expiration(date_to=settle_date,con=con,instrument='options',ticker=x)['tr_dte'] for x in liquid_options_frame['ticker']]

    if 'con' not in kwargs.keys():
            con.close()

    option_frame = liquid_options_frame[liquid_options_frame['tr_dte'] >= 35]

    option_frame.reset_index(drop=True,inplace=True)

    unique_ticker_heads = option_frame['ticker_head'].unique()
    tuples = []

    for ticker_head_i in unique_ticker_heads:

        ticker_head_data = option_frame[option_frame['ticker_head'] == ticker_head_i]
        ticker_head_data.sort('cal_dte', ascending=True, inplace=True)

        if len(ticker_head_data.index) >= 2:
            for i in range(len(ticker_head_data.index)-1):
                for j in range(i+1,len(ticker_head_data.index)):
                    tuples = tuples + [(ticker_head_data.index[i], ticker_head_data.index[j])]

    return pd.DataFrame([(option_frame['ticker'][indx[0]],
                          option_frame['ticker'][indx[1]],
                          option_frame['ticker_head'][indx[0]],
                          option_frame['ticker_class'][indx[0]],
                          option_frame['tr_dte'][indx[0]],
                          option_frame['tr_dte'][indx[1]]) for indx in tuples],columns=['ticker1','ticker2','tickerHead','tickerClass','trDte1','trDte2'])
Example #8
0
def get_vcs_pairs_4date_legacy(**kwargs):

    settle_date = kwargs['settle_date']
    settle_datetime = cu.convert_doubledate_2datetime(settle_date)

    con = msu.get_my_sql_connection(**kwargs)

    liquid_options_frame = cl.generate_liquid_options_list_dataframe(
        settle_date=settle_date, con=con)
    contract_specs_output = [
        cmi.get_contract_specs(x) for x in liquid_options_frame['ticker']
    ]
    liquid_options_frame['ticker_head'] = [
        x['ticker_head'] for x in contract_specs_output
    ]
    liquid_options_frame['ticker_month'] = [
        x['ticker_month_num'] for x in contract_specs_output
    ]
    liquid_options_frame['ticker_class'] = [
        x['ticker_class'] for x in contract_specs_output
    ]
    liquid_options_frame['cal_dte'] = [
        (x - settle_datetime.date()).days
        for x in liquid_options_frame['expiration_date']
    ]

    liquid_options_frame = liquid_options_frame[
        ((liquid_options_frame['ticker_head'] == 'LN') &
         (liquid_options_frame['cal_dte'] <= 360)) |
        ((liquid_options_frame['ticker_head'] == 'LC') &
         (liquid_options_frame['cal_dte'] <= 360) &
         (liquid_options_frame['ticker_month'] % 2 == 0)) |
        ((liquid_options_frame['ticker_head'] == 'LC') &
         (liquid_options_frame['cal_dte'] <= 40) &
         (liquid_options_frame['ticker_month'] % 2 == 1)) |
        ((liquid_options_frame['ticker_head'] == 'ES') &
         (liquid_options_frame['cal_dte'] <= 270)) |
        ((liquid_options_frame['ticker_class'] == 'FX') &
         (liquid_options_frame['cal_dte'] <= 270) &
         (liquid_options_frame['ticker_month'] % 3 == 0)) |
        ((liquid_options_frame['ticker_class'] == 'FX') &
         (liquid_options_frame['cal_dte'] <= 70) &
         (liquid_options_frame['ticker_month'] % 3 != 0)) |
        ((liquid_options_frame['ticker_head'] == 'GC') &
         (liquid_options_frame['cal_dte'] <= 360) &
         (liquid_options_frame['ticker_month'].isin([6, 12]))) |
        ((liquid_options_frame['ticker_head'] == 'GC') &
         (liquid_options_frame['cal_dte'] <= 270) &
         (liquid_options_frame['ticker_month'].isin([2, 4, 8, 10]))) |
        ((liquid_options_frame['ticker_head'] == 'GC') &
         (liquid_options_frame['cal_dte'] <= 70)) |
        ((liquid_options_frame['ticker_head'] == 'SI') &
         (liquid_options_frame['cal_dte'] <= 360) &
         (liquid_options_frame['ticker_month'].isin([7, 12]))) |
        ((liquid_options_frame['ticker_head'] == 'SI') &
         (liquid_options_frame['cal_dte'] <= 270) &
         (liquid_options_frame['ticker_month'].isin([1, 3, 5, 9]))) |
        ((liquid_options_frame['ticker_head'] == 'SI') &
         (liquid_options_frame['cal_dte'] <= 70)) |
        ((liquid_options_frame['ticker_class'] == 'Treasury') &
         (liquid_options_frame['cal_dte'] <= 180) &
         (liquid_options_frame['ticker_month'] % 3 == 0)) |
        ((liquid_options_frame['ticker_class'] == 'Treasury') &
         (liquid_options_frame['cal_dte'] <= 70) &
         (liquid_options_frame['ticker_month'] % 3 != 0)) |
        ((liquid_options_frame['ticker_head'] == 'C') &
         (liquid_options_frame['cal_dte'] <= 540) &
         (liquid_options_frame['ticker_month'] == 12)) |
        ((liquid_options_frame['ticker_head'] == 'C') &
         (liquid_options_frame['cal_dte'] <= 360) &
         (liquid_options_frame['ticker_month'] == 7)) |
        ((liquid_options_frame['ticker_head'] == 'C') &
         (liquid_options_frame['cal_dte'] <= 270) &
         (liquid_options_frame['ticker_month'].isin([3, 5, 9]))) |
        ((liquid_options_frame['ticker_head'] == 'C') &
         (liquid_options_frame['cal_dte'] <= 40)) |
        ((liquid_options_frame['ticker_head'] == 'S') &
         (liquid_options_frame['cal_dte'] <= 540) &
         (liquid_options_frame['ticker_month'] == 11)) |
        ((liquid_options_frame['ticker_head'] == 'S') &
         (liquid_options_frame['cal_dte'] <= 360) &
         (liquid_options_frame['ticker_month'] == 7)) |
        ((liquid_options_frame['ticker_head'] == 'S') &
         (liquid_options_frame['cal_dte'] <= 270) &
         (liquid_options_frame['ticker_month'].isin([1, 3, 5, 8, 9]))) |
        ((liquid_options_frame['ticker_head'] == 'S') &
         (liquid_options_frame['cal_dte'] <= 40)) |
        ((liquid_options_frame['ticker_head'] == 'SM') &
         (liquid_options_frame['cal_dte'] <= 360) &
         (liquid_options_frame['ticker_month'] == 12)) |
        ((liquid_options_frame['ticker_head'] == 'SM') &
         (liquid_options_frame['cal_dte'] <= 270) &
         (liquid_options_frame['ticker_month'] == 7)) |
        ((liquid_options_frame['ticker_head'] == 'SM') &
         (liquid_options_frame['cal_dte'] <= 180) &
         (liquid_options_frame['ticker_month'].isin([1, 3, 5, 8, 9, 10]))) |
        ((liquid_options_frame['ticker_head'] == 'SM') &
         (liquid_options_frame['cal_dte'] <= 40)) |
        ((liquid_options_frame['ticker_head'] == 'BO') &
         (liquid_options_frame['cal_dte'] <= 360) &
         (liquid_options_frame['ticker_month'] == 12)) |
        ((liquid_options_frame['ticker_head'] == 'BO') &
         (liquid_options_frame['cal_dte'] <= 270) &
         (liquid_options_frame['ticker_month'] == 7)) |
        ((liquid_options_frame['ticker_head'] == 'BO') &
         (liquid_options_frame['cal_dte'] <= 180) &
         (liquid_options_frame['ticker_month'].isin([1, 3, 5, 8, 9, 10]))) |
        ((liquid_options_frame['ticker_head'] == 'BO') &
         (liquid_options_frame['cal_dte'] <= 40)) |
        ((liquid_options_frame['ticker_head'] == 'W') &
         (liquid_options_frame['cal_dte'] <= 360) &
         (liquid_options_frame['ticker_month'] == 12)) |
        ((liquid_options_frame['ticker_head'] == 'W') &
         (liquid_options_frame['cal_dte'] <= 270) &
         (liquid_options_frame['ticker_month'] == 7)) |
        ((liquid_options_frame['ticker_head'] == 'W') &
         (liquid_options_frame['cal_dte'] <= 180) &
         (liquid_options_frame['ticker_month'].isin([3, 5, 9]))) |
        ((liquid_options_frame['ticker_head'] == 'W') &
         (liquid_options_frame['cal_dte'] <= 40)) |
        ((liquid_options_frame['ticker_head'] == 'CL') &
         (liquid_options_frame['cal_dte'] <= 720) &
         (liquid_options_frame['ticker_month'] == 12)) |
        ((liquid_options_frame['ticker_head'] == 'CL') &
         (liquid_options_frame['cal_dte'] <= 540) &
         (liquid_options_frame['ticker_month'] == 6)) |
        ((liquid_options_frame['ticker_head'] == 'CL') &
         (liquid_options_frame['cal_dte'] <= 180)) |
        ((liquid_options_frame['ticker_head'] == 'NG') &
         (liquid_options_frame['cal_dte'] <= 360))]

    liquid_options_frame.sort(['ticker_head', 'cal_dte'],
                              ascending=[True, True],
                              inplace=True)

    liquid_options_frame['tr_dte'] = [
        exp.get_days2_expiration(date_to=settle_date,
                                 con=con,
                                 instrument='options',
                                 ticker=x)['tr_dte']
        for x in liquid_options_frame['ticker']
    ]

    if 'con' not in kwargs.keys():
        con.close()

    option_frame = liquid_options_frame[liquid_options_frame['tr_dte'] >= 35]

    option_frame.reset_index(drop=True, inplace=True)

    unique_ticker_heads = option_frame['ticker_head'].unique()
    tuples = []

    for ticker_head_i in unique_ticker_heads:

        ticker_head_data = option_frame[option_frame['ticker_head'] ==
                                        ticker_head_i]
        ticker_head_data.sort('cal_dte', ascending=True, inplace=True)

        if len(ticker_head_data.index) >= 2:
            for i in range(len(ticker_head_data.index) - 1):
                for j in range(i + 1, len(ticker_head_data.index)):
                    tuples = tuples + [
                        (ticker_head_data.index[i], ticker_head_data.index[j])
                    ]

    return pd.DataFrame(
        [(option_frame['ticker'][indx[0]], option_frame['ticker'][indx[1]],
          option_frame['ticker_head'][indx[0]],
          option_frame['ticker_class'][indx[0]],
          option_frame['tr_dte'][indx[0]], option_frame['tr_dte'][indx[1]])
         for indx in tuples],
        columns=[
            'ticker1', 'ticker2', 'tickerHead', 'tickerClass', 'trDte1',
            'trDte2'
        ])
def update_options_greeks_4date(**kwargs):

    options_frame = cl.generate_liquid_options_list_dataframe(**kwargs)
    [update_options_greek_database_4ticker(ticker=x, **kwargs) for x in options_frame['ticker']]