
股票接口的核心类型与选择
股票接口分为行情接口与交易接口。行情接口提供实时报价、历史K线、逐笔成交等数据。交易接口负责账户查询、委托下单、撤单、持仓管理。量化交易系统需要两者配合,才能完成从信号生成到订单执行的闭环。
常见行情接口包括新浪财经、腾讯财经、东方财富等免费HTTP接口,以及Tushare、AkShare、Baostock等Python库。免费接口延迟较高,适合日线级别策略。付费接口如Wind、聚宽、米筐提供更低延迟和更完整的历史数据。

交易接口方面,国内券商普遍提供基于CTP(CThostFtdc)的柜台接口,期货公司同样使用CTP。股票交易接口还有恒生电子、金证股份的柜台系统,以及券商自研的HTTP或WebSocket接口。个人投资者通常通过券商开通量化交易权限,获得API密钥和服务器地址。
行情接口的Python实现
以AkShare为例,获取股票实时行情只需几行代码。AkShare封装了东方财富、新浪等数据源,返回Pandas DataFrame,方便后续计算。
import akshare as ak
# 获取A股实时行情
df = ak.stock_zh_a_spot_em()
print(df[['代码', '名称', '最新价', '涨跌幅']].head())
# 获取历史K线
df_hist = ak.stock_zh_a_hist(symbol="600519", period="daily", start_date="20240101", end_date="20241231", adjust="qfq")
print(df_hist.tail())
Tushare需要注册获取token,积分制限制调用频率。Baostock免费且稳定,但数据更新较慢。期货行情可使用CTP的行情API,或者通过vn.py、pTrade等开源框架订阅。
交易接口的接入流程
股票交易接口接入分为四步。第一步,选择支持量化交易的券商,如华泰证券、国泰君安、中泰证券等,开通量化权限。第二步,获取API文档和测试环境,通常包括登录、心跳、下单、查询等函数。第三步,使用Python封装底层C++动态库,常见方案有ctypes、cffi或pybind11。第四步,编写订单管理模块,处理委托回报和成交回报。
期货交易接口以CTP为例,SimNow提供模拟环境。vn.py框架已经封装了CTP接口,直接使用即可。
from vnpy_ctp import CtpGateway
from vnpy.trader.engine import MainEngine
main_engine = MainEngine()
ctp_gateway = main_engine.add_gateway(CtpGateway)
ctp_gateway.connect({
'用户名': 'your_username',
'密码': 'your_password',
'经纪商代码': '9999',
'交易服务器': 'tcp://180.168.146.187:10130',
'行情服务器': 'tcp://180.168.146.187:10131',
'产品名称': 'simnow_client_test',
'授权编码': '0000000000000000'
})
下单函数示例:
from vnpy.trader.object import OrderRequest
from vnpy.trader.constant import Direction, OrderType
req = OrderRequest(
symbol="rb2410",
exchange=Exchange.SHFE,
direction=Direction.LONG,
type=OrderType.LIMIT,
volume=1,
price=3500
)
main_engine.send_order(req, ctp_gateway)
量化交易系统的关键模块
行情模块负责订阅和缓存Tick与K线数据。策略模块根据指标生成买卖信号。风控模块检查仓位、资金、单笔最大亏损。订单执行模块将信号转换为委托,并跟踪成交状态。账户模块同步资金和持仓。
Python中可使用pandas、numpy进行向量化计算,使用ta-lib或pandas-ta计算技术指标。回测框架推荐backtrader、vnpy或qlib。实盘交易需要处理网络断线重连、订单超时、部分成交等异常。
期货交易需注意保证金和杠杆。股票交易需注意T+1和涨跌停限制。程序化下单必须设置价格保护,避免市价单滑点过大。
代码演示 一个简单的均线策略
以下代码使用AkShare获取历史数据,计算双均线信号,并通过模拟交易接口下单。
import akshare as ak
import pandas as pd
# 获取数据
df = ak.stock_zh_a_hist(symbol="000001", period="daily", start_date="20240101", end_date="20241231", adjust="qfq")
df['ma5'] = df['收盘'].rolling(5).mean()
df['ma20'] = df['收盘'].rolling(20).mean()
df['signal'] = 0
df.loc[df['ma5'] > df['ma20'], 'signal'] = 1
df.loc[df['ma5'] <= df['ma20'], 'signal'] = -1
df['position'] = df['signal'].diff()
# 打印交易信号
print(df[df['position'] != 0][['日期', '收盘', 'position']])
实盘中,将position变化映射为买入或卖出委托。期货策略可做多和做空,股票策略仅做多。
接口安全与合规
券商接口要求实名认证和风险测评。程序化交易需向交易所报备。高频交易可能触发异常交易监控。建议使用独立服务器,避免与个人电脑混用。API密钥不要硬编码在代码中,使用环境变量或配置文件。
期货CTP接口有流量控制,每秒报单数有限制。股票接口通常有单账户每秒委托笔数限制。策略设计时应加入限流和重试机制。
常见问题与调试方法
接口连接失败检查网络、防火墙、服务器地址。登录失败检查用户名、密码、经纪商代码。下单被拒绝检查资金、持仓、合约代码、价格是否在涨跌停范围内。使用日志记录每一笔请求和回报,便于排查。
模拟环境测试通过后再切换实盘。实盘初期使用最小手数,逐步增加。监控账户风险度,避免满仓操作。
Python生态提供了丰富的股票和期货接口方案。从免费行情到CTP交易,从回测到实盘,开发者可以构建完整的量化交易系统。选择接口时需权衡数据质量、延迟、成本和合规性。