forked from waditu/tushare
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1.tushare.fund目录 增加nav.py cons.py 实现基金信息及净值获取
实现以下接口: get_nav_open, 获取开放基金信息 get_nav_close, 获取封闭基金信息 get_nav_grading, 获取分级基金信息 get_nav_history, 根据基金代码获取基金历史净值 get_fund_info 根据基金代码获取基金详细信息 2.test目录 增加 nav_test.py 用于测试fund接口
- Loading branch information
Showing
5 changed files
with
643 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
# -*- coding:utf-8 -*- | ||
|
||
import unittest | ||
import tushare.fund.nav as nav | ||
|
||
class Test(unittest.TestCase): | ||
|
||
def set_data(self): | ||
self.symbol = '600848' | ||
self.start = '2016-01-03' | ||
self.end = '2016-04-01' | ||
self.year = 2016 | ||
|
||
def test_get_nav_open(self): | ||
self.set_data() | ||
lst = ['all','equity','mix','bond','monetary','qdii'] | ||
print '\nget nav open................\n' | ||
for item in lst: | ||
print 'get %s nav' %item | ||
df = nav.get_nav_open(item) | ||
print '\n','nums=',len(df),'\n',df[:2] | ||
|
||
def test_get_nav_close(self): | ||
self.set_data() | ||
t2 = ['all','fbqy','fbzq'] | ||
qy_t3 = ['all','ct','cx'] | ||
zq_t3 = ['all','wj','jj','cz'] | ||
|
||
print '\nget nav closed................\n' | ||
df = None | ||
for item in t2: | ||
if item == 'fbqy': | ||
for t3i in qy_t3: | ||
print 'get %s-%s nav' %(item,t3i) | ||
df = nav.get_nav_close(item,t3i) | ||
print '\n','nums=',len(df),'\n',df[:2] | ||
elif item == 'fbzq': | ||
for t3i in zq_t3: | ||
print 'get %s-%s nav' %(item,t3i) | ||
df = nav.get_nav_close(item,t3i) | ||
print '\n','nums=',len(df),'\n',df[:2] | ||
else: | ||
print 'get %s nav' %item | ||
df = nav.get_nav_close(item) | ||
print '\n','nums=',len(df),'\n',df[:2] | ||
|
||
def test_get_nav_grading(self): | ||
self.set_data() | ||
t2 = ['all','fjgs','fjgg'] | ||
t3 = {'all':'0','wjzq':'13','gp':'14','zs':'15','czzq':'16','jjzq':'17'} | ||
|
||
print '\nget nav grading................\n' | ||
df = None | ||
for item in t2: | ||
if item == 'all': | ||
print 'get %s nav' %item | ||
df = nav.get_nav_grading(item) | ||
print '\n','nums=',len(df),'\n',df[:2] | ||
else: | ||
for t3i in t3.keys(): | ||
print 'get %s-%s nav' %(item,t3i) | ||
df = nav.get_nav_grading(item,t3i) | ||
print '\n','nums=',len(df),'\n',df[:2] | ||
|
||
def test_nav_history(self): | ||
self.set_data() | ||
lst = ['164905','161005','380007','000733','159920','164902','184721','165519','164302','519749','150275','150305','150248'] | ||
for k,item in enumerate(lst): | ||
print 'get %s nav' %item | ||
df = nav.get_nav_history(item,self.start,self.end) | ||
if df is not None: | ||
print '\n','nums=',len(df),'\n',df[:2] | ||
|
||
|
||
def test_get_fund_info(self): | ||
self.set_data() | ||
lst = ['164905','161005','380007','000733','159920','164902','184721','165519','164302','519749','150275','150305','150248'] | ||
for item in lst: | ||
print 'get %s nav' %item | ||
df = nav.get_fund_info(item) | ||
if df is not None: | ||
print '%s fund info' %item, | ||
print df | ||
|
||
|
||
if __name__ == '__main__': | ||
unittest.main() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
# -*- coding:utf-8 -*- | ||
""" | ||
Created on 2016/04/03 | ||
@author: Leo | ||
@group : lazytech | ||
@contact: [email protected] | ||
""" | ||
|
||
VERSION = '0.0.1' | ||
P_TYPE = {'http': 'http://', 'ftp': 'ftp://'} | ||
FORMAT = lambda x: '%.2f' % x | ||
FORMAT4 = lambda x: '%.4f' % x | ||
DOMAINS = {'sina': 'sina.com.cn', 'sinahq': 'sinajs.cn', | ||
'ifeng': 'ifeng.com', 'sf': 'finance.sina.com.cn', | ||
'ssf': 'stock.finance.sina.com.cn', | ||
'vsf': 'vip.stock.finance.sina.com.cn', | ||
'idx': 'www.csindex.com.cn', '163': 'money.163.com', | ||
'em': 'eastmoney.com', 'sseq': 'query.sse.com.cn', | ||
'sse': 'www.sse.com.cn', 'szse': 'www.szse.cn', | ||
'oss': '218.244.146.57', | ||
'shibor': 'www.shibor.org'} | ||
|
||
NAV_OPEN_API = { 'all':'getNetValueOpen','equity':'getNetValueOpen','mix':'getNetValueOpen','bond':'getNetValueOpen','monetary':'getNetValueMoney','qdii':'getNetValueOpen'} | ||
|
||
NAV_OPEN_KEY = {'all':'6XxbX6h4CED0ATvW','equity':'Gb3sH5uawH5WCUZ9','mix':'6XxbX6h4CED0ATvW', | ||
'bond':'Gb3sH5uawH5WCUZ9','monetary':'uGo5qniFnmT5eQjp','qdii':'pTYExKwRmqrSaP0P'} | ||
NAV_OPEN_T2 = { 'all':'0','equity':'2','mix':'1','bond':'3','monetary':'0','qdii':'6'} | ||
NAV_OPEN_T3 = '' | ||
|
||
|
||
NAV_CLOSE_API = 'getNetValueClose' | ||
NAV_CLOSE_KEY = '' | ||
NAV_CLOSE_T2 = {'all':'0','fbqy':'4','fbzq':'9'} | ||
NAV_CLOSE_T3 = {'all':'0','ct':'10','cx':'11','wj':'3','jj':'5','cz':'12'} | ||
|
||
|
||
NAV_GRADING_API = 'getNetValueCX' | ||
NAV_GRADING_KEY = '' | ||
NAV_GRADING_T2 = {'all':'0','fjgs':'7','fjgg':'8'} | ||
NAV_GRADING_T3 = {'all':'0','wjzq':'13','gp':'14','zs':'15','czzq':'16','jjzq':'17'} | ||
|
||
|
||
#===================================================================================================================================================================== | ||
#基金数据列名 | ||
|
||
NAV_OPEN_COLUMNS = ['symbol','sname','per_nav','total_nav','yesterday_nav','nav_rate','nav_a','nav_date','fund_manager','jjlx','jjzfe'] | ||
|
||
NAV_HIS_JJJZ = ['fbrq','jjjz','ljjz'] | ||
NAV_HIS_NHSY = ['fbrq','nhsyl','dwsy'] | ||
|
||
FUND_INFO_COLS = ['symbol','jjqc','jjjc','clrq','ssrq','xcr','ssdd',\ | ||
'Type1Name','Type2Name','Type3Name','jjgm','jjfe',\ | ||
'jjltfe','jjferq','quarter','glr','tgr'] | ||
|
||
|
||
|
||
NAV_CLOSE_COLUMNS = ['symbol','sname','per_nav','total_nav','nav_rate','discount_rate','nav_date','start_date','end_date','fund_manager','jjlx','jjzfe'] | ||
|
||
|
||
NAV_GRADING_COLUMNS = ['symbol','sname','per_nav','total_nav','nav_rate','discount_rate','nav_date','start_date','end_date','fund_manager','jjlx','jjzfe'] | ||
|
||
|
||
NAV_COLUMNS = {'open':NAV_OPEN_COLUMNS,'close':NAV_CLOSE_COLUMNS,'grading':NAV_GRADING_COLUMNS} | ||
|
||
#===================================================================================================================================================================== | ||
#数据源URL | ||
SINA_NAV_COUNT_URL = '%s%s/fund_center/data/jsonp.php/IO.XSRV2.CallbackList[\'%s\']/NetValue_Service.%s?ccode=&type2=%s&type3=%s' | ||
SINA_NAV_DATA_URL = '%s%s/fund_center/data/jsonp.php/IO.XSRV2.CallbackList[\'%s\']/NetValue_Service.%s?page=1&num=%s&ccode=&type2=%s&type3=%s' | ||
|
||
SINA_NAV_HISTROY_COUNT_URL = '%s%s/fundInfo/api/openapi.php/CaihuiFundInfoService.getNav?symbol=%s&datefrom=%s&dateto=%s' | ||
SINA_NAV_HISTROY_DATA_URL = '%s%s/fundInfo/api/openapi.php/CaihuiFundInfoService.getNav?symbol=%s&datefrom=%s&dateto=%s&num=%s' | ||
|
||
SINA_NAV_HISTROY_COUNT_CUR_URL = '%s%s/fundInfo/api/openapi.php/CaihuiFundInfoService.getNavcur?symbol=%s&datefrom=%s&dateto=%s' | ||
SINA_NAV_HISTROY_DATA_CUR_URL = '%s%s/fundInfo/api/openapi.php/CaihuiFundInfoService.getNavcur?symbol=%s&datefrom=%s&dateto=%s&num=%s' | ||
|
||
SINA_DATA_DETAIL_URL = '%s%s/quotes_service/api/%s/Market_Center.getHQNodeData?page=1&num=400&sort=symbol&asc=1&node=%s&symbol=&_s_r_a=page' | ||
|
||
SINA_FUND_INFO_URL = '%s%s/fundInfo/api/openapi.php/FundPageInfoService.tabjjgk?symbol=%s&format=json' | ||
|
||
#===================================================================================================================================================================== | ||
DATA_GETTING_TIPS = '[Getting data:]' | ||
DATA_GETTING_FLAG = '#' | ||
DATA_ROWS_TIPS = '%s rows data found.Please wait for a moment.' | ||
DATA_INPUT_ERROR_MSG = 'date input error.' | ||
NETWORK_URL_ERROR_MSG = '获取失败,请检查网络和URL' | ||
DATE_CHK_MSG = '年度输入错误:请输入1989年以后的年份数字,格式:YYYY' | ||
DATE_CHK_Q_MSG = '季度输入错误:请输入1、2、3或4数字' | ||
TOP_PARAS_MSG = 'top有误,请输入整数或all.' | ||
LHB_MSG = '周期输入有误,请输入数字5、10、30或60' | ||
|
||
OFT_MSG = u'开放型基金类型输入有误,请输入all、equity、mix、bond、monetary、qdii' | ||
|
||
DICT_NAV_EQUITY = { | ||
'fbrq':'date', | ||
'jjjz':'value', | ||
'ljjz':'total', | ||
'change':'change' | ||
} | ||
|
||
import sys | ||
PY3 = (sys.version_info[0] >= 3) | ||
def _write_head(): | ||
sys.stdout.write(DATA_GETTING_TIPS) | ||
sys.stdout.flush() | ||
|
||
def _write_console(): | ||
sys.stdout.write(DATA_GETTING_FLAG) | ||
sys.stdout.flush() | ||
|
||
def _write_tips(tip): | ||
sys.stdout.write(DATA_ROWS_TIPS%tip) | ||
sys.stdout.flush() | ||
|
||
def _write_msg(msg): | ||
sys.stdout.write(msg) | ||
sys.stdout.flush() | ||
|
||
def _check_input(year, quarter): | ||
if isinstance(year, str) or year < 1989 : | ||
raise TypeError(DATE_CHK_MSG) | ||
elif quarter is None or isinstance(quarter, str) or quarter not in [1, 2, 3, 4]: | ||
raise TypeError(DATE_CHK_Q_MSG) | ||
else: | ||
return True | ||
|
||
def _check_nav_oft_input(found_type): | ||
if found_type not in NAV_OPEN_KEY.keys(): | ||
raise TypeError(OFT_MSG) | ||
else: | ||
return True | ||
|
||
def _check_input(year, quarter): | ||
if isinstance(year, str) or year < 1989 : | ||
raise TypeError(DATE_CHK_MSG) | ||
elif quarter is None or isinstance(quarter, str) or quarter not in [1, 2, 3, 4]: | ||
raise TypeError(DATE_CHK_Q_MSG) | ||
else: | ||
return True |
Oops, something went wrong.