海通证券交易接口API接入指南与开发文档

海通证券API接入实战:从零开始玩转量化交易

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

海通证券交易接口API接入指南与开发文档
(海通证券交易接口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'])

记得实盘前用小资金跑通整个流程,有次我忘了处理夏令时导致开盘第一单失败。现在这套系统已经稳定跑了半年,最近正在尝试把均线策略改成机器学习模型...

发表评论