有个玩高频的同事想实现一个可以监控卖盘中摆的大单的情况
df=pd.read_csv('E:/tick_10/sz000333.csv',encoding='gbk')
'''求每个档位平均值'''
b1_mean=np.mean(df[1:int(len(df)/2)]['挂卖量1'])
df2=df[int(len(df)/2):len(df)]
df2[df2['挂卖量1']>b1_mean*10][['挂卖价1','挂卖量1']]
logging=[]
list_log=[]
for i in range(1,90):#len(df)
'''当前记录的信息中的所有价格'''
plog_list=[x.get('s1p') for x in list_log]
#print(i,plog_list)
'''判断量,是否大单
同一价格可能是大单,也可能不是,所以无论是否是大单,都要更新价格对应的量'''
#是大单
if df['挂卖量1'][i]>b1_mean:
'''判断价格是否跟任何记录的相同'''
#不同价格则增加新的记录
if df['挂卖价1'][i] not in plog_list:
big_log=dict({'s1p': df['挂卖价1'][i], 's1v': df['挂卖量1'][i]})
list_log.append(big_log)
#相同价格则updata量
else:
bigp_ind=plog_list.index(df['挂卖价1'][i])
list_log[bigp_ind].update(s1v=df['挂卖量1'][i])
#当不是大单
else:
p_tick10=df.loc[i,['挂卖价1','挂卖价2','挂卖价3','挂卖价4','挂卖价5','挂卖价6','挂卖价7','挂卖价8','挂卖价9','挂卖价10']].tolist()
v_tick10=df.loc[i,['挂卖量1','挂卖量2','挂卖量3','挂卖量4','挂卖量5','挂卖量6','挂卖量7','挂卖量8','挂卖量9','挂卖量10']].tolist()
#记录的价格是否在十档中
del_list=[]
for p in plog_list:
#在记录的位置,要写入的位置
plog_ind=plog_list.index(p)
#在十档中。更新所处价格的量
if p in p_tick10:
#在十档的位置,取出对应的量
ptick_ind=p_tick10.index(p)
#更新
list_log[plog_ind].update(s1v=v_tick10[ptick_ind])
#不在十档中,并大于十档最大值,属于没显示,但一直存在
elif (p not in p_tick10) & (p>max(p_tick10)):
pass
#不在十档中,但是没有大于十档最大值,可能是cacel单
elif (p not in p_tick10) & (p<max(p_tick10)):
#保存要删除的索引列表,反向遍历删除
del_list.append(plog_ind)
print(plog_ind)
[list_log.pop(d) for d in del_list[::-1]]#这里的结果是弹出的
#记录每个过程,监控
logging.append(plog_list)
print(i,list_log)