免责声明:本文为个人学习笔记,仅供技术交流,不构成任何投资建议。
刚开始接触Python期货量化,可能会对"怎么用代码获取行情"、"怎么用代码下单"这些基础问题感到困惑。本文从零开始,记录一下期货交易API的入门过程。
入行二十年,从最早的手写C++调用CTP接口,到如今Python量化框架百花齐放,我几乎经历了国内量化交易发展的每一个阶段。今天分享一下期货交易API的基础知识。
一、什么是期货交易API?
API(Application Programming Interface)是程序与程序之间通信的接口。期货交易API就是让你的程序能够:
- 获取实时行情数据
- 查询账户资金和持仓
- 发送交易指令(下单、撤单)
国内期货交易的底层协议是CTP(综合交易平台),由上期技术开发。但直接使用CTP接口比较复杂,所以通常会使用封装好的Python框架。
二、主流Python期货API
| 框架 | 特点 | 上手难度 |
|---|---|---|
| TqSdk(天勤量化) | 数据内置,API简洁 | ★★☆ |
| VnPy | 功能全面,完全开源 | ★★★★ |
| ctpwrapper | CTP原生封装 | ★★★★★ |
对于入门者,我推荐从**天勤量化(TqSdk)**开始,原因是:
- pip安装即用,无需复杂配置
- 数据现成,不用自己对接
- API设计简洁,学习曲线平缓
三、TqSdk快速入门
3.1 环境安装
pipinstalltqsdk3.2 获取实时行情
fromtqsdkimportTqApi,TqAuth# 初始化APIapi=TqApi(auth=TqAuth("账户","密码"))# 订阅螺纹钢主力合约quote=api.get_quote("KQ.m@SHFE.rb")# 实时打印行情whileTrue:api.wait_update()ifapi.is_changing(quote):print(f"合约:{quote.instrument_id}")print(f"最新价:{quote.last_price}")print(f"买一价:{quote.bid_price1}, 买一量:{quote.bid_volume1}")print(f"卖一价:{quote.ask_price1}, 卖一量:{quote.ask_volume1}")print(f"成交量:{quote.volume}")print("-"*40)3.3 获取K线数据
fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("账户","密码"))# 获取5分钟K线,最近100根klines=api.get_kline_serial("SHFE.rb2510",300,100)whileTrue:api.wait_update()ifapi.is_changing(klines):# 打印最新K线print(f"时间:{klines.datetime.iloc[-1]}")print(f"开:{klines.open.iloc[-1]}")print(f"高:{klines.high.iloc[-1]}")print(f"低:{klines.low.iloc[-1]}")print(f"收:{klines.close.iloc[-1]}")print(f"量:{klines.volume.iloc[-1]}")3.4 获取Tick数据
fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("账户","密码"))# 获取Tick数据ticks=api.get_tick_serial("SHFE.rb2510")whileTrue:api.wait_update()ifapi.is_changing(ticks):# 最新的Tickprint(f"时间:{ticks.datetime.iloc[-1]}")print(f"最新价:{ticks.last_price.iloc[-1]}")print(f"买一:{ticks.bid_price1.iloc[-1]}")print(f"卖一:{ticks.ask_price1.iloc[-1]}")四、交易接口
4.1 查询账户信息
fromtqsdkimportTqApi,TqAuth,TqAccount# 连接实盘账户api=TqApi(TqAccount("期货公司名称","期货账号","密码"),auth=TqAuth("快期账户","密码"))# 获取账户资金account=api.get_account()print(f"账户权益:{account.balance}")print(f"可用资金:{account.available}")print(f"持仓盈亏:{account.position_profit}")print(f"浮动盈亏:{account.float_profit}")4.2 查询持仓
# 获取指定合约持仓position=api.get_position("SHFE.rb2510")print(f"多头持仓:{position.pos_long}")print(f"空头持仓:{position.pos_short}")print(f"多头均价:{position.open_price_long}")print(f"空头均价:{position.open_price_short}")4.3 下单
# 限价单开多order=api.insert_order(symbol="SHFE.rb2510",direction="BUY",offset="OPEN",volume=1,limit_price=3500)# 市价单开多order=api.insert_order(symbol="SHFE.rb2510",direction="BUY",offset="OPEN",volume=1)# 平仓order=api.insert_order(symbol="SHFE.rb2510",direction="SELL",offset="CLOSE",volume=1)4.4 撤单
# 撤销订单api.cancel_order(order)五、一个完整的交易示例
下面是一个完整的示例,演示如何根据条件自动下单:
fromtqsdkimportTqApi,TqAuth,TqSimfromtqsdk.taimportMA# 使用模拟账户(推荐新手先用模拟)api=TqApi(TqSim(),auth=TqAuth("账户","密码"))symbol="SHFE.rb2510"klines=api.get_kline_serial(symbol,300,100)position=api.get_position(symbol)account=api.get_account()print("策略启动...")whileTrue:api.wait_update()ifapi.is_changing(klines):# 计算均线ma5=MA(klines,5).ma.iloc[-1]ma20=MA(klines,20).ma.iloc[-1]current_price=klines.close.iloc[-1]print(f"价格:{current_price:.0f}, MA5:{ma5:.0f}, MA20:{ma20:.0f}")# 简单的均线策略ifma5>ma20andposition.pos_long==0:print("金叉信号,开多")api.insert_order(symbol,"BUY","OPEN",1)elifma5<ma20andposition.pos_long>0:print("死叉信号,平多")api.insert_order(symbol,"SELL","CLOSE",position.pos_long)六、天勤量化的特点
使用天勤量化做期货API开发,有几个值得一提的特点:
6.1 数据服务
全市场Tick和K线数据都有,不用自己建数据库。这对于入门者来说省去了很多麻烦。
6.2 期货公司支持
支持130多家期货公司的实盘交易,基本覆盖了市场上所有主流期货商。
6.3 回测与实盘一致
同一套代码,通过参数切换就能在回测、模拟、实盘之间切换,降低了部署出错的风险。
6.4 局限性
- 需要Python编程基础
- 只支持国内期货市场
- 高级功能需要付费
七、学习建议
对于期货交易API入门,我的建议是:
- 先学Python基础:至少掌握基本语法和pandas库
- 从获取数据开始:先跑通行情获取的代码
- 用模拟账户练习:不要一上来就用真钱
- 循序渐进:从简单策略开始,逐步增加复杂度
八、小结
期货交易API是量化交易的基础设施。对于Python入门者,天勤量化(TqSdk)提供了一个相对友好的起点:
- 安装简单(pip install)
- 数据现成(不用自己维护)
- API简洁(代码量少)
当然,每个工具都有自己的适用场景。如果你需要更大的灵活度,可以考虑VnPy;如果你想直接操作CTP底层,可以使用ctpwrapper。
希望这篇入门指南对你有帮助。有任何问题,欢迎评论区交流。
声明:本文仅供技术学习交流,量化交易有风险,入市需谨慎。