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