本文目录导读:

我可以为你提供一个综合实用且可自定义的Python脚本框架,用于计算A股或港美股市场的“热度偏向”,这个脚本会综合涨跌家数、成交量变化、涨停/跌停数量、板块轮动等指标,来评估当前市场是偏多还是偏空。
你可以将此脚本保存为 .py 文件,并在本地(需要安装 pandas, numpy, akshare)运行。akshare 是免费的开源财经数据接口库。
# -*- coding: utf-8 -*-
"""
综合市场热度偏向分析脚本(适用于A股)
核心逻辑:通过多维度数据加权,判断市场做多/做空情绪。
数据源:AkShare(开源免费)
运行前请安装依赖:pip install akshare pandas numpy
"""
import akshare as ak
import pandas as pd
import numpy as np
from datetime import datetime, timedelta
# --- 1. 获取市场概览数据 ---
def get_market_breadth():
"""
获取全市场涨跌家数(涨跌广度)
Returns: dict with 上涨家数, 下跌家数, 平盘家数, 涨停数, 跌停数
"""
try:
# 获取实时行情快照(包含所有A股)
df = ak.stock_zh_a_spot_em()
# 计算涨跌幅
df['涨跌幅'] = df['涨跌幅'].astype(float)
df['成交额'] = df['成交额'].astype(float)
# 涨停判断(默认为主板10%,创业板/科创板20%,这里简化处理按19.9%以上和9.9%以上)
limit_up = df[df['涨跌幅'] > 9.8] # 粗略统计涨停(含ST股5%和20%的极端情况)
limit_down = df[df['涨跌幅'] < -9.8]
# 严格区分:主板10%,创业板/科创板20%
# 这里简化:将涨幅超过9.9%视为涨停(主要针对主板)
# 如果你需要精确,可以按代码前缀区分,但示例代码保持简洁
up_count = (df['涨跌幅'] > 0).sum()
down_count = (df['涨跌幅'] < 0).sum()
flat_count = (df['涨跌幅'] == 0).sum()
# 计算涨跌比
breadth_ratio = up_count / max(down_count, 1)
return {
"上涨家数": up_count,
"下跌家数": down_count,
"平盘家数": flat_count,
"涨停家数": len(limit_up),
"跌停家数": len(limit_down),
"涨跌比": round(breadth_ratio, 2)
}
except Exception as e:
print(f"获取市场广度数据失败: {e}")
return None
# --- 2. 获取成交额趋势 ---
def get_volume_trend():
"""
获取今日与昨日大盘成交额,比较量能变化
"""
try:
# 获取上证指数历史数据(用于计算昨日成交额,这里简化为直接获取大盘指数)
today = datetime.now().strftime("%Y%m%d")
end_date = datetime.now().strftime("%Y%m%d")
start_date = (datetime.now() - timedelta(days=5)).strftime("%Y%m%d")
# 获取上证指数日线
stock_zh_index_daily = ak.stock_zh_index_daily(symbol="sh000001")
# 最近两天的成交额
recent_2_days = stock_zh_index_daily.tail(2)
if len(recent_2_days) == 2:
today_vol = recent_2_days.iloc[-1]['amount'] # 今日成交额(元)
yesterday_vol = recent_2_days.iloc[-1 - 1]['amount'] # 昨日成交额
vol_change = (today_vol - yesterday_vol) / yesterday_vol * 100
return {
"今日总成交额": round(today_vol / 1e8, 2), # 单位:亿
"昨日成交额": round(yesterday_vol / 1e8, 2),
"成交额变化%": round(vol_change, 2)
}
return None
except Exception as e:
print(f"获取成交额数据失败: {e}")
return None
# --- 3. 获取板块热度(行业板块涨跌幅排行)---
def get_sector_performance(top_n=10):
"""
获取申万一级行业板块涨幅前10名,判断主流资金进攻方向
"""
try:
df = ak.stock_board_industry_name_em()
df = df.sort_values('涨跌幅', ascending=False).head(top_n)
sectors = df[['板块名称', '涨跌幅']].values.tolist()
return sectors
except Exception as e:
print(f"获取板块数据失败: {e}")
return None
# --- 4. 获取资金流向(北向资金 & 大盘主力资金)---
def get_money_flow():
"""
获取北向资金净流入(近期已调整数据接口,需注意可用性)
"""
try:
# 尝试获取沪深港通资金流向(部分接口可能会失效)
north_fund = ak.stock_hsgt_fund_flow_summary_em()
# 只保留北向资金数据(东方财富接口可能不公开实时,这里仅作参考)
# 如果获取失败,返回None
return north_fund[['资金方向', '成交净买额']].to_dict('records')
except:
# 备用:获取大盘主力资金流
try:
df = ak.stock_individual_fund_flow_rank(indicator="quot;)
total_main_net = df['主力净流入-净额'].astype(float).sum() / 1e8 # 亿元
return [{"资金方向": "全市场主力", "成交净买额": round(total_main_net, 2)}]
except:
return None
# --- 5. 综合评估热度偏向 ---
def evaluate_sentiment():
"""
综合所有指标,打分判定市场热度(0-100分,50为中性,>60偏多,<40偏空)
"""
print("正在获取市场实时数据...")
score = 50 # 初始中性
reasons = []
# 1. 涨跌广度评分
breadth = get_market_breadth()
if breadth:
ratio = breadth['涨跌比']
# 涨跌比大于1偏向多头,大于2强势多头,小于0.8偏空
if ratio >= 2:
score += 15
reasons.append(f"涨跌比极高({ratio}),多头氛围浓厚")
elif ratio >= 1.2:
score += 10
reasons.append(f"涨跌比偏强({ratio})")
elif ratio >= 1:
score += 5
reasons.append(f"涨跌比中性偏多({ratio})")
elif ratio < 0.5:
score -= 15
reasons.append(f"涨跌比极低({ratio}),空头主导")
elif ratio < 0.8:
score -= 10
reasons.append(f"涨跌比偏弱({ratio})")
else:
score -= 5
reasons.append(f"涨跌比中性偏空({ratio})")
# 涨停跌停对比
limit_diff = breadth['涨停家数'] - breadth['跌停家数']
if limit_diff > 50:
score += 10
reasons.append(f"涨停({breadth['涨停家数']})远大于跌停({breadth['跌停家数']})")
elif limit_diff > 20:
score += 5
reasons.append(f"涨停({breadth['涨停家数']})> 跌停({breadth['跌停家数']})")
elif limit_diff < -20:
score -= 10
reasons.append(f"跌停({breadth['跌停家数']})远大于涨停({breadth['涨停家数']})")
# 2. 成交量能评分(量增价增是健康,量缩价涨需警惕)
volume = get_volume_trend()
if volume:
vol_change = volume['成交额变化%']
if vol_change > 10:
score += 5
reasons.append(f"成交量放大(+{vol_change}%),资金活跃")
elif vol_change > 0:
score += 3
reasons.append(f"成交量小幅放大(+{vol_change}%)")
elif vol_change < -10:
score -= 5
reasons.append(f"成交量萎缩({vol_change}%),观望情绪重")
elif vol_change < 0:
score -= 2
reasons.append(f"成交量小幅缩量({vol_change}%)")
# 3. 板块联动
sectors = get_sector_performance(5)
if sectors:
# 检查是否有明确的主攻方向(前5名板块平均涨幅)
avg_gain = np.mean([float(x[1]) for x in sectors])
if avg_gain > 3:
score += 8
reasons.append(f"领涨板块涨幅大(平均+{round(avg_gain,2)}%),做多意愿强")
elif avg_gain > 1:
score += 4
reasons.append(f"领涨板块温和上涨(平均+{round(avg_gain,2)}%)")
else:
score -= 2
reasons.append(f"板块轮动弱,无明确主线")
# 4. 资金流向(可选)
# money = get_money_flow()
# if money:
# for m in money:
# if '北向' in m.get('资金方向',''):
# if m['成交净买额'] > 0:
# score += 5
# reasons.append("北向资金净流入")
# else:
# score -= 5
# reasons.append("北向资金净流出")
# 最终得分裁剪
final_score = max(0, min(100, score))
# --- 输出结果 ---
print("\n" + "="*40)
print("📊 市场热度综合评估报告")
print("="*40)
if breadth:
print(f"\n📈 市场广度数据:")
print(f" 上涨: {breadth['上涨家数']} 家 | 下跌: {breadth['下跌家数']} 家 | 平盘: {breadth['平盘家数']} 家")
print(f" 涨停: {breadth['涨停家数']} 家 | 跌停: {breadth['跌停家数']} 家")
print(f" 涨跌比: {breadth['涨跌比']}")
if volume:
print(f"\n💹 量能分析:")
print(f" 今日总成交额: {volume['今日总成交额']} 亿 | 昨日: {volume['昨日成交额']} 亿")
print(f" 量能变化: {volume['成交额变化%']}%")
if sectors:
print(f"\n🔥 板块热点 TOP5:")
for sec in sectors[:5]: # 只展示前5
print(f" {sec[0]}: {sec[1]:.2f}%")
if reasons:
print(f"\n🔍 分析要点:")
for r in reasons:
print(f" • {r}")
print(f"\n⚖️ 综合热度评分:** {final_score} / 100 **")
# 最终偏向判断
if final_score >= 70:
conclusion = "极度亢奋,多头主导风险偏好高,注意高位回调风险"
elif final_score >= 60:
conclusion = "偏强多头,市场热度偏向做多方向,可保持积极但需注意追高风险"
elif final_score >= 45:
conclusion = "中性震荡,多空平衡,建议轻仓观察或做结构性行情"
elif final_score >= 35:
conclusion = "偏弱空头,市场热度偏向防守,建议降低仓位、控制回撤"
else:
conclusion = "极度低迷,恐慌情绪较重,建议观望等待企稳信号"
print(f"\n📌 市场热度偏向:{conclusion}")
print("="*40 + "\n")
if __name__ == "__main__":
evaluate_sentiment()
脚本说明与使用建议:
- 依赖安装:在终端运行
pip install akshare pandas numpy。 - 运行方式:直接运行该脚本,它会实时抓取数据并自动打分。
- 核心逻辑:
- 涨跌广度(涨跌家数比):这是最重要的变量,如果涨停家数多、跌停少,说明赚钱效应好,热度偏多。
- 量能变化:上涨放量是健康的,说明买盘积极;如果缩量上涨,则可能是主力拉高出货。
- 板块效应:如果涨幅靠前的板块具有联动性且涨幅较大(如权重股、题材股齐涨),说明资金有合力进攻的意愿。
- 资金流:北向资金(外资)的动向,历史上是重要的风向标(注:由于数据接口调整,该功能已注释,你可以自行开启尝试)。
重要提示:
- 该脚本提供的是量化参考,不构成投资建议。
- 市场热度并非“买入/卖出”信号,而是帮助判断市场情绪温度,温度极高(>80)反而容易物极必反,温度极低(<20)往往孕育反弹。
- 对于 “当前市场热度偏向” 这种实时问题,建议你直接打开交易软件(如东方财富、同花顺)查看涨跌家数统计和涨停板梯队,这比任何历史数据都更直观。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播