加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

我感觉我可以到网贷公司做一名大佬了!用Python搞定期货数据!

发布时间:2020-12-17 00:32:29 所属栏目:Python 来源:网络整理
导读:很早之前,Tushare就提供过期货行情等数据API,这要感谢东北证券小伙伴的努力,在最需要的时候贡献了期货数据的代码。 但由于是直接接抓取转发,而且部分交易所网站偶尔发生变化,API后来变得不太稳定。各个交易所数据格式和标准也不一样,所以后来我们就想

很早之前,Tushare就提供过期货行情等数据API,这要感谢东北证券小伙伴的努力,在最需要的时候贡献了期货数据的代码。

但由于是直接接抓取转发,而且部分交易所网站偶尔发生变化,API后来变得不太稳定。各个交易所数据格式和标准也不一样,所以后来我们就想索性提供一个中心服务器,Tushare先自己抓取、清洗整理,然后集中提供数据服务。

本篇主要介绍Tushare如何实现期货行情等市场参考数据的抓取和清洗处理,以及实现数据标准化的过程。为用户理解数据,更好的使用数据,同时也为Tushare的用户提供一个学习如何利用Python来抓取期货数据提供一个学习范例。

这也是Tushare社区一直以来在推动和践行的事情:为用户直接提供数据,降低数据采集和处理的成本,也为用户提供数据实现的技术案例,帮助用户提高自身能力。

数据标准制定

我们知道,加上开业不久的上海国际能源交易中心,我们需要采集的数据一共来自5大交易所。我们需要给各个交易所指定一个代码标准,以便数据的规范,也更利于数据的查询。

私进群:548377875? ?即可获取小编精心准备的大礼包哦!都是对应的教程呢!

本篇我们主要从行情数据出发,来说明数据实现过程。

交易所标准

根据交易所的简称,我们制定以下标准:

合约规则

由于一些交易所定义或者公布的合约代码不一致,比如上期所习惯用品种和月份分开来公示数据,比如只用数字表示某期货合约;比如郑商所用代码+年份最后一个数字+月份表示合约,如ZC812表示动力煤18年12月合约等等。

要想统一格式,我们必须定义统一的规范,借鉴前辈们的经验,也符合用户的习惯,我们定义的标准如下:

定义好了规则以后,我们就可以在获取数据后进行处理,尤其是主力与连续合约,交易所是不直接提供数据的,需要我们根据规则来自行生产。

行情指标定义

在获取数据之前,我们需要定义行情的指标,以便在采集数据的时候一一对应或者加工处理。通常来说,行情有高开低收等价格信息,但是期货有结算价格等,我们这里做了一个列表,供大家参考。

除此以外,我们还可以加入交易所字段,更有利于数据的查询。

数据源收集

Tushare收集了5个交易所的数据,主要来源是交易所网站。当然,Tushare的数据不仅仅是来自网站,也有其他信息服务网站,也包括了CTP系统等。

正如前面已经介绍,交易所各自的标准和规范不一样,我们在做数据采集的时候会碰到很多问题。

所以,务必要自己定义一套标准来统一格式。除此以外,有些交易所可能由于历史的原因,采集数据的地址和数据输出内容也不同,需要我们自行衍生计算才能达到数据的完整和准确性。

Python抓取数据

由于篇幅有限,我们只拿上海期货交易所的行情数据作为抓取的例子,希望对想通过Python来抓取数据的朋友有所帮助。

定义采集函数

我们可以写一个专门的函数,来获取数据原始内容。这里可能返回的是HTML,也可能是csv或excel数据格式的内容。然后再返回到数据处理函数里完成数据的清洗加工。

def get_content(url,retry_count=3,pause=0.001):
 for _ in range(retry_count):
 time.sleep(pause)
 try:
 request = Request(url)
 request.add_header("User-Agent",'Mozilla/5.0 (Windows NT 6.1; rv:37.0) Gecko/20100101 Firefox/37.0')
 request.add_header("Connection","keep-alive")
 request.add_header("Accept-Language","zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3")
 request.add_header("Accept-Encoding","gzip,deflate")
 request.add_header("Referer",url)
 text = urlopen(request,timeout=10).read()
 except Exception as e:
 print(e)
 else:
 return text 
我们定义了重试次数,目的是为了避免因网络或者其他问题造成数据抓取中断丢失数据,大家可以自行更改次数,以及中断后是否设置暂停时间。

数据处理

上期所的数据格式,应该说是几大交易所中比较简单的一个,我们通过它返回的JSON数据,利用pandas的功能,很快就能完成数据清洗整理。

def _shfe_daily(date=''):
 url = shfe_url%(date)
 try:
 js = get_content(url)
 js = js.replace(' ','')
 js = json.loads(js)
 df = pd.DataFrame(js['o_curinstrument'])
 df = df[~(df.DELIVERYMONTH.str.contains(u'小计')) & ~(df.DELIVERYMONTH.str.contains(u'合计'))]
 df = df[~df.PRODUCTID.str.contains(u'总计')]
 df['TRADE_DATE'] = date
 df['TS_CODE'] = df['PRODUCTID']+df['DELIVERYMONTH']+'.SHF'
 df['TS_CODE'] = df['TS_CODE'].map(lambda x: x.replace('_f','').upper())
 df['EXCHANGE'] = 'SHFE'
 df = df[['TS_CODE','TRADE_DATE','OPENPRICE','HIGHESTPRICE','LOWESTPRICE','CLOSEPRICE','SETTLEMENTPRICE','ZD1_CHG','ZD2_CHG','VOLUME','OPENINTEREST','OPENINTERESTCHG']]
 df.columns = ['TS_CODE','OPEN','HIGH','LOW','CLOSE','SETTLE','CHANGE1','CHANGE2','VOL','OI','OI_CHG']
 df = df.fillna(0)
 except Exception as e:
 print(e)
 else:
 for col in ['OPEN','OI_CHG']:
 df[col] = df[col].astype(float)
 return df
在做数据入库之前,我们需要看清数据是否有噪音,比如一些小计/合计/总计的数据,这类数据不在我们采集的范围之内,需要清洗干净。

类似的小问题很多,在采集过程中我们需要擦亮眼睛,只要细心,相信会做出完美的数据。

Tushare Pro的期货数据

我们深知数据采集、清洗、加工的繁琐和无趣,如果您只是为了用数据,相信不太想每天去为了抓取数据费尽心思,最后可能还四处碰壁。

所以,Tushare社区帮大家承担了数据采集和处理的工作。只有您注册了Tushare Pro的账号,就可以通过数据接口免费获取数据,不用再操心数据的问题,把精力和时间都集中在策略的研究上。

Pro目前可以提供的期货数据

目前已经收集整理了包括行情在内的市场交易和参考数据,从历史跨度来看,足够用户进行数据分析。

未来我们将提供更多的数据来充实大家的需求,但最重的是数据的质量和稳定性的保证。Tushare社区已经为此投入了3台高性能服务器来支持期货数据处理和服务,数据的稳定性和可靠性逐步得到验证。

数据的基本用法

1、获取行情数据

pro = ts.pro_api()
df= pro.fut_daily(ts_code='IFL.CFX',start_date='20180101',end_date='20181116')

我们把数据保存起来,美化一下效果如下:

2、获取会员持仓排名

pro= ts.pro_api()
df = pro.fut_holding(trade_date='20181116',symbol='C',exchange='DCE')

3、获取仓单日报数据

pro= ts.pro_api()
df = pro.fut_wsr(trade_date='20181116',symbol='ZN')

4、获取结算参数数据

pro= ts.pro_api()
df = pro.fut_settle(trade_date='20181116',exchange='SHFE')

5、更多资料

Tushare Pro网站提供了详细的用户使用手册,即使是Python的初学者,也可以根据教程轻松获得数据。

总结

总的来说,数据现在越来越开放,所能获取的数据也越来越多。但,是不是所有数据都要自己去抓取采集、清洗加工,以及提供API化的服务,哪怕是公司内部使用? 需要谨慎对待。

我们需要考虑在数据方面各种精力的投入和时间成本,正如前面已经讲过多次,数据采集和处理过程中的坑太多,如果数据都需要自己采集加工,必定要安排特定的人员来监控和维护,人员和管理成本会增加不少。最关键的问题是,如果本身的业务和技术不熟练,反而影响了数据的使用,耽误了策略研发和实盘交易。

所以,如果有经验丰富的数据团队来服务大家,提供专业的数据支持,必然会大大提高效率,保证投研和交易过程的顺利进行。

最后福利

Tushare社区正是为用户减少数据上的困扰,提高数据使用效率而存在的一个组织,可以提供专业的数据规划、采集、清洗处理和API化的数据服务和支持。

最重要的是,我们免费提供包括了以上期货数据在内的其他所有金融交易数据,为大家提供便捷的数据API。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读