Administrator
2022-10-27 6e71fbcb119e7068ba35380edaa5cc66e7c71f1b
trade_gui.py
@@ -8,22 +8,15 @@
import random
import win32gui
import win32api
import win32con
import global_util
import constant
import gpcode_manager
import l2_trade_util
import redis_manager
import tool
from log import *
from threading import Thread
def async_call(fn):
    def wrapper(*args, **kwargs):
        Thread(target=fn, args=args, kwargs=kwargs).start()
    return wrapper
from tool import async_call
class THSGuiTrade(object):
@@ -256,7 +249,7 @@
            #     raise Exception(error)
            # TODO 暂时不验证涨停价
            if not global_util.TEST:
            if not constant.TEST:
                if abs(float(limit_up_price_now) - float(limit_up_price)) >= 0.01:
                    error = "涨停价验证出错 {}-{}".format(limit_up_price, limit_up_price_now)
                    raise Exception(error)
@@ -271,7 +264,11 @@
            win32gui.PostMessage(win, win32con.WM_KEYDOWN, 66, 0);
            logger_trade_gui.info("执行买入结束:code-{} 耗时:{}".format(code, int(round(time.time() * 1000)) - start))
            self.close_delegate_success_dialog()
            # 过时
            # self.close_delegate_success_dialog()
            self.refresh_data()
            # 循环读取下单结果,最多等待10s
            # for i in range(0, 50):
            #     hwnd = self.getTradeResultWin()
@@ -388,6 +385,27 @@
            self.buy_cancel_lock.release()
            # 清空代码框
            self.input_number(code_input, "")
    # 刷新交易窗口数据
    @async_call
    def refresh_data(self):
        # 获取到专业下单页面
        win = self.getCancelBuyWin()
        child_win = None
        refresh_btn = None
        for i in range(0, 20):
            child_win = win32gui.FindWindowEx(win, child_win, "#32770", None)
            if not child_win:
                break
            if not win32gui.IsWindowVisible(child_win):
                continue
            temp = win32gui.FindWindowEx(child_win, None, "Button", "还原")
            if temp:
                refresh_btn = win32gui.GetDlgItem(child_win, 0x00000457)
                break
        if refresh_btn:
            # 点击刷新
            THSGuiUtil.click(refresh_btn)
class THSGuiUtil:
@@ -764,8 +782,20 @@
        for code in old_codes:
            if code not in codes_:
                cls.cancel_distribute_win_for_code(code)
        add_codes = codes[0:10]
        del_codes = codes[10:]
        # 删除禁止的代码
        new_codes = []
        new_delete_codes = []
        for code in codes:
            if not l2_trade_util.is_in_forbidden_trade_codes(code):
                # 取消分配
                new_codes.append(code)
            else:
                new_delete_codes.append(code)
        add_codes = new_codes[0:10]
        del_codes = new_codes[10:]
        del_codes.extend(new_delete_codes)
        for code in del_codes:
            cls.cancel_distribute_win_for_code(code)
@@ -813,7 +843,7 @@
if __name__ == '__main__':
    THSGuiTrade().buy("002853", "18.98", THSBuyWinManagerNew.get_buy_wins()[5])
    THSGuiTrade().buy("002900", "16.18")
    # GUITest().test_distribute()
    # try:
    #     THSGuiUtil.set_buy_window_code(0x000112D0, "000333")