实现股票的程序化自动化交易,可以简单分为三步,获取数据、提交订单、查询交易账户,前面讲了如何获取历史数据和实时数据,今天我们讲一下提交订单。

程序交易中取数据有很多方法和渠道可以取到,重点是交易,也就是下单,是需要券商的接口权限的,现在有部分券商可以给个人申请接入,很多种接入方式,我前面后面举例的接口,是特定几家券商,最适合个人账户的,没什么门槛,一般散户都能达到。

不要用第三方外挂!不要用第三方外挂!不要用第三方外挂!

打开网易新闻 查看精彩图片

Python炒股自动化(4):通过接口向交易所发送订单

原因不一而足,比如严重延迟、出错、资金不安全,最重要的,违法违规!以前我分享过,篇幅有限,这里就不细说了。

现在我们来演示如何向交易所发送订单。前面获取数据的部分都是直接获取就行,交易接口不行,需要和交易中心建立连接,代码如下

# 客户端的路径
路径 = r'D:\程序交易客户端\userdata_mini'
# 随便输入一个整数
会话编号 = 9527
# 建交易对象实例
交易对象 = XtQuantTrader(路径, 会话编号)
# 启动交易对象
交易对象.start()
# 创建交易连接
连接返回值 = 交易对象.connect()
# 返回值是0就是连接成功,失败返回非0的值,一般是-1
print('连接状态:', 连接返回值)

建立连接这一步一般不会出什么错,连接成功后,我们就要为交易账户创建对象,让交易所知道是你的账户发送过来的订单

# 创建账户对象,默认STOCK,表示股票账户,也支持港股通、期权、期货等
账户对象 = StockAccount('你的资金账号', 'STOCK')

账户类型默认STOCK,表示股票账户,也支持港股通、期权、期货等,

前面两步做好了,就可以开始下单了,比如你现在想买入一手酱香科技“600519.SH”,以当前买一价99%的价格挂单,等待成交,首先取当前实时价格,再计算买一价的99%,然后以这个价格提交订单

# 获取实时数据
实时数据 = xtdata.get_full_tick(['000001.SZ', '600519.SH'])
# 从取到的实时数据中提取出酱香的买一价
酱香买一价 = 实时数据['600519.SH']['bidPrice'][0]
print('酱香买一价:', 酱香买一价)
# 计算买一价的99%,并四舍五入到两位小数
下单价格 = round(酱香买一价 * 0.99, 2)
print('下单价格:', 下单价格)
# 创建订单
订单号 = 交易对象.order_stock(
账户对象,
'600519.SH',
xtconstant.STOCK_BUY,#下单类型,这里是股票买入
100,
xtconstant.FIX_PRICE,#报价类型,这里是指定价格
下单价格
)
print('订单号:', 订单号)

运行输出后结果如下

Python炒股自动化(4):通过接口向交易所发送订单
打开网易新闻 查看精彩图片
Python炒股自动化(4):通过接口向交易所发送订单

现在,我们成功创建交易连接,并根据盘口价格提交了订单,目前是挂单等待成交的状态,但如果市场变化不是预期的方向,我们就要收回资金等待下一次机会,所以就要撤销这个订单,像这样:

撤单状态 = 交易对象.cancel_order_stock(账户对象, 订单号)
print('撤单状态:', 撤单状态)

撤单状态返回0就是撤单成功

这一节本来会很复杂,我一直想着怎么简单点,让新手看着更直观更容易阅读,结果写完发现,很多东西都没必要现在去理解,但是新手也要预想到,实际操作过程绝不可能这么简单,你现在如果要测试,就死板的照抄一遍,让程序跑通,给你正反馈,才有意愿学下去。

如果实战的话,你要预想到各种复杂的情况,比如前面几篇说的取数据,看似简单,实战中可能会遇到网络问题,系统问题,取不到数据,或者取到数据有延迟,再比如,交易下单这里,如果建立连接、下单撤单失败怎么办,这些都要在程序中加上判断处理。

这里的报单撤单都是用的同步接口,连循环判断都没有,实战中稍微复杂的策略就要用订阅方式,实时获取盘口的价格和你自己的委托、成交、持仓和账户状态,方便策略逻辑及时执行。

Python炒股自动化(4):通过接口向交易所发送订单
打开网易新闻 查看精彩图片
Python炒股自动化(4):通过接口向交易所发送订单

现在不要想那么多,将来用到了,自然是有办法解决的,目前你只要理解了程序的原理,就知道怎么提问题,有问题就一定有答案,有大模型辅助,相关交流群里也有大佬们指点一二,只要你愿意,写复杂的策略并不是什么难事

好了,今天的分享就到这里,对股票量化程序化自动交易感兴趣的朋友可以关注我,有任何相关问题也可以留言讨论或者私信与我交流