def pack_req(cls, order_type, code, price, order_id, adjust_limit, sec_mkt_str, trd_env, acc_id, trd_mkt, conn_id): from futu.common.pb.Trd_GetMaxTrdQtys_pb2 import Request req = Request() _, req.c2s.header.trdEnv = TrdEnv.to_number(trd_env) req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) _, req.c2s.orderType = OrderType.to_number(order_type) req.c2s.code = code req.c2s.price = price if order_id is not None: req.c2s.orderID = int(order_id) if adjust_limit == 0: req.c2s.adjustPrice = False else: req.c2s.adjustPrice = True req.c2s.adjustSideAndLimit = adjust_limit r, proto_qot_mkt = Market.to_number(sec_mkt_str) if not r: proto_qot_mkt = Qot_Common_pb2.QotMarket_Unknown proto_trd_sec_mkt = QOT_MARKET_TO_TRD_SEC_MARKET_MAP.get( proto_qot_mkt, Trd_Common_pb2.TrdSecMarket_Unknown) req.c2s.secMarket = proto_trd_sec_mkt return pack_pb_req(req, ProtoId.Trd_GetMaxTrdQtys, conn_id)
def pack_req(cls, acc_id_list, conn_id): from futu.common.pb.Trd_SubAccPush_pb2 import Request req = Request() for x in acc_id_list: req.c2s.accIDList.append(x) return pack_pb_req(req, ProtoId.Trd_SubAccPush, conn_id)
def pack_req(cls, trd_side, order_type, price, qty, code, adjust_limit, trd_env, sec_mkt_str, acc_id, trd_mkt, conn_id, remark): """Convert from user request for place order to PLS request""" from futu.common.pb.Trd_PlaceOrder_pb2 import Request req = Request() serial_no = get_unique_id32() req.c2s.packetID.serialNo = serial_no req.c2s.packetID.connID = conn_id req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_mkt] req.c2s.trdSide = TRD_SIDE_MAP[trd_side] req.c2s.orderType = ORDER_TYPE_MAP[order_type] req.c2s.code = code req.c2s.qty = qty req.c2s.price = price req.c2s.adjustPrice = adjust_limit != 0 req.c2s.adjustSideAndLimit = adjust_limit if remark is not None: req.c2s.remark = remark proto_qot_mkt = MKT_MAP.get(sec_mkt_str, Qot_Common_pb2.QotMarket_Unknown) proto_trd_sec_mkt = QOT_MARKET_TO_TRD_SEC_MARKET_MAP.get( proto_qot_mkt, Trd_Common_pb2.TrdSecMarket_Unknown) req.c2s.secMarket = proto_trd_sec_mkt return pack_pb_req(req, ProtoId.Trd_PlaceOrder, conn_id, serial_no)
def pack_req(cls, modify_order_op, order_id, price, qty, adjust_limit, trd_env, acc_id, trd_mkt, conn_id, aux_price, trail_type, trail_value, trail_spread): """Convert from user request for place order to PLS request""" from futu.common.pb.Trd_ModifyOrder_pb2 import Request req = Request() serial_no = get_unique_id32() req.c2s.packetID.serialNo = serial_no req.c2s.packetID.connID = conn_id _, req.c2s.header.trdEnv = TrdEnv.to_number(trd_env) req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) req.c2s.orderID = int(order_id) _, req.c2s.modifyOrderOp = ModifyOrderOp.to_number(modify_order_op) req.c2s.forAll = False if modify_order_op == ModifyOrderOp.NORMAL: req.c2s.qty = qty req.c2s.price = price req.c2s.adjustPrice = adjust_limit != 0 req.c2s.adjustSideAndLimit = adjust_limit if aux_price is not None: req.c2s.auxPrice = float(aux_price) if trail_type is not None: _, req.c2s.trailType = TrailType.to_number(trail_type) if trail_value is not None: req.c2s.trailValue = float(trail_value) if trail_spread is not None: req.c2s.trailSpread = float(trail_spread) return pack_pb_req(req, ProtoId.Trd_ModifyOrder, conn_id, serial_no)
def pack_req(cls, order_type, code, price, order_id, adjust_limit, sec_mkt_str, trd_env, acc_id, trd_mkt, conn_id): from futu.common.pb.Trd_GetMaxTrdQtys_pb2 import Request req = Request() req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_mkt] req.c2s.orderType = ORDER_TYPE_MAP[order_type] req.c2s.code = code req.c2s.price = price if order_id is not None: req.c2s.orderID = int(order_id) if adjust_limit == 0: req.c2s.adjustPrice = False else: req.c2s.adjustPrice = True req.c2s.adjustSideAndLimit = adjust_limit proto_qot_mkt = MKT_MAP.get(sec_mkt_str, Qot_Common_pb2.QotMarket_Unknown) proto_trd_sec_mkt = QOT_MARKET_TO_TRD_SEC_MARKET_MAP.get( proto_qot_mkt, Trd_Common_pb2.TrdSecMarket_Unknown) req.c2s.secMarket = proto_trd_sec_mkt return pack_pb_req(req, ProtoId.Trd_GetAccTradingInfo, conn_id)
def pack_req(cls, order_id, status_filter_list, code, start, end, trd_env, acc_id, trd_mkt, conn_id, refresh_cache): """Convert from user request for trading days to PLS request""" from futu.common.pb.Trd_GetOrderList_pb2 import Request req = Request() req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_mkt] if code: req.c2s.filterConditions.codeList.append(code) if order_id: req.c2s.filterConditions.idList.append(int(order_id)) if start: req.c2s.filterConditions.beginTime = start if end: req.c2s.filterConditions.endTime = end if refresh_cache: req.c2s.refreshCache = refresh_cache if len(status_filter_list): for order_status in status_filter_list: req.c2s.filterStatusList.append(ORDER_STATUS_MAP[order_status]) return pack_pb_req(req, ProtoId.Trd_GetOrderList, conn_id)
def pack_req(cls, code_list, conn_id, acc_id, trd_mkt): """Convert from user request for place order to PLS request""" stock_tuple_list = [] failure_tuple_list = [] for stock_str in code_list: ret_code, content = split_stock_str(stock_str) if ret_code != RET_OK: error_str = content 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 futu.common.pb.Trd_GetMarginRatio_pb2 import Request req = Request() req.c2s.header.trdEnv = 1 req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) for market, code in stock_tuple_list: stock_inst = req.c2s.securityList.add() stock_inst.market = market stock_inst.code = code return pack_pb_req(req, ProtoId.Trd_GetMarginRatio, conn_id)
def pack_req(cls, user_id, conn_id, trd_category, need_general_sec_acc): from futu.common.pb.Trd_GetAccList_pb2 import Request req = Request() req.c2s.userID = user_id _, req.c2s.trdCategory = TrdCategory.to_number(trd_category) req.c2s.needGeneralSecAccount = need_general_sec_acc return pack_pb_req(req, ProtoId.Trd_GetAccList, conn_id)
def pack_req(cls, acc_id, trd_market, trd_env, conn_id): from futu.common.pb.Trd_GetFunds_pb2 import Request req = Request() req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_market] return pack_pb_req(req, ProtoId.Trd_GetFunds, conn_id)
def pack_req(cls, is_unlock, password_md5, conn_id): """Convert from user request for trading days to PLS request""" from futu.common.pb.Trd_UnlockTrade_pb2 import Request req = Request() req.c2s.unlock = is_unlock req.c2s.pwdMD5 = password_md5 return pack_pb_req(req, ProtoId.Trd_UnlockTrade, conn_id)
def pack_req(cls, acc_id, trd_market, trd_env, conn_id, refresh_cache, currency): from futu.common.pb.Trd_GetFunds_pb2 import Request req = Request() _, req.c2s.header.trdEnv = TrdEnv.to_number(trd_env) req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_market) if refresh_cache: req.c2s.refreshCache = refresh_cache req.c2s.currency = Currency.to_number(currency)[1] return pack_pb_req(req, ProtoId.Trd_GetFunds, conn_id)
def pack_req(cls, code, trd_env, acc_id, trd_mkt, conn_id): """Convert from user request for place order to PLS request""" from futu.common.pb.Trd_GetOrderFillList_pb2 import Request req = Request() req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_mkt] if code: req.c2s.filterConditions.codeList.append(code) return pack_pb_req(req, ProtoId.Trd_GetOrderFillList, conn_id)
def pack_req(cls, trd_side, order_type, price, qty, code, adjust_limit, trd_env, sec_mkt_str, acc_id, trd_mkt, conn_id, remark, time_in_force, fill_outside_rth, aux_price, trail_type, trail_value, trail_spread): """Convert from user request for place order to PLS request""" from futu.common.pb.Trd_PlaceOrder_pb2 import Request req = Request() serial_no = get_unique_id32() req.c2s.packetID.serialNo = serial_no req.c2s.packetID.connID = conn_id _, req.c2s.header.trdEnv = TrdEnv.to_number(trd_env) req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) _, req.c2s.trdSide = TrdSide.to_number(trd_side) _, req.c2s.orderType = OrderType.to_number(order_type) req.c2s.code = code req.c2s.qty = qty req.c2s.price = price req.c2s.adjustPrice = adjust_limit != 0 req.c2s.adjustSideAndLimit = adjust_limit if remark is not None: req.c2s.remark = remark r, proto_qot_mkt = Market.to_number(sec_mkt_str) if not r: proto_qot_mkt = Qot_Common_pb2.QotMarket_Unknown proto_trd_sec_mkt = QOT_MARKET_TO_TRD_SEC_MARKET_MAP.get( proto_qot_mkt, Trd_Common_pb2.TrdSecMarket_Unknown) req.c2s.secMarket = proto_trd_sec_mkt ret, val = TimeInForce.to_number(time_in_force) if not ret: return RET_ERROR, val, None else: req.c2s.timeInForce = val if aux_price is not None: req.c2s.auxPrice = aux_price if trail_type is not None: ret, val = TrailType.to_number(trail_type) if not ret: return RET_ERROR, val, None else: req.c2s.trailType = val if trail_value is not None: req.c2s.trailValue = trail_value if trail_spread is not None: req.c2s.trailSpread = trail_spread req.c2s.fillOutsideRTH = fill_outside_rth return pack_pb_req(req, ProtoId.Trd_PlaceOrder, conn_id, serial_no)
def pack_req(cls, code, start, end, trd_env, acc_id, trd_mkt, conn_id): from futu.common.pb.Trd_GetHistoryOrderFillList_pb2 import Request req = Request() req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_mkt] if code: req.c2s.filterConditions.codeList.append(code) req.c2s.filterConditions.beginTime = start req.c2s.filterConditions.endTime = end return pack_pb_req(req, ProtoId.Trd_GetHistoryOrderFillList, conn_id)
def pack_req(cls, code, trd_env, acc_id, trd_mkt, conn_id, refresh_cache): """Convert from user request for place order to PLS request""" from futu.common.pb.Trd_GetOrderFillList_pb2 import Request req = Request() _, req.c2s.header.trdEnv = TrdEnv.to_number(trd_env) req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) if code: req.c2s.filterConditions.codeList.append(code) if refresh_cache: req.c2s.refreshCache = refresh_cache return pack_pb_req(req, ProtoId.Trd_GetOrderFillList, conn_id)
def pack_req(cls, trd_env, acc_id, trd_mkt, conn_id): """Convert from user request for place order to PLS request""" from futu.common.pb.Trd_ModifyOrder_pb2 import Request req = Request() serial_no = get_unique_id32() req.c2s.packetID.serialNo = serial_no req.c2s.packetID.connID = conn_id req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_mkt] req.c2s.orderID = 0 req.c2s.modifyOrderOp = MODIFY_ORDER_OP_MAP[ModifyOrderOp.CANCEL] req.c2s.forAll = True return pack_pb_req(req, ProtoId.Trd_ModifyOrder, conn_id, serial_no)
def pack_req(cls, trd_env, acc_id, trd_mkt, conn_id): """Convert from user request for place order to PLS request""" from futu.common.pb.Trd_ModifyOrder_pb2 import Request req = Request() serial_no = get_unique_id32() req.c2s.packetID.serialNo = serial_no req.c2s.packetID.connID = conn_id _, req.c2s.header.trdEnv = TrdEnv.to_number(trd_env) req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) req.c2s.orderID = 0 req.c2s.modifyOrderOp = Trd_Common_pb2.ModifyOrderOp_Cancel req.c2s.forAll = True return pack_pb_req(req, ProtoId.Trd_ModifyOrder, conn_id, serial_no)
def pack_req(cls, code, pl_ratio_min, pl_ratio_max, trd_env, acc_id, trd_mkt, conn_id): """Convert from user request for trading days to PLS request""" from futu.common.pb.Trd_GetPositionList_pb2 import Request req = Request() req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_mkt] if code: req.c2s.filterConditions.codeList.append(code) if pl_ratio_min is not None: req.c2s.filterPLRatioMin = float(pl_ratio_min) / 100.0 if pl_ratio_max is not None: req.c2s.filterPLRatioMax = float(pl_ratio_max) / 100.0 return pack_pb_req(req, ProtoId.Trd_GetPositionList, conn_id)
def pack_req(cls, code, pl_ratio_min, pl_ratio_max, trd_env, acc_id, trd_mkt, conn_id, refresh_cache): """Convert from user request for trading days to PLS request""" from futu.common.pb.Trd_GetPositionList_pb2 import Request req = Request() _, req.c2s.header.trdEnv = TrdEnv.to_number(trd_env) req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) if code: req.c2s.filterConditions.codeList.append(code) if pl_ratio_min is not None: req.c2s.filterPLRatioMin = float(pl_ratio_min) / 100.0 if pl_ratio_max is not None: req.c2s.filterPLRatioMax = float(pl_ratio_max) / 100.0 if refresh_cache: req.c2s.refreshCache = refresh_cache return pack_pb_req(req, ProtoId.Trd_GetPositionList, conn_id)
def pack_req(cls, status_filter_list, code, start, end, trd_env, acc_id, trd_mkt, conn_id): from futu.common.pb.Trd_GetHistoryOrderList_pb2 import Request req = Request() _, req.c2s.header.trdEnv = TrdEnv.to_number(trd_env) req.c2s.header.accID = acc_id _, req.c2s.header.trdMarket = TrdMarket.to_number(trd_mkt) if code: req.c2s.filterConditions.codeList.append(code) req.c2s.filterConditions.beginTime = start req.c2s.filterConditions.endTime = end if status_filter_list: for order_status in status_filter_list: r, v = OrderStatus.to_number(order_status) if r: req.c2s.filterStatusList.append(v) return pack_pb_req(req, ProtoId.Trd_GetHistoryOrderList, conn_id)
def pack_req(cls, modify_order_op, order_id, price, qty, adjust_limit, trd_env, acc_id, trd_mkt, conn_id): """Convert from user request for place order to PLS request""" from futu.common.pb.Trd_ModifyOrder_pb2 import Request req = Request() serial_no = get_unique_id32() req.c2s.packetID.serialNo = serial_no req.c2s.packetID.connID = conn_id req.c2s.header.trdEnv = TRD_ENV_MAP[trd_env] req.c2s.header.accID = acc_id req.c2s.header.trdMarket = TRD_MKT_MAP[trd_mkt] req.c2s.orderID = int(order_id) req.c2s.modifyOrderOp = MODIFY_ORDER_OP_MAP[modify_order_op] req.c2s.forAll = False if modify_order_op == ModifyOrderOp.NORMAL: req.c2s.qty = qty req.c2s.price = price req.c2s.adjustPrice = adjust_limit != 0 req.c2s.adjustSideAndLimit = adjust_limit return pack_pb_req(req, ProtoId.Trd_ModifyOrder, conn_id, serial_no)
def pack_req(cls, user_id, conn_id): from futu.common.pb.Trd_GetAccList_pb2 import Request req = Request() req.c2s.userID = user_id return pack_pb_req(req, ProtoId.Trd_GetAccList, conn_id)