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

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

因为国内股市自动化交易接口没有开放,通常采用外挂模式提交数据,而通过web网页提交下单数据,可能是最简单的一种方式。
tushare作者2016国庆节期间,通过中信建投的网站,采用web外挂模式,为tushare增加了程序自动下单


以下内容转自tushare作者的微博,图片较多,没有发了,大家可以自己访问原地址查看:
tushare作者的微博,http://weibo.com/u/1304687120?is_hot=1
原文地址:
http://mp.weixin.qq.com/s?__biz=MzAwOTgzMDk5Ng==&mid=2650833912&idx=1&sn=7c8f58dfc5e02d651134c0826102954e&mpshare=1&scene=2&srcid=10062ZyNlPyHEyBfRBpyKJ9p&from=timeline&isappinstalled=0#wechat_redirect

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

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

成果,首先展示在tushare中如何使用实盘交易接口。

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

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

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

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

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

3、查看已经设置好的券商和账号信息

由于tushare是纯开源项目,程序运行在本地,所以可以放心账户的安全性问题。

4、初始化交易接口及登录

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

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

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

6、获取持仓列表

7、买卖股票

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

8、获取委托单列表

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

9、撤单

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

10、查看成交列表

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

ts.get_realtime_quotes(\’000581\’)
多个股票请用数组或者pandas的数据结构:
#数组
ts.get_realtime_quotes([\’600848\’,\’000980\’,\’000981\’])

#pandas
ts.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的官网:[url]http://tushare.org[/url]

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

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

交易系统登录

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

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

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

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

获取账户数据和持仓

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

实现证券买卖

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

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

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

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

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

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

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

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

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

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

发表评论

电子邮件地址不会被公开。 必填项已用*标注