def pack_subscription_query_req(cls, is_all_conn, conn_id): from futuquant.common.pb.Qot_GetSubInfo_pb2 import Request req = Request() req.c2s.isReqAllConn = is_all_conn return pack_pb_req(req, ProtoId.Qot_GetSubInfo, conn_id)
def pack_req(cls, stock_list, conn_id): stock_tuple_list = [] failure_tuple_list = [] for stock_str in stock_list: ret_code, content = split_stock_str(stock_str) if ret_code != RET_OK: msg = content error_str = ERROR_STR_PREFIX + msg failure_tuple_list.append((ret_code, error_str)) continue market_code, stock_code = content stock_tuple_list.append((market_code, stock_code)) if len(failure_tuple_list) > 0: error_str = '\n'.join([x[1] for x in failure_tuple_list]) return RET_ERROR, error_str, None from futuquant.common.pb.Qot_GetBasicQot_pb2 import Request req = Request() for market_code, stock_code in stock_tuple_list: stock_inst = req.c2s.securityList.add() stock_inst.market = market_code stock_inst.code = stock_code return pack_pb_req(req, ProtoId.Qot_GetBasicQot, conn_id)
def pack_req(cls, market, conn_id, stock_type='STOCK', code_list=None): if market not in MKT_MAP: error_str = ERROR_STR_PREFIX + " market is %s, which is not valid. (%s)" \ % (market, ",".join([x for x in MKT_MAP])) return RET_ERROR, error_str, None if stock_type not in SEC_TYPE_MAP: error_str = ERROR_STR_PREFIX + " stock_type is %s, which is not valid. (%s)" \ % (stock_type, ",".join([x for x in SEC_TYPE_MAP])) return RET_ERROR, error_str, None from futuquant.common.pb.Qot_GetStaticInfo_pb2 import Request req = Request() req.c2s.market = MKT_MAP[market] req.c2s.secType = SEC_TYPE_MAP[stock_type] if code_list is not None: for code in code_list: sec = req.c2s.securityList.add() ret, data = split_stock_str(code) if ret == RET_OK: sec.market, sec.code = data else: return RET_ERROR, data, None return pack_pb_req(req, ProtoId.Qot_GetStaticInfo, conn_id)
def pack_req(cls, client_ver, client_id, recv_notify=False): from futuquant.common.pb.InitConnect_pb2 import Request req = Request() req.c2s.clientVer = client_ver req.c2s.clientID = client_id req.c2s.recvNotify = recv_notify return pack_pb_req(req, ProtoId.InitConnect, 0)
def pack_req(cls, market, plate_class, conn_id): from futuquant.common.pb.Qot_GetPlateSet_pb2 import Request req = Request() req.c2s.market = MKT_MAP[market] req.c2s.plateSetType = PLATE_CLASS_MAP[plate_class] return pack_pb_req(req, ProtoId.Qot_GetPlateSet, conn_id)
def pack_req(cls, code, ref_type, conn_id): from futuquant.common.pb.Qot_GetReference_pb2 import Request ret, content = split_stock_str(code) if ret != RET_OK: return ret, content, None req = Request() req.c2s.security.market = content[0] req.c2s.security.code = content[1] req.c2s.referenceType = STOCK_REFERENCE_TYPE_MAP[ref_type] return pack_pb_req(req, ProtoId.Qot_GetReference, conn_id)
def pack_req(cls, code, conn_id): ret_code, content = split_stock_str(code) if ret_code == RET_ERROR: error_str = content return RET_ERROR, error_str, None market, code = content from futuquant.common.pb.Qot_GetBroker_pb2 import Request req = Request() req.c2s.security.market = market req.c2s.security.code = code return pack_pb_req(req, ProtoId.Qot_GetBroker, conn_id)
def pack_req(cls, market, conn_id, stock_type='STOCK'): if market not in MKT_MAP: error_str = ERROR_STR_PREFIX + " market is %s, which is not valid. (%s)" \ % (market, ",".join([x for x in MKT_MAP])) return RET_ERROR, error_str, None if stock_type not in SEC_TYPE_MAP: error_str = ERROR_STR_PREFIX + " stock_type is %s, which is not valid. (%s)" \ % (stock_type, ",".join([x for x in SEC_TYPE_MAP])) return RET_ERROR, error_str, None from futuquant.common.pb.Qot_GetStaticInfo_pb2 import Request req = Request() req.c2s.market = MKT_MAP[market] req.c2s.secType = SEC_TYPE_MAP[stock_type] return pack_pb_req(req, ProtoId.Qot_GetStaticInfo, conn_id)
def pack_req(cls, plate_code, conn_id): ret_code, content = split_stock_str(plate_code) if ret_code != RET_OK: msg = content error_str = ERROR_STR_PREFIX + msg return RET_ERROR, error_str, None market, code = content if market not in QUOTE.REV_MKT_MAP: error_str = ERROR_STR_PREFIX + "market is %s, which is not valid. (%s)" \ % (market, ",".join([x for x in MKT_MAP])) return RET_ERROR, error_str, None from futuquant.common.pb.Qot_GetPlateSecurity_pb2 import Request req = Request() req.c2s.plate.market = market req.c2s.plate.code = code return pack_pb_req(req, ProtoId.Qot_GetPlateSecurity, conn_id)
def pack_req(cls, code_list, dates, fields, ktype, autype, max_req, no_data_mode, conn_id): list_req_stock = [] for code in code_list: ret, content = split_stock_str(code) if ret == RET_ERROR: return RET_ERROR, content, None else: list_req_stock.append(content) for x in dates: ret, msg = check_date_str_format(x) if ret != RET_OK: return ret, msg, None if ktype not in KTYPE_MAP: error_str = ERROR_STR_PREFIX + "ktype is %s, which is not valid. (%s)" \ % (ktype, ", ".join([x for x in KTYPE_MAP])) return RET_ERROR, error_str, None if autype not in AUTYPE_MAP: error_str = ERROR_STR_PREFIX + "autype is %s, which is not valid. (%s)" \ % (autype, ", ".join([str(x) for x in AUTYPE_MAP])) return RET_ERROR, error_str, None from futuquant.common.pb.Qot_GetHistoryKLPoints_pb2 import Request req = Request() req.c2s.needKLFieldsFlag = KL_FIELD.kl_fields_to_flag_val(fields) req.c2s.rehabType = AUTYPE_MAP[autype] req.c2s.klType = KTYPE_MAP[ktype] req.c2s.noDataMode = no_data_mode req.c2s.maxReqSecurityNum = max_req for market_code, code in list_req_stock: stock_inst = req.c2s.securityList.add() stock_inst.market = market_code stock_inst.code = code for date_ in dates: req.c2s.timeList.append(date_) return pack_pb_req(req, ProtoId.Qot_GetHistoryKLPoints, conn_id)
def pack_sub_or_unsub_req(cls, code_list, subtype_list, is_sub, conn_id): stock_tuple_list = [] for code in code_list: ret_code, content = split_stock_str(code) if ret_code != RET_OK: return ret_code, content, None market_code, stock_code = content stock_tuple_list.append((market_code, stock_code)) from futuquant.common.pb.Qot_Sub_pb2 import Request req = Request() for market_code, stock_code in stock_tuple_list: stock_inst = req.c2s.securityList.add() stock_inst.code = stock_code stock_inst.market = market_code for subtype in subtype_list: req.c2s.subTypeList.append(SUBTYPE_MAP[subtype]) req.c2s.isSubOrUnSub = is_sub return pack_pb_req(req, ProtoId.Qot_Sub, conn_id)
def pack_push_or_unpush_req(cls, code_list, subtype_list, is_push, conn_id, is_first_push): stock_tuple_list = [] for code in code_list: ret_code, content = split_stock_str(code) if ret_code != RET_OK: return ret_code, content, None market_code, stock_code = content stock_tuple_list.append((market_code, stock_code)) from futuquant.common.pb.Qot_RegQotPush_pb2 import Request req = Request() for market_code, stock_code in stock_tuple_list: stock_inst = req.c2s.securityList.add() stock_inst.code = stock_code stock_inst.market = market_code for subtype in subtype_list: req.c2s.subTypeList.append(SUBTYPE_MAP[subtype]) req.c2s.isRegOrUnReg = is_push req.c2s.isFirstPush = True if is_first_push else False return pack_pb_req(req, ProtoId.Qot_RegQotPush, conn_id)
def pack_req(cls, code_list, start, end, conn_id): list_req_stock = [] for stock_str in code_list: ret, content = split_stock_str(stock_str) if ret == RET_ERROR: return RET_ERROR, content, None else: list_req_stock.append(content) from futuquant.common.pb.Qot_GetSuspend_pb2 import Request req = Request() if start: req.c2s.beginTime = start if end: req.c2s.endTime = end for market, code in list_req_stock: stock_inst = req.c2s.securityList.add() stock_inst.market = market stock_inst.code = code return pack_pb_req(req, ProtoId.Qot_GetSuspend, conn_id)
def pack_req(cls, market, conn_id, start_date=None, end_date=None): # '''Parameter check''' if market not in MKT_MAP: error_str = ERROR_STR_PREFIX + " market is %s, which is not valid. (%s)" \ % (market, ",".join([x for x in MKT_MAP])) return RET_ERROR, error_str, None if start_date is None: today = datetime.today() start = today - timedelta(days=365) start_date = start.strftime("%Y-%m-%d") else: ret, msg = check_date_str_format(start_date) if ret != RET_OK: return ret, msg, None start_date = normalize_date_format(start_date) if end_date is None: today = datetime.today() end_date = today.strftime("%Y-%m-%d") else: ret, msg = check_date_str_format(end_date) if ret != RET_OK: return ret, msg, None end_date = normalize_date_format(end_date) # pack to json mkt = MKT_MAP[market] from futuquant.common.pb.Qot_GetTradeDate_pb2 import Request req = Request() req.c2s.market = mkt req.c2s.beginTime = start_date req.c2s.endTime = end_date return pack_pb_req(req, ProtoId.Qot_GetTradeDate, conn_id)
def pack_req(cls, code, num, conn_id): ret, content = split_stock_str(code) if ret == RET_ERROR: error_str = content return RET_ERROR, error_str, None if isinstance(num, int) is False: error_str = ERROR_STR_PREFIX + "num is %s of type %s, and the type shoud be %s" \ % (num, str(type(num)), str(int)) return RET_ERROR, error_str, None if num < 0: error_str = ERROR_STR_PREFIX + "num is %s, which is less than 0" % num return RET_ERROR, error_str, None market_code, stock_code = content from futuquant.common.pb.Qot_GetTicker_pb2 import Request req = Request() req.c2s.security.market = market_code req.c2s.security.code = stock_code req.c2s.maxRetNum = num return pack_pb_req(req, ProtoId.Qot_GetTicker, conn_id)
def pack_req(cls, code, start_date, end_date, ktype, autype, fields, max_num, conn_id): ret, content = split_stock_str(code) if ret == RET_ERROR: error_str = content return RET_ERROR, error_str, None market_code, stock_code = content # check k line type if ktype not in KTYPE_MAP: error_str = ERROR_STR_PREFIX + "ktype is %s, which is not valid. (%s)" \ % (ktype, ", ".join([x for x in KTYPE_MAP])) return RET_ERROR, error_str, None if autype not in AUTYPE_MAP: error_str = ERROR_STR_PREFIX + "autype is %s, which is not valid. (%s)" \ % (autype, ", ".join([str(x) for x in AUTYPE_MAP])) return RET_ERROR, error_str, None from futuquant.common.pb.Qot_GetHistoryKL_pb2 import Request req = Request() req.c2s.rehabType = AUTYPE_MAP[autype] req.c2s.klType = KTYPE_MAP[ktype] req.c2s.security.market = market_code req.c2s.security.code = stock_code if start_date: req.c2s.beginTime = start_date if end_date: req.c2s.endTime = end_date req.c2s.maxAckKLNum = max_num req.c2s.needKLFieldsFlag = KL_FIELD.kl_fields_to_flag_val(fields) return pack_pb_req(req, ProtoId.Qot_GetHistoryKL, conn_id)
def pack_req(cls, code, num, ktype, autype, conn_id): ret, content = split_stock_str(code) if ret == RET_ERROR: error_str = content return RET_ERROR, error_str, None market_code, stock_code = content if ktype not in KTYPE_MAP: error_str = ERROR_STR_PREFIX + "ktype is %s, which is not valid. (%s)" \ % (ktype, ", ".join([x for x in KTYPE_MAP])) return RET_ERROR, error_str, None if autype not in AUTYPE_MAP: error_str = ERROR_STR_PREFIX + "autype is %s, which is not valid. (%s)" \ % (autype, ", ".join([str(x) for x in AUTYPE_MAP])) return RET_ERROR, error_str, None if isinstance(num, int) is False: error_str = ERROR_STR_PREFIX + "num is %s of type %s, which type should be %s" \ % (num, str(type(num)), str(int)) return RET_ERROR, error_str, None if num < 0: error_str = ERROR_STR_PREFIX + "num is %s, which is less than 0" % num return RET_ERROR, error_str, None from futuquant.common.pb.Qot_GetKL_pb2 import Request req = Request() req.c2s.security.market = market_code req.c2s.security.code = stock_code req.c2s.rehabType = AUTYPE_MAP[autype] req.c2s.reqNum = num req.c2s.klType = KTYPE_MAP[ktype] return pack_pb_req(req, ProtoId.Qot_GetKL, conn_id)
def pack_req(cls, user_id, conn_id): from futuquant.common.pb.GetGlobalState_pb2 import Request req = Request() req.c2s.userID = user_id return pack_pb_req(req, ProtoId.GetGlobalState, conn_id)
def pack_req(cls, conn_id): from futuquant.common.pb.KeepAlive_pb2 import Request req = Request() req.c2s.time = int(time.time()) return pack_pb_req(req, ProtoId.KeepAlive, conn_id)