量化交易学习日记5-大单净额

说明

不会欺骗的数据有二,量与价。
大单净额计算的大致逻辑是大买单成交额减去大卖单成交额,不过在实现细节上有一些考究。

以下是个股的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}')

结果

大致与大智慧里的资金流向做了比对,大差不差。后续会加入拆单检测来更精确的计算大单净额。

一些想法

通常我们会认为大单净额越多越好,大单净额越多就形成买点,
这实际上极其错误的,很简单的一个原因是,如果我是主力,我会喜欢在股价下跌的时候建仓,这个时候股票卖出大于买入,大单净额原则上呈现流出,但是确实是买点的形成,而股价走高,主力卖出,散户游资接力,这个时候大单净额是流入还是流出也不好说,我唯一能想到比较有确定性的情况是,股价急跌,但是大单净额只有少量流出或者流入,是明确的买点,当然‘少量’的定义十分关键,在后续的研究里我会继续深入研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值