| | |
| | | raise Exception('ReqOrderAction fail, ret[%d]' % ret) |
| | | return |
| | | |
| | | # 批量撤买 |
| | | def batch_cancel_buy(self, code, order_infos, sinfos, order_action_refs, delay_s=0.0): |
| | | """ |
| | | 批量撤单 |
| | | @param code: |
| | | @param order_infos:[(order_ref, order_sys_id)] |
| | | @param sinfos: |
| | | @param order_action_refs: |
| | | @param delay_s: |
| | | @return: |
| | | """ |
| | | for i in range(len(order_infos)): |
| | | order_ref, order_sys_id = order_infos[i][0], order_infos[i][1] |
| | | sinfo = sinfos[i] |
| | | order_action_ref = order_action_refs[i] |
| | | if order_sys_id: |
| | | self.cancel_buy(code, sinfo, order_sys_id=order_sys_id, order_action_ref=order_action_ref, delay_s=delay_s) |
| | | else: |
| | | self.cancel_buy(code, sinfo, order_ref=order_ref, order_action_ref=order_action_ref, delay_s=delay_s) |
| | | return |
| | | |
| | | # 卖 |
| | | def sell(self, code, count, price, price_type, sinfo, order_ref=None): |
| | | if sinfo in self.__sell_sinfo_set: |
| | |
| | | "turnover": pOrderField.Turnover, "orderRef": pOrderField.OrderRef, |
| | | "volume": pOrderField.VolumeTotalOriginal, |
| | | "volumeTraded": pOrderField.VolumeTraded, "orderStatus": pOrderField.OrderStatus, |
| | | "orderSubmitStatus": pOrderField.OrderSubmitStatus, "statusMsg": pOrderField.StatusMsg}) |
| | | "orderSubmitStatus": pOrderField.OrderSubmitStatus, "statusMsg": pOrderField.StatusMsg,"sinfo": pOrderField.SInfo |
| | | }) |
| | | else: |
| | | # logger.info('查询报单结束[%d] ErrorID[%d] ErrorMsg[%s]' |
| | | # % (nRequestID, pRspInfoField.ErrorID, pRspInfoField.ErrorMsg)) |
| | |
| | | orderSysID = data.get("orderSysID") |
| | | orderRef = data.get("orderRef") |
| | | orderActionRef = data.get("orderActionRef") |
| | | sinfo = data["sinfo"] |
| | | sinfo = data.get("sinfo") |
| | | # =====批量撤单采用此种方法====== |
| | | # [(orderRef, orderSysID)] |
| | | orderInfos = data.get("orderInfos") |
| | | orderActionRefs = data.get("orderActionRefs") |
| | | sinfos = data.get("sinfos") |
| | | |
| | | if direction == 1: |
| | | # 撤买 |
| | | # 撤买 ,可采用单个撤单与批量撤单 |
| | | try: |
| | | if not orderSysID and orderRef is None: |
| | | raise Exception("没有找到系统订单号或者报单引用") |
| | | req_rid_dict[sinfo] = (client_id, request_id, sk) |
| | | self.trade_thread_pool.submit( |
| | | lambda: self.__tradeSimpleApi.cancel_buy(code, sinfo, order_sys_id=orderSysID, |
| | | order_ref=orderRef, order_action_ref=orderActionRef)) |
| | | async_log_util.info(logger_local_huaxin_trade_debug, |
| | | f"撤单结束:code-{code} order_sys_id-{orderSysID} sinfo-{sinfo}") |
| | | if orderInfos: |
| | | # 批量撤买 |
| | | if len(orderInfos) != len(orderActionRefs) or len(orderInfos) != len(sinfos): |
| | | raise Exception("批量撤单:订单数量与orderActionRefs/sinfos数量不匹配") |
| | | req_rid_dict[sinfo] = (client_id, request_id, sk) |
| | | self.trade_thread_pool.submit( |
| | | lambda: self.__tradeSimpleApi.batch_cancel_buy(code, orderInfos, sinfos, orderActionRefs)) |
| | | async_log_util.info(logger_local_huaxin_trade_debug, |
| | | f"批量撤单结束:code-{code} order_infos-{orderInfos} sinfos-{sinfos} order_action_refs-{orderActionRefs}") |
| | | else: |
| | | if not orderSysID and orderRef is None: |
| | | raise Exception("没有找到系统订单号或者报单引用") |
| | | req_rid_dict[sinfo] = (client_id, request_id, sk) |
| | | self.trade_thread_pool.submit( |
| | | lambda: self.__tradeSimpleApi.cancel_buy(code, sinfo, order_sys_id=orderSysID, |
| | | order_ref=orderRef, order_action_ref=orderActionRef)) |
| | | async_log_util.info(logger_local_huaxin_trade_debug, |
| | | f"撤单结束:code-{code} order_sys_id-{orderSysID} sinfo-{sinfo}") |
| | | except Exception as e: |
| | | send_response(json.dumps({"code": 1, "msg": str(e)}), TYPE_CANCEL_ORDER, client_id, |
| | | request_id) |