基于Python的股票实盘交易接口的实现与应用

浏览: 4880

提示

作者注:本文涉及的思路和内容仅限于量化投资及程序化交易的研究与尝试,不作为个人或机构常规程序化交易的依据,不对实盘的交易风险和政策风险产生的影响负责,如有问题,欢迎通过本公众号与我联系。投资有风险,下单须谨慎。

大概在半个多月前,一个朋友联系我,让我帮忙实现一个程序自动下单交易的功能。按照以往对待用户的习惯,很愉快的就答应了,也抽时间研究了一下,起初并没有太多精力和时间去开发,直到迎来了祖国妈妈的生日,本来也不太想出去给国家添堵,正好成全了写代码之美。

利用国庆假期的头几天,很顺利地完成了开发和测试并集成到了tushare里。现在,给大家汇报一下成果,首先展示在tushare中如何使用实盘交易接口。

 如何在tushare中完成股票实盘交易

大家通过tushare获取数据已经非常熟悉了,那么又怎么使用实盘交易功能的接口呢?其实也非常的简单,且看几个关键接口的使用方法:

1、跟取数据一样,先要导入tushare包image.png

2、设置券商和账户信息(目前只支持中信建投,后续陆续支持其他券商,有兴趣的朋友可以提交代码)image.png

新增和修改账户都用set_broker这个方法,同一个券商目前只支持一个账号。如果要删除帐户信息,请使用remove_broker()函数。

3、查看已经设置好的券商和账号信息image.png由于tushare是纯开源项目,程序运行在本地,所以可以放心账户的安全性问题。

4、初始化交易接口及登录image.png在初始化交易接口TradeAPI对象的时候,需要设置券商代号,比如“zxjt”代表“中信建投”,"htzq"代表“华泰证券”,用于确定使用哪个券商通道。

5、获取账户基础数据

(以下由于用了朋友的实盘账户,显示出来的数据做了处理,敬请见谅。)

image.png

这里返回的数据是Series对象,单一数据的获取采用类似json的方法,比如要获取账户可用余额,可使用 baseinfo['fundavl'] ,证券总市值可用 baseinfo['marketvalue']

6、获取持仓列表image.png

7、买卖股票image.png股票(证券)买卖可以从股份或者金额两位维度操作,具体请参考以上代码注释部分。拆单等算法交易目前需要自己写代码实现,以后有时间了会考虑作为一个独立的模块加进来。

8、获取委托单列表image.png通过获取委托单列表的数据,才能进行撤单操作,部分数据会作为参数传递给撤单函数。

9、撤单image.png多个证券撤单的时候,ordersno和orderdate都是以逗号分隔,这两个参数的数据来自委托单接口。

10、查看成交列表image.png

11、实时行情监控

只有监控股票实时的量价变动情况,才可能触发下单操作,所以别忘了tushare的实时数据接口,这里再提示一下。

ts.get_realtime_quotes('000581')多个股票请用数组或者pandas的数据结构:

#数组ts.get_realtime_quotes(['600848','000980','000981'])

#pandasts.get_realtime_quotes(df['code'].tail(10))

还有指数的实时数据:#上证指数

ts.get_realtime_quotes('sh')

#上证指数 深圳成指 沪深300指数 上证50 中小板 创业板

ts.get_realtime_quotes(['sh','sz','hs300','sz50','zxb','cyb'])

#混搭

ts.get_realtime_quotes(['sh','600848'])

实时数据的内容为Level1行情:0:name,股票名称

1:open,今日开盘价

2:pre_close,昨日收盘价

3:price,当前价格

4:high,今日最高价

5:low,今日最低价

6:bid,竞买价,即“买一”报价

7:ask,竞卖价,即“卖一”报价

8:volume,成交量 

9:amount,成交金额(元 CNY)

10:b1_v,委买一(笔数 )

11:b1_p,委买一(价格 )

12:b2_v,“买二”

13:b2_p,“买二”

14:b3_v,“买三”

15:b3_p,“买三”

16:b4_v,“买四”

17:b4_p,“买四”

18:b5_v,“买五”

19:b5_p,“买五”

20:a1_v,委卖一(笔数)

21:a1_p,委卖一(价格)

...

30:date,日期;

31:time,时间;

更多的内容,请访问tushare的官网:http://tushare.org

关于实盘交易各类接口的输入输出参数详细注释,请在函数后面加问号查看,比如查看持仓列表的返回值含义注释,可使用 csc.position? ,效果如下:

image.png

image.png

看完了实盘接口的使用过程,是不是觉得依然很简单?从数据的获取到下单操作,在tushare里无缝的结合在了一起。下面看看是怎么实现这些接口的。

交易系统登录这个朋友用的是中信建投的交易通道,幸运的是中信建投提供网页版交易系统(事实证明,中信建投的网页交易系统写的比其他券商都简洁和友善)。先来看一下登录界面:image.png

咋一看连个验证码都没有,其实是在输入错误用户或密码的时候才会出现验证码输入框,这就是中信证券最人性的地方,这种体验才是最好的。有些券商恨不得上某铁那种虐心的验证码,有用户就问了,你是不想让我交易呢还是真心不想让我交易呢?

通过网页分析,在输入用户和密码点登录以后,出现了表单参数和登录URL

image.png

这样就可以通过Python实现模拟网页登录,这里截取部分代码:image.png

获取账户数据和持仓

成功登录以后,我们可能首先想到的是怎么获取这个账户的基本信息?包括证券ID,账户余额,股票市值等一些最最常见的基础数据。在蹦来蹦去的一行行URL中,从一团乱麻里,经过拨丝抽茧般的寻找,终于发现了账户数据的接口,顺带还揪出了持仓列表数据:image.png

实现证券买卖

有了账户数据,我们很自然的想到需要买卖股票,于是点击股票交易的界面,如下所示:

image.png

在输入了证券代码和买入价格及买入数量之后,点击“下单”提交给系统,我们从网络监控里发现了如下参数信息:

image.png

根据参数名称,通过代码实现股票买入操作:

image.png

同样的方法,我们在执行股票卖出的时候,也能跟踪到卖出操作时显示的参数,根据卖出参数完成代码编写,这里就不一一展示。

实现证券撤单

要实现撤单,我们首先要提取委托单列表,在网页版的交易系统里,打开撤单界面,可以看到我们刚刚进行的股票买卖的委托单列表:image.png

点击“撤单”操作,在网络监控里,我们很容易就发现了撤单的整个过程:

image.png

我们来看看代码的实现,实际非常的简单。

image.png

题外话用朋友的帐户经过亲身实盘体验后,对纯程序化自动下单的功能感觉就是屌屌的,如果有现成的策略,做好风控,完成个人的程序化交易显然是可行的。

既然这么高大上,我也想拿自己的账户来试试,只是我在国信证券开的户,登录网页版交易系统之后,看到酷炫的界面立马傻眼了,原来是Flex开发的,只发现一个密不透风的swf文件,完全不一样的协议嘛!!OMG 

好在几年前曾经开发过Flex,经过一番折腾后终于看到了代码,如果有朋友对Adobe Flex技术熟悉的话,欢迎一起研究,实际上有几家券商都是通过Flex实现的。

实盘交易功能暂时未发布到tushare新版,对以上代码和实盘交易感兴趣的朋友,可通过本公众号发送留言获取。

长按识别二维码关注“公众号”

推荐 1
本文由 挖地兔 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册