f"|{' ':68}|\n" f"+{'-' * 68}+\n\n") tq_account = input('天勤量化账号: ') tq_password = input('天勤量化密码: ') try: api = TqApi(auth=TqAuth(tq_account, tq_password)) except Exception as err: print(err, '\n') input(f"{'连接失败, 按任意键程序将退出, 请检查后重试'}") raise SystemExit() quotes = [] labels = [] product = input("\n请输入品种代码(例rb/hc): ").lower() try: available_contracts = sorted( api.query_quotes(ins_class="FUTURE", product_id=product, expired=False)) m_contract = api.query_cont_quotes(product_id=product)[0] except IndexError: available_contracts = sorted( api.query_quotes(ins_class="FUTURE", product_id=product.upper(), expired=False)) m_contract = api.query_cont_quotes(product_id=product.upper())[0] m_contract_index = available_contracts.index(m_contract) def batch_get_quote(contracts_list): for code_full in contracts_list: quotes.append(api.get_quote(code_full)) labels.append(code_full.split(".")[1]) if product == 'rb' or product == 'hc':
logger.setLevel(logging.INFO) rsp = requests.get( url="https://openmd.shinnytech.com/t/md/symbols/latest.json", timeout=30) old_symbols = { k: v for k, v in rsp.json().items() if v["expired"] is False and v["exchange_id"] in EXCHANGE_LIST } api = TqApi(auth=AUTH, _md_url="wss://api.shinnytech.com/t/nfmd/front/mobile") new_symbols_list = [] for ex in EXCHANGE_LIST: symbols = api.query_quotes(exchange_id=ex, expired=False) new_symbols_list.extend(symbols) assert len(new_symbols_list) == len(old_symbols) print("已知问题:") print("* expire_datetime 为 null") print( "* margin commission 部分合约不一致, 组合没有 volume_multiple, 指数、主连符合预期,SPOT 没有 expired product_short_name," ) print( "* 新版合约服务中已经删去的字段", ["ins_id", "ins_name", "sort_key", "delivery_year", "delivery_month"]) print("* 旧版合约服务里行情相关的数据不需要关心", ["settlement_price", "open_interest", "last_price", "pre_volume"])