Пример #1
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 process_cme_futures_4tickerhead(**kwargs):

    ticker_head = kwargs['ticker_head']
    report_date = kwargs['report_date']

    ticker_class = cmi.ticker_class[ticker_head]

    name_type_output = cmeu.get_file_name_type_from_tickerclass(
        ticker_class, 'futures')
    file_name = name_type_output['file_name']
    file_type = name_type_output['file_type']

    settle_frame = pd.DataFrame()

    if file_type == 'txt':
        data_read_out = rcf.read_cme_settle_txt_files(file_name=file_name,
                                                      report_date=report_date)

        title_frame = data_read_out['title_frame']
        settle_list = data_read_out['settle_list']
        open_list = data_read_out['open_list']
        high_list = data_read_out['high_list']
        low_list = data_read_out['low_list']

        volume_filtered_list = data_read_out['volume_filtered_list']
        interest_filtered_list = data_read_out['interest_filtered_list']

        month_strike_list = data_read_out['month_strike_list']

        selected_frame = title_frame[
            (title_frame['asset_type'] == 'futures')
            & (title_frame['ticker_head'] == ticker_head)]

        contact_month_strings = month_strike_list[selected_frame.index[0]]

        datetime_conversion = [
            dt.datetime.strptime(x.replace('JLY', 'JUL'), '%b%y')
            for x in contact_month_strings
        ]

        settle_frame['ticker_year'] = [x.year for x in datetime_conversion]
        settle_frame['ticker_month'] = [x.month for x in datetime_conversion]

        settle_frame['settle'] = settle_list[selected_frame.index[0]]

        settle_frame['open'] = open_list[selected_frame.index[0]]
        settle_frame['high'] = high_list[selected_frame.index[0]]
        settle_frame['high'] = settle_frame['high'].str.replace('B', '')
        settle_frame['low'] = low_list[selected_frame.index[0]]
        settle_frame['low'] = settle_frame['low'].str.replace('A', '')

        settle_frame['volume'] = volume_filtered_list[selected_frame.index[0]]
        settle_frame['interest'] = interest_filtered_list[
            selected_frame.index[0]]

    elif file_type == 'csv':
        data_read_out = rcf.read_cme_future_settle_csv_files(
            file_name=file_name, report_date=report_date)

        selected_frame = data_read_out[data_read_out['ticker_head'] ==
                                       ticker_head]

        settle_frame['ticker_head'] = selected_frame['ticker_head']
        settle_frame['ticker_year'] = selected_frame['CONTRACT YEAR']
        settle_frame['ticker_month'] = selected_frame['CONTRACT MONTH'].astype(
            'int')

        settle_frame['settle'] = selected_frame['SETTLE']
        settle_frame['open'] = selected_frame['OPEN']
        settle_frame['high'] = selected_frame['HIGH']
        settle_frame['low'] = selected_frame['LOW']
        settle_frame['volume'] = selected_frame['EST. VOL']
        settle_frame['interest'] = selected_frame['PRIOR INT']

        settle_frame['volume'] = settle_frame['volume'].replace('', 0)
        settle_frame['interest'] = settle_frame['interest'].replace('', 0)

    settle_frame['ticker'] = [
        ticker_head +
        cmi.full_letter_month_list[settle_frame.loc[x, 'ticker_month'] - 1] +
        str(settle_frame.loc[x, 'ticker_year']) for x in settle_frame.index
    ]

    settle_frame['volume'] = settle_frame['volume'].replace('', 0)
    settle_frame['volume'] = settle_frame['volume'].astype('int')

    settle_frame['interest'] = settle_frame['interest'].replace('', 0)
    settle_frame['interest'] = settle_frame['interest'].astype('int')

    if ticker_head in [
            'ED', 'SM', 'BO', 'LC', 'LN', 'FC', 'ES', 'NQ', 'AD', 'CD', 'EC',
            'JY', 'BP'
    ]:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['open'] = settle_frame['open'].replace('----', np.NaN)
        settle_frame['high'] = settle_frame['high'].replace('----', np.NaN)
        settle_frame['low'] = settle_frame['low'].replace('----', np.NaN)
        settle_frame['open'] = settle_frame['open'].astype('float64')
        settle_frame['high'] = settle_frame['high'].astype('float64')
        settle_frame['low'] = settle_frame['low'].astype('float64')
    elif ticker_head in ['C', 'S', 'W', 'KW']:
        splited_strings = [x.split("'") for x in settle_frame['settle']]
        settle_frame['settle'] = [
            int(x[0]) + int(x[1]) * 0.125 if len(x) == 2 else np.NaN
            for x in splited_strings
        ]
        splited_strings = [x.split("'") for x in settle_frame['open']]
        settle_frame['open'] = [
            int(x[0]) + int(x[1]) * 0.125 if len(x) == 2 else np.NaN
            for x in splited_strings
        ]
        splited_strings = [x.split("'") for x in settle_frame['high']]
        settle_frame['high'] = [
            int(x[0]) + int(x[1]) * 0.125 if len(x) == 2 else np.NaN
            for x in splited_strings
        ]
        splited_strings = [x.split("'") for x in settle_frame['low']]
        settle_frame['low'] = [
            int(x[0]) + int(x[1]) * 0.125 if len(x) == 2 else np.NaN
            for x in splited_strings
        ]
    elif ticker_head in ['FV', 'TU', 'TY', 'US']:
        settle_frame['settle'] = [
            convert_treasury_settles(ticker_head, x)
            for x in settle_frame['settle']
        ]
        settle_frame['open'] = [
            convert_treasury_settles(ticker_head, x)
            for x in settle_frame['open']
        ]
        settle_frame['high'] = [
            convert_treasury_settles(ticker_head, x)
            for x in settle_frame['high']
        ]
        settle_frame['low'] = [
            convert_treasury_settles(ticker_head, x)
            for x in settle_frame['low']
        ]
    elif ticker_head in ['GC', 'SI', 'CL', 'NG', 'HO', 'RB']:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['open'] = settle_frame['open'].replace('', np.NaN)
        settle_frame['high'] = settle_frame['high'].replace('', np.NaN)
        settle_frame['low'] = settle_frame['low'].replace('', np.NaN)
        settle_frame['open'] = settle_frame['open'].astype('float64')
        settle_frame['high'] = settle_frame['high'].astype('float64')
        settle_frame['low'] = settle_frame['low'].astype('float64')

    return {'settle_frame': settle_frame}
def process_cme_options_4ticker(**kwargs):

    ticker = kwargs['ticker']
    report_date = kwargs['report_date']

    contract_specs_output = cmi.get_contract_specs(ticker)
    ticker_class = contract_specs_output['ticker_class']
    ticker_head = contract_specs_output['ticker_head']

    name_type_output = cmeu.get_file_name_type_from_tickerclass(
        ticker_class, 'options')
    file_name = name_type_output['file_name']
    file_type = name_type_output['file_type']

    if file_type == 'txt':

        if 'data_read_out' in kwargs.keys():
            data_read_out = kwargs['data_read_out'][file_name]
        else:
            data_read_out = rcf.read_cme_settle_txt_files(
                file_name=file_name, report_date=report_date)

        title_frame = data_read_out['title_frame']
        settle_list = data_read_out['settle_list']
        month_strike_list = data_read_out['month_strike_list']
        volume_filtered_list = data_read_out['volume_filtered_list']
        interest_filtered_list = data_read_out['interest_filtered_list']

        selected_frame = title_frame[
            (title_frame['asset_type'] == 'options')
            & (title_frame['ticker_head'] == ticker_head)]

        if selected_frame.empty:
            return {'success': False, 'settle_frame': pd.DataFrame()}

        datetime_conversion = [
            dt.datetime.strptime(x.replace('JLY', 'JUL'), '%b%y')
            for x in selected_frame['maturity_string']
        ]
        selected_frame['ticker_year'] = [x.year for x in datetime_conversion]
        selected_frame['ticker_month'] = [x.month for x in datetime_conversion]

        selected_frame['ticker'] = [
            ticker_head +
            cmi.full_letter_month_list[selected_frame.loc[x, 'ticker_month'] -
                                       1] +
            str(selected_frame.loc[x, 'ticker_year'])
            for x in selected_frame.index
        ]

        selected_frame_call = selected_frame[
            (selected_frame['ticker'] == ticker)
            & (selected_frame['option_type'] == 'C')]
        selected_frame_put = selected_frame[
            (selected_frame['ticker'] == ticker)
            & (selected_frame['option_type'] == 'P')]

        if selected_frame_call.empty or selected_frame_put.empty:
            return {'success': False, 'settle_frame': pd.DataFrame()}

        selected_call_indx = selected_frame_call.index[0]
        selected_put_indx = selected_frame_put.index[0]

        call_dataframe = pd.DataFrame.from_dict({
            'strike':
            month_strike_list[selected_call_indx],
            'settle':
            settle_list[selected_call_indx],
            'volume':
            volume_filtered_list[selected_call_indx],
            'interest':
            interest_filtered_list[selected_call_indx]
        })

        put_dataframe = pd.DataFrame.from_dict({
            'strike':
            month_strike_list[selected_put_indx],
            'settle':
            settle_list[selected_put_indx],
            'volume':
            volume_filtered_list[selected_put_indx],
            'interest':
            interest_filtered_list[selected_put_indx]
        })

        call_dataframe['option_type'] = 'C'
        put_dataframe['option_type'] = 'P'

        settle_frame = pd.concat([call_dataframe, put_dataframe])

    elif file_type == 'csv':

        data_read_out = rcf.read_cme_option_settle_csv_files(
            file_name=file_name, report_date=report_date)

        settle_frame = pd.DataFrame()
        selected_frame = data_read_out[data_read_out['ticker_head'] ==
                                       ticker_head]

        if selected_frame.empty:
            return {'success': False, 'settle_frame': pd.DataFrame()}

        selected_frame['ticker_month'] = selected_frame[
            'CONTRACT MONTH'].astype('int')

        selected_frame['ticker'] = [
            ticker_head +
            cmi.full_letter_month_list[selected_frame.loc[x, 'ticker_month'] -
                                       1] +
            str(selected_frame.loc[x, 'CONTRACT YEAR'])
            for x in selected_frame.index
        ]

        selected_frame = selected_frame[selected_frame['ticker'] == ticker]

        if selected_frame.empty:
            return {'success': False, 'settle_frame': pd.DataFrame()}

        settle_frame['ticker'] = selected_frame['ticker']
        settle_frame['option_type'] = selected_frame['PUT/CALL']
        settle_frame['strike'] = selected_frame['STRIKE']
        settle_frame['settle'] = selected_frame['SETTLE']
        settle_frame['volume'] = selected_frame['EST. VOL']
        settle_frame['interest'] = selected_frame['PRIOR INT']
        settle_frame.reset_index(inplace=True, drop=True)

    settle_frame = settle_frame[~settle_frame['settle'].str.contains('-')]

    if settle_frame.empty:
        return {'success': False, 'settle_frame': pd.DataFrame()}

    settle_frame['strike'] = settle_frame['strike'].astype('float64')

    if ticker_head in ['C', 'S', 'W', 'KW']:
        splited_strings = [x.split("'") for x in settle_frame['settle']]
        settle_frame['settle'] = [(0 if x[0] == '' else int(x[0])) +
                                  int(x[1]) * 0.125 if len(x) == 2 else np.NaN
                                  for x in splited_strings]
        settle_frame['strike'] = settle_frame['strike'] / 10
    elif ticker_head in ['ED', 'E0', 'E2', 'E3', 'E4', 'E5']:
        settle_frame['settle'] = settle_frame['settle'].replace(
            'CAB', cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        half_quarter_indx = settle_frame['strike'] % 25 == 12
        settle_frame['strike'] = settle_frame['strike'] / 100
        settle_frame['strike'][half_quarter_indx] = settle_frame['strike'][
            half_quarter_indx] + 0.005
    elif ticker_head in ['SM']:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['strike'] = settle_frame['strike'] / 100
    elif ticker_head in ['BO']:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['strike'] = settle_frame['strike'] / 1000
    elif ticker_head in ['LC', 'LN', 'ES', 'NQ']:
        settle_frame.reset_index(inplace=True, drop=True)
        settle_frame['settle'] = settle_frame['settle'].replace(
            'CAB', cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
    elif ticker_head in ['FC']:
        settle_frame['settle'] = settle_frame['settle'].replace(
            'CAB', cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['strike'] = settle_frame['strike'] / 100
    elif ticker_head in ['AD', 'CD']:
        settle_frame['settle'] = settle_frame['settle'].replace(
            'CAB', 100 * cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64') / 100
        settle_frame['strike'] = settle_frame['strike'] / 10000
    elif ticker_head in ['EC']:
        settle_frame['settle'] = settle_frame['settle'].replace(
            'CAB', cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['strike'] = settle_frame['strike'] / 10000
    elif ticker_head in ['JY']:
        settle_frame['settle'] = settle_frame['settle'].replace(
            'CAB', cmi.option_cabinet_values[ticker_head] / 1000)
        settle_frame['settle'] = settle_frame['settle'].astype(
            'float64') * 1000
        settle_frame['strike'] = settle_frame['strike'] * 10
    elif ticker_head in ['BP']:
        settle_frame['settle'] = settle_frame['settle'].replace(
            'CAB', 100 * cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64') / 100
        settle_frame['strike'] = settle_frame['strike'] / 1000
    elif ticker_head in ['TU', 'FV']:
        half_quarter_indx = settle_frame['strike'] % 25 == 12
        settle_frame['strike'] = settle_frame['strike'] / 100
        settle_frame['strike'][half_quarter_indx] = settle_frame['strike'][
            half_quarter_indx] + 0.005

        splited_strings = [x.split("'") for x in settle_frame['settle']]

        settle_frame['settle'] = [(0 if x[0] == '' else int(x[0])) +
                                  int(x[1]) / 640 if len(x) == 2 else
                                  (cmi.option_cabinet_values[ticker_head]
                                   if x[0] == 'CAB' else np.NaN)
                                  for x in splited_strings]
    elif ticker_head in ['TY', 'US']:
        settle_frame['strike'] = settle_frame['strike'] / 100

        splited_strings = [x.split("'") for x in settle_frame['settle']]

        settle_frame['settle'] = [(0 if x[0] == '' else int(x[0])) +
                                  int(x[1]) / 64 if len(x) == 2 else
                                  (cmi.option_cabinet_values[ticker_head]
                                   if x[0] == 'CAB' else np.NaN)
                                  for x in splited_strings]

    elif ticker_head in ['GC', 'SI', 'CL', 'NG', 'RB', 'HO']:
        settle_frame['settle'] = settle_frame['settle'].replace([''], [None])
        settle_frame = settle_frame[~pd.isnull(settle_frame['settle'])]
        settle_frame['settle'] = settle_frame['settle'].astype('float64')

    settle_frame['volume'] = settle_frame['volume'].replace('', 0)
    settle_frame['volume'] = settle_frame['volume'].astype('int')

    settle_frame['interest'] = settle_frame['interest'].replace('', 0)
    settle_frame['interest'] = settle_frame['interest'].astype('int')

    return {'success': True, 'settle_frame': settle_frame}
def process_cme_futures_4tickerhead(**kwargs):

    ticker_head = kwargs['ticker_head']
    report_date = kwargs['report_date']

    ticker_class = cmi.ticker_class[ticker_head]

    name_type_output = cmeu.get_file_name_type_from_tickerclass(ticker_class, 'futures')
    file_name = name_type_output['file_name']
    file_type = name_type_output['file_type']

    settle_frame = pd.DataFrame()

    if file_type == 'txt':
        data_read_out = rcf.read_cme_settle_txt_files(file_name=file_name, report_date=report_date)

        title_frame = data_read_out['title_frame']
        settle_list = data_read_out['settle_list']
        open_list = data_read_out['open_list']
        high_list = data_read_out['high_list']
        low_list = data_read_out['low_list']

        volume_filtered_list = data_read_out['volume_filtered_list']
        interest_filtered_list = data_read_out['interest_filtered_list']

        month_strike_list = data_read_out['month_strike_list']

        selected_frame = title_frame[(title_frame['asset_type'] == 'futures') & (title_frame['ticker_head'] == ticker_head)]

        contact_month_strings = month_strike_list[selected_frame.index[0]]

        datetime_conversion = [dt.datetime.strptime(x.replace('JLY', 'JUL'), '%b%y') for x in contact_month_strings]

        settle_frame['ticker_year'] = [x.year for x in datetime_conversion]
        settle_frame['ticker_month'] = [x.month for x in datetime_conversion]

        settle_frame['settle'] = settle_list[selected_frame.index[0]]

        settle_frame['open'] = open_list[selected_frame.index[0]]
        settle_frame['high'] = high_list[selected_frame.index[0]]
        settle_frame['high'] = settle_frame['high'].str.replace('B', '')
        settle_frame['low'] = low_list[selected_frame.index[0]]
        settle_frame['low'] = settle_frame['low'].str.replace('A', '')

        settle_frame['volume'] = volume_filtered_list[selected_frame.index[0]]
        settle_frame['interest'] = interest_filtered_list[selected_frame.index[0]]

    elif file_type == 'csv':
        data_read_out = rcf.read_cme_future_settle_csv_files(file_name=file_name, report_date=report_date)

        selected_frame = data_read_out[data_read_out['ticker_head'] == ticker_head]

        settle_frame['ticker_head'] = selected_frame['ticker_head']
        settle_frame['ticker_year'] = selected_frame['CONTRACT YEAR']
        settle_frame['ticker_month'] = selected_frame['CONTRACT MONTH'].astype('int')

        settle_frame['settle'] = selected_frame['SETTLE']
        settle_frame['open'] = selected_frame['OPEN']
        settle_frame['high'] = selected_frame['HIGH']
        settle_frame['low'] = selected_frame['LOW']
        settle_frame['volume'] = selected_frame['EST. VOL']
        settle_frame['interest'] = selected_frame['PRIOR INT']

        settle_frame['volume'] = settle_frame['volume'].replace('', 0)
        settle_frame['interest'] = settle_frame['interest'].replace('', 0)

    settle_frame['ticker'] = [ticker_head +
                            cmi.full_letter_month_list[settle_frame.loc[x, 'ticker_month']-1] +
                            str(settle_frame.loc[x, 'ticker_year']) for x in settle_frame.index]

    settle_frame['volume'] = settle_frame['volume'].replace('',0)
    settle_frame['volume'] = settle_frame['volume'].astype('int')

    settle_frame['interest'] = settle_frame['interest'].replace('',0)
    settle_frame['interest'] = settle_frame['interest'].astype('int')

    if ticker_head in ['ED', 'SM', 'BO', 'LC', 'LN', 'FC', 'ES', 'NQ', 'AD', 'CD', 'EC', 'JY', 'BP']:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['open'] = settle_frame['open'].replace('----', np.NaN)
        settle_frame['high'] = settle_frame['high'].replace('----', np.NaN)
        settle_frame['low'] = settle_frame['low'].replace('----', np.NaN)
        settle_frame['open'] = settle_frame['open'].astype('float64')
        settle_frame['high'] = settle_frame['high'].astype('float64')
        settle_frame['low'] = settle_frame['low'].astype('float64')
    elif ticker_head in ['C', 'S', 'W', 'KW']:
        splited_strings = [x.split("'") for x in settle_frame['settle']]
        settle_frame['settle'] = [int(x[0])+int(x[1])*0.125 if len(x) == 2 else np.NaN for x in splited_strings]
        splited_strings = [x.split("'") for x in settle_frame['open']]
        settle_frame['open'] = [int(x[0])+int(x[1])*0.125 if len(x) == 2 else np.NaN for x in splited_strings]
        splited_strings = [x.split("'") for x in settle_frame['high']]
        settle_frame['high'] = [int(x[0])+int(x[1])*0.125 if len(x) == 2 else np.NaN for x in splited_strings]
        splited_strings = [x.split("'") for x in settle_frame['low']]
        settle_frame['low'] = [int(x[0])+int(x[1])*0.125 if len(x) == 2 else np.NaN for x in splited_strings]
    elif ticker_head in ['FV', 'TU', 'TY', 'US']:
        settle_frame['settle'] = [convert_treasury_settles(ticker_head,x) for x in settle_frame['settle']]
        settle_frame['open'] = [convert_treasury_settles(ticker_head,x) for x in settle_frame['open']]
        settle_frame['high'] = [convert_treasury_settles(ticker_head,x) for x in settle_frame['high']]
        settle_frame['low'] = [convert_treasury_settles(ticker_head,x) for x in settle_frame['low']]
    elif ticker_head in ['GC', 'SI', 'CL', 'NG', 'HO', 'RB']:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['open'] = settle_frame['open'].replace('', np.NaN)
        settle_frame['high'] = settle_frame['high'].replace('', np.NaN)
        settle_frame['low'] = settle_frame['low'].replace('', np.NaN)
        settle_frame['open'] = settle_frame['open'].astype('float64')
        settle_frame['high'] = settle_frame['high'].astype('float64')
        settle_frame['low'] = settle_frame['low'].astype('float64')


    return {'settle_frame': settle_frame}
def process_cme_options_4ticker(**kwargs):

    ticker = kwargs['ticker']
    report_date = kwargs['report_date']

    contract_specs_output = cmi.get_contract_specs(ticker)
    ticker_class = contract_specs_output['ticker_class']
    ticker_head = contract_specs_output['ticker_head']

    name_type_output = cmeu.get_file_name_type_from_tickerclass(ticker_class, 'options')
    file_name = name_type_output['file_name']
    file_type = name_type_output['file_type']

    if file_type == 'txt':

        if 'data_read_out' in kwargs.keys():
            data_read_out = kwargs['data_read_out'][file_name]
        else:
            data_read_out = rcf.read_cme_settle_txt_files(file_name=file_name, report_date=report_date)

        title_frame = data_read_out['title_frame']
        settle_list = data_read_out['settle_list']
        month_strike_list = data_read_out['month_strike_list']
        volume_filtered_list = data_read_out['volume_filtered_list']
        interest_filtered_list = data_read_out['interest_filtered_list']

        selected_frame = title_frame[(title_frame['asset_type'] == 'options') & (title_frame['ticker_head'] == ticker_head)]

        datetime_conversion = [dt.datetime.strptime(x.replace('JLY', 'JUL'), '%b%y') for x in selected_frame['maturity_string']]
        selected_frame['ticker_year'] = [x.year for x in datetime_conversion]
        selected_frame['ticker_month'] = [x.month for x in datetime_conversion]

        selected_frame['ticker'] = [ticker_head +
                            cmi.full_letter_month_list[selected_frame.loc[x, 'ticker_month']-1] +
                            str(selected_frame.loc[x, 'ticker_year']) for x in selected_frame.index]

        selected_frame_call = selected_frame[(selected_frame['ticker'] == ticker)&(selected_frame['option_type'] == 'C')]
        selected_frame_put = selected_frame[(selected_frame['ticker'] == ticker)&(selected_frame['option_type'] == 'P')]

        if selected_frame_call.empty or selected_frame_put.empty:
            return {'success': False, 'settle_frame': pd.DataFrame()}

        selected_call_indx = selected_frame_call.index[0]
        selected_put_indx = selected_frame_put.index[0]

        call_dataframe = pd.DataFrame.from_items([('strike', month_strike_list[selected_call_indx]),
                                                  ('settle', settle_list[selected_call_indx]),
                                                  ('volume', volume_filtered_list[selected_call_indx]),
                                                  ('interest', interest_filtered_list[selected_call_indx])])

        put_dataframe = pd.DataFrame.from_items([('strike', month_strike_list[selected_put_indx]),
                                                  ('settle', settle_list[selected_put_indx]),
                                                  ('volume', volume_filtered_list[selected_put_indx]),
                                                  ('interest', interest_filtered_list[selected_put_indx])])

        call_dataframe['option_type'] = 'C'
        put_dataframe['option_type'] = 'P'

        settle_frame = pd.concat([call_dataframe, put_dataframe])

    elif file_type == 'csv':

        data_read_out = rcf.read_cme_option_settle_csv_files(file_name=file_name, report_date=report_date)

        settle_frame = pd.DataFrame()
        selected_frame = data_read_out[data_read_out['ticker_head'] == ticker_head]
        selected_frame['ticker_month'] = selected_frame['CONTRACT MONTH'].astype('int')

        selected_frame['ticker'] = [ticker_head +
                            cmi.full_letter_month_list[selected_frame.loc[x, 'ticker_month']-1] +
                            str(selected_frame.loc[x, 'CONTRACT YEAR']) for x in selected_frame.index]

        selected_frame = selected_frame[selected_frame['ticker'] == ticker]

        if selected_frame.empty:
            return {'success': False, 'settle_frame': pd.DataFrame()}

        settle_frame['ticker'] = selected_frame['ticker']
        settle_frame['option_type'] = selected_frame['PUT/CALL']
        settle_frame['strike'] = selected_frame['STRIKE']
        settle_frame['settle'] = selected_frame['SETTLE']
        settle_frame['volume'] = selected_frame['EST. VOL']
        settle_frame['interest'] = selected_frame['PRIOR INT']
        settle_frame.reset_index(inplace=True, drop=True)

    settle_frame['strike'] = settle_frame['strike'].astype('float64')

    if ticker_head in ['C', 'S', 'W', 'KW']:
        splited_strings = [x.split("'") for x in settle_frame['settle']]
        settle_frame['settle'] = [(0 if x[0] == '' else int(x[0])) + int(x[1])*0.125 if len(x) == 2 else np.NaN for x in splited_strings]
        settle_frame['strike'] = settle_frame['strike']/10
    elif ticker_head in ['ED', 'E0', 'E2', 'E3', 'E4', 'E5']:
        settle_frame['settle'] = settle_frame['settle'].replace('CAB', cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        half_quarter_indx = settle_frame['strike'] % 25 == 12
        settle_frame['strike'] = settle_frame['strike']/100
        settle_frame['strike'][half_quarter_indx] = settle_frame['strike'][half_quarter_indx]+0.005
    elif ticker_head in ['SM']:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['strike'] = settle_frame['strike']/100
    elif ticker_head in ['BO']:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['strike'] = settle_frame['strike']/1000
    elif ticker_head in ['LC', 'LN', 'ES', 'NQ']:
        settle_frame['settle'] = settle_frame['settle'].replace('CAB', cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
    elif ticker_head in ['FC']:
        settle_frame['settle'] = settle_frame['settle'].replace('CAB', cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['strike'] = settle_frame['strike']/100
    elif ticker_head in ['AD', 'CD']:
        settle_frame['settle'] = settle_frame['settle'].replace('CAB', 100*cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')/100
        settle_frame['strike'] = settle_frame['strike']/10000
    elif ticker_head in ['EC']:
        settle_frame['settle'] = settle_frame['settle'].replace('CAB', cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')
        settle_frame['strike'] = settle_frame['strike']/1000
    elif ticker_head in ['JY']:
        settle_frame['settle'] = settle_frame['settle'].replace('CAB', cmi.option_cabinet_values[ticker_head]/1000)
        settle_frame['settle'] = settle_frame['settle'].astype('float64')*1000
        settle_frame['strike'] = settle_frame['strike']*10
    elif ticker_head in ['BP']:
        settle_frame['settle'] = settle_frame['settle'].replace('CAB', 100*cmi.option_cabinet_values[ticker_head])
        settle_frame['settle'] = settle_frame['settle'].astype('float64')/100
        settle_frame['strike'] = settle_frame['strike']/1000
    elif ticker_head in ['TU', 'FV']:
        half_quarter_indx = settle_frame['strike'] % 25 == 12
        settle_frame['strike'] = settle_frame['strike']/100
        settle_frame['strike'][half_quarter_indx] = settle_frame['strike'][half_quarter_indx]+0.005

        splited_strings = [x.split("'") for x in settle_frame['settle']]

        settle_frame['settle'] = [(0 if x[0] == '' else int(x[0])) + int(x[1])/640 if len(x) == 2 else
                                      (cmi.option_cabinet_values[ticker_head] if x[0] == 'CAB' else np.NaN) for x in splited_strings]
    elif ticker_head in ['TY','US']:
        settle_frame['strike'] = settle_frame['strike']/100

        splited_strings = [x.split("'") for x in settle_frame['settle']]

        settle_frame['settle'] = [(0 if x[0] == '' else int(x[0])) + int(x[1])/64 if len(x) == 2 else
                                      (cmi.option_cabinet_values[ticker_head] if x[0] == 'CAB' else np.NaN) for x in splited_strings]

    elif ticker_head in ['GC', 'SI', 'CL', 'NG', 'RB', 'HO']:
        settle_frame['settle'] = settle_frame['settle'].astype('float64')

    settle_frame['volume'] = settle_frame['volume'].replace('', 0)
    settle_frame['volume'] = settle_frame['volume'].astype('int')

    settle_frame['interest'] = settle_frame['interest'].replace('', 0)
    settle_frame['interest'] = settle_frame['interest'].astype('int')

    return {'success': True, 'settle_frame': settle_frame}