随着上周tushare出现那样的事情以后,我接触的同学中用miniqmt的越来越多, 这里写一写大家常碰到的一些问题。
比如昨天有星球同学 群里问,怎么获取概念板块涨停数量排序。 之前有同学问,怎么获取概念板块涨幅排名? 这里就以miniqmt怎么获取概念板块涨幅排名举例。
虽然我自己觉得xtquant + miniqmt 获取的概念板块 ,概念板块数据源设计得不是很好,并不一定是你需要的概念板块。但既然大家有这个需求。那就写一篇。
对于这种需求,我们一般怎么处理呢?
以下是使用 miniQMT(通过 XtQuant库)获取当前涨幅前5的概念板块的实现方案,可以参考下。实现思路大概如下
1、获取所有概念板块列表
通过 xtdata.get_sector_list()筛选名称以 GN开头的板块(概念板块标识)
。 先下载所有板块, 然后筛选GN开头的板块
2、计算每个板块的实时涨幅
获取板块内成分股列表(xtdata.get_stock_list_in_sector(板块名))
查询成分股的最新价与前收盘价,计算板块整体涨幅(如成分股平均涨幅)。
3、排序并筛选涨幅前5
按涨幅降序排序,取前5名。
这里贴一下完整代码,参考下思路, 具体根据自己的实际情况改造。 备注:如果发现格式有多余的特殊字符,用普通浏览器打开复制应该没问题。 希望我的分享对大家有所帮助
from xtquant import xtdata
import pandas as pd
def download_sector_data():
"""解决板块数据下载卡顿问题"""
client = xtdata.get_client()
client.down_all_sector_data()
def get_top5_concept_sectors():
try:
download_sector_data() # 确保板块数据已下载
sector_list = xtdata.get_sector_list()
concept_sectors = [s for s in sector_list if s.startswith('GN')] # 筛选概念板块[2,3](@ref)
#print(concept_sectors)
sector_gains = []
for sector in concept_sectors:
stocks = xtdata.get_stock_list_in_sector(sector) # 获取板块成分股[3,4](@ref)
#print(stocks)
if not stocks:
continue
# 获取成分股实时行情(最新价与前收盘价)
quotes = xtdata.get_full_tick(stocks)
#print(quotes)
total_gain = 0
valid_stocks = 0
for stock, data in quotes.items():
if data.get('lastPrice') and data.get('lastClose'):
gain = (data['lastPrice'] / data['lastClose'] - 1) * 100 # 计算单股涨幅
total_gain += gain
valid_stocks += 1
if valid_stocks > 0:
avg_gain = total_gain / valid_stocks # 板块平均涨幅
sector_gains.append((sector[2:], avg_gain)) # 去除前缀"gn",保留板块名称
# 按涨幅降序排序,取前5
top5 = sorted(sector_gains, key=lambda x: x[1], reverse=True)[:5]
return pd.DataFrame(top5, columns=["概念板块", "涨幅(%)"])
except Exception as e:
print(f"Error: {e}")
return pd.DataFrame()
# 执行并输出结果
if __name__ == "__main__":
df_top5 = get_top5_concept_sectors()
print("涨幅前5的概念板块:")
print(df_top5)其实现在即使是我,也是借助AI工具完成部分编码工具。 需要注意下,你把你的需求提给AI的时候,AI可能胡编乱造一些字段, 你需要分辨清楚。AI编程工具是辅助, 关键是自己能够发现对应的问题并加以解决。
用AI提升效率,但不能全信AI。
如果我的分享对你投资有所帮助,不吝啬给个点赞关注呗。