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