Ejemplo n.º 1
0
def add_stock(message_array):
    global max_instrument_id
    stock_ticker_list = []
    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
        elif exchange_name == 'HGE':
            exchange_id = 13
        dict_key = '%s|%s' % (ticker, exchange_id)
        if dict_key in instrument_db_dict:
            continue
        # instrument_name = getattr(messageInfo, 'InstrumentName', '')

        stock_db = Instrument()
        max_instrument_id += 1
        stock_db.id = max_instrument_id
        stock_db.ticker = ticker
        stock_db.exchange_id = exchange_id
        stock_db.name = ''

        stock_db.ticker_exch = ticker
        stock_db.ticker_exch_real = ticker
        stock_db.market_status_id = 2
        stock_db.market_sector_id = 4
        stock_db.type_id = 4
        stock_db.crncy = 'CNY'
        stock_db.round_lot_size = 100
        stock_db.tick_size_table = '0:0.01'
        stock_db.fut_val_pt = 1
        stock_db.max_market_order_vol = 0
        stock_db.min_market_order_vol = 0
        stock_db.max_limit_order_vol = 1000000
        stock_db.min_limit_order_vol = 100
        stock_db.longmarginratio = 0
        stock_db.shortmarginratio = 999
        stock_db.longmarginratio_speculation = stock_db.longmarginratio
        stock_db.shortmarginratio_speculation = stock_db.shortmarginratio
        stock_db.longmarginratio_hedge = stock_db.longmarginratio
        stock_db.shortmarginratio_hedge = stock_db.shortmarginratio
        stock_db.longmarginratio_arbitrage = stock_db.longmarginratio
        stock_db.shortmarginratio_arbitrage = stock_db.shortmarginratio
        stock_db.multiplier = 1
        stock_db.strike = 0
        stock_db.is_settle_instantly = 0
        stock_db.is_purchase_to_redemption_instantly = 0
        stock_db.is_buy_to_redpur_instantly = 1
        stock_db.is_redpur_to_sell_instantly = 1
        instrument_insert_list.append(stock_db)
        stock_ticker_list.append(ticker)

    if len(stock_ticker_list) > 0:
        print 'Prepare Insert Stock:', ','.join(stock_ticker_list)
Ejemplo n.º 2
0
def __save_instrument(session_common, instrument_db_dict, instrument_df):
    instrument_db_list = []
    now_time = int(now.strftime('%H%M%S'))
    for index, row in instrument_df.iterrows():
        ticker = row['InstrumentID']
        if ticker in instrument_db_dict:
            instrument_db = instrument_db_dict[ticker]
            if (now_time > 150500) and (now_time < 180000):
                instrument_db.close = row['ClosePrice']
                instrument_db.close_update_time = datetime.now()
                instrument_db.volume = row['Volume']
            else:
                instrument_db.prev_close = row['PreClosePrice']
                instrument_db.prev_settlementprice = row['PreSettlementPrice']
                instrument_db.uplimit = row['UpperLimitPrice']
                instrument_db.downlimit = row['LowerLimitPrice']
                instrument_db.prev_close_update_time = datetime.now()
        else:
            instrument_db = Instrument()
            instrument_db.ticker = ticker
            instrument_db.name = ticker
            instrument_db.ticker_exch = ticker
            instrument_db.ticker_exch_real = ticker

            instrument_db.create_date = row['CreateDate']
            instrument_db.effective_since = row['OpenDate']
            instrument_db.tick_size_table = '0:%f' % float(row['PriceTick'])

            instrument_db.exchange_id = row['exchange_id']
            instrument_db.type_id = row['type_id']
            instrument_db.market_status_id = row['market_status_id']
            instrument_db.multiplier = row['multiplier']
            instrument_db.crncy = row['crncy']
            instrument_db.market_sector_id = row['market_sector_id']
            instrument_db.round_lot_size = row['round_lot_size']

            instrument_db.undl_tickers = row['undl_tickers']
            instrument_db.commission_rate_type = row['commission_rate_type']

            instrument_db.is_settle_instantly = row['is_settle_instantly']
            instrument_db.is_purchase_to_redemption_instantly = row[
                'is_purchase_to_redemption_instantly']
            instrument_db.is_buy_to_redpur_instantly = row[
                'is_buy_to_redpur_instantly']
            instrument_db.is_redpur_to_sell_instantly = row[
                'is_redpur_to_sell_instantly']

            instrument_db.put_call = row['put_call']
            instrument_db.strike = row['strike']
            instrument_db.option_margin_factor1 = row['option_margin_factor1']
            instrument_db.option_margin_factor2 = row['option_margin_factor2']
            instrument_db.session = row['session']
        instrument_db.expire_date = row['ExpireDate']
        instrument_db.fut_val_pt = row['VolumeMultiple']
        instrument_db.max_market_order_vol = row['MaxMarketOrderVolume']
        instrument_db.min_market_order_vol = row['MinMarketOrderVolume']
        instrument_db.max_limit_order_vol = row['MaxLimitOrderVolume']
        instrument_db.min_limit_order_vol = row['MinLimitOrderVolume']
        instrument_db.longmarginratio = row['longmarginratio']
        instrument_db.shortmarginratio = row['shortmarginratio']
        instrument_db.longmarginratio_speculation = instrument_db.longmarginratio
        instrument_db.shortmarginratio_speculation = instrument_db.shortmarginratio
        instrument_db.longmarginratio_hedge = instrument_db.longmarginratio
        instrument_db.shortmarginratio_hedge = instrument_db.shortmarginratio
        instrument_db.longmarginratio_arbitrage = instrument_db.longmarginratio
        instrument_db.shortmarginratio_arbitrage = instrument_db.shortmarginratio
        instrument_db.update_date = datetime.now()
        instrument_db_list.append(instrument_db)
    sql_list = to_many_sql(Instrument, instrument_db_list, 'common.instrument')
    print len(sql_list)
    for sql in sql_list:
        session_common.execute(sql)
Ejemplo n.º 3
0
def __convert_to_instrument():
    stock_db_list = []
    for (SecurityID, securities_xml_info) in securities_xml_dict.items():
        if securities_xml_info.SecurityType not in ('1', '2', '3'):
            continue

        stock_db = Instrument()
        stock_db.ticker = SecurityID.strip()
        if securities_xml_info.SecurityIDSource == SecruityIDSource_xml_dict.CS:
            stock_db.exchange_id = Exchange_Type_Enum.CS

        stock_db.name = securities_xml_info.EnglishName
        stock_db.ticker_exch = stock_db.ticker
        stock_db.ticker_exch_real = stock_db.ticker
        stock_db.market_status_id = 2
        stock_db.market_sector_id = Market_Sector_Type_Enum.Equity
        stock_db.type_id = Instrument_Type_Enum.CommonStock
        stock_db.ticker_isin = securities_xml_info.ISIN
        stock_db.crncy = 'CNY'

        cashauctionparams_xml_info = cashauctionparams_xml_dict[SecurityID]
        stock_db.round_lot_size = cashauctionparams_xml_info.BuyQtyUnit
        stock_db.tick_size_table = '0:%s' % float(
            cashauctionparams_xml_info.PriceTick)

        stock_db.fut_val_pt = 1  # ?
        stock_db.max_market_order_vol = 0
        stock_db.min_market_order_vol = 0
        stock_db.max_limit_order_vol = 1000000
        stock_db.min_limit_order_vol = 100

        stock_db.longmarginratio = 0
        stock_db.shortmarginratio = 999
        stock_db.longmarginratio_speculation = stock_db.longmarginratio
        stock_db.shortmarginratio_speculation = stock_db.shortmarginratio
        stock_db.longmarginratio_hedge = stock_db.longmarginratio
        stock_db.shortmarginratio_hedge = stock_db.shortmarginratio
        stock_db.longmarginratio_arbitrage = stock_db.longmarginratio
        stock_db.shortmarginratio_arbitrage = stock_db.shortmarginratio
        stock_db.multiplier = 1

        stock_db.is_settle_instantly = 0
        stock_db.is_purchase_to_redemption_instantly = 0
        stock_db.is_buy_to_redpur_instantly = 1
        stock_db.is_redpur_to_sell_instantly = 1

        negotiationparams_xml = negotiationparams_xml_dict[SecurityID]
        stock_db.prev_close = securities_xml_info.PrevClosePx
        stock_db.prev_settlementprice = stock_db.prev_close
        stock_db.uplimit = negotiationparams_xml.PriceUpperLimit
        stock_db.downlimit = negotiationparams_xml.PriceLowerLimit
        stock_db.prev_close_update_time = date_utils.get_now()
        stock_db.update_date = date_utils.get_now()
        stock_db_list.append(stock_db)

    server_host = server_constant.get_server_model('host')
    session_test = server_host.get_db_session('test')
    for instrument_db in stock_db_list:
        session_test.merge(instrument_db)
    session_test.commit()
    server_host.close()
Ejemplo n.º 4
0
def __add_instrument_db(session_common, instrument_db_dict, instrument_df):
    instrument_db_list = []
    for index, row in instrument_df.iterrows():
        ticker = row['InstrumentID']
        if ticker in instrument_db_dict:
            instrument_db = instrument_db_dict[ticker]
        else:
            instrument_db = Instrument()
            instrument_db.ticker = ticker
            # instrument_db.name = ticker
            instrument_db.name = row['ExchangeInstID']
            instrument_db.ticker_exch = ticker
            instrument_db.ticker_exch_real = ticker

            instrument_db.create_date = row['CreateDate'] if row['CreateDate'] != '' else None
            instrument_db.effective_since = row['OpenDate'] if row['OpenDate'] != '' else None
            instrument_db.tick_size_table = '0:%f' % float(row['PriceTick'])

            instrument_db.exchange_id = row['exchange_id']
            instrument_db.type_id = row['type_id']
            instrument_db.market_status_id = row['market_status_id']
            instrument_db.multiplier = row['multiplier']
            instrument_db.crncy = 'CNY'
            instrument_db.market_sector_id = row['market_sector_id']
            instrument_db.round_lot_size = row['round_lot_size']

            instrument_db.undl_tickers = row['undl_tickers']
            instrument_db.commission_rate_type = row['commission_rate_type']

            instrument_db.is_settle_instantly = row['is_settle_instantly']
            instrument_db.is_purchase_to_redemption_instantly = row['is_purchase_to_redemption_instantly']
            instrument_db.is_buy_to_redpur_instantly = row['is_buy_to_redpur_instantly']
            instrument_db.is_redpur_to_sell_instantly = row['is_redpur_to_sell_instantly']

            instrument_db.put_call = row['put_call'] if row['put_call'] != '' else None
            instrument_db.strike = row['strike'] if row['strike'] != '' else None
            instrument_db.option_margin_factor1 = row['option_margin_factor1'] if row['option_margin_factor1'] != '' else None
            instrument_db.option_margin_factor2 = row['option_margin_factor2'] if row['option_margin_factor2'] != '' else None
        instrument_db.expire_date = row['ExpireDate'] if row['ExpireDate'] != '' else None
        instrument_db.fut_val_pt = row['VolumeMultiple']
        instrument_db.max_market_order_vol = row['max_market_order_vol'] if row['max_market_order_vol'] != '' else None
        instrument_db.min_market_order_vol = row['min_market_order_vol'] if row['min_market_order_vol'] != '' else None
        instrument_db.max_limit_order_vol = row['max_limit_order_vol'] if row['max_limit_order_vol'] != '' else None
        instrument_db.min_limit_order_vol = row['min_limit_order_vol'] if row['min_limit_order_vol'] != '' else None
        instrument_db.longmarginratio = row['longmarginratio']
        instrument_db.shortmarginratio = row['shortmarginratio']
        instrument_db.longmarginratio_speculation = instrument_db.longmarginratio
        instrument_db.shortmarginratio_speculation = instrument_db.shortmarginratio
        instrument_db.longmarginratio_hedge = instrument_db.longmarginratio
        instrument_db.shortmarginratio_hedge = instrument_db.shortmarginratio
        instrument_db.longmarginratio_arbitrage = instrument_db.longmarginratio
        instrument_db.shortmarginratio_arbitrage = instrument_db.shortmarginratio
        instrument_db.update_date = datetime.now()
        if instrument_db.type_id == instrument_type_enums.CommonStock:
            if row['IsTrading'] == '1':
                instrument_db.inactive_date = None
            else:
                instrument_db.inactive_date = now.strftime('%Y-%m-%d')
        instrument_db_list.append(instrument_db)
    sql_list = to_many_sql(Instrument, instrument_db_list, 'common.instrument')
    for sql in sql_list:
        session_common.execute(sql)
Ejemplo n.º 5
0
def add_convertible_bond(message_array):
    global max_instrument_id
    ticker_list = []
    for messageInfo in message_array:
        ticker = getattr(messageInfo, 'InstrumentID', '')
        # 过滤掉不可交易或者退市的合约
        is_trading = getattr(messageInfo, 'IsTrading', '')
        if is_trading != '1':
            continue

        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

        convertible_bond_db = Instrument()
        max_instrument_id += 1
        convertible_bond_db.id = max_instrument_id
        convertible_bond_db.ticker = ticker
        convertible_bond_db.exchange_id = exchange_id
        convertible_bond_db.name = ''

        convertible_bond_db.fut_val_pt = getattr(messageInfo, 'VolumeMultiple',
                                                 '')
        convertible_bond_db.multiplier = convertible_bond_db.fut_val_pt
        convertible_bond_db.max_market_order_vol = getattr(
            messageInfo, 'MaxMarketOrderVolume', '')
        convertible_bond_db.min_market_order_vol = getattr(
            messageInfo, 'MinMarketOrderVolume', '')
        # convertible_bond_db.max_limit_order_vol = getattr(messageInfo, 'MaxLimitOrderVolume', '')
        convertible_bond_db.max_limit_order_vol = 100000
        convertible_bond_db.min_limit_order_vol = getattr(
            messageInfo, 'MinLimitOrderVolume', '')

        convertible_bond_db.ticker_exch = ticker
        convertible_bond_db.ticker_exch_real = ticker
        convertible_bond_db.market_status_id = 2
        convertible_bond_db.type_id = 19
        convertible_bond_db.market_sector_id = 2
        convertible_bond_db.round_lot_size = 10
        convertible_bond_db.tick_size_table = '0:0.001'
        convertible_bond_db.crncy = 'CNY'
        convertible_bond_db.longmarginratio = 0
        convertible_bond_db.shortmarginratio = 999
        convertible_bond_db.longmarginratio_speculation = convertible_bond_db.longmarginratio
        convertible_bond_db.shortmarginratio_speculation = convertible_bond_db.shortmarginratio
        convertible_bond_db.longmarginratio_hedge = convertible_bond_db.longmarginratio
        convertible_bond_db.shortmarginratio_hedge = convertible_bond_db.shortmarginratio
        convertible_bond_db.longmarginratio_arbitrage = convertible_bond_db.longmarginratio
        convertible_bond_db.shortmarginratio_arbitrage = convertible_bond_db.shortmarginratio

        convertible_bond_db.is_settle_instantly = 1
        convertible_bond_db.is_purchase_to_redemption_instantly = 0
        convertible_bond_db.is_buy_to_redpur_instantly = 0
        convertible_bond_db.is_redpur_to_sell_instantly = 0
        instrument_insert_list.append(convertible_bond_db)
        ticker_list.append(ticker)
    if len(ticker_list) > 0:
        print 'Prepare Insert ConvertibleBond:', ','.join(ticker_list)
Ejemplo n.º 6
0
def add_option(message_array):
    global max_instrument_id
    option_ticker_list = []
    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
        option_db.commission_rate_type = 'option_%s' % 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
        # if ticker.isdigit():
        option_db.name = exchange_inst_id
        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)
        option_ticker_list.append(ticker)

    if len(option_ticker_list) > 0:
        print 'Prepare Insert Option:', ','.join(option_ticker_list)
Ejemplo n.º 7
0
def add_mmf_fund(message_array):
    global max_instrument_id
    etf_ticker_list = []
    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

        mmf_fund_db = Instrument()
        max_instrument_id += 1
        mmf_fund_db.id = max_instrument_id
        mmf_fund_db.ticker = ticker
        mmf_fund_db.exchange_id = exchange_id
        mmf_fund_db.name = ''

        mmf_fund_db.fut_val_pt = getattr(messageInfo, 'VolumeMultiple', '')
        mmf_fund_db.multiplier = mmf_fund_db.fut_val_pt
        mmf_fund_db.max_market_order_vol = getattr(messageInfo,
                                                   'MaxMarketOrderVolume', '')
        mmf_fund_db.min_market_order_vol = getattr(messageInfo,
                                                   'MinMarketOrderVolume', '')
        mmf_fund_db.max_limit_order_vol = getattr(messageInfo,
                                                  'MaxLimitOrderVolume', '')
        mmf_fund_db.min_limit_order_vol = getattr(messageInfo,
                                                  'MinLimitOrderVolume', '')

        mmf_fund_db.ticker_exch = ticker
        mmf_fund_db.ticker_exch_real = ticker
        mmf_fund_db.market_status_id = 2
        mmf_fund_db.type_id = 15
        mmf_fund_db.market_sector_id = 4
        mmf_fund_db.round_lot_size = 100
        # price_tick = getattr(messageInfo, 'PriceTick', '')
        mmf_fund_db.tick_size_table = '0:0.001'
        mmf_fund_db.crncy = 'CNY'
        mmf_fund_db.longmarginratio = 0
        mmf_fund_db.shortmarginratio = 999
        mmf_fund_db.longmarginratio_speculation = mmf_fund_db.longmarginratio
        mmf_fund_db.shortmarginratio_speculation = mmf_fund_db.shortmarginratio
        mmf_fund_db.longmarginratio_hedge = mmf_fund_db.longmarginratio
        mmf_fund_db.shortmarginratio_hedge = mmf_fund_db.shortmarginratio
        mmf_fund_db.longmarginratio_arbitrage = mmf_fund_db.longmarginratio
        mmf_fund_db.shortmarginratio_arbitrage = mmf_fund_db.shortmarginratio

        if exchange_name == 'SSE':
            mmf_fund_db.is_settle_instantly = 1
            mmf_fund_db.is_purchase_to_redemption_instantly = 0
            mmf_fund_db.is_buy_to_redpur_instantly = 0
            mmf_fund_db.is_redpur_to_sell_instantly = 0
        elif exchange_name == 'SZE':
            mmf_fund_db.is_settle_instantly = 1
            mmf_fund_db.is_purchase_to_redemption_instantly = 1
            mmf_fund_db.is_buy_to_redpur_instantly = 1
            mmf_fund_db.is_redpur_to_sell_instantly = 1

        instrument_insert_list.append(mmf_fund_db)
        etf_ticker_list.append(ticker)

    if len(etf_ticker_list) > 0:
        print 'Prepare Insert ETF:', ','.join(etf_ticker_list)
Ejemplo n.º 8
0
def pre_add_future(message_array):
    global max_instrument_id
    future_ticker_list = []
    for message_info in message_array:
        ticker = getattr(message_info, 'InstrumentID', '')
        exchange_name = getattr(message_info, 'ExchangeID', '')
        if 'CFFEX' == exchange_name:
            exchange_id = exchange_type_enums.CFF
        elif 'SHFE' == exchange_name:
            exchange_id = exchange_type_enums.SHF
        elif 'DCE' == exchange_name:
            exchange_id = exchange_type_enums.DCE
        elif 'CZCE' == exchange_name:
            exchange_id = exchange_type_enums.ZCE
        elif 'INE' == exchange_name:
            exchange_id = exchange_type_enums.INE
        else:
            continue
        dict_key = '%s|%s' % (ticker, exchange_id)
        if dict_key in future_db_dict:
            continue

        future_db = Instrument()
        max_instrument_id += 1
        future_db.id = max_instrument_id
        future_db.ticker = ticker
        future_db.exchange_id = exchange_id
        future_db.fut_val_pt = getattr(message_info, 'VolumeMultiple', '')
        future_db.max_market_order_vol = getattr(message_info,
                                                 'MaxMarketOrderVolume', '')
        future_db.min_market_order_vol = getattr(message_info,
                                                 'MinMarketOrderVolume', '')
        future_db.max_limit_order_vol = getattr(message_info,
                                                'MaxLimitOrderVolume', '')
        future_db.min_limit_order_vol = getattr(message_info,
                                                'MinLimitOrderVolume', '')
        future_db.longmarginratio = getattr(message_info, 'LongMarginRatio',
                                            '')
        future_db.shortmarginratio = getattr(message_info, 'ShortMarginRatio',
                                             '')
        future_db.longmarginratio_speculation = future_db.longmarginratio
        future_db.shortmarginratio_speculation = future_db.shortmarginratio
        future_db.longmarginratio_hedge = future_db.longmarginratio
        future_db.shortmarginratio_hedge = future_db.shortmarginratio
        future_db.longmarginratio_arbitrage = future_db.longmarginratio
        future_db.shortmarginratio_arbitrage = future_db.shortmarginratio

        future_db.create_date = getattr(message_info, 'CreateDate', '')
        future_db.expire_date = getattr(message_info, 'ExpireDate', '')

        future_db.ticker_exch = ticker
        future_db.ticker_exch_real = ticker
        future_db.type_id = 1  # future
        future_db.market_status_id = 2
        future_db.multiplier = 1
        future_db.crncy = 'CNY'
        future_db.effective_since = getattr(message_info, 'OpenDate', '')

        product_id = getattr(message_info, 'ProductID', '')
        name_message = getattr(message_info, 'InstrumentName', '')
        price_tick = getattr(message_info, 'PriceTick', '')

        if product_id in ('T', 'TF', 'TS'):
            future_db.market_sector_id = 5
            future_db.round_lot_size = 1
            future_db.tick_size_table = '0:%f' % (float(price_tick), )
            future_db.undl_tickers = product_id
            future_db.commission_rate_type = product_id
            future_db.name = ticker
        elif product_id in ('IC', 'IF', 'IH'):
            future_db.market_sector_id = 6
            future_db.round_lot_size = 1
            future_db.tick_size_table = '0:%f' % (float(price_tick), )

            future_db.longmarginratio_hedge = 0.2
            future_db.shortmarginratio_hedge = 0.2

            undl_ticker = ''
            if product_id == 'IF':
                undl_ticker = 'SHSZ300'
            elif product_id == 'IC':
                undl_ticker = 'SH000905'
            elif product_id == 'IH':
                undl_ticker = 'SSE50'
            future_db.undl_tickers = undl_ticker
            future_db.commission_rate_type = undl_ticker

            future_db.name = name_message.replace('中证', 'cs').replace('上证', 'SSE').replace('股指', 'IDX') \
                .replace('期货', 'Future').replace('国债', 'TF').replace('指数', 'Index').replace('沪深300', '').strip()
        else:
            future_db.market_sector_id = 1
            future_db.round_lot_size = 1
            future_db.tick_size_table = '0:%f' % (float(price_tick), )
            if product_id == 'cu':
                expire_date = getattr(message_info, 'ExpireDate', '')
                if now.strftime('%Y-%m') == expire_date[:7]:
                    future_db.round_lot_size = 5
            future_db.undl_tickers = product_id
            future_db.commission_rate_type = product_id
            future_db.name = ticker

        future_db.is_settle_instantly = 1
        future_db.is_purchase_to_redemption_instantly = 0
        future_db.is_buy_to_redpur_instantly = 0
        future_db.is_redpur_to_sell_instantly = 0

        ticker_type = filter(lambda x: not x.isdigit(), ticker)
        future_db.session = __get_trading_info_list(ticker_type)[-1]
        future_insert_list.append(future_db)
        future_ticker_list.append(ticker)

    if len(future_ticker_list) > 0:
        print 'Prepare Insert Future:', ','.join(future_ticker_list)
Ejemplo n.º 9
0
def pre_add_option(message_array):
    global max_instrument_id
    option_ticker_list = []
    for messageInfo in message_array:
        ticker = getattr(messageInfo, 'InstrumentID', '')
        exchange_name = getattr(messageInfo, 'ExchangeID', '')
        if 'CFFEX' == exchange_name:
            exchange_id = exchange_type_enums.CFF
        elif 'SHFE' == exchange_name:
            exchange_id = exchange_type_enums.SHF
        elif 'DCE' == exchange_name:
            exchange_id = exchange_type_enums.DCE
        elif 'CZCE' == exchange_name:
            exchange_id = exchange_type_enums.ZCE
        elif 'INE' == exchange_name:
            exchange_id = exchange_type_enums.INE
        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', '')
        ticker_type = filter(lambda x: not x.isdigit(), undl_tickers)
        option_db.undl_tickers = undl_tickers
        option_db.commission_rate_type = 'option_%s' % ticker_type

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

        instrument_name = getattr(messageInfo, 'InstrumentName', '').strip()
        instrument_name = instrument_name.replace('买权', 'Call').replace(
            '卖权', 'Put').replace('白糖', 'SR')
        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

        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)
        option_ticker_list.append(ticker)

    if len(option_ticker_list) > 0:
        print 'Prepare Insert Option:', ','.join(option_ticker_list)