说明
不会欺骗的数据有二,量与价。
大单净额计算的大致逻辑是大买单成交额减去大卖单成交额,不过在实现细节上有一些考究。
以下是个股的level2数据的dataframe样式
一开始我犯了两个错误,
- 一是简单的把成交数量大的行理解成大单,但实际上成交并不是一下完成的,一个委托单往往分成几部分成交完毕,所以后来我创建两个字典,key为叫买叫卖序号,value为所对应的实际成交额。
- 二是在计算区间时间周期的大单净额时,没能考虑到不同交易日的叫卖叫买序号可能重复,一旦重复,这些重复的序号被写进字典就会覆盖以前相同序号的数据,导致错误,所以后来我又创建了一个大字典来套每个交易日的小字典,避免重复。
计算步骤如下
1.数据转换成dataframe
#字典是动态存储多个变量的最好方式之一
#dic是用来放每一天的dataframe
dic={}
#设置大单金额门槛
big=330000
#读取9月2日到9月6日的数据
for i in range(2,7):
dic[f'df_090{i}']=pd.read_csv(f'/Users/gusuqi/Downloads/2024090{i}/601881.SH/逐笔成交.csv',encoding='gbk')
for i in range(2,7):
dic[f'df_090{i}']=dic[f'df_090{i}'][['万得代码','自然日','时间','BS标志','成交价格','成交数量','叫买序号','叫卖序号']]
dic[f'df_090{i}']['成交价格']=dic[f'df_090{i}']['成交价格']/10000
dic[f'df_090{i}']['成交数量']=dic[f'df_090{i}']['成交数量']/100
dic[f'df_090{i}']['成交额']=dic[f'df_090{i}']['成交价格']*dic[f'df_090{i}']['成交数量']*100
2.初始化序号字典
# 大字典,存储每个DataFrame的叫买和叫卖序号的字典
buy_dict = {}
sell_dict = {}
# 初始化叫买叫卖序号的小字典的函数
def add_bill(df_name, x):
if x['叫买序号'] not in buy_dict[df_name]:
buy_dict[df_name][f'{x["叫买序号"]}'] = 0
if x['叫卖序号'] not in sell_dict[df_name]:
sell_dict[df_name][f'{x["叫卖序号"]}'] = 0
3. 更新每个DataFrame的买卖序号的成交额的函数
def update_bill(df_name, x):
buy_dict[df_name][str(x['叫买序号'])] += x['成交额']
sell_dict[df_name][str(x['叫卖序号'])] += x['成交额'] * (-1)
4.调用函数
for i in range(2, 7):
df_name = f'df_090{i}'
# 初始化大字典中的小字典
buy_dict[df_name] = {}
sell_dict[df_name] = {}
# 先用 add_bill 初始化序号
dic[df_name].apply(lambda x: add_bill(df_name, x), axis=1)
# 然后更新每个序号的成交额
dic[df_name].apply(lambda x: update_bill(df_name, x), axis=1)
5.筛选大单
# 设置大单的标准
big = 330000
# 计算大单净额
res_buy = 0
res_sell = 0
# 遍历每个DataFrame中的买卖序号字典
for df_name, buy in buy_dict.items():
for key, value in buy.items():
if value > big:
res_buy += value
for df_name, sell in sell_dict.items():
for key, value in sell.items():
if value < (-big):
res_sell += value
6.得到大单净额
net_value = res_sell + res_buy
print(f'大单净额为: {net_value}')
结果
大致与大智慧里的资金流向做了比对,大差不差。后续会加入拆单检测来更精确的计算大单净额。
一些想法
通常我们会认为大单净额越多越好,大单净额越多就形成买点,
这实际上极其错误的,很简单的一个原因是,如果我是主力,我会喜欢在股价下跌的时候建仓,这个时候股票卖出大于买入,大单净额原则上呈现流出,但是确实是买点的形成,而股价走高,主力卖出,散户游资接力,这个时候大单净额是流入还是流出也不好说,我唯一能想到比较有确定性的情况是,股价急跌,但是大单净额只有少量流出或者流入,是明确的买点,当然‘少量’的定义十分关键,在后续的研究里我会继续深入研究。