说明
大单净额是反应主力的动向,这没错,
可是,成交额多少算大单?
之前写的大单净额功能我自己测试了一下,拿庄股张江高科建仓的阶段举个例子:
可以看到,不管是大单净额(门槛是25万)还是全资金流向,流出都是惊人的,可是,建仓阶段不应该是主力进入的过程吗,我对该股进行过长期跟踪,这是一个典型的周期性庄家,即在股价接近长期趋势线附近时介入,
其他时候基本都在睡觉,所以建仓的过程一定是要去拿筹码的,既然笼统的大单净额看不出端倪,那就高度在低一点,用区间净额来看看他到底葫芦装的什么药。
所以我新写了一个区间净额的函数,目的是找到在哪个成交额区间,有主力的身影。
# 初始化叫买叫卖序号的小字典
def add_bill(df_name,buy_dict,sell_dict, 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
# 更新每个DataFrame的买卖序号的成交额
def update_bill(df_name,buy_dict,sell_dict, x):
buy_dict[df_name][str(x['叫买序号'])] += x['成交额']
sell_dict[df_name][str(x['叫卖序号'])] += x['成交额'] * (-1)
def find_unusual_price(start_date, end_date, code):
dic = get_data(start_date, end_date, code) # 假设这个函数已定义并返回字典
buy_dict = {}
sell_dict = {}
for key, value in dic.items():
df_name = str(key)
buy_dict[df_name] = {}
sell_dict[df_name] = {}
# 假设 add_bill 和 update_bill 函数已定义并正确处理数据
value.apply(lambda x: add_bill(df_name, buy_dict, sell_dict, x), axis=1)
value.apply(lambda x: update_bill(df_name, buy_dict, sell_dict, x), axis=1)
temp = 0 # 当前区间净额
pre_temp = 0 # 上上个区间净额
min_value = 0
# 用于记录所有净额流入和流出的区间
inflow_list = [] # 记录流入的区间及金额
outflow_list = [] # 记录流出的区间及金额
while min_value < 20_000_000:
# 根据 min_value 调整步长和 max_value
if min_value < 1_000_000:
# 0-5万,5万-10万,10万-15万... 的模式
step_size = 50_000
max_value = min_value + step_size
elif 1_000_000 <= min_value < 3_000_000:
# 100万-120万,120万-140万,140万-160万... 的模式
step_size = 200_000
max_value = min_value + step_size
elif 3_000_000 <= min_value < 6_000_000:
# 300万-350万,350万-400万,400万-450万... 的模式
step_size = 500_000
max_value = min_value + step_size
else:
# 600万-800万,800万-1000万,1000万-1200万... 一直到 1800万-2000万
step_size = 2_000_000
max_value = min_value + step_size
if max_value > 20_000_000:
max_value = 20_000_000
res_buy = 0
res_sell = 0
# 遍历买入字典
for df_name, buy in buy_dict.items():
for key, value in buy.items():
if min_value < value < max_value:
res_buy += value
# 遍历卖出字典
for df_name, sell in sell_dict.items():
for key, value in sell.items():
if -max_value < value < -min_value:
res_sell += value
res = res_sell + res_buy
# 过滤掉0-5万区间
if not (min_value == 0 and max_value == 50_000):
# 如果净额为正,记录为流入
if res > 0:
inflow_list.append({"区间": f'{min_value / 10000}万 - {max_value / 10000}万', "金额": res})
# 如果净额为负,记录为流出
elif res < 0:
outflow_list.append({"区间": f'{min_value / 10000}万 - {max_value / 10000}万', "金额": res})
# 检查净额符号是否变化
if temp != 0 and (res * temp < 0) and (res * pre_temp <= 0):
# 符号与上一个区间不同,且与上上个区间不同,输出异常行
print(f'**********************************************{min_value / 10000}万 - {max_value / 10000}万:净额为 {res} ')
else:
# 否则正常输出
print(f'{min_value / 10000}万 - {max_value / 10000}万:净额为 {res}')
# 更新 pre_temp 为上上个区间的净额
pre_temp = temp
# 更新 temp 为当前区间净额
temp = res
# 更新 min_value,进入下一个区间
min_value += step_size
# 对流入和流出的列表按金额进行排序,分别取前3个
inflow_list = sorted(inflow_list, key=lambda x: x["金额"], reverse=True)[:6]
outflow_list = sorted(outflow_list, key=lambda x: x["金额"])[:6]
# 返回净额流入和流出前3的区间及金额,以字典包列表的形式
return inflow_list + outflow_list
来测试一下
**************是异常区间,逻辑目前写的不太智能,将就看看就行
0.0万 - 5.0万:净额为 104204133.3900001
**********************************************5.0万 - 10.0万:净额为 -15318213.309999824
10.0万 - 15.0万:净额为 -11756345.690000117
15.0万 - 20.0万:净额为 -1783776.1499999762
**********************************************20.0万 - 25.0万:净额为 2440847.430000022
25.0万 - 30.0万:净额为 8888681.349999994
**********************************************30.0万 - 35.0万:净额为 -12332765.93999999
35.0万 - 40.0万:净额为 -4580554.430000007
40.0万 - 45.0万:净额为 -12775197.029999986
45.0万 - 50.0万:净额为 -3008209.160000004
50.0万 - 55.0万:净额为 -8869975.540000007
55.0万 - 60.0万:净额为 -3348542.789999999
**********************************************60.0万 - 65.0万:净额为 7006457.759999998
65.0万 - 70.0万:净额为 -8786775.950000003
70.0万 - 75.0万:净额为 -5632061.18
75.0万 - 80.0万:净额为 -6018003.440000001
80.0万 - 85.0万:净额为 -2503131.0
85.0万 - 90.0万:净额为 -15454552.0
90.0万 - 95.0万:净额为 -992974.4500000011
95.0万 - 100.0万:净额为 -7725072.579999998
**********************************************100.0万 - 120.0万:净额为 2338112.5
120.0万 - 140.0万:净额为 -4606253.169999994
140.0万 - 160.0万:净额为 19141404.68
160.0万 - 180.0万:净额为 1918238.759999998
**********************************************180.0万 - 200.0万:净额为 -201599.01999999955
200.0万 - 220.0万:净额为 -2033074.0
220.0万 - 240.0万:净额为 -4607083.0
240.0万 - 260.0万:净额为 -2492948.0
**********************************************260.0万 - 280.0万:净额为 171773.0
280.0万 - 300.0万:净额为 -8770491.0
300.0万 - 350.0万:净额为 -3146053.0
350.0万 - 400.0万:净额为 -3881315.0
**********************************************400.0万 - 450.0万:净额为 106032.0
450.0万 - 500.0万:净额为 -9600610.0
500.0万 - 550.0万:净额为 0
550.0万 - 600.0万:净额为 -5703347.0
**********************************************600.0万 - 800.0万:净额为 14943198.96
800.0万 - 1000.0万:净额为 8270044.0
1000.0万 - 1200.0万:净额为 0
1200.0万 - 1400.0万:净额为 0
1400.0万 - 1600.0万:净额为 0
1600.0万 - 1800.0万:净额为 0
1800.0万 - 2000.0万:净额为 0
这是对流入流出金额前6的返回
[{'区间': '160.0万 - 180.0万', '金额': 66057418.599999964},
{'区间': '15.0万 - 20.0万', '金额': 55026535.20000005},
{'区间': '50.0万 - 55.0万', '金额': 35721474.920000196},
{'区间': '85.0万 - 90.0万', '金额': 24278255.340000033},
{'区间': '240.0万 - 260.0万', '金额': 19535116.099999994},
{'区间': '60.0万 - 65.0万', '金额': 18371155.659999996},
{'区间': '100.0万 - 120.0万', '金额': -121388431.24000001},
{'区间': '20.0万 - 25.0万', '金额': -99664927.18000007},
{'区间': '140.0万 - 160.0万', '金额': -90343061.07999998},
{'区间': '450.0万 - 500.0万', '金额': -86259436.31},
{'区间': '55.0万 - 60.0万', '金额': -79496567.78999993},
{'区间': '400.0万 - 450.0万', '金额': -63436404.029999994}]
通过分析这个排行和每个区间的日志输出,大致可以得出主力在
15.0万 - 20.0万
50.0万 - 55.0万,
60.0万 - 65.0万,
85.0万 - 90.0万,
160.0万 - 180.0万,
240.0万 - 260.0万,
这几个区间有下单偏好,这里的主力可能不仅仅是庄家,我且把他们笼统的概括为主力。
这就比较清晰的看出一些端倪,相比于传统的ddz大单净额指标,做了这个试验之后以后训练模型的时候就不会把ddz作为训练特征量了。
以下是一些其他的验证
1.下杀洗盘的时候,大单惊人的流出,中单吃进,猜测正确!
张江高科20230310-20230314
[{'区间': '5.0万 - 10.0万', '金额': 89262990.82999998},
{'区间': '10.0万 - 15.0万', '金额': 75206322.47000009},
{'区间': '15.0万 - 20.0万', '金额': 28240185.349999964},
{'区间': '25.0万 - 30.0万', '金额': 24423681.829999983},
{'区间': '160.0万 - 180.0万', '金额': 18707696.0},
{'区间': '350.0万 - 400.0万', '金额': 11466855.0},
{'区间': '600.0万 - 800.0万', '金额': -45547490.05},
{'区间': '800.0万 - 1000.0万', '金额': -27337358.0},
{'区间': '300.0万 - 350.0万', '金额': -26075998.58},
{'区间': '75.0万 - 80.0万', '金额': -22347067.479999997},
{'区间': '35.0万 - 40.0万', '金额': -21945525.919999994},
{'区间': '500.0万 - 550.0万', '金额': -20902481.0}]
2.暴力拉升之前,向上试盘,大单特大单比较多,但是没有足够的的中单托起拉升后股价,释放上方散户筹码,为后续上涨拉升做准备。猜测正确!
张江高科20230828-20230905
[{'区间': '300.0万 - 350.0万', '金额': 48570184.0},
{'区间': '600.0万 - 800.0万', '金额': 44215261.029999994},
{'区间': '80.0万 - 85.0万', '金额': 34058338.349999994},
{'区间': '50.0万 - 55.0万', '金额': 28812496.560000017},
{'区间': '45.0万 - 50.0万', '金额': 25290363.50999999},
{'区间': '100.0万 - 120.0万', '金额': 23274133.27000001},
{'区间': '5.0万 - 10.0万', '金额': -111576654.53000009},
{'区间': '15.0万 - 20.0万', '金额': -38269510.640000105},
{'区间': '30.0万 - 35.0万', '金额': -16751433.599999934},
{'区间': '280.0万 - 300.0万', '金额': -14608676.0},
{'区间': '1200.0万 - 1400.0万', '金额': -12628024.0},
{'区间': '85.0万 - 90.0万', '金额': -6016211.6000000015}]
标签:大单,进阶,为例,res,金额,value,dict,区间,净额
From: https://blog.csdn.net/2301_80249944/article/details/142435054