Administrator
9 天以前 622d2ebab2f86482e84a54e36dce09dc6162e613
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
B
ØÛc<9ã
@s´ddlZddlZddlZddlZddlZddlZddlTddlmZdd„ZGdd„de    ƒZ
e dkr°y e
ƒZ e ee ƒƒe  d    ¡Wn*ek
r®Zz e eƒWddZ[XYnXdS)
éN)Ú*)ÚThreadcs‡fdd„}|S)Ncstˆ||d ¡dS)N)ÚtargetÚargsÚkwargs)rÚstart)rr)Úfn©úD:\workspace\trade\trade_gui.pyÚwrapper szasync_call.<locals>.wrapperr    )rr r    )rr
Ú
async_call s r cs¶eZdZdZ‡fdd„Zdd„Zdd„Zdd    „Zed
d „ƒZ    ed d „ƒZ
edd„ƒZ edd„ƒZ dd„Z dd„Zdd„Zdd„Zdd„Zd%dd„Zedd „ƒZd!d"„Zd#d$„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)Úclsrr)Ú    __class__r    r
rs   
zTHSGuiTrade.__new__cCs|j ¡|_| ¡|_dS)N)rrrrr)Úselfr    r    r
Ú refresh_hwnds#s zTHSGuiTrade.refresh_hwndscCsdS)Nr    )rr    r    r
Úopen_trade_env(szTHSGuiTrade.open_trade_envcCs`|j ¡zDt|jƒdkr"| ¡x(|jD]}||jkr*|j |¡|Sq*WWd|j ¡XdS)Nr)rÚacquireÚlenrrrÚaddÚrelease)rÚwinr    r    r
Úget_available_buy_win-s
 
   z!THSGuiTrade.get_available_buy_wincCs8| ¡}t|ƒdkrtdƒ‚| ¡}|dkr4tdƒ‚dS)Néu"闪电买入窗口最低需要3个ru委托撤销窗口未打开)rr"Ú    Exceptionr)rZbuy_winsZcancel_trade_winr    r    r
Ú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Útextr    r    r
ÚgetTextFs
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Úparamr    r    r
Ú<lambda>Róz*THSGuiTrade.get_buy_wins.<locals>.<lambda>z#32770érr'r*iôédé2iîu一键买入[B])
r.Ú EnumWindowsÚ GetClassNameÚIsWindowVisibleÚ GetWindowRectÚ
GetDlgItemr;r<r(r)
rrÚhWndListr7ÚclsnameÚposÚwidthÚheightZbuy_winÚer    r    r
rNs$
 
 
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)r<)r=r>r    r    r
r?hr@z-THSGuiTrade.getCancelBuyWin.<locals>.<lambda>z#32770u专业版下单rArr'r*éÈ)r.rDrErFr;rG)rrIr7rJrKrLrMr    r    r
res
 
 
 
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Ú2rCÚ3é3Ú4é4Ú5é5Ú6é6Ú7é7Ú8é8Ú9é9)Úranger.r/r0Ú
WM_KEYDOWNÚ PostMessageÚWM_KEYUP)rr7Znum_strÚiÚcÚcodeÚlpr    r    r
Ú input_numberwsB
 
zTHSGuiTrade.input_numbercCst |d¡}| |¡S)NiÈ)r.rHr;)rr%r7r    r    r
Ú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)r<)r=r>r    r    r
r?£r@z/THSGuiTrade.getTradeResultWin.<locals>.<lambda>z#32770rArr'r*iôrBrCu确定)r.rDrErFrGrHr;)    rrIr7rJrKrLrMÚsureÚtitler    r    r
ÚgetTradeResultWin¡s$
 
 
8 
 
zTHSGuiTrade.getTradeResultWincCs4t |d¡}t |tjdd¡t |tjdd¡dS)NrAr)r.rHr/r0ZWM_LBUTTONDOWNZ WM_LBUTTONUP)rr%rrr    r    r
ÚcloseTradeResultDialog¶s z"THSGuiTrade.closeTradeResultDialogcCsv|dkr dSt |d¡}| |¡}| d¡d}d}x0|D](}dt|ƒkrVdkr:nq:||7}q:Wt|ƒ|SdS)Nrr-iìu合同编号:r*rVé:)r.rHr;ÚsplitÚordr)rr%Z    code_hwndr:Úcode_strrlr    r    r
ÚgetTradeSuccessCode¼s 
 
 zTHSGuiTrade.getTradeSuccessCoderc     Cszzdt 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ƒƒ|¡¡| ¡|dfS|j |¡XdS)Nu开始买入:code-{}r*u无可用的交易窗口u 使用窗口ièii FriôTgü©ñÒMbp?u代码输入填充出错gü©ñÒMbP?g{®Gáz„?u涨停价验证出错 {}-{}éBu&执行买入结束:code-{} è€—æ—¶:{}r-)Úlogger_trade_guiÚinfoÚformatr&r(rÚtimeÚintÚroundr.rHrprhr/r0r1ÚsleeprqÚabsÚfloatrjriÚclose_delegate_success_dialogrÚdiscard) rrnÚlimit_up_pricer%ÚtrZhwnd1Z    hwnd_nameZ    data_fillrlr8Zlimit_up_price_nowÚerrorr    r    r
ÚbuyÊsB
 
 
 
 &zTHSGuiTrade.buycCsrxltddƒD]^}| ¡}|dkr`t d¡| |¡}t ¡}t|ƒtt|dƒƒ}| |¡Pt d¡q WdS)NrrCgš™™™™™É?ièg{®Gáz”?)    rhrtrr‚rzrr€rru)rrlr7ryrˆÚendr    r    r
r…s
 
 
z)THSGuiTrade.close_delegate_success_dialogcCsÒ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)r<)r=r>r    r    r
r?"r@z1THSGuiTrade.getCancelBuySureWin.<locals>.<lambda>z#32770rArr'r*iôrBrCZStaticu 撤单确认)r.rDrErFrGÚ FindWindowEx)rrIr7rJrKrLrMrsr    r    r
ÚgetCancelBuySureWin s 
 
 
8
zTHSGuiTrade.getCancelBuySureWinc
CsÚ|j ¡z°t d |¡¡|j}|dkr4tdƒ‚t ¡}t|ƒt    t
|dƒƒ}t|ƒt   |d¡a t  t ddd¡a t dkr¤| ¡t   |d¡a t  t ddd¡a d}d}xl||kr|dkr|dkrà| t d    ¡t d
¡| t |¡t d ¡| t ¡}| d ¡d}|d 7}q®W||kr,tdƒ‚t d
¡t  |tjdd¡t  |tjdd¡t  |tjdd¡t ¡}t|ƒt    t
|dƒƒ}td||ƒt d |||¡¡t d¡Wd|j ¡| t d    ¡XdS)Nu开始撤单:code-{}ru无法找到取消委托窗口ièi–    ÚEditú-ér-g{®Gáz„?g{®Gázt?ú,r*u输入代码出错éXiÐéxu耗时u"撤单成功:code-{} è€—时:{}gš™™™™™©?)rr!r|r}r~rr(rrr€rr.rHZ
code_inputrŒrrpr‚r;rwrjr0riZWM_CHARrkr$)rrnr%rˆrZ code_resultZ retry_countr‹r    r    r
Ú
cancel_buy4sR
 
 
 
 
 
 
zTHSGuiTrade.cancel_buy)r)Ú__name__Ú
__module__Ú __qualname__rrrr r&Ú classmethodr)r;rrrprqrtrurzrŠr r…rr”Ú __classcell__r    r    )rr
r s$    %
D r Ú__main__Z000716)r2rrr.Zwin32apir0Úlogrr Úobjectr r•ÚtraderÚidr”r(rNr    r    r    r
Ú<module>s$ ^