def add_option(message_array):
    global max_instrument_id
    for message_info in message_array:
        ticker = getattr(message_info, 'InstrumentID', '')
        exchange_name = getattr(message_info, 'ExchangeID', '')
        if exchange_name == 'CFFEX':
            exchange_id = 25
        dict_key = '%s|%s' % (ticker, exchange_id)
        if dict_key in shf_db_dict:
            continue

        option_db = Instrument()
        max_instrument_id += 1
        option_db.id = max_instrument_id
        option_db.ticker = ticker
        option_db.exchange_id = exchange_id

        option_db.fut_val_pt = getattr(message_info, 'VolumeMultiple', '')
        option_db.max_market_order_vol = getattr(message_info,
                                                 'MaxMarketOrderVolume', '')
        option_db.min_market_order_vol = getattr(message_info,
                                                 'MinMarketOrderVolume', '')
        option_db.max_limit_order_vol = getattr(message_info,
                                                'MaxLimitOrderVolume', '')
        option_db.min_limit_order_vol = getattr(message_info,
                                                'MinLimitOrderVolume', '')

        option_db.strike = getattr(message_info, 'StrikePrice', '')
        option_db.create_date = getattr(message_info, 'CreateDate', '')
        option_db.expire_date = getattr(message_info, 'ExpireDate', '')

        underlying_instr_id = getattr(message_info, 'UnderlyingInstrID', '')
        undl_ticker = underlying_instr_id.replace('HO',
                                                  'IH').replace('IO', 'IF')
        undl_ticker = rebuild_undl_ticker(undl_ticker)
        option_db.undl_tickers = undl_ticker

        instrument_name = getattr(message_info, 'InstrumentName', '')
        instrument_name = instrument_name.replace(u'期权', 'OPTION').replace(
            u'股指', 'IDX').strip()
        option_db.name = instrument_name

        if '-C-' in ticker:
            put_call = 1
        else:
            put_call = 0
        option_db.put_call = put_call

        option_db.market_status_id = 2
        option_db.type_id = 10  # option
        option_db.market_sector_id = 6
        option_db.round_lot_size = 1
        option_db.tick_size_table = '0:0.2'
        option_db.longmarginratio = 1
        option_db.shortmarginratio = 0.15
        option_db.multiplier = 1
        instrument_insert_list.append(option_db)
        print 'prepare insert option:', ticker
Пример #2
0
def add_option(message_array):
    global max_instrument_id
    for messageInfo in message_array:
        ticker = getattr(messageInfo, 'InstrumentID', '')
        exchange_name = getattr(messageInfo, 'ExchangeID', '')
        if exchange_name == 'SSE':
            exchange_id = 18
        elif exchange_name == 'SZE':
            exchange_id = 19

        dict_key = '%s|%s' % (ticker, exchange_id)
        if dict_key in instrument_db_dict:
            continue

        option_db = Instrument()
        max_instrument_id += 1
        option_db.id = max_instrument_id
        option_db.ticker = ticker
        option_db.exchange_id = exchange_id
        option_db.fut_val_pt = getattr(messageInfo, 'VolumeMultiple', '')
        option_db.max_market_order_vol = getattr(messageInfo,
                                                 'MaxMarketOrderVolume', '')
        option_db.min_market_order_vol = getattr(messageInfo,
                                                 'MinMarketOrderVolume', '')
        option_db.max_limit_order_vol = getattr(messageInfo,
                                                'MaxLimitOrderVolume', '')
        option_db.min_limit_order_vol = getattr(messageInfo,
                                                'MinLimitOrderVolume', '')
        option_db.strike = getattr(messageInfo, 'ExecPrice', '')

        exchange_inst_id = getattr(messageInfo, 'ExchangeInstID', '')
        undl_tickers = exchange_inst_id[0:6]
        option_db.undl_tickers = undl_tickers
        option_db.track_undl_tickers = undl_tickers
        if 'M' in exchange_inst_id:
            option_db.contract_adjustment = 0
        elif 'A' in exchange_inst_id:
            option_db.contract_adjustment = 1
        elif 'B' in exchange_inst_id:
            option_db.contract_adjustment = 2
        elif 'C' in exchange_inst_id:
            option_db.contract_adjustment = 3

        option_db.create_date = getattr(messageInfo, 'CreateDate', '')
        option_db.expire_date = getattr(messageInfo, 'ExpireDate', '')

        instrument_name = getattr(messageInfo, 'InstrumentName', '').strip()
        instrument_name = instrument_name.replace('购', 'Call').replace('沽', 'Put').replace('月', 'month') \
            .replace('中国平安', undl_tickers).replace('上汽集团', undl_tickers)
        if 'Call' in instrument_name:
            put_call = 1
        else:
            put_call = 0
        option_db.name = instrument_name
        option_db.put_call = put_call

        price_tick = getattr(messageInfo, 'PriceTick', '')
        option_db.tick_size_table = '0:%s' % (float(price_tick), )

        option_db.ticker_exch = ticker
        option_db.ticker_exch_real = ticker
        option_db.market_status_id = 2
        option_db.type_id = 10  # option
        option_db.market_sector_id = 4
        option_db.round_lot_size = 1
        option_db.longmarginratio = 0
        option_db.shortmarginratio = 0.15
        option_db.longmarginratio_speculation = option_db.longmarginratio
        option_db.shortmarginratio_speculation = option_db.shortmarginratio
        option_db.longmarginratio_hedge = option_db.longmarginratio
        option_db.shortmarginratio_hedge = option_db.shortmarginratio
        option_db.longmarginratio_arbitrage = option_db.longmarginratio
        option_db.shortmarginratio_arbitrage = option_db.shortmarginratio
        option_db.multiplier = 10000
        option_db.crncy = 'CNY'
        option_db.effective_since = filter_date_str
        option_db.is_settle_instantly = 1
        option_db.is_purchase_to_redemption_instantly = 0
        option_db.is_buy_to_redpur_instantly = 0
        option_db.is_redpur_to_sell_instantly = 0
        option_db.option_margin_factor1 = 0.15
        option_db.option_margin_factor2 = 0.07
        instrument_insert_list.append(option_db)
        # print instrument_insert_list
        print 'prepare insert option:', ticker
def pre_add_option(message_array):
    global max_instrument_id
    for messageInfo in message_array:
        ticker = getattr(messageInfo, 'InstrumentID', '')
        exchange_name = getattr(messageInfo, 'ExchangeID', '')
        if 'CFFEX' == exchange_name:
            exchange_id = 25
        elif 'SHFE' == exchange_name:
            exchange_id = 20
        elif 'DCE' == exchange_name:
            exchange_id = 21
        elif 'CZCE' == exchange_name:
            exchange_id = 22
        else:
            continue

        if ticker in option_db_dict:
            continue

        option_db = Instrument()
        max_instrument_id += 1
        option_db.id = max_instrument_id
        option_db.ticker = ticker
        option_db.exchange_id = exchange_id
        option_db.fut_val_pt = getattr(messageInfo, 'VolumeMultiple', '')
        option_db.max_market_order_vol = getattr(messageInfo,
                                                 'MaxMarketOrderVolume', '')
        option_db.min_market_order_vol = getattr(messageInfo,
                                                 'MinMarketOrderVolume', '')
        option_db.max_limit_order_vol = getattr(messageInfo,
                                                'MaxLimitOrderVolume', '')
        option_db.min_limit_order_vol = getattr(messageInfo,
                                                'MinLimitOrderVolume', '')

        undl_tickers = getattr(messageInfo, 'UnderlyingInstrID', '')
        option_db.undl_tickers = undl_tickers

        option_db.create_date = getattr(messageInfo, 'CreateDate', '')
        option_db.expire_date = getattr(messageInfo, 'ExpireDate', '')

        instrument_name = getattr(messageInfo, 'InstrumentName', '').strip()
        instrument_name = instrument_name.replace('买权', 'Call').replace(
            '卖权', 'Put').replace('白糖', 'SR')

        option_db.name = ticker

        put_call = __get_put_call(instrument_name)
        option_db.put_call = put_call

        if put_call == 0:
            option_db.strike = ticker.replace('-', '').split('P')[-1]
        else:
            option_db.strike = ticker.replace('-', '').split('C')[-1]

        price_tick = getattr(messageInfo, 'PriceTick', '')
        option_db.tick_size_table = '0:%s' % (float(price_tick), )

        option_db.ticker_exch = ticker
        option_db.ticker_exch_real = ticker
        option_db.market_status_id = 2
        option_db.type_id = 10  # option
        option_db.market_sector_id = 1
        option_db.round_lot_size = 1
        option_db.longmarginratio = 0
        option_db.shortmarginratio = 0.15
        option_db.longmarginratio_speculation = option_db.longmarginratio
        option_db.shortmarginratio_speculation = option_db.shortmarginratio
        option_db.longmarginratio_hedge = option_db.longmarginratio
        option_db.shortmarginratio_hedge = option_db.shortmarginratio
        option_db.longmarginratio_arbitrage = option_db.longmarginratio
        option_db.shortmarginratio_arbitrage = option_db.shortmarginratio
        option_db.multiplier = 10
        option_db.crncy = 'CNY'

        option_db.effective_since = filter_date_str
        option_db.is_settle_instantly = 1
        option_db.is_purchase_to_redemption_instantly = 0
        option_db.is_buy_to_redpur_instantly = 0
        option_db.is_redpur_to_sell_instantly = 0
        option_db.option_margin_factor1 = 0.5
        option_db.option_margin_factor2 = 0.5

        ticker_type = filter(lambda x: not x.isdigit(), undl_tickers)
        option_db.session = __get_trading_info_list(ticker_type)[-1]
        option_db.track_undl_tickers = __get_track_undl_tickers(ticker_type)
        option_insert_list.append(option_db)
        print 'prepare insert option:', ticker