Ejemplo n.º 1
0
def init_k_line_pump():

    for k, v in list(DEPOSITARY_OF_KLINE.items()):
        for _k, _v in list(v.items()):
            DEPOSITARY_OF_KLINE[k][_k]['k_line_pump'] = KLinePump()
            DEPOSITARY_OF_KLINE[k][_k]['k_line_pump'].interval = int(_k)
Ejemplo n.º 2
0
def sewing_data_to_file_and_depositary(depth_market_data=None):

    # for key in ['InstrumentID', 'LastPrice', 'TradingDay', 'UpdateTime']:
    #     if not hasattr(depth_market_data, key):
    #         return

    instrument_id = depth_market_data.InstrumentID
    contract_code = contract_code_pattern.match(instrument_id).group()
    date = '-'.join([
        depth_market_data.TradingDay[:4], depth_market_data.TradingDay[4:6],
        depth_market_data.TradingDay[6:]
    ])

    date_time = ' '.join([date, depth_market_data.UpdateTime])

    if not trading_time_filter(date_time=date_time,
                               contract_code=contract_code,
                               exchange_trading_period_by_ts=
                               workdays_exchange_trading_period_by_ts[date]):
        return

    formatted_depth_market_data = dict()
    formatted_depth_market_data['trading_day'] = date.replace('-', '')
    formatted_depth_market_data['update_time'] = depth_market_data.UpdateTime
    formatted_depth_market_data['instrument_id'] = instrument_id

    if isinstance(depth_market_data.LastPrice, str):
        if depth_market_data.LastPrice.isdigit():
            formatted_depth_market_data['last_price'] = int(
                depth_market_data.LastPrice)
        else:
            try:
                formatted_depth_market_data['last_price'] = float(
                    depth_market_data.LastPrice)
            except ValueError:
                return

    else:
        formatted_depth_market_data['last_price'] = depth_market_data.LastPrice

    if instrument_id not in DEPOSITARY_OF_KLINE:
        DEPOSITARY_OF_KLINE[instrument_id] = dict()

    for granularity in config['granularities']:
        interval = 60 * granularity
        str_interval = str(interval)

        if str_interval not in DEPOSITARY_OF_KLINE[instrument_id]:
            file_name = '_'.join([instrument_id, str_interval]) + '.json'
            DEPOSITARY_OF_KLINE[instrument_id][str_interval] = {
                'path': os.path.join(config['data_source_dir'], file_name),
                'data': list()
            }
            DEPOSITARY_OF_KLINE[instrument_id][str_interval][
                'k_line_pump'] = KLinePump()
            DEPOSITARY_OF_KLINE[instrument_id][str_interval][
                'k_line_pump'].interval = interval

    for k, v in list(DEPOSITARY_OF_KLINE[instrument_id].items()):
        DEPOSITARY_OF_KLINE[instrument_id][k]['k_line_pump'].process_data(
            depth_market_data=formatted_depth_market_data,
            save_path=DEPOSITARY_OF_KLINE[instrument_id][k]['path'])

        if DEPOSITARY_OF_KLINE[instrument_id][k][
                'k_line_pump'].str_k_line is not None:
            json_k_line = json.loads(DEPOSITARY_OF_KLINE[instrument_id][k]
                                     ['k_line_pump'].str_k_line)
            DEPOSITARY_OF_KLINE[instrument_id][k]['data'].append(json_k_line)

            DEPOSITARY_OF_KLINE[instrument_id][k][
                'k_line_pump'].str_k_line = None
Ejemplo n.º 3
0
def sewing_data_to_file_and_depositary(depth_market_data=None):

    for key in ['InstrumentID', 'LastPrice', 'ActionDay', 'UpdateTime']:
        if not hasattr(depth_market_data, key):
            return

    instrument_id = depth_market_data.InstrumentID
    contract_code = contract_code_pattern.match(instrument_id).group()

    workdays = TradingPeriod.get_workdays(begin=config['begin'], end='2019-12-31')
    workdays_exchange_trading_period_by_ts = \
        TradingPeriod.get_workdays_exchange_trading_period(
            _workdays=workdays, exchange_trading_period=EXCHANGE_TRADING_PERIOD)

    date = '-'.join([depth_market_data.ActionDay[:4], depth_market_data.ActionDay[4:6],
                     depth_market_data.ActionDay[6:]])

    date_time = ' '.join([date, depth_market_data.UpdateTime])

    # if not trading_time_filter(
    #         date_time=date_time, contract_code=contract_code,
    #         exchange_trading_period_by_ts=workdays_exchange_trading_period_by_ts[date]):
    #     return

    formatted_depth_market_data = dict()
    formatted_depth_market_data['trading_day'] = date.replace('-', '')
    formatted_depth_market_data['update_time'] = depth_market_data.UpdateTime
    formatted_depth_market_data['instrument_id'] = instrument_id

    if isinstance(depth_market_data.LastPrice, basestring):
        if depth_market_data.LastPrice.isdigit():
            formatted_depth_market_data['last_price'] = int(depth_market_data.LastPrice)
        else:
            try:
                formatted_depth_market_data['last_price'] = float('%0.2f' % float(depth_market_data.LastPrice))
            except ValueError:
                return

    else:
        formatted_depth_market_data['last_price'] = depth_market_data.LastPrice

    if instrument_id not in DEPOSITARY_OF_KLINE:
        DEPOSITARY_OF_KLINE[instrument_id] = dict()

    for granularity in config['granularities']:
        interval = 60 * granularity
        str_interval = str(interval)

        if str_interval not in DEPOSITARY_OF_KLINE[instrument_id]:
            file_name = '_'.join([instrument_id, str_interval]) + '.json'
            DEPOSITARY_OF_KLINE[instrument_id][str_interval] = {
                'path': os.path.join(config['data_source_dir'], file_name),
                'data': list()
            }
            DEPOSITARY_OF_KLINE[instrument_id][str_interval]['k_line_pump'] = KLinePump()
            DEPOSITARY_OF_KLINE[instrument_id][str_interval]['k_line_pump'].interval = interval

    for k, v in DEPOSITARY_OF_KLINE[instrument_id].items():
        DEPOSITARY_OF_KLINE[instrument_id][k]['k_line_pump'].process_data(
            depth_market_data=formatted_depth_market_data, save_path=DEPOSITARY_OF_KLINE[instrument_id][k]['path'])

        if DEPOSITARY_OF_KLINE[instrument_id][k]['k_line_pump'].str_k_line is not None:
            json_k_line = json.loads(DEPOSITARY_OF_KLINE[instrument_id][k]['k_line_pump'].str_k_line)
            DEPOSITARY_OF_KLINE[instrument_id][k]['data'].append(json_k_line)

            DEPOSITARY_OF_KLINE[instrument_id][k]['k_line_pump'].str_k_line = None

            if 'MA' not in DEPOSITARY_OF_KLINE[instrument_id][k]:
                DEPOSITARY_OF_KLINE[instrument_id][k]['MA'] = dict()

                for step in config['ma_steps']:
                    str_step = step.__str__()
                    if str_step not in DEPOSITARY_OF_KLINE[instrument_id][k]['MA']:
                        DEPOSITARY_OF_KLINE[instrument_id][k]['MA'][str_step] = dict()
                        DEPOSITARY_OF_KLINE[instrument_id][k]['MA'][str_step]['pump'] = MAPump(step=step)
                        DEPOSITARY_OF_KLINE[instrument_id][k]['MA'][str_step]['data'] = list()

            for ma_k, ma_v in DEPOSITARY_OF_KLINE[instrument_id][k]['MA'].items():
                ma_ret = DEPOSITARY_OF_KLINE[instrument_id][k]['MA'][ma_k]['pump'].process_data(json_k_line)
                DEPOSITARY_OF_KLINE[instrument_id][k]['MA'][ma_k]['data'].append(ma_ret)

            if 'MAC' not in DEPOSITARY_OF_KLINE[instrument_id][k]:
                DEPOSITARY_OF_KLINE[instrument_id][k]['MAC'] = dict()

                for mac in config['macs']:
                    if mac not in DEPOSITARY_OF_KLINE[instrument_id][k]['MAC']:
                        DEPOSITARY_OF_KLINE[instrument_id][k]['MAC'][mac] = dict()
                        DEPOSITARY_OF_KLINE[instrument_id][k]['MAC'][mac]['data'] = list()

            for mac_k, mac_v in DEPOSITARY_OF_KLINE[instrument_id][k]['MAC'].items():
                mac = mac_k.lower().split('c')

                data = {
                    'date_time': DEPOSITARY_OF_KLINE[instrument_id][k]['MA'][mac[0]]['data'][-1]['date_time'],
                    'up_crossing': None,
                    'a': DEPOSITARY_OF_KLINE[instrument_id][k]['MA'][mac[0]]['data'][-1]['avg'],
                    'b': DEPOSITARY_OF_KLINE[instrument_id][k]['MA'][mac[1]]['data'][-1]['avg']
                }

                last_mac = {
                    'up_crossing': data['a'] >= data['b']
                }

                if DEPOSITARY_OF_KLINE[instrument_id][k]['MAC'][mac_k]['data'].__len__() > 0:
                    last_mac = DEPOSITARY_OF_KLINE[instrument_id][k]['MAC'][mac_k]['data'][-1]

                if data['a'] > data['b']:

                    data['up_crossing'] = True

                elif data['a'] < data['b']:

                    data['up_crossing'] = False

                else:
                    data['up_crossing'] = None

                if DEPOSITARY_OF_KLINE[instrument_id][k]['MAC'][mac_k]['data'].__len__() > 0 and \
                        last_mac['up_crossing'] == data['up_crossing']:
                    data['up_crossing'] = None

                DEPOSITARY_OF_KLINE[instrument_id][k]['MAC'][mac_k]['data'].append(data)
                q_macs.put({'instrument_id': instrument_id, 'granularity': k, 'mac_k': mac_k, 'data': data})