
上海证券交易所数据获取途径
上海证券交易所作为中国内地核心证券交易平台,其数据API是量化交易者构建策略的基础。股票与期货数据获取方式多样,每种途径在实时性、历史深度、成本及易用性上各有差异。
官方数据接口
上交所本身提供一定程度的公开数据下载,但严格意义上的实时API并不直接面向个人开发者。通过上交所官网的“数据”栏目,可以获取每日交易统计、股票质押、融资融券等汇总信息。这些数据以CSV或Excel格式提供,适合低频策略或基本面研究。对于实时行情,上交所通过其信息公司发布Level-1和Level-2行情,需要向券商或授权代理商申请。Level-1包含最优买卖五档,Level-2提供十档行情及逐笔委托。获取方式通常通过券商提供的API接口,如华泰、国泰君安等券商的量化交易终端。

券商API中常见的有CTP(综合交易平台)接口,它最初用于期货,现已支持股票期权。CTP提供行情和交易接口,使用C++或Python封装。以下是一个简化的Python示例,使用ctpbee库连接行情服务器:
from ctpbee import CtpBee
app = CtpBee("test", __name__)
app.config.from_md({
"BROKER_ID": "9999",
"USER_ID": "your_id",
"PASSWORD": "your_password",
"MD_ADDRESS": "tcp://180.168.146.187:10131",
"TD_ADDRESS": "tcp://180.168.146.187:10130"
})
app.start()
该接口返回股票和期货的实时行情,需注意股票行情与期货行情服务器地址不同。
第三方数据API
第三方平台提供更便捷的API,适合量化研究者。Tushare是一个广泛使用的开源数据接口,覆盖股票、期货、基金等。Tushare Pro需要注册获取token,积分制限制部分数据。获取上交所股票日线数据示例:
import tushare as ts
pro = ts.pro_api('your_token')
df = pro.daily(ts_code='600000.SH', start_date='20230101', end_date='20231231')
对于期货数据,Tushare提供期货日线、持仓排名等。另一平台AkShare完全开源,无需token,接口丰富。获取上交所股票实时行情:
import akshare as ak
stock_zh_a_spot_df = ak.stock_zh_a_spot()
期货数据方面,AkShare提供期货基础信息、实时行情、历史K线。其数据源来自新浪、东方财富等,延迟约几秒,适合中低频策略。
量化平台内置数据
聚宽、米筐、优矿等在线量化平台内置上交所和期货数据。用户直接在平台编写策略,通过API函数获取数据。聚宽获取股票历史数据:
from jqdata import *
df = get_price('600000.XSHG', start_date='2023-01-01', end_date='2023-12-31', frequency='daily')
期货数据使用get_future_contracts和get_price。这些平台数据经过清洗,支持复权处理,适合回测。但平台限制实盘交易需通过券商接口。
期货数据特殊获取
期货数据与股票数据在API设计上存在差异。期货合约有到期日,需处理主力连续合约。上交所本身不提供期货数据,期货数据来自上海期货交易所、大连商品交易所、郑州商品交易所等。通过CTP接口可获取期货实时行情。第三方库如rqdatac提供期货历史数据,需付费。获取上期所期货日线:
import rqdatac
rqdatac.init('username', 'password')
df = rqdatac.get_price('RB2310', start_date='2023-01-01', end_date='2023-12-31', frequency='1d')
数据API选择建议
量化交易者选择数据API需考虑策略频率。高频策略需要Level-2逐笔数据,通过券商柜台或专业数据商如通联数据获取。中低频策略可使用Tushare或AkShare。历史回测需要长周期数据,Tushare Pro和聚宽提供多年历史。期货策略注意主力合约拼接,避免价格跳空。股票数据注意复权方式,前复权适合回测。
实盘交易中,数据API与交易API需配合。CTP接口同时提供行情和交易,但股票交易需通过券商API。部分券商提供Python API,如easytrader模拟点击,但稳定性不足。建议使用券商官方量化接口。
数据质量直接影响策略表现。上交所股票数据需处理停牌、除权除息。期货数据需处理换月。使用API时注意频率限制,Tushare每分钟最多500次调用,AkShare受源网站限制。
代码实践与注意事项
构建一个简单的股票期货数据获取脚本,使用AkShare获取上交所股票列表和期货主力合约:
import akshare as ak
# 获取上交所股票列表
stock_list = ak.stock_info_sh_name_code()
print(stock_list.head())
# 获取期货主力合约
futures_main = ak.futures_main_sina(symbol="RB0")
print(futures_main.tail())
运行前安装akshare:pip install akshare。该脚本获取股票名称和代码,以及螺纹钢主力连续合约。注意期货主力连续合约价格非真实交易价格,用于分析趋势。
数据存储建议使用本地数据库如SQLite或HDF5。Tushare数据可保存为CSV。回测框架如backtrader可读取这些数据。
上海证券交易所数据API的获取需要结合策略需求。股票数据侧重行情和财务,期货数据侧重合约和持仓。量化交易者应测试不同API的延迟和准确性,确保策略逻辑正确。