import tushare as ts
import pandas as pd
from datetime import datetime, timedelta

def get_historical_data(stock_code, end_date, days):
    """
    获取历史价格数据
    :param stock_code: 股票代码
    :param end_date: 基准日期(YYYYMMDD)
    :param days: 需要获取的天数
    :return: DataFrame包含日期、最高价、最低价、收盘价
    """
    # 初始化tushare
    ts.set_token('YOUR_TUSHARE_TOKEN')  # 需要替换为实际token
    pro = ts.pro_api()
    
    # 转换为datetime对象
    end_date = datetime.strptime(end_date, '%Y%m%d')
    start_date = end_date - timedelta(days=days*2)  # 多取一些数据确保有足够交易日
    
    # 获取前复权数据
    df = ts.pro_bar(
        ts_code=stock_code,
        adj='qfq',
        start_date=start_date.strftime('%Y%m%d'),
        end_date=end_date.strftime('%Y%m%d'),
        freq='D'
    )
    
    # 检查数据是否足够
    if len(df) < days:
        raise ValueError(f"数据不足，只有{len(df)}个交易日数据")
    
    # 处理数据
    df = df.sort_values('trade_date')
    df = df.tail(days)  # 取最后days天的数据
    df = df.rename(columns={
        'trade_date': 'date',
        'high': 'high',
        'low': 'low',
        'close': 'close'
    })
    
    return df[['date', 'high', 'low', 'close']]