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