4
5 def handle_data(context, data):
6 get_lists(context)
7 print 'done'
8
9 def get_lists(context):
10 lists = get_all_securities('stock')
11 log.info(lists)
12 h = history(3, '1d', field='close', security_list = lists, df=False)
13 return [stock for stock in lists if h[stock][-1] < h[stock][0]]
运行之后会报错:
2016-06-01 09:30:00 - INFO - display_name name start_date end_date type
000001.XSHE 平安银行 PAYH 1991-04-03 2200-01-01 stock
000002.XSHE 万 科A WKA 1991-01-29 2200-01-01 stock
000004.XSHE 国农科技 GNKJ 1990-12-01 2200-01-01 stock
........
2016-06-01 09:30:00 - ERROR - Traceback (most recent call last):
File "kuanke/user_space.py", line 146, in exec_msg
return getattr(self, func)(*msg['args'], **msg['kwargs'])
File "kuanke/user_space.py", line 319, in handle_data
self.func_handle_data(self.user_context, user_space_api.SecuritiesData(context.current_dt))
File "user_code.py", line 6, in handle_data
get_lists(context)
File "user_code.py", line 12, in get_lists
h = history(60, '1d', field = ('close'), security_list = lists)
File "kuanke/user_space_api.py", line 978, in history
HistoryOptions(fq=fq, skip_paused=bool(skip_paused), df=bool(df)))
File "/home/server/y/envs/kuanke/lib/python2.7/site-packages/functools32/functools32.py", line 380, in wrapper
result = user_function(*args, **kwds)
File "kuanke/user_space_api.py", line 943, in history_daily
options=options,
File "kuanke/user_space_utils.py", line 465, in get_price_daily_single
a = get_all_day_data(security)
File "/home/server/y/envs/kuanke/lib/python2.7/site-packages/functools32/functools32.py", line 380, in wrapper
result = user_function(*args, **kwds)
File "kuanke/user_space_utils.py", line 169, in get_all_day_data
api_proxy.prepare_all_day_data(security)
File "kuanke/user_space.py", line 73, in func
raise ret
Exception: 股票"display_name"不存在
日志打印如上所示,看着眼花缭乱,有木有~~~~
虽说程序给出了 Exception,但明显不是看到不应该是这个问题(机器也没有那么智能)。
再看一下错误提示,发现提示程序第六行出现错误。
第六行我们调用了
get_lists(context) 函数,这里出现错误。
因此我们要查询一下 get_list(contest) 函数。
接着看错误提示,提示 line 12 出现错误,之后又提示了一大堆的错误。
接着我们要核查一下是不是 line 12,history 函数的问题, history 函数如下所示:
history(count, unit='1d', field='avg', security_list=None, df=True, skip_paused=False, fq='pre')
这种函数一般的错误就是传入参数的格式不对,可能是因为传参的顺序出错或者本身传入的格式就有问题。
我们对比一下程序发现,
count, unit, field没什么错误,错误基本是 security_list 的问题。带着怀疑,我们应该打印一下 lists 看一下,是不是一个list。
为了方便,我的程序已经在第11行打印了传入的lists。
发现结果是一个多列的 DataFrame。因为我是想要返回结果的 index 数据。因此应该把 第10行改为
lists = get_all_securities('stock').index,并输出 lists
看一下。lists 的结果如下:
2015-06-01 09:30:00 - INFO - Index([u'000001.XSHE', u'000002.XSHE', u'000004.XSHE', u'000005.XSHE',
u'000006.XSHE', u'000007.XSHE', u'000008.XSHE', u'000009.XSHE',
u'000010.XSHE', u'000011.XSHE',
...
u'603969.XSHG', u'603979.XSHG', u'603986.XSHG', u'603988.XSHG',
u'603989.XSHG', u'603993.XSHG', u'603996.XSHG', u'603997.XSHG',
u'603998.XSHG', u'603999.XSHG'],
dtype='object', length=3010)
2015-06-01 09:30:00 - INFO - done
2015-06-02 09:30:00 - INFO - Index([u'000001.XSHE', u'000002.XSHE', u'000004.XSHE', u'000005.XSHE',
u'000006.XSHE', u'000007.XSHE', u'000008.XSHE', u'000009.XSHE',
u'000010.XSHE', u'000011.XSHE',
...
u'603969.XSHG', u'603979.XSHG', u'603986.XSHG', u'603988.XSHG',
u'603989.XSHG', u'603993.XSHG', u'603996.XSHG', u'603997.XSHG',
u'603998.XSHG', u'603999.XSHG'],