From f51466f1d4563f97b1ec620b70a1c94f01a6a2e1 Mon Sep 17 00:00:00 2001 From: admin <weikou2014> Date: 星期五, 21 七月 2023 16:23:51 +0800 Subject: [PATCH] 交易优化 --- trade_client.py | 114 +++++++++++++++++++++++++++++++++++++------------------- 1 files changed, 75 insertions(+), 39 deletions(-) diff --git a/trade_client.py b/trade_client.py index bf6f8df..4ed8a27 100644 --- a/trade_client.py +++ b/trade_client.py @@ -2,43 +2,47 @@ import logging import os import socket +import threading import time import command_manager import constant +import socket_util import traderapi from client_network import SendResponseSkManager from log import logger # 姝e紡璐﹀彿 -UserID = '388000013349' -# 鐧婚檰瀵嗙爜 -Password = '110808' -# 鎶曡祫鑰呰处鎴� -InvestorID = '388000013349' -# 缁忔祹鍏徃閮ㄩ棬浠g爜 -DepartmentID = '0003' -# 璧勯噾璐︽埛 -AccountID = '388000013349' -# 娌競鑲′笢璐﹀彿 -SSE_ShareHolderID = 'A641420991' -# 娣卞競鑲′笢璐﹀彿 -SZSE_ShareHolderID = '0345104949' - -# # 浠跨湡 -# UserID = '00043201' +# UserID = '388000013349' # # 鐧婚檰瀵嗙爜 -# Password = '45249973' +# Password = '110808' # # 鎶曡祫鑰呰处鎴� -# InvestorID = '11160150' +# InvestorID = '388000013349' # # 缁忔祹鍏徃閮ㄩ棬浠g爜 # DepartmentID = '0003' # # 璧勯噾璐︽埛 -# AccountID = '00043201' +# AccountID = '388000013349' # # 娌競鑲′笢璐﹀彿 -# SSE_ShareHolderID = 'A00043201' +# SSE_ShareHolderID = 'A641420991' # # 娣卞競鑲′笢璐﹀彿 -# SZSE_ShareHolderID = '700043201' +# SZSE_ShareHolderID = '0345104949' + +# 浠跨湡 +from mylog import logger_trade_debug + +UserID = '00043201' +# 鐧婚檰瀵嗙爜 +Password = '45249973' +# 鎶曡祫鑰呰处鎴� +InvestorID = '11160150' +# 缁忔祹鍏徃閮ㄩ棬浠g爜 +DepartmentID = '0003' +# 璧勯噾璐︽埛 +AccountID = '00043201' +# 娌競鑲′笢璐﹀彿 +SSE_ShareHolderID = 'A00043201' +# 娣卞競鑲′笢璐﹀彿 +SZSE_ShareHolderID = '700043201' # # 鐧诲綍鐢ㄦ埛 # UserID = '00572083' @@ -719,8 +723,8 @@ __tradeSimpleApi = TradeSimpleApi() def OnTrade(self, client_id, request_id, type_, data): - print("璇锋眰杩涚▼ID", os.getpid()) if type_ == 1: + logger_trade_debug.info(f"璇锋眰涓嬪崟锛歝lient_id-{client_id} request_id-{request_id} data-{data}") # 涓嬪崟 # 1-涔� 2-鍗� direction = data["direction"] @@ -749,6 +753,7 @@ json.dumps({"code": 1, "msg": str(e)}).encode("utf-8")) elif type_ == 2: + logger_trade_debug.info(f"璇锋眰鎾ゅ崟锛歝lient_id-{client_id} request_id-{request_id} data-{data}") # 鎾ゅ崟 direction = data["direction"] code = data["code"] @@ -773,6 +778,7 @@ json.dumps({"code": 1, "msg": str(e)}).encode("utf-8")) def OnDealList(self, client_id, request_id): + logger_trade_debug.info(f"璇锋眰鎴愪氦鍒楄〃锛歝lient_id-{client_id} request_id-{request_id}") try: print("寮�濮嬭姹傛垚浜ゅ垪琛�") req_id = self.__tradeSimpleApi.list_traded_orders() @@ -782,6 +788,7 @@ SendResponseSkManager.send_error_response("common", request_id, client_id, str(e)) def OnDelegateList(self, client_id, request_id, is_cancel): + logger_trade_debug.info(f"璇锋眰濮旀墭鍒楄〃锛歝lient_id-{client_id} request_id-{request_id}") try: req_id = self.__tradeSimpleApi.list_delegate_orders(is_cancel) req_rid_dict[req_id] = (client_id, request_id) @@ -789,6 +796,7 @@ SendResponseSkManager.send_error_response("common", request_id, client_id, str(e)) def OnMoney(self, client_id, request_id): + logger_trade_debug.info(f"璇锋眰璐︽埛锛歝lient_id-{client_id} request_id-{request_id}") try: req_id = self.__tradeSimpleApi.get_money_account() req_rid_dict[req_id] = (client_id, request_id) @@ -796,6 +804,7 @@ SendResponseSkManager.send_error_response("common", request_id, client_id, str(e)) def OnPositionList(self, client_id, request_id): + logger_trade_debug.info(f"璇锋眰鎸佷粨锛歝lient_id-{client_id} request_id-{request_id}") try: req_id = self.__tradeSimpleApi.list_positions() req_rid_dict[req_id] = (client_id, request_id) @@ -822,13 +831,13 @@ if 1: # 妯℃嫙鐜锛孴CP 鐩磋繛Front鏂瑰紡 # 娉ㄥ唽鍗曚釜浜ゆ槗鍓嶇疆鏈嶅姟鍦板潃 - api.RegisterFront("tcp://192.168.84.31:6500") # 姝e紡鐜涓诲湴鍧� - api.RegisterFront("tcp://192.168.84.32:26500") # 姝e紡鐜澶囩敤鍦板潃 + # api.RegisterFront("tcp://192.168.84.31:6500") # 姝e紡鐜涓诲湴鍧� + # api.RegisterFront("tcp://192.168.84.32:26500") # 姝e紡鐜澶囩敤鍦板潃 - # TD_TCP_FrontAddress = "tcp://210.14.72.21:4400" # 浠跨湡浜ゆ槗鐜 + TD_TCP_FrontAddress = "tcp://210.14.72.21:4400" # 浠跨湡浜ゆ槗鐜 # TD_TCP_FrontAddress = "tcp://210.14.72.15:4400" # 24灏忔椂鐜A濂� # TD_TCP_FrontAddress="tcp://210.14.72.16:9500" #24灏忔椂鐜B濂� - # api.RegisterFront(TD_TCP_FrontAddress) + api.RegisterFront(TD_TCP_FrontAddress) # 娉ㄥ唽澶氫釜浜ゆ槗鍓嶇疆鏈嶅姟鍦板潃锛岀敤閫楀彿闅斿紑 褰㈠: api.RegisterFront("tcp://10.0.1.101:6500,tcp://10.0.1.101:26500") # print("TD_TCP_FensAddress[sim or 24H]::%s\n" % TD_TCP_FrontAddress) @@ -856,17 +865,33 @@ api.Init() +def __send_response(type, data_bytes): + sk = SendResponseSkManager.get_send_response_sk(type) + data_bytes = socket_util.load_header(data_bytes) + sk.sendall(data_bytes) + result, header_str = socket_util.recv_data(sk) + result = json.loads(result) + if result["code"] != 0: + raise Exception(result['msg']) + + # 浜ゆ槗鍙嶉鍥炶皟 -def traderapi_callback(type, req_id, data): - def send_response(data_str): - try: - SendResponseSkManager.get_send_response_sk(type).sendall(data_str) - except ConnectionResetError as e: - SendResponseSkManager.del_send_response_sk(type) - SendResponseSkManager.get_send_response_sk(type).sendall(data_str) - except BrokenPipeError as e: - SendResponseSkManager.del_send_response_sk(type) - SendResponseSkManager.get_send_response_sk(type).sendall(data_str) +def __traderapi_callback(type, req_id, data): + def send_response(data_str, _client_id, _request_id): + for i in range(3): + try: + __send_response(f"{type}#{_client_id}", data_str) + print("鍙戦�佹暟鎹垚鍔�") + logger_trade_debug.info(f"绗瑊i}娆″彂閫佹暟鎹垚鍔燂細type-{type},request_id-{_request_id}") + break + except ConnectionResetError as e: + SendResponseSkManager.del_send_response_sk(type) + except BrokenPipeError as e: + SendResponseSkManager.del_send_response_sk(type) + except Exception as e: + logger_trade_debug.info(f"绗瑊i}娆″彂閫佹暟鎹け璐ワ細type-{type},request_id-{_request_id}") + logger_trade_debug.exception(e) + pass print("鍥炶皟", type, req_id, data) print("杩涚▼ID", os.getpid()) @@ -876,20 +901,31 @@ try: print("traderapi_callback", req_rid_dict) if req_rid_dict and key in req_rid_dict: + print("API鍥炶皟") client_id, request_id = req_rid_dict.pop(key) # 娴嬭瘯 send_response( json.dumps({"type": "response", "data": {"code": 0, "data": data}, "client_id": client_id, - "request_id": request_id}).encode('utf-8')) - print("缁撴灉鍙戦�佸畬姣�") + "request_id": request_id}).encode('utf-8'), client_id, request_id) + print("API鍥炶皟缁撴潫") else: + print("闈濧PI鍥炶皟") # 闈濧PI鍥炶皟 send_response( - json.dumps({"type": "trade_callback", "data": {"code": 0, "data": data, "type": type}}).encode('utf-8')) + json.dumps({"type": "trade_callback", "data": {"code": 0, "data": data, "type": type}}).encode('utf-8'), + None, + req_id) + print("闈濧PI缁撴潫") except Exception as e: logging.exception(e) +# 閲囩敤寮傛鍥炶皟 +def traderapi_callback(type, req_id, data): + t1 = threading.Thread(target=lambda: __traderapi_callback(type, req_id, data), daemon=True) + t1.start() + + addr, port = constant.SERVER_IP, constant.SERVER_PORT -- Gitblit v1.8.0