past 是一个从属于vn.trader的市场历史数据解决方案模块。主要功能为:
主要依赖:pymongo,pandas,requests,json
开发测试环境:
安装MongoDB: https://www.mongodb.org/downloads
更新pymongo至3.0以上版本:
~$ pip install pymongo --upgrade
安装或更新requests:
~$ pip install requests --upgrade
启动MongoDB:
~$ mongod
Demo中目前加载了使用通联数据Api下载股票日线数据和期货合约日线数据的方法。
首次使用时:
用文本编辑器打开base.py,填写通联数据的用户token。
执行init.py初始化MongoDB数据库。即下载全部股票与期货合约日线数据并储存至MongoDB。默认的初始化数据跨度为:股票从2013年1月1日至2015年7月20日;期货合约从2015年1月1日至2015年7月20日。各使用最大30个CPU线程。根据网速的不同,下载会花费大概8到15分钟。
In [84]:
# init.py
from base import *
if __name__ == '__main__':
ds = DataGenerator()
ds.download()
In [85]:
import time
start_time = time.time()
l = ds.fetch('000001','20150101','20150701',field=['closePrice','openPrice'],output='list')
# 输出字典列表,股票代码为000001,选择closePrice和openPrice
print 'Finished in',time.time()-start_time,'seconds' # 查询时间(秒)
l[0:5]
Out[85]:
In [86]:
ds.fetch('IF1512','20150101','20150701',output='df').head()
# 输出dataframe,期货合约为IF1512,包含所有键
Out[86]:
In [87]:
bar = ds.fetch('000001','20150101','20150701',output='bar')
# 输出Bar
print type(bar)
bar.head()
Out[87]:
In [33]:
ds.fetch('000001','20150701','20150723',field=['closePrice','openPrice'],output='list')[0]
# 由于我们按照默认时间跨度下载,最后记录就是7月20日。(本文档写作时间为7月23日)
# 这里手贱在update完之后又敲了一下build。。
Out[33]:
In [88]:
ds.update()
In [32]:
ds.fetch('000001','20150701','20150723',field=['closePrice','openPrice'],output='list')
# 7月23日数据已更新。
Out[32]:
In [35]:
bar.head()
Out[35]:
In [42]:
candle = bar.get_candlist()
candle[0:5]
Out[42]:
In [70]:
start_time = time.time()
%matplotlib inline
import matplotlib.pyplot as plt
from matplotlib.finance import candlestick_ochl
bar = ds.fetch('000100','20141001','20150601',output='bar')
quotes = bar.get_candlist()
fig = plt.figure(figsize=(16,10))
ax = plt.subplot(111)
candlestick_ochl(ax, quotes, width=0.7, colorup='#5998ff', colordown='#07000d')
ax.set_xlim([0, len(quotes)])
print 'Finished in',time.time()-start_time,'seconds.'
Resampler.rspfbar_date(self, rate)
In [83]:
rs = Resampler()
rs.load_bars(bar)
newbar1 = Bar(rs.rspfbar_date(3))
newbar2 = Bar(rs.rspfbar_date(7))
quotes1 = newbar1.get_candlist()
quotes2 = newbar2.get_candlist()
fig = plt.figure(figsize=(10,10))
ax1 = plt.subplot(211)
ax2 = plt.subplot(212)
candlestick_ochl(ax1, quotes1, width=0.7, colorup='#5998ff', colordown='#07000d')
candlestick_ochl(ax2, quotes2, width=0.7, colorup='#5998ff', colordown='#07000d')
ax1.set_xlim([0, len(quotes1)])
ax2.set_xlim([0, len(quotes2)])
Out[83]:
In [ ]: