Administrator
2025-06-03 ea44e1fddfb7a663802ca6dcd33f2350c805ec61
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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
B
<cânã@sŠddlZddlZddlZddlmZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl Z ddl mZe
 d¡ZiZiZiZGdd„deƒZGdd„dƒZd5d
d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdZ dd„Z!dd „Z"d!d"„Z#d#d$„Z$d%d&„Z%d'd(„Z&d)d*„Z'd+d,„Z(d-d.„Z)d/d0„Z*d1d2„Z+e,d3kr†e
 d¡ -¡Z.e. /d4¡Z/xe/D]Z0e. 1e0¡qrWdS)6éN)Údatetime)Úlogger_l2_tradeécs4eZdZdZdZ‡fdd„Zdd„Zdd„Z‡ZS)    ÚL2DataExceptionrécstƒ |¡||_||_dS)N)ÚsuperÚ__init__ÚcodeÚmsg)Úselfr    r
)Ú    __class__©ú%D:\workspace\trade\l2_data_manager.pyr"s zL2DataException.__init__cCs|jS)N)r
)r r r rÚ__str__'szL2DataException.__str__cCs|jS)N)r    )r r r rÚget_code*szL2DataException.get_code)    Ú__name__Ú
__module__Ú __qualname__ÚCODE_PRICE_ERRORZCODE_NO_CLOSE_PRICErrrÚ __classcell__r r )r rrs
 rc@sdeZdZedd„ƒZedd„ƒZedd„ƒZedd„ƒZedd
d „ƒZed d „ƒZ    eddd„ƒZ
d    S)ÚTradePointManagercCst ¡S)N)Ú _redisManagerÚgetRedisr r r rZ __get_redis0szTradePointManager.__get_rediscCs,t ¡}| d |¡¡| d |¡¡dS)Nzbuy_compute_index-{}zbuy_compute_num-{})rÚ_TradePointManager__get_redisÚdeleteÚformat)r    Úredisr r rÚdelete_buy_point5sz"TradePointManager.delete_buy_pointcCs,t ¡}| d |¡¡| d |¡¡dS)Nzbuy_cancel_compute_index-{}zbuy_cancel_compute_num-{})rrrr)r    rr r rÚdelete_buy_cancel_point<sz)TradePointManager.delete_buy_cancel_pointcCsHt ¡}| d |¡¡}| d |¡¡}|dkr4dSt|ƒt|ƒfSdS)Nzbuy_compute_index-{}zbuy_compute_num-{})Nr)rrÚgetrÚint)r    rÚindexÚ    total_numr r rÚget_buy_compute_start_dataCs z,TradePointManager.get_buy_compute_start_dataNcCsdt ¡}t ¡}|dk    r,| d |¡||¡d |¡}| |¡dkrT| |||¡n | ||¡dS)Nzbuy_compute_index-{}zbuy_compute_num-{})rrÚtoolÚ
get_expireÚsetexrrÚincrby)r    Únum_addr!rÚexpireÚkeyr r rÚset_buy_compute_start_dataNs
z,TradePointManager.set_buy_compute_start_datacCsHt ¡}| d |¡¡}| d |¡¡}|dkr4dSt|ƒt|ƒfSdS)Nzbuy_cancel_compute_index-{}zbuy_cancel_compute_num-{})Nr)rrrrr )r    rr!r"r r rÚ!get_buy_cancel_compute_start_data[s z3TradePointManager.get_buy_cancel_compute_start_datacCsdt ¡}t ¡}|dk    r,| d |¡||¡d |¡}| |¡dkrT| |||¡n | ||¡dS)Nzbuy_cancel_compute_index-{}zbuy_cancel_compute_num-{})rrr$r%r&rrr')r    r(r!rr)r*r r rÚ!set_buy_cancel_compute_start_datafs
z3TradePointManager.set_buy_cancel_compute_start_data)N)N) rrrÚ staticmethodrrrr#r+r,r-r r r rr/s     rFc    Csât ¡}t |¡dks|r\| d |¡¡}|dk    r\|tkrJt |¡t|<nt |t |¡¡t |¡dksn|rÈg}|     d |¡¡}x,|D]$}| |¡}t
  ||¡}|  |¡qˆWt |dd„d}|t|<t
 t|t |¡|¡dS)Nzl2-data-latest-{}zl2-{}-*cSs$t| d¡d dd¡ƒ| d¡fS)NÚvalÚtimeú:Úr!)r Ú __getitem__Úreplace)Úer r rÚ<lambda>‰ózload_l2_data.<locals>.<lambda>)r*)rrÚlocal_latest_datasrrÚjsonÚloadsÚ
setdefaultÚlocal_today_datasÚkeysÚ l2_data_utilZl2_data_key_2_objÚappendÚsortedÚload_num_operate_mapÚlocal_today_num_operate_map)    r    ÚforcerÚ_dataÚdatasr=ÚkÚvalueÚ    new_datasr r rÚ load_l2_datass$
 
  rIc Cs4t |¡sdSt ¡}z| d |¡d¡dkrt ¡}d}| d |¡¡}|dkr\d}nt    |ƒ}|}xœ|D]”}|d}d|d}| |¡}    |    dkrÈ||}|||dd    œ}    | 
||t   |    ¡¡qnt   |    ¡}
|
d|dkrn|d|
d<| 
||t   |
¡¡qnW| 
d |¡||¡Wd| d |¡¡X|S)
Nz
l2-save-{}Ú1rzl2-maxindex-{}rzl2-r*Úre)r!rK)Úgpcode_managerÚ is_in_gp_poolrrÚsetnxrr$r%rr r&r9Údumpsr:r) r    rEÚredis_instancer)r!Ú start_indexÚ    max_indexrDr*rGZ
json_valuer r rÚ
saveL2Datas6
 
 
 
 rSc Csütt ¡ƒ}t ¡ d¡}t |¡}|d}|d}|d}|d}|d}g}i}    t     |¡}
i} x|D]ú} | d} | | kr| | d| | <nd| | <t
| dƒ}| d    }| d
}|
dk    râ|
t   t  |¡¡krâd}d  |¡| d
<| d }| d }| d}d ||| |||||¡}||    kr>||    |dd||    |d<qj| || ddœ¡|     |t|ƒd¡qjWx„| D]|}| |dkrnt |ddd¡}t t ¡ d¡¡}t||ƒdkrnt ¡}| d |ttt ¡dƒƒ¡|¡qnW|||||fS)Nz%Y%m%dÚdataÚclientr    Úchannelr0rÚpriceÚnumÚ
limitPricez{}Ú operateTypeÚ
cancelTimeÚcancelTimeUnitz{}-{}-{}-{}-{}-{}-{}-{}rK)r*r/rKé2éÿÿÿÿr/z%H:%M:%Sézbig_data-{}-{}iè)r Útr0rÚnowÚstrftimer9r:rLÚget_limit_up_priceÚfloatr$Úto_priceÚdecimalÚDecimalrr?r;Úlenr>Zget_time_as_secondsÚabsrrÚsetÚround)ÚstrraÚdayÚdictrTrUr    rVrEZ
dataIndexsÚlimit_up_priceZ same_time_numÚitemr0rWrXrYrZr[r\r*Zts1Zts_nowrr r rÚ parseL2Data¹sP 
 
 
"
*rqcCsxt |¡}|dkrg}x\|D]T}xN|D]F}|d|dkr&|d|dkr&t|d|dƒ}||d<||d<q&WqW|S)Nr*rK)r8rÚmax)r    Z_datasZ latest_datarTZ_ldataZmax_rer r rÚ correct_datañs
 
 
 rscCslt ¡}| d |¡t ¡t |¡¡|tkr8|t|<n t     ||¡t
|t |ƒƒt |ƒdkrht ||ƒdS)Nzl2-data-latest-{}r) rrr&rr$r%r9rOr8r;Ú__set_l2_data_latest_countrhrS)r    rEÚ    add_datasrr r rÚ save_l2_datas
  rvcCsÐ|dk    rt|ƒdkrgSd}t |¡}|dk    rFt|ƒdkrF|dd}d}d}x2t|ƒD]&}|d7}|d|krXt|ƒ|}PqXWt|ƒdkr¼|dks¦|dt|ƒkrªgS||dd…Sn||dd…SdS)Nrr2rr^r*)rhr8rÚreversed)r    rEZlast_keyZ__latest_datasÚcountrQÚnr r rÚ get_add_datas$
    rzcCsˆ| d¡}t|dƒdt|dƒdt|dƒ}| d¡}t|dƒdt|dƒdt|dƒ}t||ƒdkr€dSd    SdS)
Nr1riré<rr_TF)Úsplitr ri)Ztime1Ztime2Ztime1_sZ time1_secondZtime2_sZ time2_secondr r rÚ__is_same_time(s
,
,r}c
Csàt ¡ d¡}tt ¡dƒ}z¸t|ƒdkrÖt |t    |dddƒ¡slt
t
j d  ||ddd¡ƒ‚t |ƒt||ƒ}t||ƒ}t|ƒdkrÊt| |¡t t||¡|t|ƒddd}t||ƒrÊt |¡\}}|dkršt|t|ƒd    d    ƒ}|rt |¡t|t|ƒd
d
ƒ}|dk    rÌt|}    t d   |t |    |¡¡¡d}
x®t |t|    ƒƒD]œ} |    | d} t!| d ƒdkr¾t!| d ƒdkr¾|
t!| dƒt!|    | dƒ7}
nDt!| d ƒdkrht!| d ƒdkrh|
t!| dƒt!|    | dƒ8}
qhWt "||
|¡t# $|¡} | dk    rÌ|
| ddkrÌt d  |t |    d¡¡¡yt %|¡t &|¡Wn$t'k
r”}zWdd}~XYnXn2d}
x˜|D]}|d} t!| d ƒdkròt!| d ƒdkrò|
t!| dƒt!|dƒ7}
n@t!| d ƒdkr¤t!| d ƒdkr¤|
t!| dƒt!|dƒ8}
q¤Wt "||
¡||
}t# $|¡} | dk    rÌ|| ddkrÌt d  |t |d¡¡¡yt %|¡t &|¡Wn$t'k
rÊ}zWdd}~XYnX|dk    rÊt (|¡}|tj)ksø|tj*krÊt +|¡\}}|dkrÐt,|t|ƒd
d
ƒ}|dk    rÊt|}    t d  |t |    |¡¡¡d}xht |t|    ƒƒD]V} |    | d} t!| d ƒdkrft!| d ƒdkrf|t!| dƒt!|    | dƒ7}qfWt -|||¡núd}xV|D]N}|d} t!| d ƒdkrÚt!| d ƒdkrÚ|t!| dƒt!|dƒ7}qÚWt -||¡||}t# $|¡} | dk    rÊ|| ddkrÊt d  |t |d¡¡¡y"t .|¡t /|¡t &|¡Wn$t'k
rÈ}zWdd}~XYnXt0|||ƒWdXdS)Nz%H:%M:%Sièrr/rWu è‚¡ä»·ä¸åŒ¹é… code-{} price-{}rr0ér_u找到买点:{} - {}rYrZrXrKédi€–˜u)执行买入:{} - è®¡ç®—结束点: {}r^u找到买撤点:{} - {}u执行撤销:{} - {})1rrarbrkr`r0rhÚ data_processÚis_same_code_with_pricerdrrrrIrsrzr<Úextendr>rArBr}rr#Ú__is_have_forbidden_featureÚ trade_managerZforbidden_tradeÚ__get_limit_up_buy_startrÚinfor9rOÚranger r+rLrcZ    start_buyrÚ    ExceptionZget_trade_stateZTRADE_STATE_BUY_DELEGATEDZTRADE_STATE_BUY_PLACE_ORDERr,Ú__get_limit_up_buy_cancel_startr-Zstart_cancel_buyrrv)r    rEZ now_time_strZ __start_timeruZ latest_timeZc_indexZc_numÚ    forbiddenZ total_datasZbuy_numsÚiÚ_valror5rTZ
latest_numÚstateZ cancel_indexZ
cancel_numÚnumsZcancel_nums_addr r rÚ process_data6s¾ 
 
 
 
 
 $"$&
 
 
 
$$" 
 
 
 
 
 
 
 $&
$" 
 
 
 
rcCs6| d¡}t|dƒdt|dƒdt|dƒS)Nr1rirr{r)r|r )Útime_strÚtsr r rÚ__get_time_secondÇs
r’i˜…cCsXt|dƒdkrdSt|dƒdkr(dSt|dƒ}t|dƒ}||dd    krTdSd
S) NrYrFrZrrWrXri ¡T)r rd)r/rWrXr r rÚ__is_limit_up_price_buyÐs  r“cCsXt|dƒdkrdSt|dƒdkr(dSt|dƒ}t|dƒ}||ddkrTdSd    S)
NrYrFrZrWrXri ¡T)r rd)r/rWrXr r rÚ__is_limit_up_price_buy_cancelÞs  r”c    Csât|}t|ƒ}||krdSd}||kr,|}||kr<||}d}d}d}x’t|||dƒD]z}    ||    d}
t|
dƒtkr‚q^t|
ƒr4|    } d} d} x,t| d|ƒD]}t||dƒr¨|} Pq¨W| dkrüx,t| d|ƒD]}t||dƒrÞ|} PqÞW| | dkr4| | dkr4t d ||    ||    ¡¡|    St|
ƒr”|dkrb||    dd}d}|    }n0||
dkrz|d7}n||    dd}d}|    }n|
ddkr®d}d}d}|dkr^|dkr^t d     ||||    ¡¡|Sq^WdS)
Nrr^rr/r0u$找到物理连续涨停买 {},{},{}rZéu'找到同一秒连续涨停买 {},{},{})    r<rhr‡r’Ú
second_930r“rr†r)r    Ú
data_countÚ__continue_countrEÚ__lenrQÚ__timeZ_limit_up_count_1sZ_limit_up_count_1s_start_indexr‹rŒÚindex_0Úindex_1Úindex_2ÚjÚ_timer r rr…ísd 
 
 
 
r…c Cs,t|}t|ƒ}||krdSd}||kr,|}||kr<||}xêt|||dƒD]Ô}||d}t|dƒtkrrqPt|ƒrP|}d}    d}
x,t|d|ƒD]} t|| dƒr–| }    Pq–W|    dkrêx,t|    d|ƒD]} t|| dƒrÌ| }
PqÌW|    |dkrP|
|    dkrPt d ||t     
||¡¡¡|SqPWdS)Nrrr/r0r^u连续3个涨停买撤 {},{},{}) r<rhr‡r’r–r”rr†rr9rO) r    r—r˜rEr™rQr‹rŒr›rœrržr r rr‰9s< r‰c
Csît|}t|ƒ}||krdSd}||kr,|}||kr<||}d}d}x¤t||ƒD]–}||d}    |    ddkr¨|ddkr¨||ddddkr¨|    ddkr¢|}qædSqP|dkrP|    ddkrâ||dkrâ|}|d7}||kræd    SqPdSqPWdS)
Nrr^r/r0z09:30:00rrZFT)r<rhr‡)
r    r—r˜rEr™rQZ cancel_startZ cancel_countr‹rŒr r rrƒbs2 0 rƒcCs$t ¡}d |¡}| |d|¡dS)Nzlatest-l2-count-{}r)rrrr&)r    rxrr*r r rrt…s
rtcCsL|dkst|ƒdkrdSt ¡}d |¡}| |¡}|dkr@dSt|ƒSdS)Nrrzlatest-l2-count-{})rhrrrrr )r    rr*Úresultr r rÚget_l2_data_latest_counts
 
r¡cCsHd}t ¡}| |¡}|dkr(| |¡| |d¡| |t ¡¡dS)Nzl2-fixed-codesrÚ000000)rrÚscardrÚsaddr)r$r%)r*rrxr r rÚinit_l2_fixed_codes›s
 
 r¥cCsd}t ¡}| ||¡dS)Nzl2-fixed-codes)rrÚsrem)r    r*rr r rÚremove_from_l2_fixed_codes¦sr§cCs,d}t ¡}| ||¡| |t ¡¡dS)Nzl2-fixed-codes)rrr¤r)r$r%)r    r*rr r rÚadd_to_l2_fixed_codes­s r¨cCsd}t ¡}| ||¡S)Nzl2-fixed-codes)rrÚ    sismember)r    r*rr r rÚis_in_l2_fixed_codesµsrªÚ__main__z    big_data*)F)2rfr9r0r`rr€r>ÚmysqlrLÚ
mongo_dataÚ redis_managerr$r„ÚlogrÚ RedisManagerrr8r<rBrˆrrrIrSrqrsrvrzr}rr’r–r“r”r…r‰rƒrtr¡r¥r§r¨rªrrrr=r*rr r r rÚ<module>sZ  
D
*8L)#