PYTHON获取涨停板数据并获取当日的总成交额绘制成图

import akshare as ak
import pandas as pd
import matplotlib.pyplot as plt
from datetime import datetime, timedelta
from matplotlib import rcParams

# 设置中文字体
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei']
plt.rcParams['axes.unicode_minus'] = False

def get_limit_up_data(days=30):
    """获取最近N天的涨停板数据"""
    end_date = datetime.now().strftime('%Y%m%d')
    start_date = (datetime.now() - timedelta(days=days)).strftime('%Y%m%d')
    
    # 获取每日涨停板数据
    limit_data = pd.DataFrame()
    date_range = pd.date_range(start=start_date, end=end_date)
    
    for date in date_range:
        date_str = date.strftime('%Y%m%d')
        try:
            daily_data = ak.stock_zt_pool_em(date=date_str)
            if not daily_data.empty:
                daily_data['日期'] = date_str
                limit_data = pd.concat([limit_data, daily_data])
        except Exception as e:
            print(f"获取{date_str}涨停数据失败: {e}")
            continue
    
    return limit_data

def analyze_limit_up(limit_data):
    """分析涨停板数据"""
    if limit_data.empty:
        return pd.DataFrame()
    
    # 按日期统计
    daily_stats = limit_data.groupby('日期').agg({
        '代码': 'count',  # 涨停数量
        '成交额': 'sum'   # 涨停总成交额
    }).rename(columns={'代码': '涨停数量', '成交额': '涨停总成交额'})
    
    return daily_stats

def plot_limit_up(stats_data):
    """绘制涨停板统计图表"""
    if stats_data.empty:
        print("无有效数据可绘制")
        return
    
    plt.figure(figsize=(15, 8))
    
    # 涨停数量图表
    plt.subplot(2, 1, 1)
    plt.bar(stats_data.index, stats_data['涨停数量'], color='red', alpha=0.6)
    plt.title('每日涨停数量', fontsize=14)
    plt.ylabel('数量', fontsize=12)
    plt.grid(True, axis='y', linestyle='--', alpha=0.6)
    
    # 涨停总成交额图表
    plt.subplot(2, 1, 2)
    plt.bar(stats_data.index, stats_data['涨停总成交额']/1e8, color='green', alpha=0.6)
    plt.title('每日涨停总成交额', fontsize=14)
    plt.ylabel('成交额(亿元)', fontsize=12)
    plt.grid(True, axis='y', linestyle='--', alpha=0.6)
    
    plt.tight_layout()
    plt.savefig('limit_up_stats.png', dpi=300, bbox_inches='tight')
    plt.show()

if __name__ == '__main__':
    # 获取最近30天涨停板数据
    limit_data = get_limit_up_data(days=200)
    
    if not limit_data.empty:
        # 分析数据
        stats = analyze_limit_up(limit_data)
        
        # 绘制图表
        plot_limit_up(stats)
    else:
        print("未能获取涨停板数据,请检查网络连接或数据源")

 

 

posted @ 2025-04-14 20:16  嗷嗷鹿鸣[VX|dshoub]  阅读(134)  评论(1)    收藏  举报