unknown
2022-08-18 bc6204f30deb7518b6f4738e3c842598cd040545
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
B
‰übú2ã
@s¼ddlZddlZddlZddlZddlZddlZddlTGdd„deƒZe    dkr¸y<e 
¡e dƒeƒZ e e e ƒƒe  dd¡Ze  d¡Wn*ek
r¶Zz e eƒWddZ[XYnXdS)    éN)Ú*cs¢eZdZdZ‡fdd„Zdd„Zdd„Zedd    „ƒZed
d „ƒZ    ed d „ƒZ
edd„ƒZ dd„Z dd„Z dd„Zdd„Zdd„Zd!dd„Zdd„Zdd „Z‡ZS)"Ú THSGuiTradeNcsp|jsjtt|ƒj|f|ž|Ž|_t ¡|j_t ¡|j_| ¡|j_    t
d|jj    ƒt ƒ|j_ |j  ¡|j_|jS)Nu 交易窗口)Ú_THSGuiTrade__instanceÚsuperrÚ__new__Ú    threadingÚRLockÚbuy_lockÚbuy_cancel_lockÚ get_buy_winsÚ buy_win_listÚprintÚsetÚusing_buy_winsÚgetCancelBuyWinÚ
cancel_win)ÚclsÚargsÚkwargs)Ú    __class__©úD:\workspace\trade\trade_gui.pyrs   
zTHSGuiTrade.__new__cCs|j ¡|_| ¡|_dS)N)rrrr r )ÚselfrrrÚ refresh_hwndss zTHSGuiTrade.refresh_hwndscCs`|j ¡zDt|jƒdkr"| ¡x(|jD]}||jkr*|j |¡|Sq*WWd|j ¡XdS)Nr)r    ÚacquireÚlenr rrÚaddÚrelease)rÚwinrrrÚget_available_buy_win!s
 
   z!THSGuiTrade.get_available_buy_wincCs8| ¡}t|ƒdkrtdƒ‚| ¡}|dkr4tdƒ‚dS)Néu"闪电买入窗口最低需要3个ru委托撤销窗口未打开)r rÚ    Exceptionr)rZbuy_winsZcancel_trade_winrrrÚcheckEnv.s  zTHSGuiTrade.checkEnvcCs`t |tjdd¡d}t dd|¡}t |tj||¡t | ¡d|d¡}| dd¡     ¡S)NréÚbsúÚ)
Úwin32guiÚ SendMessageÚwin32conÚWM_GETTEXTLENGTHÚarrayZ
WM_GETTEXTÚ PyGetStringÚ buffer_infoÚreplaceÚstrip)rÚhwndÚbufSizeÚbufferÚtextrrrÚgetText:s
zTHSGuiTrade.getTextc
Csüg}g}t dd„|¡xÞ|D]Ö}t |¡}|dkrt |¡rt |¡}|d|d}|d|d}d|kr|d    krnqd|kr”d
krnqy0t |d ¡}|dkrÆ| |¡d krÆ| |¡Wqtk
rò}    z t    |    ƒWdd}    ~    XYqXqW|S) NcSs
| |¡S)N)Úappend)ÚhWndÚparamrrrÚ<lambda>Fóz*THSGuiTrade.get_buy_wins.<locals>.<lambda>z#32770érr r#iôédé2iîu一键买入[B])
r'Ú EnumWindowsÚ GetClassNameÚIsWindowVisibleÚ GetWindowRectÚ
GetDlgItemr4r5r!r )
rr ÚhWndListr0ÚclsnameÚposÚwidthÚheightZbuy_winÚerrrr Bs$
 
 
0 zTHSGuiTrade.get_buy_winscCs g}t dd„|¡x†|D]~}t |¡}|dkrt |¡ryP| |¡dkrˆt |¡}|d|d}|d|d}|d    krˆ|d    krˆ|SWqYqXqWdS)
NcSs
| |¡S)N)r5)r6r7rrrr8\r9z-THSGuiTrade.getCancelBuyWin.<locals>.<lambda>z#32770u专业版下单r:rr r#éÈ)r'r=r>r?r4r@)rrBr0rCrDrErFrrrrYs
 
 
 
zTHSGuiTrade.getCancelBuyWincCs4x4tdƒD](}t |tjdd¡t |tjdd¡q
Wxø|D]ð}d}d}|dkr|d}t |tj|d¡t |tj|d¡q<nŒ|dkrŠd}n~|d    kr˜d
}np|d kr¦d }nb|d kr´d}nT|dkrÂd}nF|dkrÐd}n8|dkrÞd}n*|dkrìd}n|dkrúd}n|dkrd}t |tj|d¡t |tj|d¡q<WdS)Né
éréÿÿÿÿÚ.énÚ0é0Ú1é1Ú2r<Ú3é3Ú4é4Ú5é5Ú6é6Ú7é7Ú8é8Ú9é9)Úranger'r(r)Ú
WM_KEYDOWNÚ PostMessageZWM_KEYUP)rr0Znum_strÚiÚcÚcodeÚlprrrÚ input_numberksB
 
zTHSGuiTrade.input_numbercCst |d¡}| |¡S)NiÈ)r'rAr4)rrr0rrrÚgetLimitUpPrices zTHSGuiTrade.getLimitUpPricec    Csàg}t dd„|¡xÆ|D]¾}t |¡}|dkrt |¡rt |¡}|d|d}|d|d}d|krxd    krnqd|krd
krnq||kry.t |d¡}|dkrÈ| |¡}|d krÈ|SWqYqXqWdS) NcSs
| |¡S)N)r5)r6r7rrrr8—r9z/THSGuiTrade.getTradeResultWin.<locals>.<lambda>z#32770r:rr r#iôr;r<u确定)r'r=r>r?r@rAr4)    rrBr0rCrDrErFÚsureÚtitlerrrÚgetTradeResultWin•s$
 
 
8 
 
zTHSGuiTrade.getTradeResultWincCs4t |d¡}t |tjdd¡t |tjdd¡dS)Nr:r)r'rAr(r)ZWM_LBUTTONDOWNZ WM_LBUTTONUP)rrrjrrrÚcloseTradeResultDialogªs z"THSGuiTrade.closeTradeResultDialogcCsv|dkr dSt |d¡}| |¡}| d¡d}d}x0|D](}dt|ƒkrVdkr:nq:||7}q:Wt|ƒ|SdS)Nrr&iìu合同编号:r#rOé:)r'rAr4ÚsplitÚordr )rrZ    code_hwndr3Úcode_strrdrrrÚgetTradeSuccessCode°s 
 
 zTHSGuiTrade.getTradeSuccessCoderc    Cszþt d |¡¡|dkr4| ¡}|dkr4tdƒ‚td|ƒt ¡}t|ƒtt|dƒƒ}t     
|d¡}t     
|d¡}|  ||¡d}xJt d    d
ƒD]<}    t      |tjd    d    ¡d}
t|    |
ƒ|
dkrÄd }Pt d ¡q’W|sÞtd ƒ‚t d¡| |¡} tt| ƒt|ƒƒdkr d || ¡} t| ƒ‚t     |tjdd    ¡t d |ttt ¡dƒƒ|¡¡xœt d    dƒD]Ž}    | ¡} | d    kræt d¡| | ¡}t ¡}t|ƒtt|dƒƒ}td||ƒt d ||||¡¡| | ¡||fSt d¡qdWtdƒ‚Wd|j |¡XdS)Nu开始买入:code-{}r#u无可用的交易窗口u 使用窗口ièii FriôTgü©ñÒMbp?u代码输入填充出错gü©ñÒMbP?g{®Gáz„?u涨停价验证出错 {}-{}éBu&执行买入结束:code-{} è€—æ—¶:{}r<gš™™™™™É?u买入耗时:u6获取委托单号:code-{} å•号-{} æ•´ä½“耗时:{}g{®Gáz”?u获取交易结果出错)Úlogger_trade_guiÚinfoÚformatrr!r ÚtimeÚintÚroundr'rArhrar(r)r*ÚsleepriÚabsÚfloatrcrbrlrrrmrÚdiscard)rrfÚlimit_up_pricerÚtÚstartZhwnd1Z    hwnd_nameZ    data_fillrdr1Zlimit_up_price_nowÚerrorr0rqÚendrrrÚbuy¾sZ
 
 
 
 &
 
 
 
 zTHSGuiTrade.buycCsÒg}t dd„|¡x¸|D]°}t |¡}|dkrt |¡rt |¡}|d|d}|d|d}d|krxd    krnqd|krd
krnq||kry t |dd d ¡}|dkrº|SWqYqXqWdS) NcSs
| |¡S)N)r5)r6r7rrrr8r9z1THSGuiTrade.getCancelBuySureWin.<locals>.<lambda>z#32770r:rr r#iôr;r<ZStaticu 撤单确认)r'r=r>r?r@Ú FindWindowEx)rrBr0rCrDrErFrkrrrÚgetCancelBuySureWins 
 
 
8
zTHSGuiTrade.getCancelBuySureWinc    
Cs„|j ¡zZt d |¡¡|j}|dkr4tdƒ‚t ¡}t|ƒt    t
|dƒƒ}t|ƒt   |d¡}t   |ddd¡}d}d}xh||krè|dkrè|dkr°| |d    ¡t d
¡| ||¡t d ¡| |¡}| d ¡d}|d 7}q‚W||krútdƒ‚t d
¡t  |tjdd¡t ¡}t|ƒt    t
|dƒƒ}td||ƒt d |||¡¡t d¡Wd|j ¡| |d    ¡XdS)Nu开始撤单:code-{}ru无法找到取消委托窗口ièi–    ÚEditú-ér&g{®Gáz„?g{®Gázt?ú,r#u输入代码出错éXu耗时u"撤单成功:code-{} è€—时:{}gš™™™™™©?)r
rrtrurvrr!rwr rxryr'rAr„rhrzr4rorcr)rbr)    rrfrrr€Z
code_inputZ code_resultZ retry_countr‚rrrÚ
cancel_buysF
 
 
 
 
 
zTHSGuiTrade.cancel_buy)r)Ú__name__Ú
__module__Ú __qualname__rrrrÚ classmethodr"r4r rrhrirlrmrrrƒr…r‹Ú __classcell__rr)rrr s     %
CrÚ__main__u 环境正常Z002564z7.26)r+rrwr'Zwin32apir)ÚlogÚobjectrrŒr"r ÚtradeÚidrƒÚresultr‹r!rGrrrrÚ<module>s&=