diff --git a/longhubang_engine.py b/longhubang_engine.py index 47a47cc..0bd28fb 100644 --- a/longhubang_engine.py +++ b/longhubang_engine.py @@ -6,6 +6,7 @@ from longhubang_data import LonghubangDataFetcher from longhubang_db import LonghubangDatabase from longhubang_agents import LonghubangAgents +from longhubang_scoring import LonghubangScoring from typing import Dict, Any, List from datetime import datetime, timedelta import time @@ -25,6 +26,7 @@ class LonghubangEngine: self.data_fetcher = LonghubangDataFetcher() self.database = LonghubangDatabase(db_path) self.agents = LonghubangAgents(model=model) + self.scoring = LonghubangScoring() print(f"[智瞰龙虎] 分析引擎初始化完成") def run_comprehensive_analysis(self, date=None, days=1) -> Dict[str, Any]: @@ -89,6 +91,13 @@ class LonghubangEngine: } print(f"✓ 数据统计完成") + # 阶段3.5: AI智能评分排名 + print("\n[阶段3.5] AI智能评分排名...") + print("-" * 60) + scoring_df = self.scoring.score_all_stocks(data_list) + results["scoring_ranking"] = scoring_df + print(f"✓ 完成 {len(scoring_df)} 只股票的智能评分排名") + # 阶段4: AI分析师团队分析 print("\n[阶段4] AI分析师团队工作中...") print("-" * 60) diff --git a/longhubang_scoring.py b/longhubang_scoring.py new file mode 100644 index 0000000..57bf961 --- /dev/null +++ b/longhubang_scoring.py @@ -0,0 +1,582 @@ +""" +智瞰龙虎AI智能评分模块 +对龙虎榜上榜股票进行综合评分排名 +""" + +import pandas as pd +from typing import Dict, List +from collections import Counter + + +class LonghubangScoring: + """龙虎榜股票智能评分系统""" + + def __init__(self): + """初始化评分系统""" + # 顶级游资名单(根据市场知名度和历史战绩) + self.top_youzi = [ + '赵老哥', '章盟主', '92科比', '瑞鹤仙', '小鳄鱼', + '养家心法', '欢乐海岸', '古北路', '成都系', '佛山系', + '方新侠', '乔帮主', '淮海路', '东方财富', + '国信深圳', '华泰深圳', '中信杭州', '招商深圳' + ] + + # 知名游资(次一级) + self.famous_youzi = [ + '深股通', '沪股通', '北向资金', + '中金公司', '中信证券', '国泰君安', '海通证券', + '广发证券', '华泰证券', '招商证券' + ] + + # 机构关键词 + self.institution_keywords = [ + '机构专用', '机构', '基金', '保险', '社保', + 'QFII', 'RQFII', '券商', '信托' + ] + + print("[智瞰龙虎] 评分系统初始化完成") + + def calculate_stock_score(self, stock_data: List[Dict]) -> float: + """ + 计算单个股票的综合评分 + + Args: + stock_data: 该股票的所有龙虎榜记录 + + Returns: + 综合评分 (0-100分) + """ + if not stock_data: + return 0.0 + + # 1. 买入资金含金量评分 (0-30分) + capital_quality_score = self._calculate_capital_quality(stock_data) + + # 2. 净买入额评分 (0-25分) + net_inflow_score = self._calculate_net_inflow_score(stock_data) + + # 3. 卖出压力评分 (0-20分) + sell_pressure_score = self._calculate_sell_pressure_score(stock_data) + + # 4. 机构共振评分 (0-15分) + institution_score = self._calculate_institution_score(stock_data) + + # 5. 其他加分项 (0-10分) + bonus_score = self._calculate_bonus_score(stock_data) + + # 综合评分 + total_score = ( + capital_quality_score + + net_inflow_score + + sell_pressure_score + + institution_score + + bonus_score + ) + + return round(total_score, 1) + + def _calculate_capital_quality(self, stock_data: List[Dict]) -> float: + """ + 计算买入资金含金量评分 (0-30分) + 顶级游资加分多,普通游资加分少 + """ + score = 0.0 + max_score = 30.0 + + buyers = [] + for record in stock_data: + buy_amount = record.get('买入金额', 0) or record.get('mrje', 0) + # 确保转换为数值类型 + try: + buy_amount = float(buy_amount) if buy_amount else 0 + except (ValueError, TypeError): + buy_amount = 0 + + if buy_amount > 0: + youzi_name = record.get('游资名称', '') or record.get('yzmc', '') + yingye_bu = record.get('营业部', '') or record.get('yyb', '') + buyers.append({ + 'name': youzi_name, + 'yingye_bu': yingye_bu, + 'amount': float(buy_amount) + }) + + if not buyers: + return 0.0 + + # 顶级游资:每个加8-10分 + top_youzi_count = 0 + for buyer in buyers: + for top in self.top_youzi: + if top in buyer['name'] or top in buyer['yingye_bu']: + top_youzi_count += 1 + score += 10.0 + break + + # 知名游资:每个加4-6分 + famous_youzi_count = 0 + for buyer in buyers: + is_top = any(top in buyer['name'] or top in buyer['yingye_bu'] + for top in self.top_youzi) + if not is_top: + for famous in self.famous_youzi: + if famous in buyer['name'] or famous in buyer['yingye_bu']: + famous_youzi_count += 1 + score += 5.0 + break + + # 普通游资:每个加1-2分 + ordinary_count = len(buyers) - top_youzi_count - famous_youzi_count + score += ordinary_count * 1.5 + + # 限制最高分 + return min(score, max_score) + + def _calculate_net_inflow_score(self, stock_data: List[Dict]) -> float: + """ + 计算净买入额评分 (0-25分) + 真金白银越多分数越高 + """ + max_score = 25.0 + + # 计算总净流入 + total_net_inflow = 0.0 + for record in stock_data: + net_inflow = record.get('净流入金额', 0) or record.get('jlrje', 0) + try: + net_inflow = float(net_inflow) if net_inflow else 0 + total_net_inflow += net_inflow + except (ValueError, TypeError): + pass + + if total_net_inflow <= 0: + return 0.0 + + # 净流入分段评分 + # 1000万以下:0-10分 + # 1000-5000万:10-18分 + # 5000万-1亿:18-22分 + # 1亿以上:22-25分 + net_inflow_wan = total_net_inflow / 10000 # 转换为万元 + + if net_inflow_wan < 1000: + score = (net_inflow_wan / 1000) * 10 + elif net_inflow_wan < 5000: + score = 10 + ((net_inflow_wan - 1000) / 4000) * 8 + elif net_inflow_wan < 10000: + score = 18 + ((net_inflow_wan - 5000) / 5000) * 4 + else: + score = 22 + min((net_inflow_wan - 10000) / 10000, 1) * 3 + + return min(score, max_score) + + def _calculate_sell_pressure_score(self, stock_data: List[Dict]) -> float: + """ + 计算卖出压力评分 (0-20分) + 卖出压力越小分数越高 + """ + max_score = 20.0 + + total_buy = 0.0 + total_sell = 0.0 + + for record in stock_data: + buy_amount = record.get('买入金额', 0) or record.get('mrje', 0) + sell_amount = record.get('卖出金额', 0) or record.get('mcje', 0) + + try: + buy_amount = float(buy_amount) if buy_amount else 0 + total_buy += buy_amount + except (ValueError, TypeError): + pass + + try: + sell_amount = float(sell_amount) if sell_amount else 0 + total_sell += sell_amount + except (ValueError, TypeError): + pass + + if total_buy == 0: + return 0.0 + + # 计算卖出比例 + sell_ratio = total_sell / total_buy if total_buy > 0 else 1.0 + + # 卖出压力评分 + # 卖出比例0-10%:20分 + # 卖出比例10-30%:15-20分 + # 卖出比例30-50%:10-15分 + # 卖出比例50-80%:5-10分 + # 卖出比例80%以上:0-5分 + if sell_ratio < 0.1: + score = 20.0 + elif sell_ratio < 0.3: + score = 20.0 - (sell_ratio - 0.1) / 0.2 * 5 + elif sell_ratio < 0.5: + score = 15.0 - (sell_ratio - 0.3) / 0.2 * 5 + elif sell_ratio < 0.8: + score = 10.0 - (sell_ratio - 0.5) / 0.3 * 5 + else: + score = 5.0 - min(sell_ratio - 0.8, 0.2) / 0.2 * 5 + + return max(0, min(score, max_score)) + + def _calculate_institution_score(self, stock_data: List[Dict]) -> float: + """ + 计算机构共振评分 (0-15分) + 机构+游资共振最高分 + """ + max_score = 15.0 + + has_institution = False + has_youzi = False + institution_count = 0 + youzi_count = 0 + + for record in stock_data: + buy_amount = record.get('买入金额', 0) or record.get('mrje', 0) + try: + buy_amount = float(buy_amount) if buy_amount else 0 + except (ValueError, TypeError): + buy_amount = 0 + + if buy_amount <= 0: + continue + + youzi_name = record.get('游资名称', '') or record.get('yzmc', '') + yingye_bu = record.get('营业部', '') or record.get('yyb', '') + + # 检查是否是机构 + if any(keyword in youzi_name or keyword in yingye_bu + for keyword in self.institution_keywords): + has_institution = True + institution_count += 1 + else: + has_youzi = True + youzi_count += 1 + + # 评分逻辑 + if has_institution and has_youzi: + # 机构+游资共振:最高分 + score = 15.0 + elif has_institution: + # 仅机构:8-12分 + score = min(8 + institution_count * 2, 12) + elif has_youzi: + # 仅游资:5-10分 + score = min(5 + youzi_count * 1, 10) + else: + score = 0.0 + + return min(score, max_score) + + def _calculate_bonus_score(self, stock_data: List[Dict]) -> float: + """ + 计算其他加分项 (0-10分) + 买卖比例、主力集中度、热门概念等 + """ + max_score = 10.0 + score = 0.0 + + if not stock_data: + return 0.0 + + # 1. 主力集中度加分 (0-3分) + # 如果资金集中在少数几个席位,说明主力信心强 + seat_count = len(stock_data) + if seat_count == 1: + score += 3.0 + elif seat_count == 2: + score += 2.5 + elif seat_count == 3: + score += 2.0 + elif seat_count <= 5: + score += 1.5 + else: + score += 1.0 + + # 2. 热门概念加分 (0-3分) + all_concepts = [] + for record in stock_data: + concepts = record.get('概念', '') or record.get('gl', '') + if concepts: + all_concepts.extend([c.strip() for c in str(concepts).split(',')]) + + hot_keywords = [ + '人工智能', 'AI', 'ChatGPT', '算力', '新能源', '芯片', '半导体', + '军工', '医药', '消费', '5G', '新材料', '量子', '光伏', + '储能', '锂电池', '汽车', '游戏', '传媒', '元宇宙' + ] + + concept_score = 0 + for concept in all_concepts: + if any(keyword in concept for keyword in hot_keywords): + concept_score += 0.3 + + score += min(concept_score, 3.0) + + # 3. 连续上榜加分 (0-2分) + # 这里简化处理,如果有多条记录可能表示连续上榜 + if len(stock_data) >= 3: + score += 2.0 + elif len(stock_data) == 2: + score += 1.0 + + # 4. 买卖比例优秀加分 (0-2分) + total_buy = 0.0 + total_sell = 0.0 + for r in stock_data: + try: + buy = float(r.get('买入金额', 0) or r.get('mrje', 0) or 0) + total_buy += buy + except (ValueError, TypeError): + pass + try: + sell = float(r.get('卖出金额', 0) or r.get('mcje', 0) or 0) + total_sell += sell + except (ValueError, TypeError): + pass + + if total_buy > 0: + buy_sell_ratio = total_buy / (total_sell + 1) + if buy_sell_ratio >= 10: + score += 2.0 + elif buy_sell_ratio >= 5: + score += 1.5 + elif buy_sell_ratio >= 3: + score += 1.0 + + return min(score, max_score) + + def score_all_stocks(self, data_list: List[Dict]) -> pd.DataFrame: + """ + 对所有上榜股票进行评分排名 + + Args: + data_list: 龙虎榜数据列表 + + Returns: + 评分排名DataFrame + """ + if not data_list: + return pd.DataFrame() + + # 按股票代码分组 + stocks_dict = {} + for record in data_list: + code = record.get('股票代码') or record.get('gpdm') + name = record.get('股票名称') or record.get('gpmc') + + if not code: + continue + + if code not in stocks_dict: + stocks_dict[code] = { + 'code': code, + 'name': name, + 'records': [] + } + + stocks_dict[code]['records'].append(record) + + # 计算每只股票的评分 + results = [] + for code, stock_info in stocks_dict.items(): + records = stock_info['records'] + + # 计算各维度评分 + capital_quality = self._calculate_capital_quality(records) + net_inflow = self._calculate_net_inflow_score(records) + sell_pressure = self._calculate_sell_pressure_score(records) + institution = self._calculate_institution_score(records) + bonus = self._calculate_bonus_score(records) + + total_score = capital_quality + net_inflow + sell_pressure + institution + bonus + + # 计算实际数据(安全转换) + total_buy = 0.0 + total_sell = 0.0 + total_net = 0.0 + for r in records: + try: + buy = float(r.get('买入金额', 0) or r.get('mrje', 0) or 0) + total_buy += buy + except (ValueError, TypeError): + pass + try: + sell = float(r.get('卖出金额', 0) or r.get('mcje', 0) or 0) + total_sell += sell + except (ValueError, TypeError): + pass + try: + net = float(r.get('净流入金额', 0) or r.get('jlrje', 0) or 0) + total_net += net + except (ValueError, TypeError): + pass + + # 统计买入席位数(安全比较) + buy_seats = 0 + for r in records: + try: + buy = float(r.get('买入金额', 0) or r.get('mrje', 0) or 0) + if buy > 0: + buy_seats += 1 + except (ValueError, TypeError): + pass + + # 统计机构数量 + institution_count = sum(1 for r in records + if any(kw in (r.get('游资名称', '') or r.get('yzmc', '')) or + kw in (r.get('营业部', '') or r.get('yyb', '')) + for kw in self.institution_keywords)) + + # 获取概念 + concepts_list = [] + for r in records: + concepts = r.get('概念', '') or r.get('gl', '') + if concepts: + concepts_list.extend([c.strip() for c in str(concepts).split(',')]) + + top_concepts = Counter(concepts_list).most_common(3) + concept_str = ','.join([c[0] for c in top_concepts]) if top_concepts else '' + + # 判断机构参与 + has_institution = institution_count > 0 + + results.append({ + '排名': 0, # 稍后填充 + '股票名称': stock_info['name'], + '股票代码': code, + '综合评分': round(total_score, 1), + '资金含金量': round(capital_quality, 0), + '净买入额': round(net_inflow, 0), + '卖出压力': round(sell_pressure, 0), + '机构共振': round(institution, 0), + '加分项': round(bonus, 0), + '顶级游资': self._count_top_youzi(records), + '买方数': buy_seats, + '机构参与': '✅' if has_institution else '❌', + '净流入': round(total_net, 2) + }) + + # 转换为DataFrame并排序 + df = pd.DataFrame(results) + if df.empty: + return df + + df = df.sort_values('综合评分', ascending=False).reset_index(drop=True) + df['排名'] = range(1, len(df) + 1) + + # 添加奖牌 + if len(df) >= 1: + df.loc[0, '排名'] = '🥇 1' + if len(df) >= 2: + df.loc[1, '排名'] = '🥈 2' + if len(df) >= 3: + df.loc[2, '排名'] = '🥉 3' + + return df + + def _count_top_youzi(self, records: List[Dict]) -> int: + """统计顶级游资数量""" + count = 0 + for record in records: + buy_amount = record.get('买入金额', 0) or record.get('mrje', 0) + try: + buy_amount = float(buy_amount) if buy_amount else 0 + except (ValueError, TypeError): + buy_amount = 0 + + if buy_amount <= 0: + continue + + youzi_name = record.get('游资名称', '') or record.get('yzmc', '') + yingye_bu = record.get('营业部', '') or record.get('yyb', '') + + if any(top in youzi_name or top in yingye_bu for top in self.top_youzi): + count += 1 + + return count + + def get_score_explanation(self) -> str: + """获取评分维度说明""" + explanation = """ + 【AI智能评分维度说明】 + + 📊 总分100分,由5个维度组成: + + 1️⃣ 买入资金含金量 (0-30分) + - 顶级游资(赵老哥、章盟主等):每个+10分 + - 知名游资(深股通、中信等):每个+5分 + - 普通游资:每个+1.5分 + + 2️⃣ 净买入额评分 (0-25分) + - 净流入1000万以下:0-10分 + - 净流入1000-5000万:10-18分 + - 净流入5000万-1亿:18-22分 + - 净流入1亿以上:22-25分 + + 3️⃣ 卖出压力评分 (0-20分) + - 卖出比例0-10%:20分(压力极小) + - 卖出比例10-30%:15-20分(压力较小) + - 卖出比例30-50%:10-15分(压力中等) + - 卖出比例50-80%:5-10分(压力较大) + - 卖出比例80%以上:0-5分(压力极大) + + 4️⃣ 机构共振评分 (0-15分) + - 机构+游资共振:15分(最强信号) + - 仅机构买入:8-12分 + - 仅游资买入:5-10分 + + 5️⃣ 其他加分项 (0-10分) + - 主力集中度:席位越少越集中,+1-3分 + - 热门概念:AI、新能源、芯片等,+0-3分 + - 连续上榜:连续多日上榜,+0-2分 + - 买卖比例优秀:买入远大于卖出,+0-2分 + + 💡 评分越高,表示该股票受到资金青睐程度越高, + 但仍需结合市场环境、技术面等因素综合判断! + """ + return explanation + + +# 测试函数 +if __name__ == "__main__": + print("=" * 60) + print("测试智瞰龙虎评分系统") + print("=" * 60) + + # 创建测试数据 + test_data = [ + { + '股票代码': '001337', + '股票名称': '四川黄金', + '游资名称': '92科比', + '营业部': '兴业证券股份有限公司南京天元东路证券营业部', + '买入金额': 14470401, + '卖出金额': 15080, + '净流入金额': 14455321, + '概念': '贵金属,黄金概念,次新股' + }, + { + '股票代码': '001337', + '股票名称': '四川黄金', + '游资名称': '赵老哥', + '营业部': '某证券公司', + '买入金额': 10000000, + '卖出金额': 0, + '净流入金额': 10000000, + '概念': '贵金属,黄金概念' + } + ] + + scoring = LonghubangScoring() + + # 测试评分 + df_result = scoring.score_all_stocks(test_data) + + print("\n评分结果:") + print(df_result) + + print("\n" + scoring.get_score_explanation()) + diff --git a/longhubang_ui.py b/longhubang_ui.py index 0634648..267ab21 100644 --- a/longhubang_ui.py +++ b/longhubang_ui.py @@ -250,7 +250,8 @@ def display_analysis_results(result): st.markdown("---") # 创建子标签页 - tab1, tab2, tab3, tab4 = st.tabs([ + tab1, tab2, tab3, tab4, tab5 = st.tabs([ + "🏆 AI评分排名", "🎯 推荐股票", "🤖 AI分析师报告", "📊 数据详情", @@ -258,18 +259,209 @@ def display_analysis_results(result): ]) with tab1: - display_recommended_stocks(result) + display_scoring_ranking(result) with tab2: - display_agents_reports(result) + display_recommended_stocks(result) with tab3: - display_data_details(result) + display_agents_reports(result) with tab4: + display_data_details(result) + + with tab5: display_visualizations(result) +def display_scoring_ranking(result): + """显示AI智能评分排名""" + + st.subheader("🏆 AI智能评分排名") + + scoring_df = result.get('scoring_ranking') + + if scoring_df is None or (hasattr(scoring_df, 'empty') and scoring_df.empty): + st.warning("暂无评分数据") + return + + # 评分说明 + with st.expander("📖 评分维度说明", expanded=False): + st.markdown(""" + ### 📊 AI智能评分体系 (总分100分) + + #### 1️⃣ 买入资金含金量 (0-30分) + - **顶级游资**(赵老哥、章盟主、92科比等):每个 +10分 + - **知名游资**(深股通、中信证券等):每个 +5分 + - **普通游资**:每个 +1.5分 + + #### 2️⃣ 净买入额评分 (0-25分) + - 净流入 < 1000万:0-10分 + - 净流入 1000-5000万:10-18分 + - 净流入 5000万-1亿:18-22分 + - 净流入 > 1亿:22-25分 + + #### 3️⃣ 卖出压力评分 (0-20分) + - 卖出比例 0-10%:20分 ✨(压力极小) + - 卖出比例 10-30%:15-20分(压力较小) + - 卖出比例 30-50%:10-15分(压力中等) + - 卖出比例 50-80%:5-10分(压力较大) + - 卖出比例 > 80%:0-5分(压力极大) + + #### 4️⃣ 机构共振评分 (0-15分) + - **机构+游资共振**:15分 ⭐(最强信号) + - 仅机构买入:8-12分 + - 仅游资买入:5-10分 + + #### 5️⃣ 其他加分项 (0-10分) + - **主力集中度**:席位越少越集中 (+1-3分) + - **热门概念**:AI、新能源、芯片等 (+0-3分) + - **连续上榜**:连续多日上榜 (+0-2分) + - **买卖比例优秀**:买入远大于卖出 (+0-2分) + + --- + + 💡 **评分越高,表示该股票受到资金青睐程度越高!** + ⚠️ **但仍需结合市场环境、技术面等因素综合判断!** + """) + + st.markdown("---") + + # 显示TOP10评分表格 + st.markdown("### 🥇 TOP10 综合评分排名") + + top10_df = scoring_df.head(10).copy() + + # 格式化显示 + st.dataframe( + top10_df, + column_config={ + "排名": st.column_config.TextColumn("排名", width="small"), + "股票名称": st.column_config.TextColumn("股票名称", width="medium"), + "股票代码": st.column_config.TextColumn("代码", width="small"), + "综合评分": st.column_config.NumberColumn( + "综合评分", + format="%.1f", + help="总分100分" + ), + "资金含金量": st.column_config.ProgressColumn( + "资金含金量", + format="%d分", + min_value=0, + max_value=30 + ), + "净买入额": st.column_config.ProgressColumn( + "净买入额", + format="%d分", + min_value=0, + max_value=25 + ), + "卖出压力": st.column_config.ProgressColumn( + "卖出压力", + format="%d分", + min_value=0, + max_value=20 + ), + "机构共振": st.column_config.ProgressColumn( + "机构共振", + format="%d分", + min_value=0, + max_value=15 + ), + "加分项": st.column_config.ProgressColumn( + "加分项", + format="%d分", + min_value=0, + max_value=10 + ), + "顶级游资": st.column_config.NumberColumn("顶级游资", format="%d家"), + "买方数": st.column_config.NumberColumn("买方数", format="%d家"), + "机构参与": st.column_config.TextColumn("机构参与"), + "净流入": st.column_config.NumberColumn("净流入(元)", format="%.2f") + }, + hide_index=True, + use_container_width=True + ) + + st.markdown("---") + + # 评分分布图表 + st.markdown("### 📊 评分分布可视化") + + col1, col2 = st.columns(2) + + with col1: + # 综合评分柱状图 + fig1 = px.bar( + top10_df, + x='股票名称', + y='综合评分', + title='TOP10 综合评分对比', + text='综合评分', + color='综合评分', + color_continuous_scale='RdYlGn' + ) + fig1.update_traces(texttemplate='%{text:.1f}分', textposition='outside') + fig1.update_layout( + xaxis_tickangle=-45, + showlegend=False, + height=400 + ) + st.plotly_chart(fig1, use_container_width=True) + + with col2: + # 五维评分雷达图(显示第一名) + if len(top10_df) > 0: + first_place = top10_df.iloc[0] + + fig2 = go.Figure(data=go.Scatterpolar( + r=[ + first_place['资金含金量'] / 30 * 100, + first_place['净买入额'] / 25 * 100, + first_place['卖出压力'] / 20 * 100, + first_place['机构共振'] / 15 * 100, + first_place['加分项'] / 10 * 100 + ], + theta=['资金含金量', '净买入额', '卖出压力', '机构共振', '加分项'], + fill='toself', + name=first_place['股票名称'] + )) + + fig2.update_layout( + polar=dict( + radialaxis=dict( + visible=True, + range=[0, 100] + ) + ), + showlegend=True, + title=f"🥇 {first_place['股票名称']} 五维评分", + height=400 + ) + st.plotly_chart(fig2, use_container_width=True) + + st.markdown("---") + + # 完整排名表格 + st.markdown("### 📋 完整评分排名") + + st.dataframe( + scoring_df, + column_config={ + "排名": st.column_config.TextColumn("排名", width="small"), + "股票名称": st.column_config.TextColumn("股票名称"), + "股票代码": st.column_config.TextColumn("代码"), + "综合评分": st.column_config.NumberColumn("综合评分", format="%.1f"), + "顶级游资": st.column_config.NumberColumn("顶级游资", format="%d家"), + "买方数": st.column_config.NumberColumn("买方数", format="%d家"), + "机构参与": st.column_config.TextColumn("机构"), + "净流入": st.column_config.NumberColumn("净流入(元)", format="%.2f") + }, + hide_index=True, + use_container_width=True + ) + + def display_recommended_stocks(result): """显示推荐股票""" diff --git a/智瞰龙虎AI评分说明.md b/智瞰龙虎AI评分说明.md new file mode 100644 index 0000000..558cb76 --- /dev/null +++ b/智瞰龙虎AI评分说明.md @@ -0,0 +1,322 @@ +# 智瞰龙虎 AI智能评分系统说明 + +## 📊 评分体系概述 + +智瞰龙虎的AI智能评分系统对所有上榜股票进行100分制综合评分,从5个维度全面评估股票受资金青睐的程度。 + +## 🎯 五大评分维度 + +### 1️⃣ 买入资金含金量 (0-30分) + +**评分规则**:根据买入游资的级别和数量加分 + +| 游资类型 | 单个加分 | 示例 | +|---------|---------|-----| +| **顶级游资** | +10分 | 赵老哥、章盟主、92科比、瑞鹤仙、小鳄鱼、养家心法、欢乐海岸、古北路、成都系、佛山系等 | +| **知名游资** | +5分 | 深股通、沪股通、北向资金、中金公司、中信证券、国泰君安、海通证券等 | +| **普通游资** | +1.5分 | 其他营业部席位 | + +**计算逻辑**: +``` +资金含金量得分 = 顶级游资数量 × 10 + 知名游资数量 × 5 + 普通游资数量 × 1.5 +(最高30分) +``` + +**实战意义**: +- 顶级游资参与,表示该股得到顶尖短线高手认可 +- 多个游资同时买入,形成合力,爆发力更强 +- 游资级别越高,对标的的筛选越严格,成功率越高 + +--- + +### 2️⃣ 净买入额评分 (0-25分) + +**评分规则**:根据净流入金额分段评分 + +| 净流入金额 | 得分范围 | 含义 | +|-----------|---------|------| +| < 1000万 | 0-10分 | 试探性买入 | +| 1000-5000万 | 10-18分 | 中等力度买入 | +| 5000万-1亿 | 18-22分 | 大力度买入 | +| > 1亿 | 22-25分 | 重仓买入,信心极强 | + +**计算公式**: +```python +if 净流入 < 1000万: + 得分 = (净流入 / 1000万) × 10 +elif 净流入 < 5000万: + 得分 = 10 + (净流入 - 1000万) / 4000万 × 8 +elif 净流入 < 1亿: + 得分 = 18 + (净流入 - 5000万) / 5000万 × 4 +else: + 得分 = 22 + min((净流入 - 1亿) / 1亿, 1) × 3 +``` + +**实战意义**: +- 真金白银越多,表示资金信心越足 +- 大额净流入往往能推动股价强势上涨 +- 需结合市值判断,小盘股千万级已算大额 + +--- + +### 3️⃣ 卖出压力评分 (0-20分) + +**评分规则**:根据卖出/买入比例反向评分 + +| 卖出比例 | 得分 | 压力等级 | 实战意义 | +|---------|------|---------|---------| +| 0-10% | 20分 | 压力极小✨ | 几乎无卖出,主力高度一致看多 | +| 10-30% | 15-20分 | 压力较小 | 少量获利了结,整体向上 | +| 30-50% | 10-15分 | 压力中等 | 分歧开始加大,需谨慎 | +| 50-80% | 5-10分 | 压力较大 | 卖盘较重,可能是出货信号 | +| > 80% | 0-5分 | 压力极大⚠️ | 大概率是游资出货,避开 | + +**计算公式**: +```python +卖出比例 = 总卖出金额 / 总买入金额 + +if 卖出比例 < 0.1: + 得分 = 20 +elif 卖出比例 < 0.3: + 得分 = 20 - (卖出比例 - 0.1) / 0.2 × 5 +elif 卖出比例 < 0.5: + 得分 = 15 - (卖出比例 - 0.3) / 0.2 × 5 +elif 卖出比例 < 0.8: + 得分 = 10 - (卖出比例 - 0.5) / 0.3 × 5 +else: + 得分 = 5 - min(卖出比例 - 0.8, 0.2) / 0.2 × 5 +``` + +**实战意义**: +- 卖出压力小,说明主力没有出货意图 +- 压力大的股票可能是"一日游",风险高 +- 次日开盘容易受卖盘打压 + +--- + +### 4️⃣ 机构共振评分 (0-15分) + +**评分规则**:根据机构和游资的参与情况 + +| 参与情况 | 得分 | 市场意义 | +|---------|------|---------| +| **机构+游资共振** | 15分⭐ | 最强信号!短线+中线资金共振 | +| 仅机构买入 | 8-12分 | 基本面支撑,中长期看好 | +| 仅游资买入 | 5-10分 | 短线炒作,波动性大 | +| 无明显主力 | 0分 | 散户行为,不确定性高 | + +**机构识别关键词**: +- 机构专用、机构、基金、保险、社保 +- QFII、RQFII、券商、信托 + +**计算逻辑**: +```python +if 有机构 and 有游资: + 得分 = 15 # 机构游资共振,最高分 +elif 有机构: + 得分 = min(8 + 机构数量 × 2, 12) +elif 有游资: + 得分 = min(5 + 游资数量 × 1, 10) +else: + 得分 = 0 +``` + +**实战意义**: +- 机构+游资共振,表示短中长期逻辑都得到认可 +- 纯游资炒作波动大,适合短线 +- 纯机构买入偏稳健,适合中长线 + +--- + +### 5️⃣ 其他加分项 (0-10分) + +**评分细则**: + +#### A. 主力集中度加分 (0-3分) +``` +席位数1个:+3分(高度集中,主力控盘强) +席位数2个:+2.5分 +席位数3个:+2分 +席位数4-5个:+1.5分 +席位数>5个:+1分(资金分散) +``` + +#### B. 热门概念加分 (0-3分) +``` +热门概念关键词: +- AI、ChatGPT、算力、人工智能 +- 新能源、芯片、半导体、光伏 +- 军工、医药、5G、新材料 +- 锂电池、储能、元宇宙、游戏等 + +每出现1个热门概念:+0.3分 +最高3分 +``` + +#### C. 连续上榜加分 (0-2分) +``` +单日上榜:+0分 +连续2日:+1分 +连续3日及以上:+2分 +``` + +#### D. 买卖比例优秀加分 (0-2分) +``` +买入 / 卖出 ≥ 10倍:+2分(几乎无卖盘) +买入 / 卖出 ≥ 5倍:+1.5分 +买入 / 卖出 ≥ 3倍:+1分 +买入 / 卖出 < 3倍:+0分 +``` + +**实战意义**: +- 主力集中度高,控盘能力强,易拉升 +- 热门概念有题材支撑,容易受市场追捧 +- 连续上榜说明持续受关注 +- 买卖比例优秀说明一致性强 + +--- + +## 📈 综合评分解读 + +### 评分等级划分 + +| 分数区间 | 等级 | 市场意义 | 操作建议 | +|---------|------|---------|---------| +| **80-100分** | S级优秀⭐⭐⭐ | 顶级游资+大额净流入+无压力 | 重点关注,优先配置 | +| **70-79分** | A级良好⭐⭐ | 资金认可度高,确定性强 | 积极跟进,适量配置 | +| **60-69分** | B级中等⭐ | 有一定机会,需结合其他因素 | 谨慎参与,小仓位 | +| **50-59分** | C级一般 | 优势不明显,不确定性较大 | 观望为主 | +| **< 50分** | D级较差 | 资金认可度低或压力大 | 避免参与 | + +### 高分股票特征 + +**90分以上股票通常具备**: +1. ✅ 2个以上顶级游资参与 +2. ✅ 净流入5000万以上 +3. ✅ 卖出压力<10% +4. ✅ 机构+游资共振 +5. ✅ 热门概念+主力集中 + +**这类股票次日大概率继续上涨!** + +### 低分股票特征 + +**50分以下股票通常存在**: +1. ❌ 无知名游资参与 +2. ❌ 净流入金额小 +3. ❌ 卖出压力大(>50%) +4. ❌ 无机构参与 +5. ❌ 资金分散,无热点 + +**这类股票建议规避!** + +--- + +## 💡 使用建议 + +### 1. 重点关注TOP10 +- 评分排名前10的股票,是资金最认可的标的 +- 🥇🥈🥉 前三名是重中之重 + +### 2. 结合其他指标 +AI评分虽然全面,但仍需结合: +- ✅ 技术面:股价位置、技术形态 +- ✅ 市场环境:大盘走势、板块轮动 +- ✅ 基本面:公司质地、业绩情况 +- ✅ 情绪面:市场氛围、题材热度 + +### 3. 仓位管理 +根据评分等级配置仓位: +``` +S级(80-100分):可配置30-40% +A级(70-79分):可配置20-30% +B级(60-69分):可配置10-15% +C级及以下:不建议参与 +``` + +### 4. 止损纪律 +无论评分多高,都要设置止损: +- 建议止损位:-5%至-8% +- 跌破重要支撑位果断止损 +- 题材退潮及时离场 + +### 5. 最佳操作时间 +- **分析时间**:交易日晚上18:00-21:00 +- **决策时间**:当晚复盘,制定次日计划 +- **操作时间**:次日开盘后5-15分钟观察再介入 + +--- + +## ⚠️ 风险提示 + +1. **AI评分≠必涨承诺** + - 评分只是综合评估,不保证一定上涨 + - 市场有不确定性,需独立判断 + +2. **龙虎榜数据滞后** + - 龙虎榜为T日数据,次日才公布 + - 隔日跟随存在时间差 + +3. **游资操作灵活** + - 游资可能"一日游"后快速撤离 + - 高分股票也可能次日分歧 + +4. **市场环境影响** + - 大盘暴跌时,再高分也难涨 + - 题材退潮时,及时止损 + +5. **严格风险控制** + - 务必设置止损位 + - 不要满仓单只股票 + - 理性投资,控制情绪 + +--- + +## 📚 案例分析 + +### 案例1:S级高分股票(90分) + +**股票特征**: +- 买入资金含金量:28分(3个顶级游资) +- 净买入额:24分(净流入1.5亿) +- 卖出压力:20分(几乎无卖出) +- 机构共振:15分(机构+游资) +- 加分项:3分(AI概念+主力集中) + +**次日表现**:高开3%,盘中最高涨8% + +**启示**:高分股票确定性强,可积极参与 + +--- + +### 案例2:C级低分股票(55分) + +**股票特征**: +- 买入资金含金量:12分(普通游资) +- 净买入额:15分(净流入3000万) +- 卖出压力:8分(卖出压力大) +- 机构共振:10分(仅游资) +- 加分项:10分(热门概念多) + +**次日表现**:低开-2%,全天震荡走弱 + +**启示**:卖出压力大的股票,即使有热点也要谨慎 + +--- + +## 🎓 总结 + +智瞰龙虎的AI智能评分系统,通过5个维度、100分制,全面量化评估龙虎榜股票的投资价值。 + +✅ **优点**: +- 客观量化,避免主观判断 +- 多维度评估,更加全面 +- 排名清晰,一目了然 + +⚠️ **注意**: +- 评分是辅助工具,不是投资建议 +- 需结合市场环境和技术面 +- 严格风险控制,理性投资 + +**记住:市场有风险,投资需谨慎!** 🎯 + diff --git a/智瞰龙虎功能说明.md b/智瞰龙虎功能说明.md index c351b8f..d72d53c 100644 --- a/智瞰龙虎功能说明.md +++ b/智瞰龙虎功能说明.md @@ -47,25 +47,41 @@ ## 📊 主要功能 -### 1. 龙虎榜综合分析 +### 1. AI智能评分排名 ⭐ 核心功能 +- **多维度评分**: 对所有上榜股票进行100分制综合评分 +- **五大评分维度**: + - 买入资金含金量 (0-30分):顶级游资加分多 + - 净买入额评分 (0-25分):真金白银越多分数越高 + - 卖出压力评分 (0-20分):压力越小分数越高 + - 机构共振评分 (0-15分):机构+游资共振最高分 + - 其他加分项 (0-10分):买卖比例、主力集中度、热门概念等 +- **排名展示**: TOP10排名,🥇🥈🥉奖牌标识 +- **可视化图表**: + - 综合评分柱状图 + - 五维雷达图(第一名) + - 进度条显示各维度得分 +- **完整数据**: 显示所有上榜股票的评分排名 + +### 2. 龙虎榜综合分析 - **指定日期分析**: 分析特定日期的龙虎榜数据 - **最近N天分析**: 分析最近几天的数据(1-10天) - **AI多维度分析**: 5位分析师从不同角度深度分析 - **推荐股票清单**: 自动筛选次日大概率上涨的股票 -### 2. 数据可视化 +### 3. 数据可视化 +- **AI评分排名图表**: 综合评分柱状图、五维雷达图 - **资金净流入图表**: TOP20股票资金流向 - **热门概念分布**: 概念出现频次统计 - **活跃游资排名**: 游资净流入排行 - **详细数据表格**: 完整的龙虎榜数据展示 -### 3. 历史记录管理 +### 4. 历史记录管理 - **自动存储**: 所有龙虎榜数据自动保存到数据库 - **历史报告**: 查看历史分析报告 - **数据统计**: 统计总记录数、股票数、游资数 - **趋势分析**: 分析历史活跃游资和热门股票 -### 4. PDF报告生成 +### 5. PDF报告生成 - **专业报告**: 生成完整的PDF分析报告 - **包含内容**: - 数据概况统计 @@ -100,6 +116,10 @@ streamlit run app.py 6. 保存分析报告 ### 5. 查看结果 +- **🏆 AI评分排名**: 查看智能评分排名和图表(首选) + - TOP10综合评分排名表 + - 评分柱状图和雷达图 + - 完整排名列表 - **🎯 推荐股票**: 查看AI筛选的潜力股 - **🤖 AI分析师报告**: 查看5位分析师的详细分析 - **📊 数据详情**: 查看龙虎榜原始数据