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
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
140
141
142
143
144
B
Jüýbakã@sLddlZddlZddlZddlmZddlZddlZddlZddlZddl    Z    ddl
Z
ddl Z ddl m Z e     d¡ZiZiZGdd„deƒZGdd„dƒZd4d
d „Zd d „Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„ZdZdd„Zdd „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rHdS)5é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.pyrs 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_redis,szTradePointManager.__get_rediscCs,t ¡}| d |¡¡| d |¡¡dS)Nzbuy_compute_index-{}zbuy_compute_num-{})rÚ_TradePointManager__get_redisÚdeleteÚformat)r    Úredisr r rÚdelete_buy_point1sz"TradePointManager.delete_buy_pointcCs,t ¡}| d |¡¡| d |¡¡dS)Nzbuy_cancel_compute_index-{}zbuy_cancel_compute_num-{})rrrr)r    rr r rÚdelete_buy_cancel_point8sz)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_data?s 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_dataJs
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_dataWs 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_databs
z3TradePointManager.set_buy_cancel_compute_start_data)N)N) rrrÚ staticmethodrrrr#r+r,r-r r r rr+s     rFc    CsTt ¡}t |¡dks|r\| d |¡¡}|dk    r\|tkrJt |¡t|<nt |t |¡¡t |¡dksp|rPg}|     d |¡¡}x®|D]¦}| 
dd¡}|  d¡}|d}|d}    |d}
|d    } |d
} |d } |d }|d }|    |
| | | ||dœ}| |¡}t |¡}|||dt |dƒdœ}|  |¡qŠWt|dd„d}t ||¡dS)Nzl2-data-latest-{}zl2-{}-*zl2-Úú-rrrééééé)Ú operateTypeÚtimeÚnumÚpriceÚ
limitPriceÚ
cancelTimeÚcancelTimeUnitÚrer!)r*Úvalr=r!cSs$t| d¡d dd¡ƒ| d¡fS)Nr>r7ú:r/r!)r Ú __getitem__Úreplace)Úer r rÚ<lambda>’ózload_l2_data.<locals>.<lambda>)r*)rrÚlocal_latest_datasrrÚjsonÚloadsÚ
setdefaultÚlocal_today_datasÚkeysrAÚsplitr ÚappendÚsorted)r    ÚforcerÚ_dataÚdatasrJÚkr*Z
split_datar6r7r8r9r:r;r<ÚitemÚvalueÚ
json_valueÚ    new_datasr r rÚ load_l2_dataos<
 
 
 
 
 
 rVc 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*r=)r!r=)Úgpcode_managerÚ is_in_gp_poolrrÚsetnxrr$r%rr r&rFÚdumpsrGr) r    rPÚredis_instancer)r!Ú start_indexÚ    max_indexrOr*rSrTr r rÚ
saveL2Data–s6
 
 
 
 r_c CsNtt ¡ƒ}t ¡ d¡}t |¡}|d}|d}|d}|d}|d}g}i}    t     |¡}
xà|D]Ø} | d} t
| dƒ} | d}| d    }|
dk    rº|
t   t  | ¡¡krºd
}d  |¡| d    <| d }| d }| d}d ||| || |||¡}||    kr||    |dd
||    |d<qd| || d
dœ¡|     |t|ƒd
¡qdW|||||fS)Nz%Y%m%dÚdataÚclientr    Úchannelr7r9r8r:rz{}r6r;r<z{}-{}-{}-{}-{}-{}-{}-{}r=)r*r>r=)r Útr7rÚnowÚstrftimerFrGrXÚget_limit_up_priceÚfloatr$Úto_priceÚdecimalÚDecimalrrLrHÚlen)ÚstrrdÚdayÚdictr`rar    rbrPZ
dataIndexsÚlimit_up_pricerRr7r9r8r:r6r;r<r*r r rÚ parseL2DataÀs: 
 
 
 
"rpcCsxt |¡}|dkrg}x\|D]T}xN|D]F}|d|dkr&|d|dkr&t|d|dƒ}||d<||d<q&WqW|S)Nr*r=)rErÚmax)r    Z_datasZ latest_datar`Z_ldataZmax_rer r rÚ correct_dataés
 
 
 rrcCslt ¡}| d |¡t ¡t |¡¡|tkr8|t|<n t     ||¡t
|t |ƒƒt |ƒdkrht ||ƒdS)Nzl2-data-latest-{}r) rrr&rr$r%rFr[rErHÚ__set_l2_data_latest_countrkr_)r    rPÚ    add_datasrr r rÚ save_l2_dataøs
  rucCsÐ|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)Nrr/réÿÿÿÿr*)rkrErÚreversed)r    rPZlast_keyZ__latest_datasÚcountr]Ú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)
Nr?riré<rr1TF)rKr Úabs)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ƒ¡sXt
t
j dƒ‚t |ƒt ||ƒ}t||ƒ}t|ƒdkr¦t| |¡|t|ƒddd}t||ƒr¦t |¡\}}|dkrvt|t|ƒd    d    ƒ}|rît |¡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rDt| d ƒdkrD|
t| dƒt|    | dƒ8}
qDWt ||
|¡t  !|¡} | dk    r¨|
| ddkr¨t d |t |    d¡¡¡yt "|¡t #|¡Wn$t$k
rp}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rBt| d ƒdkrB|t| dƒt|    | dƒ7}qBWt *|||¡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}~XYnXt-|||ƒWdXdS)Nz%H:%M:%Sièrr>r9u股价不匹配rr7r4r1u找到买点:{} - {}r:r6r8r=édi€–˜u)执行买入:{} - è®¡ç®—结束点: {}rvu找到买撤点:{} - {}u执行撤销:{} - {}).rrdreÚroundrcr7rkÚ data_processZis_same_code_with_pricergrrrVrrrzrIÚextendr}rr#Ú__is_have_forbidden_featureÚ trade_managerZforbidden_tradeÚ__get_limit_up_buy_startrÚinforrFr[Úranger r+rXrfZ    start_buyrÚ    ExceptionZget_trade_stateZTRADE_STATE_BUY_DELEGATEDZTRADE_STATE_BUY_PLACE_ORDERr,Ú__get_limit_up_buy_cancel_startr-Zstart_cancel_buyrru)r    rPZ now_time_strZ __start_timertZ latest_timeZc_indexZc_numÚ    forbiddenZ total_datasZbuy_numsÚiÚ_valrorBr`Z
latest_numÚstateZ cancel_indexZ
cancel_numÚnumsZcancel_nums_addr r rÚ process_data.s¼ 
 
 
 
 
 $"$&
 
 
 
$$" 
 
 
 
 
 
 
 $&
$" 
 
 
 
rŽcCs6| d¡}t|dƒdt|dƒdt|dƒS)Nr?rirr{r)rKr )Ztime_strÚtsr r rÚ__get_time_second¼s
ri˜…cCsXt|dƒdkrdSt|dƒdkr(dSt|dƒ}t|dƒ}||dd    krTdSd
S) Nr:rFr6rr9r8r~i ¡T)r rg)r>r9r8r r rÚ__is_limit_up_price_buyÅs  r‘cCsXt|dƒdkrdSt|dƒdkr(dSt|dƒ}t|dƒ}||ddkrTdSd    S)
Nr:rFr6r9r8r~i ¡T)r rg)r>r9r8r 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)
Nrrvrr>r7u$找到物理连续涨停买 {},{},{}r6r2u'找到同一秒连续涨停买 {},{},{})    rIrkr†rÚ
second_930r‘rr…r)r    Ú
data_countÚ__continue_countrPÚ__lenr]Ú__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>r7rvu连续3个涨停买撤 {},{},{}) rIrkr†rr“r’rr…rrFr[) r    r”r•rPr–r]rŠr‹r˜r™ršr›r r rrˆ.s< 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)
Nrrvr>r7z09:30:00rr6FT)rIrkr†)
r    r”r•rPr–r]Z cancel_startZ cancel_countrŠr‹r r rr‚Ws2 0 r‚cCs$t ¡}d |¡}| |d|¡dS)Nzlatest-l2-count-{}r)rrrr&)r    rxrr*r r rrszs
rscCsL|dkst|ƒdkrdSt ¡}d |¡}| |¡}|dkr@dSt|ƒSdS)Nrrzlatest-l2-count-{})rkrrrrr )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¤cCsd}t ¡}| ||¡dS)Nzl2-fixed-codes)rrr¡)r    r*rr r rÚadd_to_l2_fixed_codes¢sr¥cCsd}t ¡}| ||¡S)Nzl2-fixed-codes)rrÚ    sismember)r    r*rr r rÚis_in_l2_fixed_codes©sr§Ú__main__)F)+rirFr7rcrr€ZmysqlrXÚ
mongo_dataÚ redis_managerr$rƒÚlogrÚ RedisManagerrrErIr‡rrrVr_rprrrurzr}rŽrr“r‘r’r„rˆr‚rsržr¢r¤r¥r§rr r r rÚ<module>sP  
D
'*)L)#