使用免费开源库 (Python - 最常用、最灵活)
对于大多数开发者和量化爱好者来说,使用 Python 是最推荐的方式,它免费、强大且拥有丰富的数据处理库。
推荐库:akshare
akshare 是一个专门针对中国金融市场的开源数据接口库,数据源可靠,更新及时,是获取国内期货数据的绝佳选择。
安装 akshare
pip install akshare
获取所有商品期货代码 在下载日线数据前,通常需要先获取所有可交易的期货合约代码。
import akshare as ak # 获取所有期货合约的基本信息,包括代码 # 注意:这个接口返回的是所有品种的主力合约和连续合约 # 如果你需要特定交易所、特定品种的所有合约,需要用其他接口 # 这里我们以获取商品期货列表为例 # futures_main_sina_df = ak.futures_main_sina() # 新浪财经的主力合约 # futures_main_sina_df 的列名通常是: 'symbol', 'name', 'price', 'change', 'change_percent' # 更推荐使用 ak 的期货列表接口 # 获取国内期货交易所列表和品种信息 futures_exchange_df = ak.futures_exchange_info() print(futures_exchange_df.head()) # 获取特定品种的合约列表,例如螺纹钢 # hb_contracts = ak.futures_main_sina(symbol="rb") # 获取螺纹钢主力合约 # print(hb_contracts)
下载单个期货合约的日线数据 以螺纹钢(RB)的主力合约为例。
import akshare as ak
import pandas as pd
# 下载螺纹钢主力合约的日线数据
# symbol 的格式通常是 "交易所代码+品种代码","SHFE.rb" (上期所螺纹钢)
# 或者直接用品种代码,akshare 会自动识别主力合约
# 这里我们使用 'rb' 作为 symbol
symbol = "rb"
df = ak.futures_zh_daily_sina(symbol=symbol)
# 查看数据
print(df.head())
print(df.tail())
# 保存数据到 CSV 文件
df.to_csv(f"{symbol}_daily.csv", index=True, encoding='utf-8-sig')
print(f"数据已保存到 {symbol}_daily.csv")
下载多个期货品种的日线数据 我们可以通过循环来批量下载多个品种的数据。
import akshare as ak
import time
# 定义你感兴趣的期货品种列表 (通常是品种代码)
symbols = ["rb", "hc", "i", "j", "jm", "铁矿", "焦煤", "焦炭", "cu", "al", "zn", "pb", "ni", "sn", "au", "ag", "fu", "bu", "sp", "nr", "ru", "l", "pp", "ma", "vc", "eg", "ta", "me", "cf", "sr", "rm", "oi", "ap", "cj", "cs", "a", "m", "y", "p", "c", "jd", "lh", "dd", "fg", "sa", "ba", "oi", "pk", "nr", "lg"] # 这只是一个示例列表,你可以自行添加
for symbol in symbols:
try:
print(f"正在下载 {symbol} 的日线数据...")
df = ak.futures_zh_daily_sina(symbol=symbol)
# 重命名列,使其更规范
df.rename(columns={
'open': 'Open',
'high': 'High',
'low': 'Low',
'close': 'Close',
'volume': 'Volume',
'open_oi': 'OpenInterest',
'datetime': 'Date'
}, inplace=True)
# 确保日期列是 datetime 类型
df['Date'] = pd.to_datetime(df['Date'])
df.set_index('Date', inplace=True)
# 保存数据
filename = f"data/{symbol}_daily.csv"
df.to_csv(filename, encoding='utf-8-sig')
print(f"{symbol} 数据下载并保存成功: {filename}")
# 添加延时,避免请求过于频繁被封禁IP
time.sleep(1)
except Exception as e:
print(f"下载 {symbol} 时发生错误: {e}")
print("所有品种数据下载完成!")
使用付费数据接口 (专业、高效、稳定)
对于专业量化团队或机构来说,使用付费数据接口是更好的选择,它们通常具有以下优势:
- 数据质量高:经过清洗,准确无误。
- 覆盖全:包含历史合约、已退市品种、Tick级数据等。
- 速度快:API响应迅速,支持高频数据获取。
- 稳定可靠:服务有保障,不会轻易失效。
推荐服务商:
-
RiceQuant (米筐科技):国内领先的量化交易平台,提供高质量的历史和实时数据,API 设计优秀,文档清晰。
-
示例代码:
from rqdatac import * # 需要先在官网申请 token 并设置 # set_token('your-token-here') # 获取螺纹钢主力合约的日线数据 # instruments 是合约代码,格式为 '交易所.品种代码',如 'SHFE.rb' df = get_price('SHFE.rb', start_date='2025-01-01', end_date='2025-12-31', frequency='daily') print(df.head())
-
JoinQuant (聚宽):同样是国内顶级的量化研究平台,数据全面,社区活跃。
-
示例代码:
from jqdatasdk import * # 需要先在官网申请账号并获取 token # auth('your-username', 'your-password') # 获取螺纹钢主力合约的日线数据 # 期货代码格式为 '期货代码.交易所',如 'rb.SHFE' df = get_price('rb.SHFE', start_date='2025-01-01', end_date='2025-12-31', frequency='daily') print(df.head()) # 取消认证 # deauth()
-
Wind (万得):金融数据领域的“王者”,覆盖所有金融市场,数据权威,但价格昂贵,主要面向金融机构。
-
方式:通常通过其客户端的
WindPy接口或 Excel 插件来获取数据。 -
示例代码 (WindPy):
from WindPy import w # 启动 Wind 终端 w.start() # 获取螺纹钢主力合约日线行情 # 代码格式为 '期货代码.交易所',如 'SHFE.rb' data = w.wsd("SHFE.rb", "open,high,low,close,volume", "2025-01-01", "2025-12-31") if data.ErrorCode == 0: print(data.Data) else: print("获取数据失败,错误代码:", data.ErrorCode) # 关闭 Wind w.stop()
-
使用交易软件导出 (适合非程序员)
如果你不熟悉编程,可以直接使用期货交易软件或行情软件来手动导出数据。
推荐软件:
-
文华财经
- 操作步骤:
- 打开文华财经行情或交易软件。
- 在品种列表中找到你想下载的合约(螺纹钢主力)。
- 双击进入该合约的K线图界面。
- 在K线图上右键,选择
数据导出或类似选项。 - 在弹出的窗口中,设置好你想导出的时间范围(起始日期和结束日期)。
- 选择导出格式(通常是 CSV 或 Excel),然后点击确定。
- 文件会保存到你指定的本地路径。
- 操作步骤:
-
博易大师
- 操作步骤:
- 打开博易大师软件。
- 找到目标合约,进入其K线图。
- 按键盘上的
F12键,通常会弹出数据导出窗口。 - 设置时间范围和文件路径,导出即可。
- 操作步骤:
-
交易开拓者
这是一个功能更强大的专业交易软件,也支持数据导出,通常通过其内置的图表或数据管理器功能实现。
总结与对比
| 方法 | 优点 | 缺点 | 适用人群 |
|---|---|---|---|
| Python (akshare) | 免费、灵活、可批量处理、自动化 | 需要编程基础;数据源可能不稳定;有请求频率限制 | 量化开发者、个人研究者、学生 |
| 付费接口 | 数据质量高、覆盖全、速度快、稳定可靠 | 价格昂贵 | 专业量化团队、金融机构、对数据要求极高的用户 |
| 交易软件导出 | 简单直观、无需编程 | 手动操作,效率低;难以批量处理;数据格式可能不统一 | 非程序员、个人投资者、偶尔需要少量数据的用户 |
重要提示
-
主力合约 vs. 具体合约:
- 主力合约:交易量最大的合约,流动性最好,但主力合约会随时间移仓换月,历史数据上并不是同一个合约,这可能在分析中引入“未来函数”或数据不连续的问题。
- 连续合约:通过某种算法(如最近合约、活跃合约等)将不同月份的合约拼接成一个连续的序列,解决了数据不连续的问题,更适合进行长周期分析。
akshare和付费接口都提供连续合约的数据,ak.futures_main_sina()和ak.futures_main_sina_continous()。
-
数据清洗:从任何地方获取的原始数据都可能存在问题(如空值、异常值、格式错误),在用于策略回测前,务必进行数据清洗和预处理。
-
合规性:确保你获取和使用数据的方式符合相关法律法规和平台的规定。
对于初学者和大多数个人项目,我强烈推荐从 Python + akshare 开始,它完全能满足你的需求,并且学习曲线平缓。
标签: 商品期货日线数据下载方法 免费获取商品期货日线数据 商品期货历史日线数据下载渠道