From e0b77a03d87eb9bafd08e35492f918b5b8b0fbb5 Mon Sep 17 00:00:00 2001
From: admin <weikou2014>
Date: 星期五, 28 六月 2024 15:34:18 +0800
Subject: [PATCH] '持仓矫正'

---
 gui.py |   66 +++++++++++++++++++++++++++++---
 1 files changed, 59 insertions(+), 7 deletions(-)

diff --git a/gui.py b/gui.py
index 5157f23..1bb6914 100644
--- a/gui.py
+++ b/gui.py
@@ -12,6 +12,9 @@
 
 __symbol_name_dict = {}
 
+# 绯荤粺鍚姩鏃堕棿
+system_start_time = tool.get_now_time_str()
+
 
 def get_symbols_names(symbols):
     request_symbols = []
@@ -201,6 +204,7 @@
             price = tool.get_buy_min_price(price)
             result = local_api.trade_api.sell(code, int(volume), price)
             print("鍗栧嚭缁撴灉锛�", result)
+            print("鎸佷粨锛�", local_api.trade_api.position_by_symbol(symbol))
         else:
             wx.MessageBox("娌℃湁鑾峰彇鍒皌ick鏁版嵁")
 
@@ -238,22 +242,48 @@
                 symbols_names_dict = get_symbols_names([x[0] for x in datas])
                 for data in datas:
                     code = data[0].split(".")[1]
+                    total_volume = data[2]
+                    available_volume = data[3]
+
+                    if data[0] in self.deal_dict:
+                        deal_list = self.deal_dict[data[0]]
+                        deal_volume = 0
+                        if deal_list:
+                            for d in deal_list:
+                                if d[1] == 2 and tool.trade_time_sub(d[5], system_start_time) > 0:
+                                    deal_volume += d[3]
+                        total_volume -= deal_volume
+                        available_volume -= deal_volume
+
                     index = self.list_ctrl_position.InsertItem(self.list_ctrl_position.GetItemCount(), data[0])
+                    # 濮旀墭閲�
+                    dvolume = 0
+                    if data[0] in self.delegates_dict:
+                        delegates_list = self.delegates_dict[data[0]]
+                        if delegates_list:
+                            dvolume = sum([x[3] for x in delegates_list])
+                            self.list_ctrl_position.SetItem(index, 8, f'{delegates_list[-1][4]}')
+                    available_volume -= dvolume
+
                     self.list_ctrl_position.SetItem(index, 1, symbols_names_dict.get(data[0]))
                     self.list_ctrl_position.SetItem(index, 2, str(round(data[1], 2)))
-                    self.list_ctrl_position.SetItem(index, 3, str(data[2]))
-                    self.list_ctrl_position.SetItem(index, 4, str(data[3]))
+                    self.list_ctrl_position.SetItem(index, 3, str(total_volume))
+                    self.list_ctrl_position.SetItem(index, 4, str(available_volume))
                     self.list_ctrl_position.SetItem(index, 5, str(round(data[4], 2)))
                     tick = local_api.latest_tick_dict.get(code)
                     if tick:
                         self.list_ctrl_position.SetItem(index, 6, str(tick[2]))
                     else:
                         self.list_ctrl_position.SetItem(index, 6, str(data[5]))
-                    dvolume = 0
-                    if data[0] in self.delegates_dict:
-                        delegates_list = self.delegates_dict[data[0]]
-                        if delegates_list:
-                            dvolume = sum([x[3] for x in delegates_list])
+
+                    if data[0] in self.deal_dict:
+                        deal_list = self.deal_dict[data[0]]
+                        deal_volume = 0
+                        if deal_list:
+                            for d in deal_list:
+                                if d[1] == 2 and tool.trade_time_sub(d[5], system_start_time) > 0:
+                                    deal_volume += d[3]
+
                             self.list_ctrl_position.SetItem(index, 8, f'{delegates_list[-1][4]}')
 
                     self.list_ctrl_position.SetItem(index, 7, f'{dvolume}')
@@ -291,6 +321,26 @@
                 finally:
                     time.sleep(2)
 
+        def __get_deal_list():
+            # 鑾峰彇濮旀墭
+            while True:
+                try:
+                    deals = local_api.trade_api.get_execution_reports(blocking=True)
+                    deals = [(x["symbol"], x["side"], x["price"], x["volume"], x["amount"],
+                              x["created_at"].strftime('%H:%M:%S')) for x in
+                             deals]
+                    deal_dict = {}
+                    for x in deals:
+                        if x[0] not in deal_dict:
+                            deal_dict[x[0]] = []
+                        deal_dict[x[0]].append(x)
+                    self.deal_dict = deal_dict
+                    # wx.CallAfter(lambda: self.label_limit_up_info.SetLabelText(st))
+                except:
+                    pass
+                finally:
+                    time.sleep(2)
+
         """
         寮�濮嬩换鍔�
         :return:
@@ -300,10 +350,12 @@
         threading.Thread(target=__show_limit_up_list_info, daemon=True).start()
         threading.Thread(target=__get_positions, daemon=True).start()
         threading.Thread(target=__get_delegates, daemon=True).start()
+        threading.Thread(target=__get_deal_list, daemon=True).start()
 
     def __init_data(self):
 
         self.delegates_dict = {}
+        self.deal_dict = {}
         logs = log_export.load_system_logs()
         self.system_log_ctrl.Clear()
         for l in logs:

--
Gitblit v1.8.0