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
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)
def add_future(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 future_db = Instrument() max_instrument_id += 1 future_db.id = max_instrument_id future_db.ticker = ticker future_db.exchange_id = exchange_id instrument_name = getattr(message_info, 'InstrumentName', '') future_db.name = instrument_name.replace('中证', 'cs').replace('上证', 'SSE') \ .replace('股指', 'IDX').replace('期货', 'Future').replace('国债', 'TF').strip() 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', '') product_id = getattr(message_info, 'ProductID', '') undl_ticker = '' if product_id == 'IF': undl_ticker = 'SHSZ300' elif product_id == 'IC': undl_ticker = 'SH000905' elif product_id == 'IH': undl_ticker = 'SSE50' elif product_id == 'TF': undl_ticker = 'TF' elif product_id == 'T': undl_ticker = 'T' future_db.undl_tickers = undl_ticker future_db.create_date = getattr(message_info, 'CreateDate', '') future_db.expire_date = getattr(message_info, 'ExpireDate', '') price_tick = getattr(message_info, 'PriceTick', '') future_db.tick_size_table = '0:%s' % (float(price_tick), ) future_db.market_status = 2 future_db.type_Id = 1 # future future_db.round_lot_size = 1 future_db.multiplier = 1 if (product_id == 'T') or (product_id == 'TF'): future_db.longmarginratio = 0.015 future_db.shortmarginratio = 0.015 future_db.market_sector_id = 5 else: future_db.longmarginratio = 0.1 future_db.shortmarginratio = 0.1 future_db.market_sector_id = 6 instrument_insert_list.append(future_db) print 'prepare insert future:', ticker
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)
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)
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)
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)
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)