| | |
| | | import threading |
| | | import time |
| | | |
| | | from log_module.log import hx_logger_trade_debug, hx_logger_trade_loop, hx_logger_trade_callback |
| | | from log_module import async_log_util |
| | | from log_module.log import hx_logger_trade_debug, hx_logger_trade_loop, hx_logger_trade_callback, logger_trade |
| | | from trade.huaxin import huaxin_trade_data_update |
| | | from trade.huaxin.huaxin_trade_record_manager import TradeOrderIdManager |
| | | from utils import socket_util, huaxin_util |
| | |
| | | pipe_trade = pipe_trade_ |
| | | t1 = threading.Thread(target=lambda: __run_recv_pipe_trade(), daemon=True) |
| | | t1.start() |
| | | |
| | | |
| | | # 测试交易通道 |
| | | def test_trade_channel(): |
| | |
| | | if not request_id: |
| | | request_id = __get_request_id(_type) |
| | | try: |
| | | hx_logger_trade_loop.info("请求发送开始:client_id-{} request_id-{}", 0, request_id) |
| | | async_log_util.info(hx_logger_trade_loop, "请求发送开始:client_id-{} request_id-{}", 0, request_id) |
| | | root_data = {"type": _type, |
| | | "data": data, |
| | | "request_id": request_id} |
| | | root_data = socket_util.encryp_client_params_sign(root_data) |
| | | pipe_trade.send(json.dumps(root_data).encode("utf-8")) |
| | | hx_logger_trade_loop.info("请求发送成功:request_id-{}", request_id) |
| | | async_log_util.info(hx_logger_trade_loop, "请求发送成功:request_id-{}", request_id) |
| | | except BrokenPipeError as e: |
| | | hx_logger_trade_loop.info("请求发送异常:request_id-{} error-{}", request_id, str(e)) |
| | | raise e |
| | |
| | | import time |
| | | |
| | | import constant |
| | | from log_module.log import logger_juejin_trade, hx_logger_trade_debug |
| | | from log_module import async_log_util |
| | | from log_module.log import logger_juejin_trade, hx_logger_trade_debug, logger_trade |
| | | from trade.huaxin import huaxin_trade_api |
| | | from trade.huaxin.huaxin_trade_record_manager import TradeOrderIdManager |
| | | from utils import tool, huaxin_util |
| | |
| | | try: |
| | | result = huaxin_trade_api.order(1, code, count, price, blocking=blocking) |
| | | print("华鑫下单耗时", time.time() - start_time) |
| | | hx_logger_trade_debug.info(f"{code}:下单耗时{round(time.time() - start_time, 3)}s") |
| | | async_log_util.info(hx_logger_trade_debug, f"{code}:下单耗时{round(time.time() - start_time, 3)}s") |
| | | except Exception as e: |
| | | if str(e).find("超时") >= 0: |
| | | # 此处出现超时,需要通过读取委托列表来设置订单信息 |
| | | hx_logger_trade_debug.error(f"{code}:下单结果反馈出错-{str(e)}") |
| | | async_log_util.error(hx_logger_trade_debug, f"{code}:下单结果反馈出错-{str(e)}") |
| | | else: |
| | | raise e |
| | | |
| | |
| | | if result['code'] == 0: |
| | | result = result["data"] |
| | | if result["orderStatus"] == huaxin_util.TORA_TSTP_OST_Rejected: |
| | | logger_juejin_trade.info(f"{code}:下单失败:{result.get('statusMsg')}") |
| | | async_log_util.info(hx_logger_trade_debug, f"{code}:下单失败:{result.get('statusMsg')}") |
| | | raise Exception(result.get('statusMsg')) |
| | | else: |
| | | __TradeOrderIdManager.add_order_id(code, result["accountID"], result["orderSysID"]) |
| | | logger_juejin_trade.info(f"{code}:下单成功 orderSysID:{result['orderSysID']}") |
| | | async_log_util.info(hx_logger_trade_debug, f"{code}:下单成功 orderSysID:{result['orderSysID']}") |
| | | return result["securityId"], result["accountID"], result["orderSysID"] |
| | | else: |
| | | raise Exception(result['msg']) |
| | | else: |
| | | local_order_id = result["local_order_id"] |
| | | __TradeOrderIdManager.add_local_order_id(code, local_order_id) |
| | | logger_juejin_trade.info(f"{code}:下单成功 localOrderId:{local_order_id}") |
| | | async_log_util.info(hx_logger_trade_debug, f"{code}:下单成功 localOrderId:{local_order_id}") |
| | | return code, "local", local_order_id |
| | | else: |
| | | raise Exception("下单失败,无返回") |
| | |
| | | order_info = json.loads(order) |
| | | orders.append({'orderSysID': order_info[1], 'accountId': order_info[0]}) |
| | | if orders: |
| | | logger_juejin_trade.info(f"{code}:开始执行撤单") |
| | | logger_juejin_trade.info(f"{code}:撤单成功,撤单数量:{len(orders)}") |
| | | async_log_util.info(logger_trade, f"{code}:华鑫开始执行撤单") |
| | | for order in orders: |
| | | huaxin_trade_api.cancel_order(1, code, order["orderSysID"]) |
| | | __TradeOrderIdManager.remove_order_id(code, order["accountId"], order["orderSysID"]) |
| | | async_log_util.info(logger_trade, f"{code}:华鑫撤单结束,撤单数量:{len(orders)}") |
| | | |
| | | # 查询是否有本地订单号 |
| | | local_orders_info = __TradeOrderIdManager.list_local_order_ids_cache(code) |
| | |
| | | if local_orders_info: |
| | | local_orders_info = copy.deepcopy(local_orders_info) |
| | | for order_id in local_orders_info: |
| | | logger_juejin_trade.info(f"{code}:开始执行撤单") |
| | | async_log_util.info(logger_trade, f"{code}:华鑫开始执行撤单") |
| | | huaxin_trade_api.cancel_order(1, code, '', localOrderID=order_id) |
| | | __TradeOrderIdManager.remove_local_order_id(code, order_id) |
| | | logger_juejin_trade.info(f"{code}:执行撤单结束") |
| | | async_log_util.info(logger_trade, f"{code}:华鑫执行撤单结束") |
| | | |
| | | |
| | | if __name__ == "__main__": |
| | | pass |
| | |
| | | trade_data_manager.TradeBuyDataManager().set_buy_position_info(code, capture_timestamp, use_time, last_data, |
| | | last_data_index) |
| | | print("买入结束") |
| | | logger_trade.info("{}买入成功".format(code)) |
| | | async_log_util.info(logger_trade, "{}买入成功".format(code)) |
| | | # kp_client_msg_manager.add_msg(code, "下单成功") |
| | | |
| | | |
| | |
| | | |
| | | # 开始取消买入 |
| | | def start_cancel_buy(code, force=False): |
| | | logger_trade.info("{}进入撤单方法".format(code)) |
| | | async_log_util.info(logger_trade, "{}进入撤单方法".format(code)) |
| | | trade_state = __CodesTradeStateManager.get_trade_state_cache(code) |
| | | if trade_state == TRADE_STATE_BUY_SUCCESS: |
| | | return None |
| | |
| | | if trade_state != TRADE_STATE_BUY_PLACE_ORDER and trade_state != TRADE_STATE_BUY_DELEGATED: |
| | | return None |
| | | try: |
| | | logger_trade.info("{}开始撤单".format(code)) |
| | | async_log_util.info(logger_trade, "{}开始撤单".format(code)) |
| | | __CodesTradeStateManager.set_trade_state(code, TRADE_STATE_BUY_CANCEL_ING) |
| | | logger_trade.info("{}撤单方法开始".format(code)) |
| | | async_log_util.info(logger_trade, "{}撤单方法开始".format(code)) |
| | | if constant.API_TRADE_ENABLE: |
| | | if constant.TRADE_WAY == constant.TRADE_WAY_JUEJIN: |
| | | trade_juejin.cancel_order(code) |
| | |
| | | trade_huaxin.cancel_order(code) |
| | | else: |
| | | guiTrade.cancel_buy(code) |
| | | logger_trade.info("{}撤单方法结束".format(code)) |
| | | async_log_util.info(logger_trade, "{}撤单方法结束".format(code)) |
| | | __cancel_success(code) |
| | | # 不需要再次撤单了 |
| | | # try: |
| | |
| | | CodesTradeStateManager().set_trade_state(code, trade_state) |
| | | logger_trade.error("{}撤单异常:{}".format(code, str(e))) |
| | | raise e |
| | | logger_trade.info("{}撤单完毕".format(code)) |
| | | async_log_util.info(logger_trade, "{}撤单完毕".format(code)) |
| | | |
| | | |
| | | # 再次撤单,防止没有撤掉 |
| | |
| | | # 下单成功,加入固定代码库 |
| | | if constant.L2_SOURCE_TYPE == constant.L2_SOURCE_TYPE_THS: |
| | | l2_data_manager.remove_from_l2_fixed_codes(code) |
| | | logger_trade.info("{}撤单成功".format(code)) |
| | | async_log_util.info(logger_trade, "{}撤单成功".format(code)) |
| | | kp_client_msg_manager.add_msg(code, "撤单成功") |
| | | |
| | | |