海通证券交易接口API接入指南与开发文档
海通证券API接入实战:从零开始玩转量化交易
最近帮朋友搞量化交易系统,发现海通的API文档藏得挺深,网上零散的教程又总缺关键步骤。折腾两周终于跑通全流程,干脆把踩坑经验整理成这份接地气的指南,适合有点Python基础又想自己捣鼓自动交易的朋友。

(海通证券交易接口API接入指南与开发文档)
一、准备工作:别急着写代码
1. 开户硬门槛
- 资金账户得是海通机构版(个人户也能申请但流程复杂)
- 最近三个月月均资产≥50万(这个标准2024年刚下调过)
- 提前准备好营业执照复印件(个人用身份证)和公章扫描件
2. 开发环境配置
工具 | 推荐版本 | 备注 |
Python | 3.8+ | 别用3.10以上,有些库兼容有问题 |
requests | 2.28+ | 处理HTTP请求的核心库 |
pandas | 1.5+ | 处理行情数据必备 |
二、API申请:这些坑我帮你踩过了
在海通机构服务专区找到"量化交易接入申请",注意这几个关键点:
- 申请理由写"量化策略研究"比写"自动交易"通过率高
- IP白名单要填服务器公网IP(家用宽带动态IP会被拒)
- 接口权限建议先勾选行情查询和模拟交易(实盘权限要二次审核)
等3个工作日内收到带API_KEY
的邮件后,记得马上测试连通性:
import requests API_BASE = ' headers = {'Authorization': 'Bearer YOUR_API_KEY'} r = requests.get(f"{API_BASE}/ping", headers=headers) print('连接成功' if r.status_code == 200 else '检查密钥')
三、核心功能开发详解
1. 实时行情获取
用/realtime
接口比用websocket更稳定,特别是对新手:
def get_realtime(symbol): params = {'symbol': symbol, 'type': '1min'} r = requests.get(f"{API_BASE}/realtime", headers=headers, params=params) return pd.DataFrame(r.json['data'])
返回的数据包含这些关键字段:
- last_price:最新成交价
- bid1:买一价(想快速卖出就参考这个)
- volume:当前成交量
2. 委托下单模块
实战中发现海通的/order
接口对参数顺序有严格要求:
def create_order(symbol, price, amount, side): data = { 'symbol': symbol, 股票代码 'price': str(price), 必须转字符串 'quantity': int(amount),必须转整数 'side': side.upper, BUY/SELL 'type': 'LIMIT' 只支持限价单 r = requests.post(f"{API_BASE}/order", json=data, headers=headers) return r.json['order_id']
特别注意:海通的A股交易单位是股不是手,买茅台100股得写600519.SH和100(不是1手)
四、风控要点:别等爆仓才看
在ht_quant_trader.py
里我加了这些保险:
- 每单不超过总资产的5%(用
/account
接口实时查余额) - 单日交易次数≤100次(海通的风控红线)
- 撤单失败自动重试机制(用
/cancel
接口时加while循环)
有个朋友没做流速控制,API调用触发了海通的流量限制,账户被临时冻结了两小时。建议加个这样的计数器:
class APICounter: def __init__(self): self.count = 0 def check(self): self.count += 1 if self.count % 30 == 0: time.sleep(1)
五、调试技巧:省下80%排查时间
海通的模拟环境()比实盘宽松很多,建议:
- 先用
600000.SH
(浦发银行)测试,这个代码在模拟盘永远可交易 - 实盘报错时先查
error_code
对照文档,常见的有:- 40021:非交易时间段
- 50003:超出仓位限制
最后分享个查看历史委托的实用代码,比登陆客户端查快得多:
def get_orders(days=1): today = datetime.now.strftime('%Y%m%d') params = {'start_date': today, 'end_date': today} r = requests.get(f"{API_BASE}/orders", params=params, headers=headers) return pd.DataFrame(r.json['data'])
记得实盘前用小资金跑通整个流程,有次我忘了处理夏令时导致开盘第一单失败。现在这套系统已经稳定跑了半年,最近正在尝试把均线策略改成机器学习模型...
发表评论