您正在使用的浏览器版本较低,无法支持聚宽的某些特性。
为了获得更好的体验,推荐使用: Google Chrome 或者 Mozilla Firefox 或者 IE9以上。
我们目前包含100多种ETF、20多种LOF、200多种分级A/B基金完整的行情、净值数据. 详情见基金列表.
更多API的可参考官方API文档
获取单支基金的信息.
调用方法
get_security_info(code)
参数
返回值
一个对象, 有如下属性:
示例
get_security_info(159901.XSHE).start_date #获取易方达深证100ETF的上市日期
获取平台支持的所有基金数据
调用方法
get_all_securities(['fund'])
这里请在使用时注意防止未来函数。
返回 
- display_name # 中文名称 
- name # 缩写简称 
- start_date # 上市日期 
- end_date # 退市日期,如果没有退市则为2200-01-01 
- type # 类型,etf(ETF基金),fja(分级A),fjb(分级B)
[pandas.DataFrame], 比如:get_all_securities(['fund'])[:2]返回:
| display_name | name | start_date | end_date | type | |
|---|---|---|---|---|---|
| 150008.XSHE | 国投瑞银沪深300指数分级-A | RHXK | 2009-11-19 | 2200-01-01 | fja | 
| 150009.XSHE | 国投瑞银沪深300指数分级-B | RHYJ | 2009-11-19 | 2200-01-01 | fjb | 
示例
def initialize(context):
    #获得基金列表
    df = get_all_securities(['fund'])
    #获得etf基金列表
    etfs = df[df['type']=='etf']
    #获得lof基金列表
    lofs = df[df['type']=='lof']
    #获得分级A基金列表
    lofs = df[df['type']=='fja']
    #获得分级B基金列表
    lofs = df[df['type']=='fjb']
得到基金在一段时间的如下的数据:
调用方法
get_extras(info, security_list, start_date='2015-01-01', end_date='2015-12-31', df=True):
参数
返回值
get_extras('acc_net_value', ['510300.XSHG', '510050.XSHG'], start_date='2015-12-01', end_date='2015-12-03')返回:| 510300.XSHG | 510050.XSHG | |
|---|---|---|
| 2015-12-01 00:00:00 | 1.395 | 3.119 | 
| 2015-12-02 00:00:00 | 1.4432 | 3.251 | 
| 2015-12-03 00:00:00 | 1.4535 | 3.254 | 
get_extras('acc_net_value', ['510300.XSHG', '510050.XSHG'], start_date='2015-12-01', end_date='2015-12-03', df=False) 返回: python 
{ 
    u'510050.XSHG': array([ 3.119,  3.251,  3.254]), 
    u'510300.XSHG': array([ 1.395 ,  1.4432,  1.4535]) 
} 
交易类数据提供基金的交易行情数据,通过API接口调用即可获取相应的数据。主要包括以下类别:
获取基金历史交易数据,可以通过参数设置获取日k线、分钟k线数据。获取数据的基本属性如下:
close/factormoney/volume获取数据的方法有多种,类型如下:
查看多支基金的单个属性历史数据。
调用方法
history(count, unit='1d', field='avg', security_list=None, df=True, skip_paused=False, fq='pre')
注:设定不同的unit参数,获取日K线或分钟k线,详情见参数。
关于停牌: 因为获取了多只基金的数据, 可能有的基金停牌有的没有, 为了保持时间轴的一致, 我们没有跳过停牌的日期, 停牌时使用停牌前的数据填充(请看[SecurityUnitData]的paused属性). 如想跳过, 请使用[attribute_history] 
当取日K线数据时, 不包括当天的, 即使是在收盘后
参数 
- count: 数量, 返回的结果集的行数 
- unit: 单位时间长度, 几天或者几分钟, 现在支持’Xd’,’Xm’, X是一个正整数, 分别表示X天和X分钟(不论是按天还是按分钟回测都能拿到这两种单位的数据),如),如‘1d’,’2m’.  注意, 当X > 1时, field只支持[‘open’, ‘close’, ‘high’, ‘low’, ‘volume’, ‘money’]这几个标准字段. 
- field: 要获取的数据类型, 支持属性里面的所有基本属性. 
- security_list: 要获取数据的基金列表, None表示universe中选中的所有基金 
- df: 若是True, 返回[pandas.DataFrame], False返回一个dict, 具体请看下面的返回值介绍. 默认是True.(们之所以增加df参数, 是因为[pandas.DataFrame]创建和操作速度太慢, 很多情况并不需要使用它. 为了保持向上兼容, df默认是True, 但是如果你的回测速度很慢, 请考虑把df设成False.) 
- skip_paused: 是否跳过停牌的时间, 如果不跳过, 停牌时会使用停牌前的数据填充(具体请看[SecurityUnitData]的paused属性), 但要注意: 
  - 默认为 False 
  - 如果跳过, 则行索引不再是日期, 因为不同股票的实际交易日期可能不一样 
- fq: 复权选项: 
  - 'pre': 前复权(根据’use_real_price’选项不同含义会有所不同, 参见set_option), 默认是前复权 
  - None: 不复权, 返回实际价格 
  - 'post': 后复权
返回
history(2, '1d','open', ['159901.XSHE','159902.XSHE'])将返回:| 159901.XSHE | 159902.XSHE | |
|---|---|---|
| 2014-12-30 | 3.8294 | 2.553 | 
| 2014-12-31 | 3.7944 | 2.510 | 
关于numpy和pandas, 请看第三方库介绍
history(2, '1d', 'open', ['159901.XSHE','159902.XSHE'],df=False)将返回: python 
{ 
    '159901.XSHE': array([ 3.8294,  3.7944]), 
    '159902.XSHE': array([ 2.553,  2.51 ]) 
} 
示例
h = history(5, '1d', 'volume', ['159901.XSHE'], df=False) # 获取易方达深证100ETF过去一天(不包含当天)的交易额
h = history(5, '1m', 'price', ['159901.XSHE'], df=False) # 获取易方达深证100ETF的过去5分钟(不包含当前分钟)的每分钟的平均价
h.mean() # 取得每一列的平均值
查看某一支基金的历史数据, 可以选这只基金的多个属性.
调用方法
 x attribute_history(security, count, unit='1d',            fields=('open', 'close', 'high', 'low', 'volume', 'money'),            skip_paused=True, df=True, fq='pre')
注:设定不同的unit参数,获取日K线或分钟k线,详情见参数。
关于停牌: 默认跳过停牌日期 
当取日K线数据时, 不包括当天的, 即使是在收盘后
参数 
- security: 基金代码 
- count: 数量, 返回的结果集的行数 
- unit: 单位时间长度, 几天或者几分钟, 现在支持’Xd’,’Xm’, X是一个正整数, 分别表示X天和X分钟(不论是按天还是按分钟回测都能拿到这两种单位的数据),如‘1d’,’2m’. 注意, 当X > 1时, field只支持[‘open’, ‘close’, ‘high’, ‘low’, ‘volume’, ‘money’]这几个标准字段. 
- fields: 基金属性的list, 支持属性里面的所有基本属性. 
- skip_paused: 是否跳过停牌的时间, 如果不跳过, 停牌时会使用停牌前的数据填充(具体请看[SecurityUnitData]的paused属性), 默认是True 
- df: 若是True, 返回[pandas.DataFrame], 否则返回一个dict, 具体请看下面的返回值介绍. 默认是True. (们之所以增加df参数, 是因为[pandas.DataFrame]创建和操作速度太慢, 很多情况并不需要使用它. 为了保持向上兼容, df默认是True, 但是如果你的回测速度很慢, 请考虑把df设成False.) 
- fq: 复权选项: 
  - 'pre': 前复权(根据’use_real_price’选项不同含义会有所不同, 参见set_option), 默认是前复权 
  - None: 不复权, 返回实际价格 
  - 'post': 后复权
返回
attribute_history('159920.XSHE', 2)将返回:| open | close | high | low | volume | money | |
|---|---|---|---|---|---|---|
| 2014-12-30 | 1.108 | 1.091 | 1.112 | 1.088 | 3406201 | 3734250 | 
| 2014-12-31 | 1.088 | 1.099 | 1.102 | 1.088 | 2936904 | 3221757 | 
- df=False: 
    dict, key是基金代码, 值是一个numpy数组[numpy.ndarray], 对应上面的DataFrame的每一列, 例如attribute_history('159920.XSHE', 2, df=False)将返回: 
  python 
    { 
        'volume': array([ 3406201.,  2936904.]),  
        'money': array([ 3734250.,  3221757.]),  
        'high': array([ 1.112,  1.102]),  
        'low': array([ 1.088,  1.088]),  
        'close': array([ 1.091,  1.099]),  
        'open': array([ 1.108,  1.088]) 
    } 
示例
fund = '159901.XSHE'
h = attribute_history(fund, 5, '1d', ('open','close', 'volume', 'factor')) # 取得易方达深证100ETF过去5天的每天的开盘价, 收盘价, 交易量, 复权因子
# 不管df等于True还是False, 下列用法都是可以的
h['open'] #过去5天的每天的开盘价, 一个pd.Series对象, index是datatime
h['close'][-1] #昨天的收盘价
h['open'].mean()
# 下面的pandas.DataFrame的特性, df=False时将不可用
# 行的索引可以是整数, 也可以是日期的各种形式:
h['open']['2015-01-05']
h['open'][datetime.date(2015, 1, 5)]
h['open'][datetime.datetime(2015, 1, 5)]
# 按行取数据
h.iloc[-1] #昨天的开盘价和收盘价, 一个pd.Series对象, index是字符串:'open'/'close'
h.iloc[-1]['open'] #昨天的开盘价
h.loc['2015-01-05']['open']
# 高级运算
h = h[h['volume'] > 1000000] # 只保留交易量>1000000股的行
h['open'] = h['open']/h['factor'] #让open列都跟factor列相除, 把价格都转化成原始价格
h['close'] = h['close']/h['factor']
获取一支或者多只基金的多个属性的行情数据, 按天或者按分钟.
调用方法
get_price(security, start_date='2015-01-01', end_date='2015-12-31', frequency='daily', fields=None, skip_paused=False, fq='pre')
注:设定不同的unit参数,获取日K线或分钟k线,详情见参数。 这里请在使用时注意防止未来函数.
用户可以在 after_trading_end中调用get_price函数获取当日的开盘价、收盘价、成交额、成交量、最高价以及最低价等。
关于停牌: 因为此API可以获取多只股票的数据, 可能有的股票停牌有的没有, 为了保持时间轴的一致, 我们默认没有跳过停牌的日期, 停牌时使用停牌前的数据填充(请看[SecurityUnitData]的paused属性). 如想跳过, 请使用 skip_paused=True 参数, 同时只取一只股票的信息
参数
security: 一支基金代码或者一个基金代码的list
start_date: 字符串或者[datetime.datetime]/[datetime.date]对象, 开始日期, 默认是’2015-01-01’
end_date: 字符串[datetime.datetime]/[datetime.date]对象, 结束日期, 默认是’2015-12-31’, 包含此日期
frequency: 单位时间长度, 几天或者几分钟, 现在支持’Xd’,’Xm’, ‘daily’(等同于’1d’), ‘minute’(等同于’1m’), X是一个正整数, 分别表示X天和X分钟(不论是按天还是按分钟回测都能拿到这两种单位的数据), 注意, 当X > 1时, field只支持[‘open’, ‘close’, ‘high’, ‘low’, ‘volume’, ‘money’]这几个标准字段. 默认值是daily
fields: 字符串list, 选择要获取的行情数据字段, 默认是None(表示[‘open’, ‘close’, ‘high’, ‘low’, ‘volume’, ‘money’]这几个标准字段), 支持属性里面的所有基本属性.
'pre': 前复权(根据’use_real_price’选项不同含义会有所不同, 参见set_option), 默认是前复权None: 不复权, 返回实际价格'post': 后复权返回
请注意, 为了方便比较一只基金的多个属性, 同时也满足对比多只基金的一个属性的需求, 我们在security参数是一只基金和多只基金时返回的结构完全不一样
如果是一支基金, 则返回[pandas.DataFrame]对象, 行索引是[datetime.datetime]对象, 列索引是行情字段名字, 比如’open’/’close’. 比如: get_price('159920.XSHE')[:2] 返回:
| open | close | high | low | volume | money | |
|---|---|---|---|---|---|---|
| 2014-12-30 | 1.108 | 1.091 | 1.112 | 1.088 | 3406201 | 3734250 | 
| 2014-12-31 | 1.088 | 1.099 | 1.102 | 1.088 | 2936904 | 3221757 | 
- 如果是多支基金, 则返回[pandas.Panel]对象, 里面是很多[pandas.DataFrame]对象, 索引是行情字段(open/close/…), 每个[pandas.DataFrame]的行索引是[datetime.datetime]对象, 列索引是基金代号. 比如get_price(['159920.XSHE', '159901.XSHE'])['open'][:2]返回:
| 159920.XSHE | 159901.XSHE | |
|---|---|---|
| 2015-01-051.105 | 3.9170 | |
| 2015-01-06 | 1.111 | 4.0016 | 
示例
# 获取一支基金
df = get_price('159901.XSHE') # 获取159901.XSHE的2015年的按天数据
df = get_price('159901.XSHE', start_date='2015-01-01', end_date='2015-02-01', frequency='minute', fields=['open', 'close']) # 获得159901.XSHE的2015年02月的分钟数据, 只获取open+close字段
df = get_price('159901.XSHE', start_date='2015-12-01 14:00:00', end_date='2015-12-02 12:00:00', frequency='1m') # 获得159901.XSHE的2015年12月1号14:00-2015年12月2日12:00的分钟数据
# 获取多只基金
panel =  get_price(['159920.XSHE', '159901.XSHE']) # 获取159920.XSHE与159901.XSHE  2015年的天数据, 返回一个[pandas.Panel]
df_open = panel['open']  # 获取开盘价的[pandas.DataFrame],  行索引是[datetime.datetime]对象, 列索引是基金代号
df_volume = panel['volume']  # 获取交易量的[pandas.DataFrame]
df_open['159901.XSHE'] # 获取易方达深证100ETF的2015年每天的开盘价数据
获取当前时刻基金的如下属性: 
- high_limit # 涨停价 
- low_limit # 跌停价 
- paused # 是否停牌 
- day_open # 当天开盘价, 分钟回测时可用, 天回测时, 是NaN
调用方法
get_current_data(security_list=None)
回测时, 通过API获取的是一个单位时间(天/分钟)的数据, 而有些数据, 我们在这个单位时间是知道的, 比如涨跌停价,是否停牌,当天的开盘价(分钟回测时). 所以可以使用这个API用来获取这些数据.
参数 
- security_list: 基金代码列表.
返回值 
一个dict, key是基金代码, value是拥有如下属性的对象 
- high_limit # 涨停价 
- low_limit # 跌停价 
- day_open # 当天开盘价, 分钟回测时可用, 天回测时, 是NaN
示例
set_universe(['159901.XSHE'])
def handle_data(context, data):
    current_data = get_current_data()
    print current_data
    print current_data['159901.XSHE']
    print current_data['159901.XSHE'].high_limit #获取当天的涨停价
获取账户当前的资金及持有的基金的信息.
调用方法
context.portfolio.cash #获取账户现有可用的资金
context.portfolio.position #获取持有的可卖出的基金
context.portfolio.position[fund].avg_cost #获取fund的持仓成本成本