雅虎财经Python如何获取股票期货数据

发布时间:2026-09-14 15:07阅读:8575评论:0

雅虎财经Python库安装与基础配置

雅虎财经提供免费金融数据接口,Python生态中最常用的库是yfinance。通过pip安装:


pip install yfinance pandas

安装完成后,导入库并创建Ticker对象即可获取股票或期货数据。雅虎财经的期货代码通常带有后缀,如原油期货CL=F,黄金期货GC=F,标普500指数期货ES=F。


import yfinance as yf

# 获取苹果股票数据

apple = yf.Ticker("AAPL")

# 获取原油期货数据

crude_oil = yf.Ticker("CL=F")

获取股票与期货历史K线数据

yfinance的history方法支持日线、周线、月线、分钟级数据。参数period控制时间范围,interval控制K线周期。


# 获取特斯拉股票最近一年的日线数据

tsla = yf.Ticker("TSLA")

df = tsla.history(period="1y", interval="1d")

print(df.head())

# 获取黄金期货最近5天的分钟级数据

gold = yf.Ticker("GC=F")

df_min = gold.history(period="5d", interval="1m")

print(df_min.tail())

返回的DataFrame包含Open、High、Low、Close、Volume、Dividends、Stock Splits列。期货数据无Dividends和Stock Splits列。

雅虎财经Python如何获取股票期货数据

获取多只股票或期货数据可使用download函数:


tickers = ["AAPL", "MSFT", "CL=F", "GC=F"]

data = yf.download(tickers, start="2023-01-01", end="2023-12-31", group_by="ticker")

print(data["AAPL"].head())

实时行情与期权数据

yfinance提供fast_info属性获取实时价格、市值、成交量等。期货实时数据延迟约15分钟。


# 获取苹果股票实时信息

info = apple.fast_info

print(info["lastPrice"])

print(info["marketCap"])

# 获取原油期货实时价格

print(crude_oil.fast_info["lastPrice"])

期权数据通过option_chain方法获取,需指定到期日。期货期权需使用期货代码,部分合约支持有限。


# 获取苹果股票期权链

options = apple.option_chain("2024-12-20")

print(options.calls.head())

print(options.puts.head())

财务指标与基本面数据

股票可通过info属性获取市盈率、每股收益、股息率等。期货无财务指标,但可获取持仓量、结算价。


# 股票财务指标

print(apple.info["trailingPE"])

print(apple.info["dividendYield"])

# 期货持仓量

print(crude_oil.info.get("openInterest"))

季度财务报表可通过quarterly_income_stmt、quarterly_balance_sheet获取。


income = apple.quarterly_income_stmt

print(income.loc["Total Revenue"])

期货连续合约与展期处理

雅虎财经期货代码对应特定到期合约,连续合约需拼接。使用yfinance获取多个到期合约,按成交量或持仓量选择主力合约。


import pandas as pd

# 获取不同到期月份的原油期货

contracts = ["CL=F", "CLG24.NYM", "CLJ24.NYM", "CLK24.NYM"]

data = {}

for c in contracts:

    try:

        data[c] = yf.Ticker(c).history(period="1mo")

    except:

        pass

# 拼接连续合约

continuous = pd.concat(data.values()).sort_index()

print(continuous.head())

展期时注意价格跳跃,可使用复权价格或价差调整。

量化策略回测数据准备

将雅虎财经数据导入回测框架前需清洗:处理缺失值、对齐时间戳、计算收益率。


import numpy as np

# 获取股票数据

stock = yf.download("SPY", start="2020-01-01", end="2023-12-31")

# 计算日收益率

stock["Return"] = stock["Close"].pct_change()

# 计算20日移动平均

stock["MA20"] = stock["Close"].rolling(20).mean()

# 生成交易信号

stock["Signal"] = np.where(stock["Close"] > stock["MA20"], 1, 0)

print(stock.tail())

期货策略需注意保证金、杠杆、交割日。雅虎财经数据适合日线级别回测,分钟级数据有限且延迟。

常见问题与数据限制

雅虎财经免费接口有频率限制,频繁请求可能被封IP。建议添加间隔或使用缓存。历史分钟数据仅保留最近30天。期货数据部分合约不完整,需交叉验证。


import time

# 批量获取数据时添加延迟

for ticker in ["AAPL", "MSFT", "GOOG"]:

    df = yf.Ticker(ticker).history(period="1mo")

    time.sleep(1)

数据准确性方面,雅虎财经偶有错误,实盘交易前需与交易所数据核对。股票拆股和分红自动调整,期货无复权。

替代方案与进阶工具

yfinance之外,pandas_datareader支持雅虎财经旧接口但已失效。alpha_vantage提供更稳定期货数据,需API key。IBKR TWS API可获取实时期货行情,适合自动化交易。


# alpha_vantage示例

from alpha_vantage.timeseries import TimeSeries

ts = TimeSeries(key="YOUR_KEY")

data, meta = ts.get_daily("AAPL")

量化交易中,雅虎财经数据用于策略原型验证,实盘需付费数据源。结合backtrader或zipline可快速回测。


import backtrader as bt

class SmaCross(bt.Strategy):

    params = dict(period=20)

    def __init__(self):

        self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=self.params.period)

    def next(self):

        if self.data.close[0] > self.sma[0] and not self.position:

            self.buy()

        elif self.data.close[0] < self.sma[0] and self.position:

            self.sell()

cerebro = bt.Cerebro()

data = bt.feeds.PandasData(dataname=stock)

cerebro.adddata(data)

cerebro.addstrategy(SmaCross)

cerebro.run()

以上代码展示了从雅虎财经获取数据到简单回测的完整流程。期货交易需额外处理合约乘数和保证金。

上一篇美股可以买跌吗 股票期货市场做空机制如何操作新客理财开户后如何投资股票期货?下一篇
联系管理员
联系管理员