python 获取 美股数据

注册账号 https://massive.com/dashboard/keys

“apiKey”: ‘leZ81KlwHnTGygQVn60pIQ5MmihYzuPyu1 换成你自己的 key’


import requests
import pandas as pd
from dotenv import load_dotenv
import os

# 加载环境变量(.env文件中写入 POLYGON_API_KEY=你的密钥)
load_dotenv()
#API_KEY = os.getenv("POLYGON_API_KEY")
BASE_URL = "https://api.polygon.io/v2/aggs"

def get_kline(ticker, interval="1/day", start_date="2023-01-01", end_date="2023-12-31"):
    """
    获取不同周期K线(修正后支持所有Polygon合法周期)
    :param ticker: 股票代码(如AAPL)
    :param interval: 周期(合法格式:1/minute、5/minute、1/hour、1/day、1/week、1/month、1/quarter、1/year)
    :param start_date: 开始日期(YYYY-MM-DD)
    :param end_date: 结束日期(YYYY-MM-DD)
    :return: DataFrame格式K线数据
    """
    # 验证周期格式(可选,提前规避错误)
    valid_units = ["minute", "hour", "day", "week", "month", "quarter", "year"]
    unit = interval.split("/")[-1]
    if unit not in valid_units:
        raise ValueError(f"无效周期单位!支持的单位:{valid_units}")
    
    url = f"{BASE_URL}/ticker/{ticker}/range/{interval}/{start_date}/{end_date}"
    params = {
        "adjusted": True,  # 复权数据(必开,修正分红/拆股影响)
        "limit": 5000,     # Free Tier单次最多返回5000条
        "apiKey": 'eZ81KlwHnTGygQVn60pIQ5MmihYzuPyu1 换成你自己的 key'
    }
    response = requests.get(url, params=params)
    data = response.json()
    
    if data.get("status") != "OK":
        raise ValueError(f"接口报错:{data.get('error')}")
    
    # 解析数据并格式化
    df = pd.DataFrame(data["results"])
    df.columns = ["时间戳", "开盘价", "最高价", "最低价", "收盘价", "成交量", "成交额", "换手率"]
    df["日期时间"] = pd.to_datetime(df["时间戳"], unit="ms")  # 时间戳转可读格式
    # 筛选常用字段,按时间排序
    df = df[["日期时间", "开盘价", "最高价", "最低价", "收盘价", "成交量", "成交额"]].sort_values("日期时间")
    return df

# ---------------------- 测试不同周期(修正后无报错)----------------------
# 1. 分时数据(1分钟线,2023-01-03当天)
df_minute = get_kline("AAPL", interval="1/minute", start_date="2025-11-03", end_date="2025-12-03")
print("AAPL 2023-01-03 1分钟线(前5条):")
print(df_minute.head())

# 2. 5分钟线(2023-01-03当天)
df_5min = get_kline("AAPL", interval="1/minute", start_date="2025-11-03", end_date="2025-12-03")
print("\nAAPL 2023-01-03 5分钟线(前5条):")
print(df_5min.head())

# 3. 小时线(2023-01-01至2023-01-07)
df_hour = get_kline("AAPL", interval="1/minute", start_date="2025-11-03", end_date="2025-12-03")
print("\nMSFT 2023-01-01至2023-01-07 1小时线(前5条):")
print(df_hour.head())

# 4. 季度线(2020-01-01至2023-12-31)
df_quarter = get_kline("AAPL", interval="1/minute", start_date="2025-11-03", end_date="2025-12-03")
print("\nTSLA 2020-2023年季度线:")
print(df_quarter)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值