holds_concepts_effect
- czsc.holds_concepts_effect(holds: DataFrame, concepts: dict, top_n=20, min_n=3, **kwargs)[source]
股票持仓列表的板块效应
原理概述:在选股时,如果股票的概念板块与组合中的其他股票的概念板块有重合,那么这个股票的表现会更好。
函数计算逻辑:
如果kwargs中存在’copy’键且对应值为True,则将holds进行复制。
为holds添加’概念板块’列,该列的值是holds中’symbol’列对应的股票的概念板块列表,如果没有对应的概念板块则填充为空。
添加’概念数量’列,该列的值是每个股票的概念板块数量。
从holds中筛选出概念数量大于0的行,赋值给holds。
创建空列表new_holds和空字典dt_key_concepts。
6. 对holds按照’dt’进行分组,遍历每个分组,计算板块效应。 a. 计算密集出现的概念,选取出现次数最多的前top_n个概念,赋值给key_concepts列表。 b. 将日期dt和对应的key_concepts存入dt_key_concepts字典。 c. 计算在密集概念中出现次数超过min_n的股票,将符合条件的股票添加到new_holds列表中。 7. 使用pd.concat将new_holds中的DataFrame进行合并,忽略索引,赋值给dfh。 8. 创建DataFrame dfk,其中包含日期(dt)和对应的强势概念(key_concepts)。 9. 返回dfh和dfk。
- Parameters:
holds –
组合股票池数据,样例:
dt
symbol
weight
2023-05-09 00:00:00
601858.SH
0.00333333
2023-05-09 00:00:00
300502.SZ
0.00333333
2023-05-09 00:00:00
603258.SH
0.00333333
2023-05-09 00:00:00
300499.SZ
0.00333333
2023-05-09 00:00:00
300624.SZ
0.00333333
concepts –
股票的概念板块,样例: {
’002507.SZ’: [‘电子商务’, ‘超级品牌’, ‘国企改革’], ‘002508.SZ’: [‘家用电器’, ‘杭州亚运会’, ‘恒大概念’]
}
top_n – 选取前 n 个密集概念
min_n – 单股票至少要有 n 个概念在 top_n 中
- Returns:
过滤后的选股结果,每个时间点的 top_n 概念